指标公式可信度判断的起点,是先问这个结果由什么算出来。一条曲线在历史数据上贴着走势走,来源可以有两种:计算逻辑本身,或者对已经发生过的行情做适配。下面拆四件事:参数拟合、事后标注、未来函数、样本外失效,再给三个能自己动手核对的入口。
文中提到的函数名、日期写法与菜单名,按通达信金融终端个人版的形态描述。不同版本在函数集合与编辑器行为上存在差异,涉及某个具体版本能力的地方,以官方版本说明为准。
一、先纠正一个直觉:曲线好看,不代表计算方式站得住
一条公式在图上呈现的是计算结果,而计算过程里的每个条件、每个参数都能被调整。调整的动机不难理解:把历史上表现不理想的那几段改一改,线上的坑就被填平。这个过程做完之后,图上剩下一条平滑的线,源码里留下的是对具体行情做的处理。
关键在调整发生在什么位置。条件如果来自对形态的定义,例如价格在某个区间里连续停留的根数,这段线反映的是定义;条件如果来自对具体日期或具体价位的适配,这段线反映的是对已经发生的数据的记忆。两者在图上看起来一样平滑,差别只在源码文本里。
接下来四节分别拆这四类做法,每节给出一个可以自己执行的核对动作。
二、参数拟合:把回撤压下去的手法
指标公式可信度判断里最直接的一条线索,是数参数。一条公式带几个可调参数、每个参数的取值范围有多宽,决定了它能被贴合到什么程度。
把参数加到足够多,一条公式可以在某段历史数据上做出接近任意形状的曲线。举个例子:条件里同时出现均线周期、偏离幅度、确认根数、量能倍数,每一项都能独立取值,四组取值组合起来对应很大的取值空间。空间越大,把某几段不理想的区间剪掉的余地越大。
判断参数个数是否合理,可以换一个角度:逐个问每个参数对应源码里的哪一条条件。描述「价格在均线之上」这件事,一个周期参数就够;如果一条均线类公式带了六个参数,逐个对回源码之后,能看出哪些参数承担了定义、哪些只是在调节结果。
{参数个数与可调范围的自查}
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 的表达式决定。检索时按函数名逐个过一遍,比只看第一屏完整。
五、样本外失效:换一段区间就变样
指标公式可信度判断的第四个入口,是问一句参数的取值是在哪段数据上定下来的。参数在样本内被调到好看,换一段数据复算,结果可能完全不同。样本外复算把这件事显性化。
复算区间有两种取法:时间上更晚的一段,或者同一时间段上的另一组标的。两种取法验证的侧重点不同,前者检验参数是否只适配了那一段行情,后者检验条件是否只适配了某一类数据。条件允许的话,两种都做一遍。
{样本外复算的安排}
第一段:用于定参数(样本内)
第二段:时间上更晚,用于复算(样本外)
第三段:同一时间段、另一组标的,用于复算
记录项:每段上的触发次数、触发后的偏离幅度、未触发时段的长度
如果给出的材料里只有一张样本内的结果图,没有第二段数据的记录,可查看的部分就到样本内为止。公式本身未必有问题,能被确认的范围确实只有那么宽。
判断一份材料有没有做样本外复算,看具体记录而不是看结论。有第二段区间、有触发次数、有与样本内的对比,这三样同时出现,复算才算落到了纸面。
六、把三项核对串起来,以及这套判断的边界
前面四类做法落到操作上,就是三个入口:看参数个数,看是否引用未来函数,看有没有样本外验证记录。三项各查什么、查出来怎么处理,列在下面这张表里。
| 现象 / 提示 | 含义 | 处理 |
|---|---|---|
| 参数项有七八个,可调范围都很宽 | 拟合空间大,曲线能被贴合成多种形状 | 逐个放开参数,每次只改一个,记录结果差异 |
| 源码里出现 ZIG、PEAK、TROUGH、REFX | 取值依赖该根之后才出现的数据 | 截掉最后一段数据复算,看此前那些根的取值是否改变 |
| 条件里出现 DATE= 或某个历史价格的常数 | 对具体历史段落做了适配 | 把该条件从判断里摘出来,看主逻辑是否还成立 |
| 只有一张样本内的结果图 | 没有第二段数据的复算记录 | 另取一段区间或另一组标的复算,把差异记下来 |
| 曲线在整段历史上都很贴合 | 需要把参数个数与未来函数两项一起看 | 按上四行逐项核对,不单独据此下结论 |
这张表里的处理动作指向的都是源码与新一段数据,不涉及对接下来行情的看法。三项核对能确认的,是一条公式的计算过程有没有上述几类对历史数据的适配,以及它的验证范围覆盖到哪里。
它做不到的,是回答一条公式在接下来的行情上会给出什么结果。计算方式经得起核对,与结果是否持续有效,是两件事。核对通过只说明源码里没有明显的事后处理,不说明这条公式在未来数据上会有同样的表现。
相关延伸:挑选公式源码时的口径,见 指标资源选择与会员 一栏;回测安排与失效记录的整理方式,见 回测与风险 一栏。
指标公式可信度判断的落点,是计算过程与验证范围,与结果本身无关。
本文只作技术研究口径,不涉及也不构成对任何标的的判断。
站内还有 指标原理与参数 的条目,涉及计算口径与参数含义的部分可对照查看。文中函数名与菜单名按通达信金融终端个人版的形态描述,不同版本的函数集合与编辑器行为存在差异,具体以官方版本说明为准。
