【免费下载链接】ml-quant-trading-synthetic-mlp
新手第一次看量化交易项目的回测报告,最常见的困惑是:为什么这个模型的夏普比率(Sharpe)是负的,还值得研究?ml-quant-trading-synthetic-mlp 正是回答这个问题的最佳教材——它是 mlquant 确定性 demo 流水线产出的合成数据冒烟测试(smoke test)checkpoint,附带的 metrics.json 把一次完整"因子→模型→组合→回测"的成本拖累过程摊在阳光下。读懂它,你就掌握了量化回测指标的完整阅读框架。
先认识仓库里的 5 个关键文件 🗂️
这个仓库非常精简,每个文件各司其职:
| 文件 | 作用 | 关键内容 |
|---|---|---|
| metrics.json | 回测结果报告 | 500 期回测的 10 项核心指标 |
| config.json | 模型结构定义 | 3 层 MLP,in_dim=213、hidden=64、dropout=0.1 |
| source_config.yaml | 数据生成与训练配置 | 随机种子 42、200 只合成股票、500 个交易日 |
| feature_names.json | 输入特征顺序表 | 213 个因子名(best_*、stock_*、alpha_*等) |
| artifact_manifest.json | 产物清单与校验 | checkpoint SHA-256,保证可复现 |
训练权重本体是 pytorch_model.bin,架构细节见 README.md。注意一个前提:所有指标都来自确定性合成数据(source_config.yaml 中seed: 42),它验证的是"流程正确",而不是"能赚钱"。
逐行拆解 metrics.json:10 个回测指标一次看懂 🔍
metrics.json 中metrics字段只有 10 个数字,但它们恰好覆盖了回测报告的四大板块。
1️⃣ 收益与风险:策略赚了还是亏了?
| 指标 | 数值 | 含义 |
|---|---|---|
ann_return | -8.89% | 年化收益,负值说明策略整体亏损 |
ann_vol | 17.17% | 年化波动率,衡量收益的"颠簸程度" |
max_dd | 28.28% | 最大回撤,从净值高点到低点的最大跌幅 |
新手口诀:先看ann_return定方向,再看ann_vol和max_dd定体感。17% 的波动配上 28% 的回撤,说明亏损不是"一路阴跌",而是有明显的震荡下跌段。
2️⃣ 风险调整后收益:亏得"值不值"?
| 指标 | 数值 | 含义 |
|---|---|---|
sharpe | -0.4566 | 每承担一份波动换来的超额收益为负,风险调整后的收益不佳 |
sortino | -0.7135 | 只惩罚下行波动的 Sharpe 变体,比 Sharpe 更差,说明净值分布左偏、下跌更疼 |
calmar | -0.3144 | ann_return ÷ max_dd的比值(-8.89% ÷ 28.28% ≈ -0.314),衡量"每承受 1% 回撤换回多少收益" |
三者互相印证:不是某一个指标算错了,而是策略的风险调整后表现确实为负——这正是合成数据 + 成本拖累的必然结果,后文拆解。
3️⃣ 换手与成本:最容易被新手忽略的"隐形杀手" 💸
| 指标 | 数值 | 含义 |
|---|---|---|
turnover | 63.21% | 每期换手率,约 63% 的组合权重在每次调仓时被换掉 |
cost_drag/cost_drag_cumulative | 31.54% | 500 期累计的交易成本拖累,占初始净值的 31.5% |
costs_bps | 5 bp | 单边交易费率(metrics.json),来自 source_config.yaml |
成本拖累是怎么算出来的?每期成本 ≈ 换手率 × 费率(买卖双边约 2×5bp),即 0.632 × 10bp ≈ 6.3bp/期;500 期累加起来,就是约 31.5% 的净值损耗。换手率是"油门",费率是"油耗",成本拖累是"总油费"。
为什么 Sharpe 为负?一次完整的成本归因 📉
把上面的数字放在一起,就能还原亏损的完整链条:
- 合成数据本身没有真实 alpha。213 个因子(feature_names.json 中的
best_*、add_*、alpha_*等)都是确定性生成器造出来的占位特征,模型学到的只是微弱的合成信号。 - 数据设定偏保守。合成市场年化漂移仅 5%、波动 30%(source_config.yaml),而组合策略是
long_only、单票权重上限 5%(source_config.yaml),分散化进一步稀释了本就不多的信号。 - 成本才是压垮收益的最后一根稻草。粗略年化分解:扣成本前的年化收益约 +10%,年化成本拖累约 17%,扣后得到 metrics.json 中的 -8.89%。
💡 这正是本仓库的教学价值:Sharpe 为负不是模型"坏了",而是一个健康的回测框架忠实地把成本算了进去。很多不成熟的回测不扣成本,回测曲线漂亮,实盘立刻变脸。
新手避坑清单:解读任何回测报告的 4 个习惯 ✅
- 永远先找成本项。没有
cost_drag或costs_bps的回测报告,先打个问号;对照 source_config.yaml 确认费率假设是否现实(A 股常见单边 5~10bp)。 - 看
turnover再下结论。高换手策略对费率极其敏感,把turnover和costs_bps相乘,心里要有数。 - 三个风险调整指标交叉验证。
sharpe、sortino、calmar方向不一致时(如 sortino 比 sharpe 差得多),说明收益分布有偏,要警惕尾部风险。 - 分清"流程验证"与"真实 alpha"。合成数据冒烟测试(本仓库的
artifact_type即synthetic_mlp_smoke_test,见 artifact_manifest.json)只证明安装、训练、回测链路可复现,不是实盘收益证据,这一点 README.md 的 Limitations 也明确声明了。
如何自己跑一遍并验证这些数字 🚀
整个过程在笔记本 CPU 上 1 分钟内跑完,这也是选择configs/small.yaml配置(metrics.json 中config字段指向它)的初衷:
python -m pip install --upgrade mlquantx huggingface_hub mlquant demo跑完后对照仓库中的 metrics.json 逐项核对——固定seed: 42意味着结果应当逐位一致。如果数字对不上,说明环境或版本出了问题,这正是冒烟测试 checkpoint 的意义。
常见疑问 FAQ
Q1:Sharpe 为负,这个仓库还有什么学习价值?价值在"过程"而非"结果":它展示了从 213 维因子输入 → MLP 打分 → 组合权重 → 扣成本回测的完整闭环,且每个产物都带 SHA-256 校验(artifact_manifest.json),是可复现性研究的范例。
Q2:cost_drag和cost_drag_cumulative为什么数值相同?本例中每期成本直接累加,未再按净值曲线复利折算,所以两者相等。阅读其他报告时若两者差异很大,通常意味着组合在亏损期仍然维持高换手。
Q3:想换真实数据做回测要注意什么?至少做三件事:用真实费率(含冲击成本)、留出样本外区间、把换手率纳入调参目标。本仓库的 source_config.yaml 展示了"参数全部显式化"的最佳实践,值得借鉴。
一句话总结
metrics.json 里那个刺眼的负 Sharpe(-0.4566)不是劝退信号,而是一堂免费的量化成本课:回测报告的可信度,恰恰体现在它敢不敢把成本拖累写在明面上。读懂这 10 个指标,你就有了一副看穿所有回测报告的"X 光眼镜"。📊
【免费下载链接】ml-quant-trading-synthetic-mlp
相关推荐
ML量化研究新宠ml-quant-trading-synthetic-mlp:可复现合成因子MLP模型完全指南
ML量化研究新宠ml quant trading synthetic mlp:可复现合成因子MLP模型完全指南 📌 ml quant trading synt
Seed 42与SHA-256校验:ml-quant-trading-synthetic-mlp端到端可复现性机制深度剖析
Seed 42与SHA 256校验:ml quant trading synthetic mlp端到端可复现性机制深度剖析 ml quant trading s
如何加载并推理ml-quant-trading-synthetic-mlp?Hugging Face量化模型Checkpoint完整实战教程
如何加载并推理ml quant trading synthetic mlp?Hugging Face量化模型Checkpoint完整实战教程 想在自己的电脑上跑
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考