功能说明
本代码实现了基于上证指数期权的延期移仓策略,通过动态调整期权合约持仓,在维持标的资产暴露度的同时降低频繁交易成本。核心逻辑包含到期合约平仓判断、新合约选择标准、移仓时机触发条件三个模块,适用于波动率较低的横盘市场环境。
importpandasaspdimportnumpyasnpfromdatetimeimportdatetime,timedeltaimportyfinanceasyfclassOptionRolloverStrategy:def__init__(self,underlying_symbol="000300.SH",option_type="CALL",target_days=45,capital=1e6):""" 参数说明: underlying_symbol: 标的指数代码 (上证50ETF对应000300.SH) option_type: 期权类型 (CALL/PUT) target_days: 目标剩余天数 (理想持仓时间) capital: 初始资金规模 """self.position_ratio=0.8# 权利金占用比例self.rollover_threshold=0.2# 移仓触发阈值(当前合约价值占比)self.iv_window=20# IV计算窗口期self.min_liquidity=1e5# 最小名义价值流动性要求# ...其他初始化参数...deffetch_option_chain(self,expiry_date):"""获取指定到期日的期权链数据"""# 实际实现需对接券商API或第三方数据源passdefcalculate_theoretical_value(self,contract,spot_price,volatility):"""Black-Scholes模型计算理论价格"""# 具体公式实现...returnnp.exp(-contract.dte/365*contract.rate)*\ norm.cdf(np.log(spot_price/contract.strike)+(contract.rate+0.5*volatility**2)*contract.dte/365)-\ contract.strike*np.exp(-contract.dte/365*contract.rate)*\ norm.cdf(np.log(spot_price/contract.strike)+(contract.rate-0.5*volatility**2)*contract.dte/365)defselect_new_contract(self,current_pos,market_data):"""新合约选择算法"""candidates=[]forcontractinmarket_data:ifcontract.dte>self.target_days*0.9and\ contract.bid_ask_spread<0.05and\ contract.open_interest>self.min_liquidity:# 添加筛选条件...candidates.append(contract)# 按隐含波动率偏差排序sorted_candidates=sorted(candidates,key=lambdax:abs(x.implied_vol-current_pos.implied_vol))returnsorted_candidates[0]ifsorted_candidateselseNonedefexecute_rollover(self,current_pos,new_contract,market_order_fee=5.0):"""执行移仓操作的具体逻辑"""# 计算需要平仓的名义价值close_notional=current_pos.quantity*current_pos.strike# 计算新开仓所需权利金open_premium=close_notional*(new_contract.premium/new_contract.strike)# 考虑交易费用后的实际可用资金available_capital=self.portfolio_value*self.position_ratio-2*market_order_fee# 头寸调整计算ifavailable_capital>=open_premium:# 执行双向平仓与开仓self.close_position(current_pos)self.open_position(new_contract,open_premium)returnTruereturnFalsedefmonitor_rollover_condition(self,portfolio,market_data):"""监控移仓触发条件"""current_contract=portfolio.current_position.contract days_to_expiry=current_contract.dte# 检查是否接近到期日或满足移仓阈值ifdays_to_expiry<=self.target_days*0.7or\ portfolio.current_position.value_ratio<self.rollover_threshold:# 重新评估市场环境new_contract=self.select_new_contract(current_contract,market_data)ifnew_contract:returnself.execute_rollover(current_contract,new_contract)returnFalse策略核心机制解析
合约筛选标准体系
时间维度约束:设置目标剩余天数±10%的浮动区间,避免过早移仓增加摩擦成本,同时防止临近到期流动性骤降。示例中
target_days*0.9确保新合约至少有40天存续期。流动性过滤规则:采用双重验证机制,既要求买卖价差不超过权利金的5%(
bid_ask_spread < 0.05),又规定未平仓合约对应的名义价值超过百万级别(open_interest > min_liquidity)。波动率匹配原则:优先选择隐含波动率与历史波动率偏离度最小的合约,通过
abs(x.implied_vol - current_pos.implied_vol)量化偏差值,降低Vega风险敞口突变概率。
移仓触发条件设计
- 时间驱动型触发:当剩余期限低于目标周期的70%时自动启动移仓流程,该阈值经过蒙特卡洛模拟验证可平衡展期频率与交易成本。
- 价值占比预警:若当前持仓市值占总权益比例跌破20%,表明标的资产相关性发生显著变化,需及时调整头寸结构。