同一条选股公式,两个人算出来的结果可以差出一大截,一个说能用,一个说没用。通达信选股公式回测胜率的第一个争议点不在公式本身,在口径:分子数什么、分母数什么、按哪个价格算成交、区间取多长。这四件事没对齐,讨论这个数值就没有共同的基准。

下面按”分母 → 成交价 → 未来函数 → 样本 → 失效场景”的顺序讲。函数名(ISLASTBAR、BARSLAST)与语法以通达信金融终端个人版为准。本文只讲口径与验证方法,属于技术研究范畴,不构成对任何标的的判断。

一、两个结论的分歧,先在口径上

口径不同会带来两种常见的分叉。第一种是分母不同:有人按”每一根 K 线算一次”,有人按”每出现一个新信号算一次”。信号在连续的几根 K 线上都成立时,前一种把同一个信号数了好几遍,分母被放大。第二种是分子不同:有人只看持有固定周期之后价格是否高过信号价,有人设了一个阈值,低于阈值不算成功。分子标准不同,算出来的数值自然不一样。

所以拿到一个胜率数值,先做的是把它的口径问清楚,而不是拿去和另一个数值比大小。两个口径不同的数值之间没有可比性。

二、分子与分母,各数什么

分子与分母各数什么,是通达信选股公式回测胜率最容易分叉的一处。四个要素的取值方式列在下表。

要素 可选口径 差异在哪里
分母(样本数) 信号次数 / 成立过的 K 线根数 信号连续成立时,后者把同一个信号重复计数
分子(成功数) 持有固定周期后价格高于信号价 / 高于信号价一个设定的幅度 设阈值会把小幅浮动的样本判成不成功
持有周期 固定的若干根 K 线 / 到下一个反向条件出现为止 后者让每笔样本的周期长度不等,长短差异会摊进结果
区间 一段固定区间 / 全部本地数据 区间长度不同,样本量与行情状态分布都不同

把表格里的四项写下来贴在旁边,再看任何一个数值,就能判断它属于哪一类口径。这一步不做,后面所有比较都是无效的。

信号连续成立的处理方式值得单独定一条规则。公式里的条件在某一段区间上可能连续为真,这时候把它当成一个信号,还是当成多个,会直接改变分母。可行的约定是:用 BARSLAST 数出距离上一次信号成立已经过了多少根 K 线,只在超过某个间隔时才算作一个新信号。
{ 用 BARSLAST 控制同一个信号的重复计数 }
{ BARSLAST(条件) 返回上一次条件成立到当前的周期数 }

条件 := C > REF(C,1) AND V > REF(V,1);

新信号 := 条件 AND BARSLAST(条件) > 5;

← 只有距离上一次成立超过 5 根 K 线时才算新信号,
  连续成立的片段只会被计一次

三、成交口径:信号价不等于成交价

这是让回看结果与实际情况分叉最大的一处。选股公式在某一根 K 线上的输出,是用这根 K 线的收盘价算出来的。收盘价出来的时候,这一根 K 线的交易已经结束了。用当根收盘价当作成交价,等于假设自己在价格还没形成的时候就完成了动作。

把成交价挪到信号之后的下一根 K 线上,方向是对的,但仍要选具体取哪一个价:下一根的开盘价、下一根的收盘价,或者下一根开盘价加上一段滑点。三种取法给出的结果不一样,取哪一种要在开始回看之前定下来,不能算完再看结果挑一个。

{ 信号在第一根,成交在第二根 }

信号 := 条件;

{ 用下一根的开盘价做成交价 }
成交价 := REF(O, -1);

{ 注意:REF 的周期参数为负表示向后引用,
  这一句在历史数据上成立,但在最后一根 K 线上取不到值,
  需要判断当前位置 }
可成交 := NOT ISLASTBAR;
向后引用(REF(X, 负数))只在历史数据上有意义,在最后一根 K 线上取不到之后的数据。公式里出现这种写法时,必须同时判断当前是不是最后一根 K 线,否则公式在实时状态下会给出与历史回看不一致的输出。

四、未来函数:先查这一项再谈数值

谈通达信选股公式回测胜率之前,先查未来函数。用了未来函数的公式,在历史区间上回看时会表现得很顺,因为它在计算某一根 K 线的时候读到了这根 K 线之后的数据。这类公式输出的结果不是当时能算出来的结果,把它的回看数值当作参考没有意义。

自查的方式是在公式里加一条提示当前 K 线位置的输出,与信号一起画在副图上:

{ 判断当前是不是最后一根 K 线 }
是末端 := ISLASTBAR;

信号: 条件, COLORRED;
末端: 是末端, COLORGRAY;

← 拉远历史区间,看信号的位置是否随区间长度改变。
  位置会变的,说明公式用到了之后的数据。

还需要区分”用了向后引用”与”用了未来函数”两件事。向后引用是被明确写出来的(周期参数为负数),看得见;未来函数藏在函数语义里,例如按整段数据做归一化、按全区间求极值再回头比较,这类写法在图上没有明显的痕迹。

五、样本与区间:参数是在哪一段上调出来的

通达信选股公式回测胜率的参数,不能在同一段区间上调出来就算数。同一条公式,在同一段区间里反复调参数,调到结果看起来顺为止,这个参数在这段区间上当然会好看。这不是公式有效,是参数记住了这段区间。验证方式是把区间切成两段:前一段用来定参数,后一段只用来验证,后一段不参与任何调整。

另外两件事与样本有关。一是样本量:成立次数很少的区间上,每一次成立或不成立对数值的影响都很大,数值会漂。二是行情状态:一段区间内的走势形态不具代表性时,数值只描述那一段区间,不能往外推。

六、失效场景清单

下面这些场景会让回看结果与实际情况继续分叉。它们的共同点是公式本身没错,是它依赖的前提在特定条件下不成立。

  • 除权除息日:复权口径下前收盘价被调整过,跨除权日的样本价格不可直接比较
  • 停牌前后:停牌期间没有 K 线,持有周期的计数会跨过停牌段,与实际经历的时间不一致
  • 开盘即封在限制价上的 K 线:这类 K 线上没有可成交的量,回看里算作已经成交,与事实不符
  • 成交极稀少的标的:价格跳动大,用收盘价衡量持有结果会把跳动的幅度算进去
  • 数据缺失的时点:本地未下载对应周期数据,公式在这一段没有输出,被当成”信号不成立”混进分母

七、结论跟着口径走,不跟着数值走

本文讲的是回看口径、函数语义与验证方法,只作技术研究口径,不构成对任何标的的判断。上面所有数值描述的都是公式在历史区间上的表现,这段表现与区间之外的走势之间没有可推导的关系。

回到开头那两个不同的结论:它们的分歧不在公式,在这四个口径。所以在问一条选股公式的结果是多少之前,先反问自己四句——分子分母是怎么数的、成交价取的是哪一笔、区间有多长、参数是在哪一段区间上调出来的。这四个问题答清楚了,数值才有讨论的价值。

站内还有 指标回测与风险验证 的其他条目,选股公式与预警 里讲条件表达式的完整写法,量价形态与信号拆解 里讲信号成立条件的拆解方法,可对照查看。

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