通达信公式回测原理可以一句话概括:把历史数据按时间顺序一根一根地重放,每推到一根,只允许公式看到这一根以及它之前的数据,然后把公式当根给出的结果记下来。整套机制的核心就是这个限制。理解了它,就能明白测试结果为什么会与图上看到的不一样。

下面按重放机制、结果不可复现的原因、复权设置的影响、测试区间的选择、结果口径、解读边界与核对清单七步讲。文中菜单名、函数名与设置项名称为通达信客户端的通用描述,不同版本与券商定制版对测试入口与设置项的支持存在差别,请以你所用客户端的实际界面与官方说明为准。

一、回测在做什么:按根重放

回测的推进方式与逐根画图是同一套逻辑,区别在于它不允许看到后面。

{ 回测的推进方式 }
第 N 根 —— 只用第 1 到第 N 根的数据计算
记录第 N 根的结果,再推到第 N+1 根
重复到区间末端
{ 任意一次计算,输入都不含当根之后的数据 }

这条限制带来一个直接推论:只要公式里存在任何依赖当根之后数据的写法,重放得到的结果就与实际使用时能看到的不一致。测试是在「当时能知道什么」的条件下复现,而不是在「事后看全貌」的条件下复现。

通达信公式回测原理里,按根重放这四个字是关键。它与在图上回看历史走势的差别在于看数据的权限:图上拿到的是全量序列,公式可以取到任意一根;重放时权限被限制在当前根,前面的值可以取,后面的值拿不到。两套条件跑同一段代码,结果不一致属于正常。

二、结果复现不了的两个原因

第一个原因是公式里用了未来函数。这类函数在计算当根结果时会引用到之后的取值,重放时读到的是完整序列,而实际使用中那些值还不存在。结果表现为:图上回看处处有效,按当时条件却给不出同样的判断。这类函数的识别与替换见 通达信公式编写教程 一栏。

第二个原因是引用了尚未走完的周期。日线图里引用周线数据时,本周的周线值在当根还没有定型,重放过程中读到的是「完整的这一周」,而实际使用时它还在变动。这一类问题不出在函数是否属于未来函数,而出在数据本身的生成时点。

原因 表现 处理方向
使用未来函数 回看有效,当时无效 替换为不依赖后续数据的等价写法
引用未走完的周期 最后一根随刷新跳动 把引用值限定在已走完的历史根上
复权方式不一致 两次测试结果不同 固定一种复权方式并写进记录

第三行放在下一节讲。三行的共同点是「同一段代码在不同条件下得到不同结果」,而差异的来源都不在代码本身。

三、复权设置如何改变历史序列

复权处理改变的是历史价格序列本身。除权除息之后,历史价格需要按某种方式调整,调整方式不同,整条序列的取值就不同,公式在序列上算出的结果自然不同。

复权方式 历史序列的处理 对测试的影响
不复权 保留当时的成交价 除权处出现跳空,幅度类条件误判
前复权 按当前基准调整历史价格 序列随最新除权变化,历史值会变
后复权 按历史基准调整后续价格 历史段稳定,当前段数值高于实际

前复权那一行的含义值得展开:由于基准是当前,每发生一次新的除权,整条历史序列都会被重新调整,之前测试得到的具体数值也就随之变化。这不是测试不严谨,是复权方式的定义决定的。所以复权方式必须在记录里写明,否则两次测试的数值没有可比性。

固定口径的做法是把「复权方式 + 测试区间 + 周期」三项写在一起。三项齐了,别人按同样的条件重跑能得到同样的结果;缺任何一项,两次结果的差异都无从解释。

四、测试区间的选择

区间长度决定结果的可比性。区间过短时,公式命中的样本量少,得到的比例值受个别样本影响大;区间过长时,中间跨越的市场环境变化多,单一比例值描述不了全过程。

可行的做法是分段测试,把长区间切成若干段分别跑一次,比较各段的结果差异。差异大说明公式的表现依赖环境,单一的总比例会掩盖这一点。差异小说明结果相对稳定,总比例才有描述意义。

{ 分段测试的写法 }
把待测区间按相同长度切成若干段,逐段跑一次
记录每一段的命中情况,而不是只看合计
比较各段的差异,差异大时继续缩短段落找变化点
{ 分段的目的不是算得更细,是看结果稳不稳 }

五、结果口径要说清楚

回测输出的一组统计值,每一项都依赖口径。同一个公式在两套口径下可以给出两个不同的比例值,两者都不算错,但混在一起用就没有意义。

口径项 可选处理 影响
信号计入时点 按当根计入或按后一根计入 命中样本集合发生变化
重复信号 全部计入或合并为一次 连续信号多时差异明显
样本边界 区间开头若干根是否计入 窗口不足的根是否参与统计
数据完整性 停牌与缺口如何处理 异常根的取舍影响比例值

四项里第二项最容易被忽略。同一段走势里连续出现多个信号时,全部计入会把这一段的影响放大,合并为一次则按整段算一例。两种处理各自回答不同的问题,选哪一种要在记录里写明。

六、结果怎么解读才不失真

回测结果是历史数据上的统计描述,不是对后续表现的说明。它的用途是在几套写法之间做横向比较,看哪一套在同样的口径下表现更稳定,而不是把某个比例值当作预期。

解读时先看样本量。样本量小的时候,比例值的波动区间宽,两套写法之间的差异可能只是样本波动。再看分段结果是否一致,最后才看合计数。顺序颠倒过来,容易把偶然当成结论。

通达信公式回测原理的第三处要点是测试环境与实际使用环境并不完全重合。测试按固定规则逐根结算,实际使用中还存在数据到达时间、盘中停牌、复牌跳空这类情形。测试结果说明的是在给定口径下的历史表现,不能替代对数据条件的逐项核对。

还有一层边界需要写明:回测不包含实际执行环节的差异,也不包含数据以外的因素。测试结果与实盘表现之间不存在固定的对应关系,这一点在任何口径下都成立。相关的验证步骤与风险检查见 指标回测与风险验证 一栏,测试层级的分法见 通达信公式报错与卡顿排查 一栏里关于排查顺序的部分。

七、核对清单

  1. 公式里有没有引用当根之后数据的写法。
  2. 有没有引用尚未走完的周期,最后一根是否跳动。
  3. 复权方式是什么,是否已写进记录。
  4. 测试区间有多长,是否做过分段比较。
  5. 信号计入时点与重复信号的口径写明了吗。
  6. 样本量是否足以支撑当前的比例值。
  7. 解读时的顺序是不是先样本量、再分段、最后合计。

把上面的七项做成一份固定的记录模板,通达信公式回测原理这件事就落到了可复核的步骤上。下次再跑同一套写法时,条件一致结果就能对上,条件有变也能说明变在哪一项。

文中菜单名、函数名与设置项名称为通达信客户端的通用描述;不同版本与券商定制版对测试入口的位置、复权方式的选项、统计口径的处理存在差异,具体请以你所用客户端的实际界面与官方说明为准。本文只讨论回测机制与结果口径的核对方法,不构成任何投资建议。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。