指标公式可信度判断的起点,是先问这个结果由什么算出来。一条曲线在历史数据上贴着走势走,来源可以有两种:计算逻辑本身,或者对已经发生过的行情做适配。下面拆四件事:参数拟合、事后标注、未来函数、样本外失效,再给三个能自己动手核对的入口。

文中提到的函数名、日期写法与菜单名,按通达信金融终端个人版的形态描述。不同版本在函数集合与编辑器行为上存在差异,涉及某个具体版本能力的地方,以官方版本说明为准。

一、先纠正一个直觉:曲线好看,不代表计算方式站得住

一条公式在图上呈现的是计算结果,而计算过程里的每个条件、每个参数都能被调整。调整的动机不难理解:把历史上表现不理想的那几段改一改,线上的坑就被填平。这个过程做完之后,图上剩下一条平滑的线,源码里留下的是对具体行情做的处理。

关键在调整发生在什么位置。条件如果来自对形态的定义,例如价格在某个区间里连续停留的根数,这段线反映的是定义;条件如果来自对具体日期或具体价位的适配,这段线反映的是对已经发生的数据的记忆。两者在图上看起来一样平滑,差别只在源码文本里。

接下来四节分别拆这四类做法,每节给出一个可以自己执行的核对动作。

二、参数拟合:把回撤压下去的手法

指标公式可信度判断里最直接的一条线索,是数参数。一条公式带几个可调参数、每个参数的取值范围有多宽,决定了它能被贴合到什么程度。

把参数加到足够多,一条公式可以在某段历史数据上做出接近任意形状的曲线。举个例子:条件里同时出现均线周期、偏离幅度、确认根数、量能倍数,每一项都能独立取值,四组取值组合起来对应很大的取值空间。空间越大,把某几段不理想的区间剪掉的余地越大。

判断参数个数是否合理,可以换一个角度:逐个问每个参数对应源码里的哪一条条件。描述「价格在均线之上」这件事,一个周期参数就够;如果一条均线类公式带了六个参数,逐个对回源码之后,能看出哪些参数承担了定义、哪些只是在调节结果。

{参数个数与可调范围的自查}
1. 打开公式源码,从头到尾数出所有可调参数名
2. 对每个参数,写下它出现在源码的哪一行、参与哪一次比较
3. 把参数按取值范围的宽窄排一遍
4. 单独放开取值最宽的那个参数,看曲线变化的幅度
5. 逐个放开剩下的参数,每次只改一个,记录结果的差异

第 4 步和第 5 步要分开做。参数一起放开时,结果的差异来自多项调整的叠加;分开之后,能看出哪个参数对结果的影响大。

三、事后标注:在已知的高低点处补条件

第二类做法是在已经知道结果之后,回到那段行情里补条件。步骤不复杂:先看历史上哪些位置走出了想要的形态,再把这些位置的共同点写进源码,让公式在那几处被触发。

这类条件有一个共同特征,它会引用具体的日期或具体的价位。日期写进源码之后,公式只在包含那段日期的数据上生效,换一段数据跑,条件不再成立。

{事后标注的写法,引用具体日期}
N1:=BARSLAST(DATE=1240301);
N2:=BARSLAST(DATE=1240607);
标注:=N1>0 AND N2>0 AND CLOSE>REF(CLOSE,N1)*1.08;
DRAWTEXT(标注,HIGH*1.02,'A');

把这段条件注释掉再算一次,曲线会有明显不同。这个对比动作就是核对的入口:注释前后差异越大,说明这条公式对那段历史的依赖越重。

与日期引用相对的是价位引用,把某个历史极值的价格写成常数,再用它做比较。处理方式一样,先把这段条件去掉,观察曲线还剩下什么。

源码里出现具体日期不等于公式有问题。带日期段的写法在时间区间测试、事件标注这类场景里有正常用途。需要判断的是它参与的是显示还是条件本身,方法是把这段条件从判断里摘出来,看主逻辑是否还成立。

四、未来函数:ZIG、PEAK 一类引用未来值的写法

指标公式可信度判断的第三个入口,是搜源码里有没有引用未来值的函数。这类函数在计算某根 K 线的取值时,需要用到这根之后才出现的数据,画出来的线在实时行情里会跟着新数据改变。

几个写法列在下面。它们在历史数据上看着平稳,原因是那段数据本身已经完整,后续取值已经被包含在计算里了。

{引用未来值的几种写法}
Z1:=ZIG(CLOSE,5);
P1:=PEAK(1,5,1);
T1:=TROUGH(2,5,1);
R1:=REFX(CLOSE,1);

核对方式不依赖行情判断,只看取值是否稳定。把数据序列的最后一段截掉,用剩下的数据重新计算,对比此前已经确定的那些根上的取值有没有变化。普通计算在这些根上的取值不变;引用未来值的写法在这些根上的取值会变,或者线上原先标出的转折点位置发生移动。

有的公式把未来函数藏在中间变量里,源码前面几行看上去正常,转折点位置由后面带 ZIG 的表达式决定。检索时按函数名逐个过一遍,比只看第一屏完整。

判断这类写法的动作:把公式挂到副图上,看最后一根 K 线的取值。随新数据到来,最后一根的取值发生移动,此前已经确定的那几根一起跟着变,说明取值依赖后续数据。这一步只用于核对计算过程。

五、样本外失效:换一段区间就变样

指标公式可信度判断的第四个入口,是问一句参数的取值是在哪段数据上定下来的。参数在样本内被调到好看,换一段数据复算,结果可能完全不同。样本外复算把这件事显性化。

复算区间有两种取法:时间上更晚的一段,或者同一时间段上的另一组标的。两种取法验证的侧重点不同,前者检验参数是否只适配了那一段行情,后者检验条件是否只适配了某一类数据。条件允许的话,两种都做一遍。

{样本外复算的安排}
第一段:用于定参数(样本内)
第二段:时间上更晚,用于复算(样本外)
第三段:同一时间段、另一组标的,用于复算
记录项:每段上的触发次数、触发后的偏离幅度、未触发时段的长度

如果给出的材料里只有一张样本内的结果图,没有第二段数据的记录,可查看的部分就到样本内为止。公式本身未必有问题,能被确认的范围确实只有那么宽。

判断一份材料有没有做样本外复算,看具体记录而不是看结论。有第二段区间、有触发次数、有与样本内的对比,这三样同时出现,复算才算落到了纸面。

六、把三项核对串起来,以及这套判断的边界

前面四类做法落到操作上,就是三个入口:看参数个数,看是否引用未来函数,看有没有样本外验证记录。三项各查什么、查出来怎么处理,列在下面这张表里。

现象 / 提示 含义 处理
参数项有七八个,可调范围都很宽 拟合空间大,曲线能被贴合成多种形状 逐个放开参数,每次只改一个,记录结果差异
源码里出现 ZIG、PEAK、TROUGH、REFX 取值依赖该根之后才出现的数据 截掉最后一段数据复算,看此前那些根的取值是否改变
条件里出现 DATE= 或某个历史价格的常数 对具体历史段落做了适配 把该条件从判断里摘出来,看主逻辑是否还成立
只有一张样本内的结果图 没有第二段数据的复算记录 另取一段区间或另一组标的复算,把差异记下来
曲线在整段历史上都很贴合 需要把参数个数与未来函数两项一起看 按上四行逐项核对,不单独据此下结论

这张表里的处理动作指向的都是源码与新一段数据,不涉及对接下来行情的看法。三项核对能确认的,是一条公式的计算过程有没有上述几类对历史数据的适配,以及它的验证范围覆盖到哪里。

它做不到的,是回答一条公式在接下来的行情上会给出什么结果。计算方式经得起核对,与结果是否持续有效,是两件事。核对通过只说明源码里没有明显的事后处理,不说明这条公式在未来数据上会有同样的表现。

相关延伸:挑选公式源码时的口径,见 指标资源选择与会员 一栏;回测安排与失效记录的整理方式,见 回测与风险 一栏。

指标公式可信度判断的落点,是计算过程与验证范围,与结果本身无关。

本文只作技术研究口径,不涉及也不构成对任何标的的判断。

站内还有 指标原理与参数 的条目,涉及计算口径与参数含义的部分可对照查看。文中函数名与菜单名按通达信金融终端个人版的形态描述,不同版本的函数集合与编辑器行为存在差异,具体以官方版本说明为准。

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