障碍期权是一种路径依赖期权,期权买方的权利是否有效依赖于标的资产价格在期权的存续期内是否达到了障碍水平。如果在期权存续期中的任一时点,资产价格达到障碍水平,期权将被激活(敲入)或被终止(敲出)。
障碍期权按敲入和敲出,向上和向下,看跌和看涨共有八种不同的组合:向下敲入看涨期权(𝐶𝑑𝑖)、向上敲入看涨期权(𝐶𝑢𝑖)、向下敲入看跌期权(𝑃𝑑𝑖)、向上敲入看跌期权(𝑃𝑢𝑖)、向下敲出看涨期权(𝐶𝑑𝑜)、向上敲出看涨期权(𝐶𝑢𝑜)、向下敲出看跌期权(𝑃𝑑𝑜)、向上敲出看跌期权(𝑃𝑢𝑜)。障碍期权基本结构的主要变形包括:
(1)部分障碍期权,其障碍属性只在一段时间内存在,其余时候其支付和香草期权一致。
(2)非连续障碍期权,期权的激活和终止仅取决于某几个特定日期。
(3)欧式障碍期权和美式障碍期权。
障碍期权的解析解
基于伊藤随机微分方程和风险中性定价原理,可以得到障碍期权定价的解析解公式。需要注意的是,根据障碍水平H是否高于执行价格X,其解析解的定价公式并不相同。
相对于普通香草期权,障碍期权的价格具有如下性质:相同方向的敲入敲出期权价格之和等于香草期权。即:
标的股票价格越高,向下敲出看涨期权敲出的可能性越小,向下敲出看涨期权的价格越高,向下敲入看涨期权的价格越低,二者之和等于普通看涨期权。
标的股票价格越高,期权向下敲出的可能性越小,向下敲出看跌期权的价格越高,向下敲入看跌期权的价格越低,二者之和等于普通看跌期权。而且,因为股票价格S、执行价格X和障碍水平H形成S>X>H的关系,看跌期权处于虚值状态,造成向下敲出看跌期权价格趋向于0。向下敲入看跌期权对于障碍水平不敏感。
随着障碍水平越来越接近于期权执行价格100,向下敲入看涨期权敲入的可能性越大,期权的价格越高;向上敲入看涨期权敲入的可能性越大,期权的价格也越高,当H=S时,障碍期权价格等于香草期权价格。而且随着障碍水平接近执行价格,H>S时,向下敲入看涨期权价格变大的速度是越来越快的。H<S时,随着H接近于S,向上敲入看涨期权的价格增加,其速度先变大再变小。
障碍期权的delta变化
Delta是现实中最重要的希腊字母,这是因为目前国内金融工具有限,很多时候仅使用股指期货动态对冲来复制挂钩HS300指数的障碍期权,Delta值决定了股指期货对冲的头寸。
向下敲入看涨障碍期权:随着股票价格向下接近于障碍水平,向下敲入看涨障碍期权的Delta由未敲入状态下的接近于零迅速减小为负值,意味着股票价格降低,期权价格由于敲入概率增大而升高。当期权发生敲入之后,看涨期权处于虚值状态,Delta变为正值并迅速减小到接近于0。
向下敲入看跌障碍期权:随着股票价格向下接近于障碍水平,向下敲入看跌障碍期权的Delta由未敲入状态下的接近于零迅速减小为负值,意味着股票价格降低,期权价格由于敲入概率增大而升高。当期权发生敲入之后,看跌期权处于深度实值状态,Delta接近于-1。
#障碍期权定价模型_BSM类
class barrier_option_bsm:
#初始化类
def __init__(self,S0,K,T,q,r,sigma,H,rebeat,payoff,oi,n):
self.S0=S0 #标的资产价格
self.K=K #行权价
self.T=T #到期期限
self.q=q
self.r=r #无风险利率
self.b=self.r-self.q #q为股票股息率
self.sigma=sigma #标的资产价格波动率
self.H=H #障碍价格
self.rebeat=rebeat #期权发生敲入或敲出后的支付,敲入期权:未敲入时在期权到期日支付的收益/敲出期权:敲出时支付的收益
self.payoff=payoff #敲入敲出类型,in:敲入/out:敲出
self.oi=oi #看涨看跌类型,1:call/-1:put
self.n=n #1:向下/-1:向上
#参数函数x1
def x1(self):
return np.log(self.S0/self.K)/(self.sigma*np.sqrt(self.T))+(1+self.mu())*self.sigma*np.sqrt(self.T)
#参数函数x2
def x2(self):
return np.log(self.S0/self.H)/(self.sigma*np.sqrt(self.T))+(1+self.mu())*self.sigma*np.sqrt(self.T)
#参数函数y1
def y1(self):
return np.log(self.H**2/(self.S0*self.K))/(self.sigma*np.sqrt(self.T))+(1+self.mu()
)*self.sigma*np.sqrt(self.T)
#参数函数y2
def y2(self):
return np.log(self.H/self.S0)/(self.sigma*np.sqrt(self.T))+(1+self.mu())*self.sigma*np.sqrt(self.T)
#参数函数z
def z(self):
return np.log(self.H/self.S0)/(self.sigma*np.sqrt(self.T))+self.lam()*self.sigma*np.sqrt(self.T)
#参数函数mu
def mu(self):
return (self.b-0.5*(self.sigma**2))/(self.sigma**2)
#参数函数lambda
def lam(self):
return np.sqrt(self.mu()**2+2*self.r/(self.sigma**2))
#参数函数A
def A(self):
return self.oi * self.S0 * np.exp((self.b-self.r) *self.T) * norm.cdf(
self.oi * self.x1()) -self.oi *self.K * np.exp(-self.r *self.T) * norm.cdf(
self.oi *self.x1() -self.oi * self.sigma* np.sqrt(self.T))
#参数函数B
def B(self):
return self.oi*self.S0*np.exp((self.b-self.r)*self.T)*norm.cdf(self.oi*self.x2())-self.oi*self.K*np.exp(
-self.r*self.T)*norm.cdf(self.oi*self.x2()-self.oi*self.sigma*np.sqrt(self.T))
#参数函数C
def C(self):
return self.oi*self.S0*np.exp((self.b-self.r)*self.T)*(self.H/self.S0)**(2*(self.mu()+1))*norm.cdf(
self.n*self.y1())-self.oi*self.K*np.exp(-self.r*self.T)*(self.H/self.S0)**(2*self.mu())*norm.cdf(
self.n*self.y1()-self.n*self.sigma*np.sqrt(self.T))
#参数函数D
def D(self):
return self.oi*self.S0*np.exp((self.b-self.r)*self.T)*(self.H/self.S0)**(2*(self.mu()+1))*norm.cdf(
self.n*self.y2())-self.oi*self.K*np.exp(-self.r*self.T)*(self.H/self.S0)**(2*self.mu())*norm.cdf(
self.n*self.y2()-self.n*self.sigma*np.sqrt(self.T))
#参数函数E
def E(self):
return self.rebeat*np.exp(-self.r*self.T)*(norm.cdf(self.n*self.x2()-self.n*self.sigma*np.sqrt(self.T))-
(self.H/self.S0)**(2*self.mu())*norm.cdf(self.n*self.y2()-self.n*self.sigma*np.sqrt(self.T)))
#参数函数F
def F(self):
return self.rebeat*((self.H/self.S0)*(self.mu()+self.lam())*norm.cdf(self.n*self.z())+(self.H/self.S0)**(
self.mu()-self.lam())*norm.cdf(self.n*self.z()-2*self.n*self.lam()*self.sigma*np.sqrt(self.T)))