一、 雪球期权的基本概念
1、 金融期权
金融期权是一种本身价值由标的金融资产的价值决定的金融衍生品。不同类型的期权取决于其标的资产的选择,比如,当期权以一支股票为标的金融资产时,它就被称为股票期权,类似地,还有债券期权、货币期权等等。
2、 雪球期权
此篇文章主要介绍金融期权中的一种——雪球期权,并对其估值过程和python实践进行介绍。(内容来自俺的实习经验,由于代码都是自己写的,应该也不会涉及到公司侵权吧QAQ)
言归正传,那么雪球期权到底是怎样的呢?
首先,期权的目标。期权被设计出来的原因是为了平衡风险。当投资者进行有风险的投资时,为了避免发生血本无归的情况,他往往会购买一个和此轮投资方向相反的金融衍生品来平衡投资风险。雪球期权就是其中一种。
其次,雪球期权的原理。简单来说,雪球期权会先确定标的资产,以该资产未来的变化为预期,并设置敲出敲入价格。当标的资产未来价格发生变化时(即可能发生敲入敲出事件),根据敲入敲出事件是否发生的各种情况,我们会对这个期权做出相应的定价策略。
3、 相关概念
标的资产:可以是股票、指数、债券等等。比如沪深300、中证500、某具体股票等等;
期限:标的资产未来价格变动的监测时间段;
期初价格:标的资产在期初日的价格(模拟的起点);
敲入观察日:一般是期限内的每一天;
敲出观察日:一般是期限内的特定日期;
敲入事件:在敲入观察日,标的资产价格小于敲入价格(期初价格* %);
敲出事件:在敲出观察日,标的资产价格大于敲入价格(期初价格* %);
蒙特卡洛模拟:由于不知道标的资产未来的真实价格变动,我们会借助传统的蒙特卡洛模拟来模拟该标的资产在期限之内的价格变动,再取平均值作为期权的估值。
二、 雪球期权的估值规则
一般的估值定价逻辑如下:
1、 发生过敲出事件——估值策略1
2、 未发生过敲出事件、但发生过敲入事件——估值策略2
3、 未发生过敲出事件、也未发生敲入事件——估值策略3
其中,三种不同的估值策略要看公司期权的具体条款来定,而且各方案的折现天数应该也不同。
三、 雪球期权估值的python实现
from math import exp,sqrt
import numpy as np
import pandas as pd
def Price(S0,r,T,m,n,price_in,price_out,sigma):
#主要实现函数
dt=T/m
S=np.zeros(m+1)
V=np.zeros(n)
S[0]=S0
q=0.03
str={56,84,116,146,175,207,238,269,299,329,360,385,420,448,481,511,542,572,602,633,664,693,725,756,787,816,847,875,908,938,969,1000}
#敲出观察日向量
S_Plus=np.zeros((n,m+1))
#模拟价格矩阵
for i in range(n):
#记录是否发生敲入、敲出
flag_in=0
flag_out=0
t=0
for j in range(0,m):
S[j+1]=S[j]*exp((r-q-0.5*sigma**2)*dt+sigma*sqrt(dt)*np.random.randn())
if S[j+1]>price_out:
if j+1 in str:
t=j+1;
#t用来记录出现敲出的时间
flag_out=1
break
elif S[j+1]<price_in:
flag_in=1
S_Plus=S
#按条约公式得到
#敲出
if flag_out==1:
V=估值策略1
V=V*exp(-r*t/365)
#时间是t
#未敲出但敲入
elif flag_out==0 and flag_in==1:
V=估值策略2
V=V*exp(-r*T)
#未敲出也未敲入
elif flag_out==0 and flag_in==0:
V=估值策略3
V=V*exp(-r*T)#折现
#平均数
v=sum(V)/n
return v,V,S_Plus
主代码如下:
#主代码
#期初价格
t0_price=100
#即期价格
t_price=110
#敲入价格
price_in=t0_price*a
#敲出价格
price_out=t0_price*b
#国债的到期收益率
r=0.2
#起始日-最后观察日
T=1000/365
#观察日
m=1000
#迭代次数
n=5000
sigma=0.02
(price,V,S_Plus)=Price(t_price,r,T,m,n,price_in,price_out,sigma) |
|