OptiNod 学院
回测能赚,到了自己手里却不行的原因——信号与执行之间
回测中确认的良好期望值存在于入场规则里。实盘盈亏取决于这条规则在实际交易中被遵守了多少,这个差距用R来衡量。
回测中确认的良好期望值存在于入场规则里。而实盘盈亏,取决于这条规则在实际交易中被遵守了多少。
回测中期望值为正的策略,在实盘账户里却亏损,这很常见。回测衡量的是入场、出场规则本身的期望值。规则在设定的时点、按设定的价格进出。但实盘盈亏是在这条规则之上再加上人的判断。
大众把这种差距笼统地说成“策略在实盘中不太管用”,并把原因归到策略头上。责怪策略,能想到的修正办法就只有换策略。可是同一个人设计新策略,同样的交易习惯还是会造成同样的差距。问题出在哪里一旦判断错,怎么改都还是老样子。
实盘期望值,是回测期望值减去两类差距之后的值。一类是机械性差距,另一类是执行差距。机械性差距来自手续费、滑点、成交时点和前视偏差,执行差距则产生于把规则转化为实际交易的阶段中,人的判断介入的时候。
本系列讨论的是执行差距。要先用数字量出它的大小,才能决定先纠正哪种偏误。本文整理以R为单位衡量这一差距的方法,以及系列中各篇所处的位置。
同一个策略,期望值分成两个
回测期望值,是入场规则在历史数据上取得的平均盈亏。规则在信号K线入场,在止损、目标或出场信号处平仓。没有犹豫,没有晚入场,也没有早出场。所以这个值是策略能达到的最好水平。
实盘期望值,是由人执行同一条规则的结果。入场比信号晚几根K线,出场比计划早或晚。止损有时守住,有时被推迟。规则相同,成交却不同,于是两个期望值就分开了。
因此“策略在实盘中不太管用”这句话里混着两件事。一是规则本身的问题,二是执行这条规则的阶段的问题。不把这两者分开,就会把原本没问题的规则扔掉,并把同样的执行习惯原样带到新规则上。在把两个期望值各自写成数字之前,无法知道问题出在哪一边。
机械性差距已有测量工具
回测期望值与实盘期望值的差距分成两部分。第一是机械性差距。它与人的判断无关,产生于回测所假设的条件与实际市场不同之处。
- 手续费与滑点:回测设为0或估得较低的交易成本,在实盘中每次成交都会产生。滑点、手续费与流动性讨论了它们的大小。
- 成交时点:回测按收盘价或下一根开盘价这类假设的价格成交。实盘成交价会偏离这个假设。回测与实盘整理了收益曲线分叉的位置。
- 前视偏差与重绘:在回测中完美的信号,可能是实时中并不存在的信号。前视偏差与重绘讨论了这种情况。
这三项即使完全遵守规则也依然存在,与人的心理无关。因此本系列不对它们做详细讨论。不过要衡量执行差距,必须先把机械性差距剔除。这样,剔除之后剩下的部分,才可以认为纯粹是由人的判断造成的。
其余的差距来自执行规则的人
剔除机械性差距之后仍然剩下的差距,就是执行差距。面对同一个信号,人的行为与规则不同的部分就是执行差距。
2024年11月初,比特币从约69,000美元开始上涨,到12月17日涨至108,353美元,涨幅约57%。趋势规则在上涨初期的信号K线入场,一直持有到趋势结束的信号出现。然而在同一个区间里,人的实际交易会从多个方向偏离规则。
- 入场被推迟。错过信号K线,在已经上涨之后才进场,止损幅度没变,而到目标的距离缩短,盈亏比降低。这种延迟在追涨FOMO中讨论。
- 出场过早。为了守住几天内获得的8%盈利而匆忙平仓,就把本可以达到 +57%的平均盈利压缩成了 +8%。这种习惯在处置效应中讨论。
- 止损被推迟。在下跌区间把计划好的止损往后拖,本来1R就能结束的亏损会膨胀数倍。在2025年10月6日126,200美元高点附近推迟止损的仓位,到11月21日的80,600美元,亏损扩大到约36%。
- 交易次数增加。亏损之后迫于回本的压力降低入场标准,交易次数增多,随之产生的成本就侵蚀期望值。
即使面对同一轮上涨,这四种执行也会造成不同的盈亏。规则只有一个而结果分叉,原因就在这里。如果不把这部分用数字量出来,就无法判断账户缩水的原因在规则还是在执行。

执行差距以R来衡量
如果只凭感觉看待执行差距,就不清楚该从哪里改起。把它落实到交易记录上,就可以通过两次计算期望值来衡量。
首先,一笔交易的期望值,是胜率乘以平均盈利R,减去败率乘以平均亏损R的值。R是把一笔交易中承担的止损幅度记为1的单位,计算方法整理在期望值中。
把这个值计算两次。一次用实盘的全部交易,一次只用遵守规则的交易另行汇总。遵守规则的交易,指在信号时点入场、并按计划守住止损和目标的交易。两个值之间的差,就是执行差距的大小。如果遵守规则的交易的期望值明显高于全部交易,说明让账户缩水的原因在于偏离规则的交易。
例如,只汇总遵守规则的交易所得的期望值是 +0.30R,全部实盘交易的期望值是 +0.05R,那么执行差距是0.25R。偏离规则的部分使每笔交易的期望值减少了0.25R。如果回测期望值是 +0.40R,剩下的0.10R就是机械性差距。把三个值这样并排放好,账户缩水的原因中执行所占的比重,就可以用一个数字得出。
从回测期望值中减去这个执行差距和机械性差距,就得到实盘期望值。把三个值以R并排写下,哪个差距更大一目了然。
- 回测期望值:把回测结果中每笔交易的期望值记为R。
- 实盘期望值:用实际成交记录,按同一公式把每笔交易的期望值记为R。
- 差距分解:把两个值的差拆成机械性差距和执行差距。
- 规则遵守标记:把所有实盘交易标记为遵守规则或违反规则,分别计算两组的期望值。
- 违规原因分类:对每笔偏离规则的交易,记录是晚入场、早出场、止损未执行还是过度交易。

两个陷阱
把执行差距全部归咎于心理的误解。 遵守规则的交易与全部交易之间的期望值差距里,也混有机械性差距。如果不剔除手续费和滑点,就把剩下的差距全部算作心理因素,实际的心理部分会被夸大。衡量执行差距之前,要先把交易成本按实际数字计入。
对样本很少的差距仓促下结论的错觉。 用二十笔交易得出的期望值差距,仅凭偶然也会大幅波动。在遵守规则的交易和违规的交易各自积累到足够数量之前,就把两个期望值的差距确定为执行差距还为时过早。样本少时,差距的正负号会随样本翻转。
先改哪种偏误,由这个数字决定
用一个数字量出执行差距之后,造成这个数字的违规原因,决定了改正的顺序。出场过早的影响大,就先看处置效应和出场规则;晚入场的影响大,就先看追涨FOMO和入场规则;亏损之后过度交易的影响大,就先看报复性交易和交易次数上限。本系列的每一篇负责一种偏误,讨论这种偏误在交易记录中以什么指标留下痕迹,又可以通过什么事先规则减少。
决定顺序的标准不在于心态。由测得的差距来决定顺序。把回测期望值和实盘期望值以R写下来,再把它们的差距拆成机械性差距和执行差距,这就是本系列的出发点。哪种偏误最大,凭盯着账户的感觉是无法知道的。交易记录里的数字会告诉你。