Northmark
外汇策略
6 分钟阅读

我的交易系统胜率73.5%却亏损:16年回测审计

对一个实盘外汇系统进行16年审计:胜率73.5%,亏损4,670点。点差几何缺陷、盈亏平衡胜率陷阱,以及证明参数曲面纯属噪音的秩相关检验。

已核实事实 · 最后验证 2026年7月20日
Need specific ticker symbols? Let me know!

Also, check out my website: https://volatilitystreet.com/
Photo by Tyler Prahm on Unsplash

我花了几天时间审核自己构建的一个实时外汇系统,该系统拥有超过 16 年的历史数据。结果出现了意想不到的亏损,而发现这一问题的诊断方法具有足够的普适性,值得撰文分享——它不仅适用于交易领域的参数搜索,也适用于其他任何参数优化场景。

下方的所有数据均源自实际运行测量,绝非示意性数据。

设置

17 种配置,4 小时入场 K 线,在 1 小时 K 线上模拟出场,时间跨度从 2010-05-28 至 2026-07-08,共 7,641 笔交易。关键在于,我向系统输入的是历史 CSV 数据而非实时数据流,且使用的是未经修改的生产函数,因此被测试的代码路径与实际实盘运行的代码路径完全一致。

错误 1:模拟将成本计入了错误的位置

平台的 OHLC K 线使用的是 BID(卖出)价格。回测在 K 线收盘时建立入场,将止盈和止损设置在收盘价 ± n·ATR 处,并针对 BID 的高低点检查是否触及,最后从最终盈亏中减去点差。

而在实盘中,多头头寸以 ASK(买入)价成交,挂单区间相对于该 ASK 价设定,平仓则发生在 BID 价。因此,实盘需要价格多运行一个点差的距离才能到达目标位,也会提前一个点差的距离触及止损位。

结果中扣除成本,等同于向触发机制收取成本,这两者并不相同。前者改变的是你的盈利金额,后者改变的是哪些交易能够最终获利

实测数据显示:胜率会损失 2–5 个百分点,且始终对交易者不利。

这一原则广泛适用于交易之外的领域:如果你的模拟将成本作为事后调整应用,而非建模生成这些成本的机制,那么你的事件计数就是错误的,而不仅仅是总额有误。

错误 2:胜率是设计选择,而非证据

目标设为 0.5–0.8×ATR,止损设为 1.5–2.0×ATR。这意味着盈亏比为 0.25–0.4,通过算术计算即可确定保本胜率:

保本胜率 = SL / (TP + SL) = 75–82%

在样本外测试中,仅使用向前滚动测试片段:4,947 笔交易,胜率 73.5%,亏损 -4,669.9 pip,平均每笔交易亏损 -0.944 pip。

胜率为 73.5% 却仍然亏损并非悖论。小目标容易被频繁触及,这正是小目标的特性。高胜率是以接受四倍于盈利幅度的亏损为代价换来的——它从来都不是存在交易优势的证明。

值得借鉴的诊断方法

在重新优化任何参数之前,我首先问了一个问题:参数曲面是否根本就可学习

对于每个前向滚动(walk-forward)折叠:在训练窗口和测试窗口上评估整个参数网格,然后计算两者之间的 Spearman 秩相关系数。

若 rho > 0  -> 训练秩次可预测测试秩次;选择具有意义
若 rho ~ 0  -> 曲面纯属噪声;任何选择规则都无济于事

第二行才是关键所在。它区分了*"我的优化器很糟糕""这里根本没有任何有效信号"*——这两种情况从外部看来完全相同,却需要截然相反的应对策略。

119 个折叠的统计结果如下:

  • rho 中位数:** -0.024**
  • rho 均值:-0.030,95% 置信区间 [-0.090, +0.030] — 包含零
  • rho > 0 的折叠占比:47.9% — 等同于抛硬币

零信息量。与此一致的是,采用平台平滑处理的前向滚动优化所产生的样本外结果,甚至比那些我从未触碰过的原始参数更差;并且在 17 种配置中有 11 种选择了网格边界——这正是优化器"无从下手"的典型特征。

随后我检查了该效应是否存在于任何地方

38 个交易品种,非重叠持仓期,波动率缩放,并按资产类别汇总,因此 1,140 次测试缩减为 6 次,分为前半段与后半段对比:

资产类别夏普比率 @0bp盈亏平衡成本前半段后半段稳定
FX major+0.083bp+0.06-0.09no
FX cross+0.021bp-0.05-0.06no
Index+0.075bp+0.04+0.02yes
Metal+0.1212bp+0.13+0.03yes
Energy+0.1323bp+0.15-0.02no
Crypto+0.42100bp+0.54+0.15yes

有两点是我未曾预料到的:

盈亏平衡交易成本比夏普比率更具决策参考价值。 FX major 的盈亏平衡点约为 3bp,FX cross 约为 1bp——两者均低于实际点差。在编写任何策略代码之前,“此处是否存在优势”这一问题便已有定论。

显著的结果反而是虚假的。 Energy 在全样本中显示 t = 3.73。但在后半段表现持平至负向。若不进行分段检验,它看起来将是表中最强的发现。

Crypto 是唯一的幸存者,但其衰减剧烈(从 0.54 降至 0.15)。在现实的 CFD 点差下,后半段转为负值。这是历史效应,而非当前效应。

实际教训

在构建策略之前,先构建证伪器。

之所以一长串配置看起来像是“已验证”,是因为流程中没有任何组件负责说这里什么都没有。每个部分都被设计用来寻找某些东西,所以它每次都确实找到了东西。

上述的秩相关测试仅花了一个下午,就否定了数月的参数研究工作——包括我最有信心的一条线索。这正是该测试发挥的作用,也是我长期以来为研究流程添加的最廉价的保险措施。


本文档属于研究记录,不构成投资建议。过往业绩并不代表未来表现。交易 CFD 存在极高的亏损风险。


照片由 Tyler Prahm 拍摄,发布于 Unsplash


Photo by Tyler Prahm on Unsplash

标签
#回测过拟合#向前验证#盈亏平衡胜率#时间序列动量#交易系统审计

相关文章