ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

gs-quant 量化策略过拟合验证指南:5 步揪出回测里的虚假高夏普

gs-quant 量化策略过拟合验证指南:5 步揪出回测里的虚假高夏普 gs-quant 量化策略过拟合验证指南5 步揪出回测里的虚假高夏普【免费下载链接】gs-quantPython toolkit for quantitative finance项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quant你有没有遇到过这种情况回测曲线一路向上夏普算出来 3.5看着稳得不能再稳结果一上实盘三个月净值就掉了两成。别急着怪市场更大概率是策略在背题——它对历史数据适配得太漂亮漂亮到把噪声也当成规律记住了。gs-quant 是一套 Python 量化工具包自带回测引擎gs_quant/backtests和时间序列风险度量gs_quant/timeseries正好能帮你把回测里的好看和实盘里能赚钱这两件事拆开验证。这篇文章不讲玄学只带你走一遍可执行的自检流程把过拟合风险拦在上线之前。先对号入座你的策略到底中了几种招过拟合不是一个词而是三种不同的病。先看你中了哪几种比空谈定义更有用。现象你看到的大概率是为什么危险训练集指标远高于测试集换个时间段就崩统计过拟合用复杂结构硬拟合了随机噪声同一份数据反复调参夏普越调越高数据窥探等于用答案反推题目指标是算出来的不是赚出来的只用现在还在上市的标的回测幸存者偏差退市、重组的反面教材全被过滤掉了行业里对这件事并不陌生调研显示超 70% 的量化策略失效源于没被识别的过拟合平均资金回撤能到 35% 以上83% 的基金经理承认踩过这个坑策略失效平均发生在实盘后 4.7 个月而带过拟合特征的策略在极端行情下的最大回撤比正常策略高 2.3 倍。换句话说过拟合不是偶尔翻车而是迟早的事。它怎么形成的基本是数据—模型—优化转着圈的锅样本太少撑不起太多参数模型又偏好用非线性结构去抓波动优化阶段再海选一大堆参数组合挑出一个运气最好的。三条里只要有一条失衡过拟合就长出来了。用 gs-quant 给策略做一次体检gs-quant 没有一键过拟合检测的魔法函数但它的回测引擎加风险度量恰好能拼出一套完整的验证流水线。下面四步每步都能在仓库里找到对应实现。第一步用滚动窗口把真实表现拆出来别只看整段回测的总夏普那只是一个数。把时间切成滚动的窗看每一段的夏普和回撤。gs_quant/timeseries/econometrics.py里的sharpe_ratio支持滚动窗口参数w一行就能算出逐段夏普sr sharpe_ratio(price_series, USD, 22, PRICES) # 22 日滚动夏普同一份代码里还有max_drawdown、returns、volatility配合起来就能看出策略是不是只在某几个月特别能赚。如果一个窗口特别亮眼、其余窗口平平那亮眼的部分多半是噪声。第二步把交易成本算进去很多高夏普是没扣成本前的幻觉。gs-quant 的gs_quant/backtests/actions.py里每个动作都带transaction_cost入场/出场成本配置。策略越频繁交易成本对净值的侵蚀越大——把滑点和手续费垫上去再回测如果收益直接腰斩说明它靠的是擦边球不是真 alpha。第三步换参数、换样本重跑一遍gs_quant/backtests/generic_engine.py的run_backtest支持frequency、states、risks等参数让你用不同的时间切分、不同参数再跑一次。把关键参数在 ±20% 范围内抖一抖观察表现波动如果一抖就变脸说明你当初调出来的参数是运气不是规律。第四步样本内 vs 样本外摆到一起比划分建议时间分层 资产分层双维时间上按 70% 训练、15% 验证、15% 测试切资产上用聚类把标的分成若干相似子集保证每组市场特征接近。这样样本外才真正没见过。下面这张表是判断要不要拉警报的阈值数据来自行业通行口径诊断信号怎么算警戒线样本外衰减(样本内夏普 − 样本外夏普) ÷ 样本内夏普超过 30% 要警惕参数敏感性指标波动系数 ÷ 参数波动系数大于 2.0回撤一致性各窗口最大回撤的标准差 ÷ 均值大于 0.5胜率稳定度各窗口胜率的标准差大于 0.15这几个坑最容易翻车坑一把高夏普当好信号。反直觉的是样本内夏普越高越危险——有研究认为样本内夏普超过 3.0 的策略过拟合概率可达 82%而真实市场里可持续的夏普通常落在 1.0 到 2.0目标定在 1.5 附近、重点盯极端行情下的稳定性比追 3.0 靠谱得多。坑二只回测一次就上线。解法是至少让样本外覆盖一个完整的市场周期牛、熊、震荡各一段别只挑顺风行情。坑三成本想当然。解法是把transaction_cost调成接近实盘的滑点与费率再验证一次别让纸面收益骗自己。坑四参数越调越多。解法是给参数做减法能少一个就少一个参数优化迭代次数别超过样本量的 10%。上线前的自检清单照着勾一遍全过再上实盘数据有没有前视偏差用了未来信息同一份数据是不是被反复用于调参回测标的包不包含已退市、重组的样本排除幸存者偏差滚动窗口下夏普和回撤是否跨时间段一致关键参数 ±20% 扰动后策略是否还站得住计入交易成本后净值还能否为正样本外是否覆盖至少一个完整市场周期样本外夏普相对样本内衰减是否低于 30%一句话收尾过拟合防控不是某一个函数而是从数据、建模到验证的一条流水线。gs-quant 给的是回测引擎和风险度量这两块砖怎么砌、在哪砌取决于你的策略。记住那句老话在量化里稳定的平庸好过不稳定的卓越。把上面四步体检和清单跑一遍比多调十个参数更能救命。相关实现可参考 gs_quant/backtests/ 与 gs_quant/timeseries/econometrics.py风险度量细节见 gs_quant/risk/。【免费下载链接】gs-quantPython toolkit for quantitative finance项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quant创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表