期权量化交易系列教程(四):经典方向性策略——备兑、保护性看跌与价差组合

📅 2026/7/2 19:33:08
期权量化交易系列教程(四):经典方向性策略——备兑、保护性看跌与价差组合
摘要本文是“从零开始搭建期权量化交易系统”系列的第四篇。前三篇我们学习了期权基础、Black-Scholes定价模型以及波动率分析。今天我们将正式进入策略构建阶段系统实现四种经典的期权方向性策略备兑策略Covered Call、保护性看跌Protective Put、牛市看涨价差Bull Call Spread以及熊市看跌价差Bear Put Spread。每种策略都配有详细的逻辑说明、简化回测代码和绩效对比图表。学完本文你将掌握如何用Python构建期权组合评估收益风险并理解不同市场环境下的最优策略选择。大家好我是你们的老朋友。如果说前三篇是在学习制造武器的材料定价模型、波动率、希腊字母那么从今天开始我们要真正走进“兵工厂”组装能够上战场的期权策略。今天聚焦的是方向性策略。这类策略有一个共同特点它们对你的市场方向判断进行押注但通过期权组合可以精确控制最大亏损、降低持仓成本甚至在不温不火的市场中也赚到钱。我们不会停留在理论讲解每一个策略都会给出可运行的Python回测代码让你直观感受不同策略的盈亏曲线和风险收益特征。一、四种基础操作快速回顾在组合策略之前再回顾一下期权的四种基础操作买入看涨看大涨亏损限于权利金收益无限。买入看跌看大跌亏损限于权利金收益接近行权价。卖出看涨看不涨或小跌收益限于权利金亏损无限。卖出看跌看不跌或小涨收益限于权利金亏损接近行权价。我们今天构建的四种策略都是基于这些基础操作的组合。二、策略一备兑策略——降低持仓成本备兑策略Covered Call是最受稳健投资者欢迎的期权策略之一。如果你已经持有标的资产如沪深300ETF并且短期不认为它会大涨那么备兑策略可以帮你每个月“收租”。策略逻辑持有10000份沪深300ETF的同时卖出一张虚值看涨期权。卖出期权收到的权利金可以降低持仓成本。如果到期时标的价格没有涨过行权价权利金稳稳落袋如果大涨超过行权价你的ETF会被行权卖出虽然放弃了超额收益但依然以满意的价格卖出。简化回测设计假设每月滚动操作一次。每月初买入ETF同时卖出当月到期的虚值看涨期权行权价选择高于现价5%的水平。到期时如果标的价格低于行权价期权作废继续滚动如果高于行权价以行权价卖出ETF结算后重新开始。以下是回测代码示例使用假设参数来模拟这一过程实际回测需要完整的期权历史数据这里我们简化为基于标的价格和BS模型的理论权利金。importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltfromscipy.statsimportnorm# 简化BS公式用于计算理论权利金defbs_call(S,K,T,r,sigma):ifT0:returnmax(0,S-K)d1(np.log(S/K)(r0.5*sigma**2)*T)/(sigma*np.sqrt(T))d2d1-sigma*np.sqrt(T)returnS*norm.cdf(d1)-K*np.exp(-r*T)*norm.cdf(d2)# 生成模拟的ETF价格路径np.random.seed(42)n_days252*2# 两年daily_retnp.random.normal(0.0005,0.015,n_days)price100*np.exp(np.cumsum(daily_ret))datespd.date_range(2020-01-01,periodsn_days,freqB)# 回测参数r0.02sigma0.20capital100000# 初始资金shares_per_lot10000# 合约乘数# 记录净值nav_covered[1.0]nav_buyhold[1.0]positionetf# 当前持仓状态strikeNoneexpiry_dayNoneforiinrange(1,len(price)):Sprice[i]# 每月第一个交易日操作ifdates[i].month!dates[i-1].month:# 如果持有ETF卖出虚值看涨ifpositionetf:strikeS*1.05# 虚值5%T21/252# 约一个月premiumbs_call(S,strike,T,r,sigma)# 卖出期权收取权利金capitalpremium*shares_per_lot positioncoveredexpiry_dayi21# 简化21个交易日后到期elifpositioncoveredandiexpiry_day:# 到期结算ifSstrike:# 被行权卖出ETFcapitalstrike*shares_per_lot# 卖出ETF收到现金positioncashelse:# 期权作废继续持有ETFpositionetfelifpositioncash:# 重新买入ETFcapital-S*shares_per_lot positionetf# 计算每日净值ifpositionetforpositioncovered:equitycapitalS*shares_per_lotelse:equitycapital nav_covered.append(equity/100000)# 简单买入持有净值nav_buyhold.append((100000(S-100)*shares_per_lot)/100000)# 绘图plt.figure(figsize(12,6))plt.plot(dates,nav_covered,label备兑策略净值)plt.plot(dates,nav_buyhold,label单纯持有ETF净值)plt.title(备兑策略 vs 单纯持有模拟回测)plt.xlabel(日期)plt.ylabel(净值)plt.legend()plt.grid(alpha0.3)plt.show()策略特点在震荡或温和上涨市场中持续获得权利金收入跑赢单纯持有。在大牛市中收益封顶可能跑输。在大跌中仍然面临ETF的下跌风险权利金仅起到有限的缓冲作用。三、策略二保护性看跌——给持仓上保险如果你长期看好一只ETF但短期担心市场大跌比如财报季、议息会议保护性看跌策略是你的“保险单”。策略逻辑持有ETF的同时买入一张虚值看跌期权。如果市场大跌看跌期权的盈利可以弥补ETF的亏损将最大损失锁定在“行权价 权利金成本”附近如果市场上涨你只损失了权利金依然享受大部分涨幅。简化回测设计同样按月滚动每月初买入ETF和当月虚值看跌期权行权价低于现价5%。到期时结算然后重新开仓。# 保护性看跌回测接上一段代码的数据nav_protective[1.0]capital_pp100000position_ppetfstrike_ppNoneexpiry_ppNoneforiinrange(1,len(price)):Sprice[i]ifdates[i].month!dates[i-1].month:ifposition_ppetf:strike_ppS*0.95# 虚值5%看跌T21/252premium_putbs_call(S,strike_pp,T,r,sigma)-Sstrike_pp*np.exp(-r*T)# 看跌-看涨平价简算# 简化计算看跌价格使用BS公式d1(np.log(S/strike_pp)(r0.5*sigma**2)*T)/(sigma*np.sqrt(T))d2d1-sigma*np.sqrt(T)premium_putstrike_pp*np.exp(-r*T)*norm.cdf(-d2)-S*norm.cdf(-d1)capital_pp-premium_put*shares_per_lot position_ppprotectedexpiry_ppi21elifposition_ppprotectedandiexpiry_pp:ifSstrike_pp:# 行权以行权价卖出ETFcapital_ppstrike_pp*shares_per_lot position_ppcashelse:position_ppetfelifposition_ppcash:capital_pp-S*shares_per_lot position_ppetfifposition_ppetforposition_ppprotected:equity_ppcapital_ppS*shares_per_lotelse:equity_ppcapital_pp nav_protective.append(equity_pp/100000)plt.figure(figsize(12,6))plt.plot(dates,nav_buyhold,label单纯持有ETF)plt.plot(dates,nav_protective,label保护性看跌策略)plt.title(保护性看跌 vs 单纯持有模拟回测)plt.xlabel(日期)plt.ylabel(净值)plt.legend()plt.grid(alpha0.3)plt.show()策略特点有效限制下行风险在市场暴跌时表现优异。成本是定期支付权利金在震荡上涨行情中会拖累收益。适合对波动敏感的长线投资者。四、策略三牛市看涨价差——低成本押注上涨如果你看好标的上涨但不想支付全额权利金或者希望精确控制最大亏损牛市看涨价差是一个精致的选择。策略逻辑买入一张平值或浅虚值看涨期权同时卖出一张相同到期日、更高行权价的看涨期权。卖出期权收到的权利金可以抵消部分成本。最大收益被锁定在高行权价 - 低行权价 - 净权利金支出最大亏损就是净权利金支出。到期盈亏图绘制defbull_call_spread(S_range,K_low,K_high,premium_low,premium_high):payoffnp.maximum(S_range-K_low,0)-np.maximum(S_range-K_high,0)pnlpayoff-(premium_low-premium_high)returnpnl S_rangenp.linspace(2.5,5.5,100)K_low,K_high3.8,4.2prem_low,prem_high0.25,0.10pnl_spreadbull_call_spread(S_range,K_low,K_high,prem_low,prem_high)plt.figure(figsize(10,5))plt.plot(S_range,pnl_spread,label牛市看涨价差盈亏)plt.axhline(0,colorblack,linestyle--)plt.title(牛市看涨价差到期盈亏图)plt.xlabel(标的价格)plt.ylabel(盈亏)plt.legend()plt.grid(alpha0.3)plt.show()策略特点成本比单纯买看涨低最大亏损小。收益有上限适合温和看涨的行情。构建简单是期权入门的第一个价差策略。五、策略四熊市看跌价差——低成本押注下跌对于看跌市场可以构造对称的熊市看跌价差。策略逻辑买入一张平值或浅虚值看跌期权同时卖出一张相同到期日、更低行权价的看跌期权。同样是限制收益和亏损的策略。到期盈亏图绘制defbear_put_spread(S_range,K_high,K_low,premium_high,premium_low):payoffnp.maximum(K_high-S_range,0)-np.maximum(K_low-S_range,0)pnlpayoff-(premium_high-premium_low)returnpnl K_high_put,K_low_put4.2,3.8prem_high_put,prem_low_put0.28,0.12pnl_put_spreadbear_put_spread(S_range,K_high_put,K_low_put,prem_high_put,prem_low_put)plt.figure(figsize(10,5))plt.plot(S_range,pnl_put_spread,label熊市看跌价差盈亏)plt.axhline(0,colorblack,linestyle--)plt.title(熊市看跌价差到期盈亏图)plt.xlabel(标的价格)plt.ylabel(盈亏)plt.legend()plt.grid(alpha0.3)plt.show()六、四种策略对比总结策略市场观点最大收益最大亏损适用场景备兑策略小涨/震荡有限权利金价差ETF下跌风险长期持有增收保护性看跌怕大跌无限减去权利金有限下行锁定避险保留上涨牛市看涨价差温和看涨有限有限净权利金低成本做多熊市看跌价差温和看跌有限有限净权利金低成本做空七、本篇总结今天我们通过四套组合拳感受到了期权如何通过巧妙搭配来精确表达市场观点、管理风险。备兑和保护性看跌是与现货持仓结合的“增强”与“保险”工具价差策略则提供了低成本、风险可控的方向性押注手段。在下一篇中我们将脱离方向预测的框架进入波动率与套利策略的精彩世界——跨式、宽跨式、蝶式以及真正意义上的波动率套利。你将会看到即使不判断涨跌也能在市场中稳定获利。下一篇预告期权量化交易系列五——波动率与套利策略跨式、蝶式与波动率套利我们下篇见