1.底部(买入)跨式组合(bottom straddle),也称之为多头对敲策略。由相同K、相同期限的看涨期权多头和看跌期权多头组成,当投资者认为标的资产价格会有大幅变化(看多波动率)但是方向不确定时适用该策略。
- import numpy as np
- import matplotlib.pyplot as plt
- from pylab import mpl
- mpl.rcParams['font.sans-serif']=['SimHei']
- mpl.rcParams['axes.unicode_minus']=False
- #多头对敲策略
- def straddle_long(K,C,P,P0,P0_index,Pt_index,N_call,N_put,N_underlying):
- '''K:期权执行价格;
- C:看涨期权的当前价格;
- P:看跌期权的当前价格;
- P0:标的资产当前单位净值价格;
- P0_index:标的资产当前收盘点位;
- Pt_index:期权到期日标的资产收盘点位;
- N_call:看涨期权头寸数量;
- N_put:看跌期权头寸数量;
- N_underlying:1张标的资产期权基础资产是多少份单位净值.'''
- Pt=P0*Pt_index/P0_index #期权到期日标的资产基金净值数组
- call_long=N_call*N_underlying*(np.maximum(Pt-K,0)-C) #期权到期日看涨期权多头头寸的收益
- put_long=N_call*N_underlying*(np.maximum(K-Pt,0)-P) #期权到期日看涨期权多头头寸的收益
- straddlelong=call_long+put_long #期权到期日多头对敲策略收益
- return Pt_index,call_long,put_long,straddlelong #返回各个策略收益
- A=straddle_long(K=2.4,C=0.1745,P=0.1106,P0=2.352,P0_index=2734.52,
- Pt_index=np.linspace(2000,3500,500),N_call=1,N_put=2,N_underlying=10000)
- plt.plot(A[0],A[1],'b--',label='期权到期日上证50ETF看涨期权多头')
- plt.plot(A[0],A[2],'g--',label='期权到期日上证50ETF看涨期权多头')
- plt.plot(A[0],A[3],label='多头对敲期权价差策略')
- plt.xlabel('上证50指数收盘价')
- plt.ylabel('组合盈亏金额')
- plt.title('多头对敲策略组合盈亏图')
- plt.legend()
- plt.grid()
复制代码 2.顶部(卖出)跨式组合(top straddle),也称之为空头对敲策略。由相同K、相同期限的看涨期权空头和看跌期权空头组成,当投资者认为标的资产价格变化不大时适用该策略,与底部跨式组合的收益相反。
- #空头对敲策略
- def straddle_put(K,C,P,P0,P0_index,Pt_index,N_call,N_put,N_underlying):
- '''K:期权执行价格;
- C:看涨期权的当前价格;
- P:看跌期权的当前价格;
- P0:标的资产当前单位净值价格;
- P0_index:标的资产当前收盘点位;
- Pt_index:期权到期日标的资产收盘点位;
- N_call:看涨期权头寸数量;
- N_put:看跌期权头寸数量;
- N_underlying:1张标的资产期权基础资产是多少份单位净值.'''
- Pt=P0*Pt_index/P0_index #期权到期日标的资产基金净值数组
- call_long=N_call*N_underlying*(C-np.maximum(Pt-K,0)) #期权到期日看涨期权空头头寸的收益
- put_long=N_call*N_underlying*(P-np.maximum(K-Pt,0)) #期权到期日看涨期权空头头寸的收益
- straddlelong=call_long+put_long #期权到期日空头对敲策略收益
- return Pt_index,call_long,put_long,straddlelong #返回各个策略收益
- B=straddle_put(K=2.4,C=0.1745,P=0.1106,P0=2.352,P0_index=2734.52,
- Pt_index=np.linspace(2000,3500,500),N_call=1,N_put=2,N_underlying=10000)
- plt.plot(B[0],B[1],'b--',label='期权到期日上证50ETF看涨期权空头')
- plt.plot(B[0],B[2],'g--',label='期权到期日上证50ETF看涨期权空头')
- plt.plot(B[0],B[3],label='空头对敲期权价差策略')
- plt.xlabel('上证50指数收盘价')
- plt.ylabel('组合盈亏金额')
- plt.title('空头对敲策略组合盈亏图')
- plt.legend()
- plt.grid()
复制代码 条式组合(strip)策略是指由相同K、相同期限的一个看涨期权多头头寸与两个看跌期权多头头寸所构建。如果投资者认为基础资产价格会有大的变动,且基础资产价格下跌的可能性要大于上涨的可能性,就可以选择strip策略。
- #序列组合策略
- def strip(K,C,P,P0,P0_index,Pt_index,N_callstrip,N_putstrip,N_underlying):
- '''K:期权执行价格;
- C:看涨期权的当前价格;
- P:看跌期权的当前价格;
- P0:标的资产当前单位净值价格;
- P0_index:标的资产当前收盘点位;
- Pt_index:期权到期日标的资产收盘点位;
- N_callstrip:看涨期权头寸数量;
- N_putstrip:看跌期权头寸数量;
- N_underlying:1张标的资产期权基础资产是多少份单位净值.'''
- Pt=P0*Pt_index/P0_index #期权到期日标的资产基金净值数组
- call_strip=N_callstrip*N_underlying*(np.maximum(Pt-K,0)-C) #期权到期日看涨期权多头头寸的收益
- put_strip=N_putstrip*N_underlying*(np.maximum(K-Pt,0)-P) #期权到期日看跌期权多头头寸的收益
- strip=call_strip+put_strip #期权到期日序列组合对敲策略收益
- return Pt_index,call_strip, put_strip,strip #返回各个策略收益
- C=strip(K=2.35,C=0.2360,P=0.0893,P0=2.352,P0_index=2734.52,
- Pt_index=np.linspace(2000,3500,500),N_callstrip=1,N_putstrip=2,N_underlying=10000)
- plt.plot(C[0],C[1],'g--',label='期权到期日上证50ETF看涨期权多头(1张)')
- plt.plot(C[0],C[2],'r--',label='期权到期日上证50ETF看跌期权多头(2张)')
- plt.plot(C[0],C[3],label='序列组合策略')
- plt.xlabel('上证50指数收盘价')
- plt.ylabel('组合盈亏金额')
- plt.title('序列组合策略盈亏图')
- plt.legend()
- plt.grid()
复制代码 带式组合(strap)策略是由相同K、相同期限的两个欧式看涨期权多头头寸和一个欧式看跌期权多头头寸所构造。如果投资者也是预测基础资产价格会有大的变动,且基础资产价格上涨的可能性要大于下跌的可能性,带式组合策略就是一种比较好的选择。
- #带式组合策略
- def strap(K,C,P,P0,P0_index,Pt_index,N_callstrap,N_putstrap,N_underlying):
- '''K:期权执行价格;
- C:看涨期权的当前价格;
- P:看跌期权的当前价格;
- P0:标的资产当前单位净值价格;
- P0_index:标的资产当前收盘点位;
- Pt_index:期权到期日标的资产收盘点位;
- N_callstrap:看涨期权头寸数量;
- N_putstrap:看跌期权头寸数量;
- N_underlying:1张标的资产期权基础资产是多少份单位净值.'''
- Pt=P0*Pt_index/P0_index #期权到期日标的资产基金净值数组
- call_strap=N_callstrap*N_underlying*(np.maximum(Pt-K,0)-C) #期权到期日看涨期权多头头寸的收益
- put_strap=N_putstrap*N_underlying*(np.maximum(K-Pt,0)-P) #期权到期日看跌期权多头头寸的收益
- strap=call_strap+put_strap #期权到期日带式组合策略收益
- return Pt_index,call_strap, put_strap,strap #返回各个策略收益
- D=strap(K=2.35,C=0.2360,P=0.0893,P0=2.352,P0_index=2734.52,
- Pt_index=np.linspace(2000,3500,500),N_callstrap=2,N_putstrap=1,N_underlying=10000)
- plt.plot(D[0],D[1],'g--',label='期权到期日上证50ETF看涨期权多头(2张)')
- plt.plot(D[0],D[2],'r--',label='期权到期日上证50ETF看跌期权多头(1张)')
- plt.plot(D[0],D[3],label='序列组合策略')
- plt.xlabel('上证50指数收盘价')
- plt.ylabel('组合盈亏金额')
- plt.title('带式组合策略盈亏图')
- plt.legend()
- plt.grid()
复制代码 买入宽跨式策略,也称为底部垂直组合策略(bottom vertical combination)。底部(买入)宽跨式组合(strange)由相同期限的看涨期权多头和看跌期权多头组成,且K1(看涨期权)>K2(看跌期权),当投资者认为标的资产价格会有非常大的变动(看多波动率)但是方向不确定时适用该策略,宽跨式策略盈利空间不如跨式策略大,但其成本更低。
- #买入宽跨式策略
- def widestrangle_long(K1,K2,C,P,P0,P0_index,Pt_index,N_call,N_put,N_underlying):
- '''K1:较低期权执行价格;
- K2:较高期权执行价格
- C:看涨期权的当前价格;
- P:看跌期权的当前价格;
- P0:标的资产当前单位净值价格;
- P0_index:标的资产当前收盘点位;
- Pt_index:期权到期日标的资产收盘点位;
- N_call:看涨期权头寸数量;
- N_put:看跌期权头寸数量;
- N_underlying:1张标的资产期权基础资产是多少份单位净值.'''
- Pt=P0*Pt_index/P0_index #期权到期日标的资产基金净值数组
- call=N_call*N_underlying*(np.maximum(Pt-K2,0)-C) #期权到期日看涨期权的收益
- put=N_put*N_underlying*(np.maximum(K1-Pt,0)-P) #期权到期日看跌期权的收益
- widestrangle_long=call+put #期权到期日组合策略收益
- return Pt_index,call, put,widestrangle_long #返回各个策略收益
-
- E=widestrangle_long(K1=2.25,K2=2.55,C=0.2360,P=0.0893,P0=2.352,P0_index=2734.52,
- Pt_index=np.linspace(2000,3500,500),N_call=1,N_put=1,N_underlying=10000)
- plt.plot(E[0],E[1],'y--',label='期权到期日上证50ETF看涨期权多头')
- plt.plot(E[0],E[2],'r--',label='期权到期日上证50ETF看跌期权多头')
- plt.plot(E[0],E[3],label='序列组合策略')
- plt.xlabel('上证50指数收盘价')
- plt.ylabel('组合盈亏金额')
- plt.title('买入宽跨式策略盈亏图')
- plt.legend()
- plt.grid()
复制代码
|