目前备受关注的雪球产品是一类典型的自动赎回结构化产品 ,当标的资产价格在特定日期超过某约定的水平时,产品触发自动赎回,因为雪球产品通常能提供较高的票息,所以近年来得到了广大投资者的青睐,市场规模不断扩张。
标的资产:可以是股票、指数、债券等等。比如沪深300、中证500、某具体股票等等;
期限:标的资产未来价格变动的监测时间段;
期初价格:标的资产在期初日的价格(模拟的起点);
敲入观察日:一般是期限内的每一天;
敲出观察日:一般是期限内的特定日期,譬如每月15号;
敲入事件:在敲入观察日,标的资产价格小于敲入价格;
敲出事件:在敲出观察日,标的资产价格大于敲入价格;
def Snowball_Price(S0, r, T, m, n, price_in, price_out, C, N, sigma):
'''
:param S0: 标的初始价格
:param r: 无风险利率
:param T: 产品期限(年化) =m/365
:param m: 观察日
:param n: 迭代次数
:param price_in: 敲入价格
:param price_out: 敲出价格
:param C: 敲出票息
:param N: 名义本金规模
:param sigma: 标的波动率
:return: 期权价值,期权价值矩阵,标的价格变动路径矩阵,计数1,2,3
'''
dt = T / m
S = np.zeros(m + 1) # 用来存放标的价格变动路径
V = np.zeros(n) # 用来存放不同路径期权价值
S[0] = S0
q = 0.00 # 股息率,标的为指数是为0
lst = {90,120,150,180,210,240,270,300,330,360} # 用来存放敲出观察日日期
S_Paths = np.zeros((n, m + 1)) # 模拟价格矩阵
counta = 0 # 用来记录敲出次数
countb = 0 # 用来记录敲入但未敲出次数
countc = 0 # 用来记录未敲入且未敲出次数
for i in range(n):
# flag_in/flag_out用来记录是否发生敲入、敲出
flag_in = 0
flag_out = 0
t = 0 # t用来记录出现敲出的时间
for j in range(0, m):
S[j + 1] = S[j] * np.exp((r - q - 0.5 * sigma ** 2) * dt + sigma * np.sqrt(dt) * np.random.randn())
if S[j + 1] > price_out:
if j + 1 in lst:
t = j + 1
flag_out = 1
break
elif S[j + 1] < price_in:
flag_in = 1
S_Paths[i] = S
# 敲出
if flag_out == 1:
估值方法1
counta += 1
# 未敲出但敲入
elif flag_out == 0 and flag_in == 1:
估值方法2
countb += 1
# 未敲出也未敲入
elif flag_out == 0 and flag_in == 0:
估值方法3
countc += 1
option_value = sum(V) / n
return option_value, V, S_Paths, counta, countb, countc
标的资产:中证500指数
观察期限:360天,从第三个月开始每月观察敲出+每日观察敲入
名义本金:100万
敲出水平:期初价格*103%
敲入水平:期初价格*80%
敲出票息:25%
无风险利率:假设为3%
标的波动率:假设为24.55%
蒙特卡罗模拟实现雪球产品定价_资源下载https://download.csdn.net/download/weixin_67475908/85661368