[Python] 期权的组合策略Python代码

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

  21. plt.plot(E[0],E[1],'y--',label='期权到期日上证50ETF看涨期权多头')
  22. plt.plot(E[0],E[2],'r--',label='期权到期日上证50ETF看跌期权多头')
  23. plt.plot(E[0],E[3],label='序列组合策略')
  24. plt.xlabel('上证50指数收盘价')
  25. plt.ylabel('组合盈亏金额')
  26. plt.title('买入宽跨式策略盈亏图')
  27. plt.legend()
  28. plt.grid()
复制代码

评论7

林妹妹Lv.5 发表于 2021-6-19 05:35:02 | 查看全部

楼主太厉害了!楼主,I*老*虎*U!我觉得24KRMB真是个好地方!
0.2℃Lv.5实盘认证 发表于 2022-7-9 02:27:05 | 查看全部
已拜读,感谢分享
拾荒者Lv.9实盘认证 发表于 2022-7-9 05:08:39 | 查看全部
已拜读,感谢分享
铅华浮尘Lv.11实盘认证 发表于 2022-10-18 06:11:48 | 查看全部

勤奋最爱学习最有知识的群体[并不简单]目前看来除了高三学生就是股民了。相比起高三学生,感觉还是股民更胜一筹,因为股民每天都像在过高三。
messednerdLv.11实盘认证 发表于 2023-3-13 17:04:50 | 查看全部
感谢分享~~
麻辣Lv.11实盘认证 发表于 2023-5-18 17:55:13 | 查看全部
收藏了,这种高级玩法,不是一般人能玩得动啊!

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

温馨提示
自2025年起:根据用户的交流积分数来确定入群规定; 知道啦
投诉/建议联系

qhxn004@foxmail.com

站内内容仅供参考,不构成投资建议。
禁止复制和建立镜像,违者追究法律责任
  • 微信视频号
  • 关注公众号
Copyright © 2012-2025 24KRMB 版权所有 All Rights Reserved. 隐私设置净网黑名单鄂ICP备19016902号
关灯 在本版发帖
添加创始人微信
QQ客服返回顶部