DataWhale—量化金融(task8 最大回撤 和 仓位管理)

发布时间:2026/7/27 18:13:56
DataWhale—量化金融(task8 最大回撤 和 仓位管理) 说实话写这一章之前我一直觉得量化金融就是找规律、写策略、自动赚钱。但当我真正把数据拉下来看到那条从山顶一路跌到半山腰的曲线时我才意识到——策略赚不赚钱是一回事你能不能拿得住是另一回事。就像你写了一个很牛的算法但线上挂了三天你都不敢部署那再好的算法也是白搭。一、今年以来兆易创新的最大回撤1.1 数据概览先用 AkShare 把数据拉下来import akshare as ak df ak.stock_zh_a_hist( symbol603986, perioddaily, start_date20260101, end_date20260726, adjustqfq # 前复权消除分红送股影响 )拿到134 个交易日的数据。兆易创新今年从 235 元附近起步最高冲到846.66 元然后最近跌回457 元。这走势用我们程序员的话说就是——指数级增长之后接了段指数级回调。1.2 最大回撤计算最大回撤的公式很简单但背后的含义很扎心对买入持有策略首日净值归一化为 1跑一遍表格指标数值峰值日期2026-06-29峰值净值3.5693谷值日期2026-07-20谷值净值1.8369最大回撤-48.54%回撤持续天数21 天如果你在 6 月 29 日最高点买了 100 万到 7 月 20 日只剩 51.5 万三周亏掉将近一半。二、水下曲线—— 回撤的可视化2.1 什么是水下曲线水下曲线就是把每一天的回撤画出来0 轴以上表示还在水面上没亏0 轴以下表示在水下亏了。整个曲线始终 ≤ 0最深的那一点就是最大回撤。我画出来一看好家伙——今年以来几乎有一半的时间都在水下。最深的地方直接扎到了 -48.54%而且截至最新数据7 月 24 日还在水下 45.6% 的位置远没爬出来。2.2 回撤信息-15% 的线被反复击穿如果你只能承受 -15% 的回撤那今年以来你至少会被迫止损三次。6 月底到 7 月的这波下杀极其陡峭21 天从山顶到半山腰斜率堪比瀑布。水下曲线越宽说明恢复时间越长目前这个水坑又深又宽短期内看不到上岸的希望。我的理解水下曲线就像系统的内存泄漏图。平时小波动是正常 GC但一旦出现深 V 且长时间不恢复说明系统有结构性问题——要么策略失效要么仓位太重扛不住波动。三、仓位管理同样的策略不同的结果3.1 双均线策略MA5/MA20策略逻辑很简单跟写个 if-else 差不多# 短均线上穿长均线 → 满仓做多 # 短均线下穿长均线 → 空仓观望 signal 1 if ma5 ma20 else 0 position signal * 仓位比例 # 1.0满仓, 0.5半仓我分别跑了满仓100%和半仓50%两种情况同时用买入持有作为基准。3.2 三条净值曲线对比策略总收益率最大回撤年化波动率夏普比率买入持有45.35%-48.54%83.97%1.40双均线满仓53.57%-29.97%66.04%2.13双均线半仓27.08%-16.15%33.02%2.13对照三个问题读图谁涨得最高最终收益双均线满仓53.57% 买入持有45.35% 双均线半仓27.08%。这很好理解——满仓吃到了最多的上涨。但注意半仓虽然只有一半收益夏普比率却和满仓一样说明它用更小的波动换来了同等的单位风险收益。谁跌得最惨最大回撤买入持有-48.54% 双均线满仓-29.97% 双均线半仓-16.15%。买入持有直接腰斩双均线策略因为有止损机制躲掉了部分下跌。半仓更是把回撤砍到了 -16%不到买入持有的三分之一。曲线是否更「平滑」半仓的绿色曲线像一条缓坡满仓的红色曲线像过山车买入持有的灰色曲线像跳楼机。半仓的波动率只有满仓的一半持有体验好太多了。3.3 我的思考作为一个写过后端高并发系统的人我把仓位管理类比成了流量削峰满仓 系统直接扛全部流量峰值高但容易被打挂半仓 加了限流和熔断峰值低了但稳定性强买入持有 完全不做限流靠硬件硬扛扛不住就宕机。量化交易里宕机的意思就是心态崩了割肉或者被迫平仓。半仓虽然赚得少但它让你能睡个好觉而睡个好觉在长期投资里值多少钱无法估量。四、作业换参数 MA10/30满仓 vs 30% 仓位4.1 实验设计把均线参数从 MA5/20 改成MA10/30周期更长信号更少更迟钝然后对比策略总收益率最大回撤年化波动率夏普比率MA10/30 满仓50.50%-38.74%72.91%1.58MA10/30 30%仓位15.63%-13.11%21.87%1.58买入持有45.35%-48.54%83.97%1.404.2 观察结论参数变了半仓30%仓位是否仍然明显「减坑」答案是非常明显而且效果更好了。MA10/30 满仓的回撤是 -38.74%比 MA5/20 满仓的 -29.97% 还要大。这说明参数变迟钝后策略反应慢了躲下跌的能力反而下降了。但 30% 仓位的回撤只有-13.11%稳稳地守住了 -15% 的承受线。夏普比率满仓和 30% 仓位一样1.58再次验证了降低仓位不改变单位风险收益只改变绝对波动。这就像是把系统的并发度从 100% 降到 30%。虽然总吞吐量总收益下降了但系统的 P99 延迟最大回撤和错误率爆仓风险大幅改善。对于不能承受高抖动的业务比如你的心态这是必须的 trade-off。五、算恢复时间多久能爬出坑5.1 计算方法找到最大回撤发生的日期然后看之后60 个交易日内净值能不能回到前高。用代码说就是# 找到最大回撤的谷值索引 max_dd_idx drawdown.idxmin() peak_value running_peak[max_dd_idx] # 检查之后60个交易日 for i in range(1, 61): if equity[max_dd_idx i] peak_value: recovery_days i break5.2 结果策略最大回撤日前高净值截至最新是否恢复距离前高买入持有2026-07-203.56931.9419❌ 未恢复还差 45.6%MA5/20 满仓2026-03-231.94431.5357❌ 未恢复还差 21.0%MA5/20 半仓2026-03-231.42461.2708❌ 未恢复还差 10.8%残酷的现实截至最新数据7 月 24 日没有任何一个策略在 60 个交易日内恢复到前高。买入持有最惨最大回撤发生在 7 月 20 日距今只有 4 个交易日净值还在谷底附近徘徊。双均线策略的最大回撤发生在 3 月 23 日距今已经84 个交易日满仓还差 21%半仓还差 10.8%。5.3 从水下曲线宽度看恢复水下曲线越宽说明在水下的时间越长。买入持有的水下曲线在 7 月之后形成了一个巨大的深坑宽度目测要几个月甚至半年以上才能填平。而半仓的水下曲线虽然也有坑但深度和宽度都小得多理论上恢复会更快。写代码的时候我们总说快速失败、快速恢复Fail Fast, Recover Fast。但在金融市场失败可以很快恢复却可能很慢。最大回撤不只是数字它代表的是你需要用多长时间、多少涨幅才能回到原点。而时间本身就是成本。六、思考题如果只能承受 -15% 回撤6.1 本章实验里哪种仓位更合适策略最大回撤是否在 -15% 以内买入持有-48.54%❌ 严重超标MA5/20 满仓-29.97%❌ 超标MA5/20 半仓-16.15%❌ 略超MA10/30 满仓-38.74%❌ 严重超标MA10/30 30%仓位-13.11%✅符合结论在本章实验的所有组合中只有 MA10/30 的 30% 仓位能把回撤控制在 -15% 以内。6.2 若都不合适你会怎么调整如果 MA5/20 半仓的 -16.15% 还是让你睡不着觉我有两个调整方向方向一继续降仓位从半仓降到 30% 甚至 20%。根据实验结果30% 仓位的回撤已经降到了 -13%MA10/30或更低。理论上仓位和回撤近似线性关系——半仓的回撤大约是满仓的一半所以降到 30% 应该能稳稳守住 -15%。代价是收益也同比例下降。但记住活着才有输出爆仓了连输出的机会都没有。方向二换策略如果降仓位导致收益低到无法接受可以考虑加止损线比如固定 -10% 强制平仓不让回撤扩大到 -15% 以上。多因子策略不只看均线加入波动率过滤比如 VIX 太高就降仓、趋势强度确认等。分散标的不把鸡蛋放一个篮子里。兆易创新是半导体龙头波动天然大。如果组合里加入低波动的标的比如红利股、债券整体回撤会平滑很多。择时择仓结合趋势强的时候满仓趋势弱的时候自动降到 30%而不是固定仓位。如果是我我会先降仓位到 30%同时优化策略加入波动率过滤。就像做系统架构先保证服务不挂降仓位再逐步优化性能换策略。你不能在一个随时会 OOM 的系统上谈性能优化。七、本章小结7.1 从代码视角理解回撤最大回撤就是投资组合的 P99 错误率——它告诉你最坏情况下系统会崩成什么样。而仓位管理就是限流和熔断。满仓 不做限流赌的就是不出峰值流量半仓 加了 Rate Limiter峰值来了能扛住动态仓位 自适应限流根据系统负载自动调节。7.2 夏普比率的启示本章最反直觉的发现是满仓和半仓的夏普比率居然一样MA5/20 都是 2.13MA10/30 都是 1.58。这说明什么说明降低仓位并没有降低单位风险带来的收益它只是把收益的绝对值和风险的绝对值同比例缩小了。就像你把一个系统的 QPS 和延迟同时除以 2用户体验夏普比率不变但服务器压力心态压力小了一半。7.3 量化金融的本质以前我觉得量化是用数学和代码战胜市场。现在我觉得量化更像是在市场的不确定性中用系统和纪律保护自己的人性弱点。最大回撤让你知道最坏情况避免盲目乐观仓位管理让你即使最坏情况发生也能活下来回测让你在历史数据上先死一遍避免真金白银去交学费。就像做单元测试——不是为了让代码不出 bug而是为了在 bug 出现的时候知道它会怎么炸、炸多严重、怎么兜底。7.4 给同样初学者的建议不要只看收益率回撤和波动率才是决定你能不能拿住的关键仓位是你唯一能 100% 控制的东西标的选择和入场时机都有运气成分但仓位是你鼠标一点就能决定的夏普比率比收益率更重要因为它衡量的是睡得着觉的程度回测是历史不是未来但历史能帮你建立对最坏情况的体感永远给自己留后路满仓梭哈不是勇气是赌博附图

相关新闻

最新新闻

日新闻

周新闻

月新闻