news 2026/4/23 8:49:21

基于Johansen协整检验的指数期权统计套利策略实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于Johansen协整检验的指数期权统计套利策略实现

策略功能与风险说明

本策略通过Johansen协整检验筛选具有长期均衡关系的标的资产组合,构建指数期权统计套利头寸。核心功能包括:1) 多变量时间序列协整关系验证;2) 动态跟踪误差控制;3) 期权希腊字母对冲。主要风险包含模型误设风险、流动性风险及极端市场条件下的协整关系断裂风险。


Johansen协整检验理论基础

向量误差修正模型(VECM)框架

在VAR§模型基础上引入协整关系约束,建立VECM模型:

ΔXₜ = ΠXₜ₋₁ + Γ₁ΔXₜ₋₁ + ... + Γₚ₋₁ΔXₜ₋ₖ₊₁ + εₜ

其中协整矩阵Π分解为αβᵀ,β矩阵列向量构成协整空间。

特征值检验方法

通过极大似然估计获取特征值λᵢ,构造迹统计量:

Trace(H₁/H₀) = -T∑(ln(1-λ̂ᵢ)) ~ χ²(r)

最大特征值统计量:

Max(H₁/H₀) = -Tln(1-λ̂ᵣ₊₁) ~ χ²(1)

标的筛选与组合构建流程

数据预处理阶段
importnumpyasnpimportpandasaspdfromstatsmodels.tsa.vector_ar.vecmimportcoint_johansendefpreprocess_data(price_df,window=252):"""计算对数收益率并处理缺失值"""returns=np.log(price_df).diff().dropna()returnreturns.rolling(window).mean().dropna()
协整检验实施
defjohansen_test(returns,lag=1,alpha=0.05):"""执行Johansen协整检验"""result=coint_johansen(returns,det_order=0,k_ar_diff=lag)eigenvalues=result.eigvals.round(4)trace_stat=result.trace_stat.round(4)max_stat=result.max_stat.round(4)# 临界值判断(95%置信度)cv_trace=[15.87,19.60,23.42,27.04]cv_max=[14.07,18.63,22.00,25.32]cointegration_rank=0foriinrange(len(trace_stat)-1,-1,-1):iftrace_stat[i]>cv_trace[i]:cointegration_rank+=1else:breakreturn{'eigenvalues':eigenvalues,'trace_stat':trace_stat,'max_stat':max_stat,'rank':cointegration_rank,'critical_values':{'trace':cv_trace,'max':cv_max}}
组合权重优化
defcalculate_hedge_ratio(series_a,series_b):"""计算最小方差对冲比率"""cov_matrix=np.cov(series_a,series_b)delta=cov_matrix[0,1]/cov_matrix[1,1]returndeltadefbuild_portfolio(candidates,test_result):"""根据协整结果构建投资组合"""iftest_result['rank']<1:returnNoneselected=candidates.loc[candidates.index.isin(test_result['eigenvectors'][:test_result['rank']].index)]weights={}foriinrange(len(selected.columns)-1):weights[selected.columns[i]]=calculate_hedge_ratio(selected.iloc[:,i],selected.iloc[:,i+1])returnpd.Series(weights)

期权头寸构建逻辑

Greeks参数计算
fromscipy.statsimportnormdefblack_scholes_greeks(S,K,T,r,sigma,option_type='call'):"""BS模型希腊字母计算"""d1=(np.log(S/K)+(r+0.5*sigma**2)*T)/(sigma*np.sqrt(T))d2=d1-sigma*np.sqrt(T)ifoption_type=='call':delta=norm.cdf(d1)gamma=norm.pdf(d1)/(S*sigma*np.sqrt(T))theta=-(S*norm.pdf(d1)*sigma)/(2*np.sqrt(T))-r*K*np.exp(-r*T)*norm.cdf(d2)else:delta=norm.cdf(d1)-1gamma=norm.pdf(d1)/(S*sigma*np.sqrt(T))theta=-(S*norm.pdf(d1)*sigma)/(2*np.sqrt(T))+r*K*np.exp(-r*T)*norm.cdf(-d2)return{'delta':delta,'gamma':gamma,'theta':theta}
动态对冲策略
defdynamic_hedging(portfolio,option_chain,rebalance_freq=5):"""基于希腊字母的动态对冲"""holdings={}forassetinportfolio.index:# 获取最优行权价期权best_option=select_best_option(asset,option_chain)# 计算对冲比例hedge_ratio=portfolio[asset]*best_option['delta']# 确定头寸规模position_size=int(abs(hedge_ratio)*100)holdings[asset]={'option_contract':best_option['contract'],'position_size':position_size,'hedge_ratio':hedge_ratio}returnholdings
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 8:49:09

项目做多了才明白:时间同步真的不能凑合

做项目久了才发现&#xff1a;时间同步这件事&#xff0c;真不能靠“凑合” 刚做系统集成那几年&#xff0c;说实话&#xff0c;时间同步我也没太当回事。 服务器装好系统&#xff0c;顺手指个公网 NTP&#xff0c;能对上就算完事。后来项目越做越多&#xff0c;才慢慢意识到&a…

作者头像 李华
网站建设 2026/4/16 15:04:32

破局“不可成药”:戊二酰亚胺化学重塑CRBN靶向降解新突破 | 乐研试剂

一场靶向降解的化学革命正在发生 在肿瘤、自身免疫病、神经退行性疾病等领域&#xff0c;高达80%的疾病相关蛋白因缺乏典型活性口袋&#xff0c;长期被视为“不可成药”靶点。而靶向蛋白质降解技术的崛起&#xff0c;正以前所未有的方式打破这一僵局。其中&#xff0c;以Cereb…

作者头像 李华
网站建设 2026/3/27 12:22:21

Java性能优化实战技术文章

Java性能优化实战技术文章大纲性能优化概述性能优化的定义与重要性常见性能瓶颈场景&#xff08;CPU、内存、I/O、网络&#xff09;性能优化方法论&#xff08;测量、分析、优化、验证&#xff09;JVM调优实战堆内存与垃圾回收机制优化选择合适的垃圾回收器&#xff08;G1、ZGC…

作者头像 李华
网站建设 2026/4/20 11:37:03

硬件加密狗复制之通信协议

硬件加密狗通信协议硬件加密狗&#xff08;Dongle&#xff09;是一种物理安全设备&#xff0c;用于软件授权和版权保护。其通信协议通常基于USB或串行接口&#xff0c;涉及身份验证、数据加密和指令交互。以下是常见协议类型的深度分析。通信协议类型Greer82加密狗复制破解USB …

作者头像 李华
网站建设 2026/4/18 7:40:09

kafka C++ 和 java端计算分区ID不一致排查

生产端使用C&#xff0c;将std:string key 传入&#xff0c;parititon设为-1&#xff0c;表示让kafka自动计算分区id java端拿到反序列化后的key string&#xff0c;通过murmur2 算法计算出的分区id和kafka分配的分区id不一致根本原因&#xff1a;C的kafka使用CRC32 计算hash&a…

作者头像 李华