WonderTrader实战:C++回测引擎跑茅台SMA 5/20,28次交易盈利仅5次

一个 C++ 写的 A 股回测框架,性能是 Python 的几十倍

WonderTrader 是国内量化圈里一个比较特别的存在——它是用 C++ 写的,不是 Python。在量化框架几乎被 Python 统治的今天,用 C++ 做回测引擎意味着什么?意味着处理海量 tick 级数据时的性能是 Python 框架的几十倍,意味着实盘交易时的延迟是微秒级而不是毫秒级。对于做高频或日内策略的人来说,这个差异是决定性的。

我拿它对茅台跑了 SMA 5/20 双均线策略,结果和 RQAlpha 那篇的结论几乎一样——三年半亏损 15.46%、夏普 -2.03、胜率仅 17.9%、利润因子 0.18。但 WonderTrader 的报告比 RQAlpha 多了月度盈亏统计和更详细的 WtBtAnalyst 指标,对策略的"失败原因"拆解得更加透彻。

起步

EasyClaw 官网下载安装。不需要手动编译 C++ 源码、不需要配 Boost 依赖。

打开后左侧找「Skill」→「Skill Creator」。灰显的话去「设置 → 通用」打开「开发者模式」重启。

创建 Skill

在 Skill Creator 里告诉 EasyClaw:

帮我把 GitHub 上的 WonderTrader(https://github.com/wondertrader/wondertrader)做成一个 A 股回测 Skill。我希望输入股票代码和均线参数就能跑双均线策略,输出 WtBtAnalyst 格式的完整分析报告——含核心绩效指标、月度盈亏统计和逐笔交易明细。

EasyClaw 会自动拉代码、编译 C++ 引擎、配置 A 股数据源、封装成 Skill。底层的 C++ 编译、交易规则配置、Excel 报告生成——全部自动完成。

Skill 创建好后:

用 WonderTrader 回测贵州茅台,2023 年初到现在,SMA 快线 5 慢线 20

image

回测结果:28 次交易只赢了 5 次

核心绩效

指标怎么看
总收益率 -15.46% 和 RQAlpha 的 SMA 5/20 一模一样
年化收益 -4.58% 每年稳定亏损
夏普比率 -2.03 比 RQAlpha 的 -1.29 更差——WtBtAnalyst 对波动率的计算更保守
索提诺比率 -2.73 只算下行波动的夏普——下行风险尤其严重
最大回撤 -16.87% 和 RQAlpha 一致
总交易次数 28 只有 RQAlpha 的一半——信号更少
胜率 17.86% 28 次交易只赢了 5 次
利润因子 0.179 总盈利 / 总亏损 = 0.18——亏的钱是赚的钱的 5.6 倍

月度盈亏统计(节选)

WonderTrader 的 WtBtAnalyst 会按月汇总交易表现——这是 RQAlpha 没有的功能:

月份净利润次数胜率收益率
2023/02 -¥8,558 1 0% -0.86%
2023/08 +¥16,617 1 100% +1.66%
2024/10 -¥34,617 1 0% -3.46%
2025/04 +¥17,717 2 100% +1.77%
2026/03 -¥30,435 2 0% -3.04%

月度数据揭示了一个残酷的事实:亏损月的亏损幅度(-3.46%、-3.04%)远大于盈利月的盈利幅度(+1.66%、+1.77%)。这是利润因子 0.18 的直观体现——你赚的时候只是小赚,亏的时候却是大亏。策略的盈亏结构完全颠倒:一个健康策略应该是"斩断亏损、让利润奔跑",而这个策略是"让亏损奔跑、微利就跑"。

为什么两个框架的结果几乎一样?

RQAlpha 和 WonderTrader 在同一个策略、同一个标的、同一个区间上跑出了几乎一样的结果——总收益都是 -15.46%,最大回撤都是 -16.87%。这说明这个策略的失败不是框架的问题,而是策略本身在这个区间上就是失效的。两个独立引擎得出一致结论,这个结论的可信度很高。

差异在于交易次数:RQAlpha 产生了 57 笔交易,WonderTrader 只有 28 笔。原因可能是两者对"均线交叉信号"的实现细节不同——比如 RQAlpha 可能在金叉当天入场,WonderTrader 可能在金叉次日入场。细节差异导致信号数量的差异,但最终收益结果几乎完全一致——说明 SMA 5/20 在茅台上无论如何调整入场时机,都无法改变亏损的命运

夏普比率的差异(-1.29 vs -2.03)值得注意——WtBtAnalyst 在计算年化波动率时可能使用了不同的年化因子。这不影响结论的方向(都是负数),但说明不同框架的同一个指标可能无法直接对比——跨框架比较策略时要注意公式差异。

WonderTrader 和 RQAlpha 的区别

 WonderTraderRQAlpha
语言 C++(编译型,高性能) Python(解释型)
性能 微秒级延迟,适合高频和 tick 级回测 毫秒级,适合日频和分钟级
报告格式 Excel 多 Sheet(WtBtAnalyst) CSV + PNG
月度统计 有(逐月盈亏+胜率)
适合 高频/日内/多品种组合 中低频/单品种/因子研究

如果你做的是日频策略、单品种回测,RQAlpha 和 WonderTrader 的实际体验差别不大。但如果你需要处理全市场 5000 只股票的 tick 级数据、或者需要把策略直接部署到实盘,C++ 的性能优势就体现出来了。

常见报错

错误原因解决方法
C++ 编译失败 缺少 Boost 或其他 C++ 依赖 Skill 自动处理,如手动安装需确保 Visual Studio Build Tools 可用
Excel 报告中无月度统计 回测区间太短,不足一个月 至少运行 3 个月以上

下一步

  • 把策略参数从 5/20 换成 10/30,看交易次数和胜率的变化
  • WonderTrader 支持多品种组合回测,可以同时跑茅台+五粮液+泸州老窖的组合策略

资源链接:

你更看重回测框架的性能还是易用性?有没有因为框架性能不够而放弃过某个策略?欢迎聊聊。

posted @ 2026-07-27 16:29  PC修复电脑医生  阅读(15)  评论(0)    收藏  举报