新闻详情

新闻详情

首页 / 资讯中心 / 详情

期货多策略组合资金分配与风险平价优化实战

发布时间:2026/9/30 3:37:20来源:尧图网络
期货多策略组合资金分配与风险平价优化实战
做期货量化做到一定阶段大家都会遇到同一个问题单策略做得再好净值曲线也是过山车。我在实盘里最直观的感受是某套趋势策略在波动率高的月份赚得盆满钵满一到震荡市就连着三个月磨人而套利策略正好相反。把这类策略组合在一起让它们互相补位资金曲线才能稳下来。但这个组合绝对不是把策略丢进一个账户就完事资金怎么分、权重怎么定、何时再平衡每一环都有讲究。这篇内容围绕期货量化策略组合优化展开重点拆解多策略资金分配方法从原理、算法到Python落地代码再到实盘里会踩的坑一次讲透。适合手里已经有几个成型的期货策略、正在琢磨怎么把它们拼成一个稳健组合的量化交易者不管你是用掘金、文华、无限易这类平台做策略还是自己写Python全流程回测这套分配逻辑都通用。1. 项目概述为什么要做多策略资金分配1.1 单一策略的困境与组合逻辑单策略的收益来源通常非常单一比如趋势跟踪赚的是市场惯性套利赚的是价差回归日内高频赚的是微观结构的短暂失衡。这意味着单策略的盈利期和回撤期高度依赖某一种市场状态。我见过太多人把一个均线突破策略调参调到完美回测年化60%结果一上实盘就连续回撤原因很简单市场进入震荡期这类策略的猎物消失了。组合优化的逻辑不是找一堆策略堆在一起而是利用策略之间的低相关性来平滑资金曲线。A策略亏钱的时候B策略大概率在赚钱两者叠加后的整体回撤就被控制住了。这里有个容易被忽略的前提相关性越低组合的分散效果越好如果两个策略本质上都是追趋势只不过参数不同那它们涨跌几乎同步组合毫无意义。1.2 这个优化的核心目标与适用场景多策略资金分配要解决的具体问题有三个第一给每个策略分配多少资金才能让组合的风险调整后收益最优第二用什么频率去调整这些权重避免频繁调仓被手续费吃光利润第三组合层面的最大回撤控制怎么做不能只靠单个策略自己的止损。这套方法适用场景很广。比如你有三个期货策略——一个螺纹钢趋势策略、一个有色跨期套利策略、一个股指日内动量策略它们覆盖的品种、时间周期、交易频率都不同天然具备组合优化的价值。另外如果你在用无限易这类平台跑量化策略平台通常支持多策略同时运行、按账户净值的百分比下单那么你在平台外把资金分配权重算好再在平台内按权重配置每个策略的资金比例思路完全一致。2. 资金分配的核心方法盘点2.1 等权分配与波动率倒数加权先说最简单的方法等权分配。每个策略分到同样的资金比如四个策略各25%的资金。这个方法最大的优点是稳健、不怕参数估计偏差缺点也很明显——它没有考虑策略之间的风险差异。一个年化波动率10%的套利策略和一个年化波动率30%的趋势策略拿同样多的钱结果就是组合的风险被高波动策略主导了套利策略的稳定作用被稀释。波动率倒数加权是对等权分配的第一层改进思路很直观波动率越大的策略权重越小。权重公式是每个策略的1/波动率再归一化。我在早期经常用这个方法因为它只需要估计每个策略的波动率不需要估计策略间的协方差操作简单鲁棒性也不错。但它的前提假设是策略之间的相关性为零实际中策略多少会有相关性所以它是个偏保守的近似解。2.2 风险平价Risk Parity风险平价的核心思想是让每个策略对组合总风险的贡献相等。注意这里说的不是资金权重相等而是风险贡献相等。一个高波动的策略虽然资金权重小但它对组合风险的贡献如果和其他策略相同那么组合就不会因为某一个策略的剧烈波动而整体失控。举一个具体例子假设两个策略A和B相关系数很低A的波动率是B的三倍那么在风险平价的框架下B会拿到大约三倍于A的资金权重因为它的波动小、能容纳更多资金。桥水全天候基金的理念本质上也是风险平价只不过它分配的是资产类别我们这里分配的是策略。风险平价需要估计策略收益率的协方差矩阵计算每个策略的边际风险贡献然后迭代求解权重。它比波动率倒数加权多考虑了策略间相关性结果更精细但计算也更复杂。2.3 均值方差优化均值方差优化就是马科维茨的现代投资组合理论目标函数是最大化组合夏普比率或最小化组合方差用历史收益和协方差矩阵来求解最优权重。它的公式表达为最大化组合预期收益 - 无风险利率/ 组合标准差同时约束权重之和等于1、权重非负。这个方法理论上最优雅实盘里却最容易被参数误差伤害。原因在于预期收益率的估计误差通常非常大而且优化器很聪明会把权重集中到历史上收益最高的那个策略上结果你得到的是一个看似最优、实则在样本外很容易失效的极端组合。我在实践中只用它做参考不会直接作为最终资金分配方案。2.4 各种方法的对比与选型分配方法输入参数优点缺点适用阶段等权分配无简单、鲁棒、无需估计忽略风险差异策略不多、信心不足时波动率倒数加权各策略波动率兼顾风险、实现简单忽略相关性策略相关性低、追求稳健风险平价协方差矩阵风险分散彻底需要迭代求解、对协方差估计敏感策略数量多、风格差异大均值方差优化收益、协方差理论最优对收益估计极敏感、易走极端仅作参考、需加约束我的选型建议是如果你刚开始做多策略组合先用波动率倒数加权它简单、不容易出错。等策略数量多了、策略间的相关性结构稳定了再升级到风险平价。均值方差优化除非你对收益预测有很强的信心或者加了严格的权重上下限约束否则谨慎使用。3. 相关性分析是组合优化的地基3.1 如何计算策略相关性做资金分配之前必须先算清楚策略们到底有多同步。最常用的方法是计算策略日收益率序列的皮尔逊相关系数矩阵。假设你有三个策略每个策略产出一组日收益率序列把它们拼成一个DataFrame一行是日期每列是一个策略然后直接调用pandas的.corr()就能得到相关系数矩阵。相关系数的解读要结合交易逻辑不能只看数字。比如两个趋势策略在2023年那波黑色系单边行情里相关系数高达0.9这很正常因为行情驱动逻辑一致。但你要关注的不是这种普通行情下的相关性而是极端行情下、策略回撤期的相关性——如果两个策略平时相关系数只有0.3一到市场大跌的时候相关性飙升到0.8那组合的分散效果在关键时刻就丧失了。3.2 相关性陷阱与极端行情下的变化我管这个叫危机相关性现象。平时各策略各赚各的钱看似独立但当市场出现系统性冲击时比如突发政策导致商品全线跌停几乎所有策略都会同时受损趋势策略止损、套利策略价差剧烈波动、日内策略流动性枯竭。这时候相关性矩阵里那些低数字全部失效组合回撤会比模型预测的大得多。应对方法是在资金分配时做压力测试。具体做法是在历史数据中找出几个极端行情区间比如2015年股灾、2020年疫情后的商品波动、某些品种的连续涨跌停单独计算这些区间内策略的相关性和回撤然后把相关性矩阵在这些极端区间上调再用调整后的矩阵重新计算资金分配。这样得到的权重在危机时刻会更抗打。3.3 稳健相关性与收缩估计另一个实操中很普遍的坑是协方差矩阵的估计误差。如果你的策略样本只有两年数据协方差矩阵的维度又比较大估计出来的矩阵可能不稳定直接用它做风险平价会导致权重剧烈波动。业界常用一个成熟的处理办法是Ledoit-Wolf收缩估计思想可以类比成把样本协方差向一个更简单的结构拉拢如果样本数据不够可靠我不完全相信它把它和一个假设的对角矩阵做加权平均避免极端值主导结果。在Python里用sklearn.covariance的LedoitWolf类几行代码就能实现。我个人的经验是用了收缩估计之后风险平价的权重稳定性有明显改善策略间的权重切换不再那么频繁这在实盘中省掉了不少无谓的换仓成本。4. 实操基于Python的组合优化实现4.1 环境准备与数据构造接下来的代码我都基于Python 3.8以上版本需要安装numpy、pandas、scipy、cvxpy。另外建议用Jupyter Notebook或VS Code调试方便交互式查看中间结果。之前提到的sklearn.covariance用于收缩估计pip install scikit-learn即可。先构造一个演示用的策略日收益率数据。为了说明方法我生成三个模拟策略的收益率序列现实中你应该用自己每个策略的回测净值曲线来计算日收益率逻辑完全一样。import numpy as np import pandas as pd np.random.seed(42) dates pd.date_range(start2022-01-01, periods500, freqD) # 模拟三个策略的日收益率趋势、套利、日内动量 trend np.random.normal(0.0008, 0.012, len(dates)) arbitrage np.random.normal(0.0004, 0.004, len(dates)) momentum np.random.normal(0.0005, 0.008, len(dates)) # 让趋势和动量有一定相关性套利保持独立 momentum 0.3 * trend np.random.normal(0.0004, 0.006, len(dates)) returns pd.DataFrame({ trend: trend, arbitrage: arbitrage, momentum: momentum }, indexdates)这里有个细节真实策略的收益率序列会有自相关结构比如趋势策略可能连续多日同向盈利但用模拟数据演示方法没问题。真实使用时建议把回测净值曲线做一阶差分再除以昨日的净值得到的就是日收益率。4.2 波动率倒数加权代码波动率倒数加权是最容易实现的一版代码非常短。计算每个策略日收益率的标准差取倒数然后归一化。# 波动率倒数加权 vol returns.std() weights (1 / vol) / (1 / vol).sum() print(日波动率:) print(vol) print(\n波动率倒数权重:) print(weights)运行结果会看到套利策略因为波动最小分到的权重最大趋势策略波动最大权重最小。这正是这个方法的核心理念——让每个策略的预估风险对组合的冲击大致相同。4.3 风险平价求解代码风险平价权重需要用迭代法求解。因为风险贡献方程没有解析解又不能直接套用凸优化器比较常见的做法是使用Python的scipy.optimize构建一个目标函数让各策略的风险贡献尽量相等。from scipy.optimize import minimize # 计算协方差矩阵使用收缩估计更稳健 from sklearn.covariance import LedoitWolf cov_estimator LedoitWolf().fit(returns.values) cov pd.DataFrame(cov_estimator.covariance_, indexreturns.columns, columnsreturns.columns) def risk_parity_objective(w, cov): 目标是让每个策略的边际风险贡献尽量相等 w np.array(w) portfolio_vol np.sqrt(w cov.values w) marginal_contrib cov.values w risk_contrib w * marginal_contrib / portfolio_vol target_risk portfolio_vol / len(w) return np.sum((risk_contrib - target_risk) ** 2) # 初始权重从等权开始 n returns.shape[1] cons {type: eq, fun: lambda w: np.sum(w) - 1} bounds [(0, 1)] * n res minimize( risk_parity_objective, x0np.ones(n) / n, args(cov,), methodSLSQP, constraintscons, boundsbounds ) print(风险平价权重:, res.x)这段代码有两个可调的关键点。一是协方差矩阵用LedoitWolf收缩估计而不是直接用np.cov这是为了降低估计误差。二是目标函数用风险贡献的平方误差来度量不相等的程度也可以用KL散度或者别的距离函数但平方误差简单直观。这里要重点解释为什么不能用直接的解析公式。由于风险平价是求解一个非线性方程组各策略的风险贡献相互耦合权重变化会同时影响组合波动率和各策略的边际贡献所以只能用数值优化迭代逼近这是正常的不必纠结。4.4 均值方差优化代码均值方差优化用cvxpy实现最方便cvxpy能帮我们处理凸优化问题而不需要手推梯度。目标设为最大化夏普比率加所有权重非负、权重和为1的约束。import cvxpy as cp # 均值方差优化最大化夏普比率 mu returns.mean().values Sigma cov.values w cp.Variable(n) risk cp.quad_form(w, Sigma) ret mu w # 最大化夏普比率等价于最小化负夏普 objective cp.Maximize(ret / cp.sqrt(risk)) constraints [cp.sum(w) 1, w 0] prob cp.Problem(objective, constraints) prob.solve(solvercp.ECOS) print(均值方差最优权重:, w.value)运行完之后你会发现这个权重通常非常极端可能90%以上都压在历史收益最高的策略上。这不是bug而是无约束均值方差的天然属性。所以实战中我建议至少加上权重上限约束比如每个策略不超过40%不然样本外很容易出问题。constraints [cp.sum(w) 1, w 0, w 0.4]加了约束后结果会温和得多也更接近实战可用的方案。4.5 再平衡周期与费用处理权重求解出来之后还有两个实际问题多久调整一次权重以及调仓的钱够不够覆盖成本。再平衡周期我试过几种日频调仓的摩擦成本太高年频调仓又无法应对策略状态的变化最平衡的是周频或双周频。每周五收盘后重新计算一次协方差矩阵和权重下周一开盘按新权重调整。这里的关键是计算权重要用滚动窗口的数据比如过去60个交易日或120个交易日的收益率不要用全量历史因为策略的表现会随着市场环境变化老数据权重太大反而拖后腿。调整仓位的成本也要计算清楚。假设组合总资金是200万某个策略的权重从30%调整到35%需要挪出10万资金如果这个策略的期货主力合约定金比例是12%合约乘数是10按当前价格4000算一手需要4800元保证金10万大约能开20手。如果每次调仓产生的手续费加滑点超过预期收益那就应该降低调仓频率。5. 组合层的风控与再平衡5.1 组合级止损与回撤控制组合层的风控和单策略的风控是两个维度。单策略止损管的是这个策略是不是失效了组合层风控管的则是整体资金曲线是不是出了问题。我在组合层设置了两个风控指标组合净值从峰值回撤达到10%时所有策略权重减半回撤达到15%时暂停所有新开仓只处理已有持仓。这个设计的逻辑是单个策略回撤可能只是它的周期不对但组合整体回撤到这个幅度大概率是市场环境发生了系统性变化降低暴露、保住本金比继续交易更重要。等组合净值重新创出新高再逐步把权重加回来。回撤控制还有一个容易被忽略的细节要在策略权重里预留现金缓冲。不要把全部资金都按权重分配到策略上至少留5%到10%的现金作为应急备用金应对极端跳空和保证金追加。5.2 调仓频率与交易成本平衡前面提到了再平衡周期这里展开说说为什么它那么关键。我的师兄曾经做一个五策略组合权重每天更新结果一年下来仅调仓产生的手续费和冲击成本就吃掉了约40%的收益。后来他改成双周调仓成本降下来不说资金曲线反而更平滑了原因是过度的权重调整其实是在追逐噪声每一次调仓都在买进最近表现好的策略、卖出最近表现差的策略这在震荡市里就是来回挨耳光。补充一个实用的判断方法比较调仓后组合的理论收益提升和预估调仓成本。如果一次调仓能带来的月度预期收益提升只有0.1%但这次调仓要付出0.15%的成本那这次调仓就不该做。这个思路可以写成自动化判断逻辑在每次再平衡触发时计算一下是否值得。5.3 Walk-forward验证与过拟合防范资金分配方法最怕过拟合因为协方差矩阵和收益估计都来自历史数据优化过程很容易找到只适合历史行情的权重。我的做法是采用walk-forward前向验证将样本数据切成多个时间窗口每个窗口的前70%用来估计协方差矩阵、计算权重后30%用来做样本外验证然后整体向后滚动。比如把2020年到2024年的数据切成若干个210天的小窗口每个窗口前150天计算权重后60天做样本外测试把每个窗口的样本外收益串起来得到一条真实的样本外资金曲线。我一般要求这条样本外曲线的年化收益不低于样本内曲线的60%最大回撤不超过样本内的1.5倍否则就认为分配方案过拟合了需要简化模型、缩小子集或者换用更保守的分配方法。6. 常见问题与排查实录6.1 优化结果走极端怎么办风险平价和均值方差优化最容易出现的现象就是权重跑偏几乎全部资金压在一个策略上。这个问题的根源通常是协方差矩阵存在很大的估计误差被优化器捕捉并放大了。先检查协方差矩阵的condition number条件数如果非常大说明矩阵接近奇异估计质量堪忧。对策有三个换用LedoitWolf收缩估计、给权重加上下限约束、扩大估计窗口。我之前遇到过一个极端案例两个策略的相关系数算出来是-0.92风险平价直接给其中一个策略分配了接近零的权重后面用250天窗口重算相关系数发现只有-0.3原来是窗口太短、噪声太大。所以遇到权重走极端先怀疑数据别急着改优化器。6.2 实盘与回测偏差过大多策略组合实盘表现和回测偏差大首先看交易成本有没有算够商品期货的滑点在极端行情里比平时大得多。其次看成交假设是不是太理想——回测里假设权重调整能瞬间完成实盘却要在盘口流动性不足时分批下单成交价偏离预期价是常有的事。还有一个隐藏问题策略之间可能在抢同一笔流动性。如果你的三个策略都是在开盘后前10分钟交易账户资金又有限就会出现第一个策略成交了、后面两个策略因为价格变了没法按原计划成交的情况。我之前就遇到过两个趋势策略在同一个品种上撞车一个做多一个做空看似分散实际是在同一个价位上对冲掉了各自的仓位手续费倒是交了不少。排查方式是检查每个时间点的策略持仓看有没有重复持仓、反向开仓的情况有的话要在组合层做净持仓管理。6.3 危机条件下相关性抬升这是做组合优化的人最不想面对又必须面对的问题。平时刻意挑选低相关策略一旦市场出现极端波动所有策略之间的相关性会同步抬升组合的实际分散效果断崖式下降。2020年3月全球资产恐慌抛售期间不少看起来毫无关联的期货策略都出现了同步回撤就是这个原因。我的应对办法是每年做一次压力场景复盘找出过去五年里期货市场波动最大的十个交易日统计组合在这十个交易日里的整体回撤和每个策略的表现。如果某个策略在大多数压力日里都和组合同步下跌它的真实分散价值没有模型里显示的那么大我会考虑降低它的权重上限。6.4 参数敏感度分析与兜底方案资金分配涉及一堆参数协方差矩阵的估计窗口、收缩强度、再平衡频率、权重上下限。建议每个参数都做一次敏感性分析将参数从基准值上下浮动50%看最终的组合净值差异有多大。如果某个参数微调一点、结果就天翻地覆说明这个模型不稳定需要简化。我个人的兜底方案是当优化结果和简单基准方案比如等权或波动率倒数加权的差异过于悬殊时优先选择后者。因为一个复杂模型的优势如果不能显著超过一个简单的、鲁棒的方案复杂模型隐含的额外风险就不值得承担。这条经验我反复在实盘里验证过简单的分配方法在长期运行中往往比复杂的最优方案更靠谱。最后再分享一个我这些年做下来的体会多策略资金分配不是一次性完成的它是随着你对策略的理解加深而不断迭代的动态过程。前几个月你可能只能用波动率倒数加权跑过几个月、积累了真实的相关性数据之后再考虑切到风险平价。每做一次调整只改一个变量让其他条件全部保持不变这样才能搞清楚每一步决策到底给资金曲线带来了什么变化。量化交易里稳定比惊艳重要得多资金分配这件事尤其如此。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Linux内核配置系统全解析:从Kconfig到.config与裁剪实战 2026/9/30 4:44:17

Linux内核配置系统全解析:从Kconfig到.config与裁剪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
新手向Linux安装指南:发行版、启动盘、分区与常见坑 2026/9/30 4:44:16

新手向Linux安装指南:发行版、启动盘、分区与常见坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Quill排障清单:录音没声音、权限不生效的6个高频问题逐一解决 2026/9/30 4:44:10

Quill排障清单:录音没声音、权限不生效的6个高频问题逐一解决

Quill排障清单:录音没声音、权限不生效的6个高频问题逐一解决 【免费下载链接】quill Ultra-minimalist macOS recording transcription. 项目地址: https://gitcode.com/gh_mirrors/quill26/quill Quill 是一款极简的 macOS 本地会议录音 转写工具&#x…

阅读更多 →
最近很火的《高性价比人生指南》,我把它做成了微信小程序 2026/9/30 4:44:10

最近很火的《高性价比人生指南》,我把它做成了微信小程序

最近受到关注的开源项目《高性价比人生指南》HowToLiveBetter,我也围绕它做了一个微信小程序,让大家在手机上查阅更方便。 这份指南,具体在讲什么? 它关注的事情很日常:健康、时间、金钱,以及生活里那些平…

阅读更多 →
Altium Designer新建工程全流程:从建项目到元件库与PCB设计技巧 2026/9/30 4:44:10

Altium Designer新建工程全流程:从建项目到元件库与PCB设计技巧

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Model-Optimizer 实战:量化、剪枝与图优化加速模型推理 2026/9/30 4:44:04

Model-Optimizer 实战:量化、剪枝与图优化加速模型推理

1. 从"模型能跑"到"模型跑得省":Model-Optimizer 到底在解决什么做模型部署的人迟早会撞上一堵墙:训练时一切正常,指标也漂亮,可一旦要上线,推理延迟、显存占用、单位算力成本这三座大山就压过来了…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉