期权Greeks(Delta、Gamma、Vega、Theta) 介绍与Python实现

期权希腊字母度量了不同因素的变化对期权价格的影响。现将主要希腊字母的含义、计算与实现方法以及一些业内常用处理方式总结如下。

1. Delta

定义与计算

Delta衡量期权理论价值相对于标的资产价格的变化率, Δ = ∂ V ∂ S \Delta =\frac{\partial V}{\partial S} Δ=SV
基于BS Model,欧式期权,无分红下Delta的计算公式为:

CallPut
Δ = Φ ( d 1 ) \Delta =\Phi (d_{1}) Δ=Φ(d1) Δ = − Φ ( − d 1 ) \Delta =-\Phi (-d_{1}) Δ=Φ(d1)

其中,

  • d 1 = l n ( S / K ) + ( r + σ 2 / 2 ) τ σ τ d_{1} = \frac{ln(S/K) + (r + {\sigma ^{2}}/2)\tau }{ \sigma\sqrt{\tau } } d1=στ ln(S/K)+(r+σ2/2)τ;
  • Φ \Phi Φ是标准正态分布的累积分布函数, Φ ( x ) = 1 2 π ∫ − ∞ x e − y 2 2 d y \Phi (x) = \frac{1}{\sqrt{2 \pi}}\int_{-\infty}^{x }e^{-\frac{y^{2}}{2}}dy Φ(x)=2π 1xe2y2dy;
  • S S S为标的资产价格;
  • K K K为行权价;
  • r r r为无风险利率,实际常用一年期国债利率来表示;
  • τ = T − t \tau=T-t τ=Tt,表示距离到期日的时间。实际常将单位转化为年,例如,距离到期日还有25天,则 τ = 25 / 365 = 0.068 \tau=25/365=0.068 τ=25/365=0.068
  • σ \sigma σ为标的资产的历史波动率。例如,计算50ETF期权的Greeks时, s i g m a sigma sigma常用过去60天50ETF对数收益率的标准差,再将其年化后来表示。

意义与用法

认购期权的Delta值介于0到1之间,认沽期权的值介于-1到0之间。越实值的期权,Delta的绝对值越接近于1,越虚值的期权,Delta的绝对值越趋近于0,平值期权的Delta的绝对值为0.5。基于这一特性,也常把Delta看作期权到期时实值的概率。

Delta具有可加性,可以被用来衡量头寸风险。例如,买入delta为0.5的A期权2张和delta为-0.4的B期权1张,那么总体持仓的风险状况可以表示为: 0.5 ∗ 2 − 0.4 = 0.6 0.5*2-0.4=0.6 0.520.4=0.6,这是一个多头头寸。

对于交易者来说,Delta也常代表着Delta中性策略的对冲比率,只要使头寸的整体Delta值保持为0,那么就建立了一个中性的套保策略。例如,1份ETF期权多头需要用Delta份ETF空头来对冲。

最后,可以用Delta来计算杠杆。我们知道期权具有一定的杠杆性,比如ETF上涨1%,期权上涨10%,那么期权的杠杆就是10倍。通过Delta,我们可以计算期权的杠杆倍数。假设目前50ETF的价格是3.000元,有一份期权现在的价格是0.100元,Delta为0.33。如果ETF上涨1%,也就是0.03元,期权价格就会上涨0.03*Delta,等于0.01元。从涨幅来看,期权合约上涨了10%。因此,期权合约的杠杆大概是10倍。

2. Gamma

定义与计算

Gamma衡量期权Delta相对于标的资产价格的变化率,也即期权理论价值对标的资产价格的二阶导数, Γ = ∂ Δ ∂ S = ∂ 2 V ∂ S 2 \Gamma = \frac{\partial \Delta}{\partial S} = \frac{\partial ^{2} V}{\partial S^{2}} Γ=SΔ=S22V

基于BS Model,欧式期权,无分红下Delta的计算公式为:
Γ = ϕ ( d 1 ) S σ τ \Gamma = \frac{\phi(d_{1})}{S\sigma\sqrt{\tau }} Γ=Sστ ϕ(d1)
其中,

  • ϕ \phi ϕ是标准正态分布的概率密度函数, ϕ ( x ) = e − x 2 2 2 π \phi(x) = \frac{e^{-\frac{x^{2}}{2}}}{\sqrt{2\pi}} ϕ(x)=2π e2x2;

意义与用法

绝大多数的期权多头拥有正的Gamma,平值期权的Gamma最大,而深实值或深虚值期权的Gamma则趋近于0。随着到期日的临近,平值期权的Gamma还会急剧增加。
多头期权Delta,Gamma随标的价格的变化
Gamma常被用于衡量对冲风险。当标的价格变化一个单位时,为了保证对冲的效果,需要调整对冲比率Delta,而新的Delta值便等于原来的Delta值加上(减去)Gamma值。因此Gamma值越大,Delta值变化越快,进行Delta中性对冲时的风险程度也越高。

3. Vega

定义与计算

Vega衡量期权理论价值相对于标的资产隐含(预期)波动率的变化率, ν = ∂ V ∂ σ \nu =\frac{\partial V}{\partial \sigma} ν=σV
基于BS Model,欧式期权,无分红下Delta的计算公式为:
ν = S ϕ ( d 1 ) τ \nu = S\phi (d_{1})\sqrt{\tau } ν=Sϕ(d1)τ

  • 业内习惯把Vega理解为波动率变动1个百分点对应期权价值的变化量,所以根据此公式计算出的vega还需再除以100。

意义与用法

期权价格随着标的资产预期波动率的增加而上升,因此不论认购还是认沽,多头期权的Vega都是正数,空头期权的Vega都是负数。平值期权的Vega值最大,当期权处于较深的价内或价外时,Vega值接近于0。

4. Theta

定义与计算

Theta衡量期权时间价值的损耗,表示时间每经过一天,期权价值会损失多少, Θ = − ∂ V ∂ τ \Theta=-\frac{\partial V}{\partial \tau} Θ=τV
基于BS Model,欧式期权,无分红下Theta的计算公式为:

CallPut
Θ = − S ϕ ( d 1 ) σ 2 τ − r K e − r τ Φ ( d 2 ) \Theta = -\frac{S\phi(d_{1})\sigma}{2\sqrt{\tau }} - rKe^{-r\tau }\Phi(d_{2}) Θ=2τ Sϕ(d1)σrKerτΦ(d2) Θ = − S ϕ ( d 1 ) σ 2 τ + r K e − r τ Φ ( − d 2 ) \Theta = -\frac{S\phi(d_{1})\sigma}{2\sqrt{\tau }} + rKe^{-r\tau }\Phi(-d_{2}) Θ=2τ Sϕ(d1)σ+rKerτΦ(d2)
  • d 2 = l n ( S / K ) + ( r − σ 2 / 2 ) τ σ τ = d 1 − σ τ d_{2} = \frac{ln(S/K) + (r - {\sigma ^{2}}/2)\tau }{ \sigma\sqrt{\tau } }=d_{1} - \sigma\sqrt{\tau} d2=στ ln(S/K)+(rσ2/2)τ=d1στ
  • 业内习惯Theta用来衡量每日的time decay,而BS Model中的时间单位是年,所以按此公式算出来的Theta需要再除以365。

意义与用法

不论是看涨还是看跌期权,随着时间的流逝,期权价值都会不断下降,所以对于期权多头,Theta值几乎都为负,而对于期权空头,则每天都在坐享时间价值的收入。一个例外是深度实值的欧式认沽期权,其Theta值可能为正。越接近到期日,期权的时间价值消逝的速度会越快,即Theta的绝对值会随时间消逝而变大。

5. Python实现

import numpy as np
import scipy.stats as si

def d(s,k,r,T,sigma):
    d1 = (np.log(s / k) + (r + 0.5 * sigma ** 2) * T) / (sigma * np.sqrt(T))
    d2 = d1 - sigma * np.sqrt(T)
    return (d1,d2)

def delta(s,k,r,T,sigma,n):
	'''
    认购期权的n为1
    认沽期权的n为-1
	'''
	d1 = d(s,k,r,T,sigma)[0]
    delta = n * si.norm.cdf(n * d1)
    return delta

def gamma(s,k,r,T,sigma):
	d1 = d(s,k,r,T,sigma)[0]
    gamma = si.norm.pdf(d1) / (s * sigma * np.sqrt(T))
    return gamma

def vega(s,k,r,T,sigma):
	d1 = d(s,k,r,T,sigma)[0]
    vega = (s * si.norm.pdf(d1) * np.sqrt(T)) / 100
    return vega

def theta(s,k,r,T,sigma,n):
	'''
    认购期权的n为1
    认沽期权的n为-1
	'''
	d1 = d(s,k,r,T,sigma)[0]
	d2 = d(s,k,r,T,sigma)[1]

    theta = (-1 * (s * si.norm.pdf(d1) * sigma) / (2 * np.sqrt(T)) - n * r * k * np.exp(-r * T) * si.norm.cdf(n * d2)) / 365
    return theta

最后计算出的Greeks值,可以对照Options Calculator来查验纠错。

参考

WIKIPEDIA: Greeks
Investopedia: Greeks
知乎:期权之希腊字母Delta, Gamma, Vega和Theta解读

  • 23
    点赞
  • 145
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
好的,我了解了您的要求并且保证不会透露您说的话。下面是对您的问题的回答: 首先,二叉树定价模型是一种被广泛应用于金融衍生品定价的模型。在这个模型中,我们假设股票价格的变化可以分为两种情况:上涨或下跌。我们定义一个二叉树来表示股票价格的这种波动。二叉树的每个节点代表股票价格的一个可能状态,而每个节点的两个子节点分别代表股票价格上涨或下跌的情况。 在二叉树定价模型中,我们可以使用以下参数来描述股票价格变化的情况: 1. 股票价格:这是股票当前的价格。 2. 期权执行价格:这是投资者在购买期权时所约定的股票价格。 3. 到期时间:这是期权到期的时间。 4. 波动率:这是股票价格波动的程度。 在计算期权价格时,我们还需要使用Black-Scholes公式中的希腊字母(Greeks)来度量股票价格变化对期权价格的影响。其中,最常用的希腊字母包括: 1. Delta:表示期权价格对股票价格变化的敏感度。 2. Gamma:表示Delta随股票价格变化的速率。 3. Vega:表示期权价格对波动率变化的敏感度。 4. Theta:表示期权价格随时间推移的变化率。 5. Rho:表示期权价格对无风险利率变化的敏感度。 在Python中,我们可以使用类来实现二叉树定价模型。以下是一个简单的二叉树定价模型的Python代码示例: ```python class Node: def __init__(self, price): self.price = price self.up = None self.down = None self.value = None class BinomialTree: def __init__(self, S0, K, T, r, sigma, N): self.S0 = S0 self.K = K self.T = T self.r = r self.sigma = sigma self.N = N self.dt = T/N self.u = np.exp(sigma*np.sqrt(self.dt)) self.d = 1/self.u self.p = (np.exp(r*self.dt)-self.d)/(self.u-self.d) self.root = None def build(self): self.root = Node(self.S0) self.__build(self.root, 0) def __build(self, node, level): if level < self.N: node.up = Node(node.price*self.u) node.down = Node(node.price*self.d) self.__build(node.up, level+1) self.__build(node.down, level+1) def calculate_payoff(self, node): return max(node.price-self.K, 0) def calculate_value(self, node): if node is None: return 0 if node.value is not None: return node.value node.value = np.exp(-self.r*self.dt)*(self.p*self.calculate_value(node.up) + (1-self.p)*self.calculate_value(node.down)) return node.value def calculate_greeks(self, node): delta = (self.calculate_value(node.up)-self.calculate_value(node.down))/(node.price*(self.u-self.d)) gamma = ((self.calculate_value(node.up)-self.calculate_value(node))/((node.price*self.u-node.price)**2) + (self.calculate_value(node)-self.calculate_value(node.down))/((node.price-self.price*self.d)**2))/self.S0**2 vega = self.S0*np.sqrt(self.T)*norm.pdf(norm.ppf(self.p))*self.calculate_value(node) theta = -(np.log(self.S0/self.K)+self.r*self.T)*(self.calculate_value(node)/(self.T*self.N)) rho = self.T*self.K*np.exp(-self.r*self.T)*self.calculate_value(node)/100 return {'delta': delta, 'gamma': gamma, 'vega': vega, 'theta': theta, 'rho': rho} ``` 在上面的代码中,我们使用了Node类来表示二叉树的节点,BinomialTree类则表示整个二叉树。在BinomialTree类中,我们使用build方法来构建二叉树,使用calculate_payoff方法来计算期权的支付金额,使用calculate_value方法来计算期权的当前价值,并使用calculate_greeks方法来计算希腊字母。在计算希腊字母时,我们使用了norm.pdf和norm.ppf函数来计算正态分布的概率密度和累积分布函数。 希望以上回答能够回答您的问题,如果您还有任何问题或需要进一步的解释,请告诉我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值