大智慧公式改通达信,第一次尝试的结果会落到两类反馈上:一类是编译直接不通过,提示某个函数名找不到;另一类是编译通过了,但画出来的曲线与原公式不一样。两类问题对应两种差异,处理顺序不能颠倒,先解决编译,再处理结果。

下面按「差异分两类、函数名的对应、函数缺失时的替代、参数数量与顺序、除权与周期设置、逐根对照、转换后的事」七步讲。文中不针对任何具体公式,也不涉及任何方向判断;两家客户端的函数列表与参数形式以各自编辑器内附的说明为准。

一、先分清哪些差异会挡住编译

差异类型 表现 处理顺序
函数名不同 编译提示函数不存在 先解决,它挡住后面所有步骤
语法写法不同 编译提示语句不完整或括号不匹配 先解决,与函数名一起收口
参数数量或顺序不同 编译通过,但含义变了 第二步处理
函数在目标端不存在 编译提示不存在,且无同名替代 第二步处理,需要用基础函数重写
除权处理与周期设置不同 编译通过,曲线形状不一致 第三步处理,属于数据口径差异

大智慧公式改通达信时,顺序颠倒会浪费一轮。先把结果差异当成函数问题去查,查完发现曲线不一致的原因来自除权设置,等于前面的时间用在了错误的方向上。做法是把编译关先过掉,得到一条能画出来的曲线,再拿它去与原公式对照。

二、函数名的对应关系怎么查

两家客户端的函数列表里都有按类别分组的函数名与说明。对应关系要按含义去查,不要按拼写去猜。拼写接近的两个函数未必是同一种算法,同名函数也未必接受同样的参数。

{ 查对应关系的顺序 }
① 在原客户端里查明函数的类别与说明,记下它的算法含义
② 在目标客户端的同一类别里找含义相同的函数
③ 找不到同义函数时,看说明里是否给出了等价的基础写法
④ 仍然找不到,按下一节的替代思路自己拼
{ 按含义查,不按拼写猜 }

类别是查对应关系时最有用的线索。均值、极值、统计、时间、引用这几类在两边都能对上,逐个类别过一遍比在整张列表里逐个名字比对效率高。查的时候把原公式里用到的函数先列一张清单,列完之后按类别归类,再逐个补上目标端的写法。

三、函数不存在时的替代写法

目标端缺少某个函数时,替代思路是用目标端已有的基础函数拼出等价结果。拼之前要先确认原函数回答的是什么问题,因为同一个问题可能有多种等价写法,而它们在边界位置上的处理并不相同。

{ 一个替代示例:区间内是否出现过某个条件 }
原写法     —— 调用一个返回「是否出现过」的函数
替代写法   —— 出现过 := COUNT(条件, N) > 0;
{ 要先确认原函数统计的是「任意一次」还是「最近一次」 }

替代时最需要确认的是边界语义。有的函数回答的是区间内有没有出现过,有的回答的是最近一次出现距现在多少根,两者写法相近但结果不同。把原函数的说明读完整,确认它统计的是次数、位置还是间隔,再决定用计数、极大极小还是引用类的写法去拼。

四、参数数量与顺序

大智慧公式改通达信的过程中,参数是最容易出错又最不容易被发现的一处。两边的同名函数接受的参数个数可能不同,参数的顺序也可能不一样,编译不会因此报错,但含义已经变了。

{ 参数核对的做法 }
① 逐个函数对照两边说明里的参数列表
② 逐个参数核对含义,不只核对个数
③ 对每个参数写出它在本公式里取的什么值
④ 参数个数对不上时,确认是否有默认值可以省略
{ 这一遍走完,编译通过的公式才具备与原公式可比的前提 }

参数里的窗口长度一类取值要注意默认值。原公式里省略了某个参数、由客户端套用默认值时,转换到目标端之后默认值可能不同,结果是曲线被拉长或压短。做法是把所有省略的参数都显式写出来,取值按原公式实际生效的那一组填,宁可写得长,也不要依赖默认值。

五、除权处理与数据周期

这一节的差异不挡编译,但会稳定地改变曲线形状。同一段行情,两端客户端的除权处理方式不同时,价格序列本身就不同,任何基于价格的指标都会跟着不同。周期设置同理:日线与分钟线的数据起点不同,长周期指标在数据起点附近的表现也会不同。

设置项 不一致时的表现 核法
除权处理方式 除权位置出现台阶,长周期均线形态改变 把两端的复权设置调成一致后重算
数据周期 同一指标在两端读出的数值不同 确认两端看的是同一个周期
数据起点 长周期指标在序列开头部分差异明显 只比较两端都有数据的区间
本地数据完整度 一端数据未补齐,长周期指标取不到值 先补齐数据再比较

核对这几项的办法是把两端的设置界面对照一遍,而不是对着曲线猜。设置一致之后再比较,剩下的差异才是公式本身带来的。若设置一时无法统一,就把比较区间收缩到除权位置之外、两端数据都完整的部分,在这个区间里做对照。

除权与周期的差异可以用一个办法快速确认:把两端的同一个内置指标画出来对照。内置指标的计算方式由客户端自带,两端设置一致时曲线应当重合;内置指标都对不上,说明差异出在设置而不是出在你要转换的那段公式。这一步先把设置类问题与算法类问题分开,后面的逐根对照才有意义。

六、逐根对照的验证顺序

{ 三步对照 }
第一步 —— 比最后一个值:两端输出的当期数值是否一致
第二步 —— 比整段曲线:同一区间内两条线的形状与拐点是否对齐
第三步 —— 比极值位置:区间内的最大值与最小值出现在哪一根
{ 从后往前比,最后一步覆盖前面两步没暴露的差异 }

把两个公式的输出画在同一个副图上,是对照起来代价最低的方式,前提是两者量纲一致。量纲不同的输出要先换算再对照,否则两条线的间距没有意义。对照过程中每发现一处不一致,就回到参数与设置两节里找对应项,不要直接改算法。编译期的问题怎么读提示见 公式报错与卡顿排查 一栏。

七、转换完成之后还要做的事

曲线对齐之后,还有几件事需要补齐:画线与标注部分要按目标端的函数重写,参数说明要按转换后的实际取值更新,公式的来源与转换日期要写进备注。备注里的来源一栏记录原公式来自哪个平台与哪个版本,转换日期一栏记录这次改写的时间,两栏合起来能解释后续任何一次读数的变化。

转换前后的差异还可以用来提醒自己一件事:同一个计算意图在不同平台上有不同的默认设置。平台之间的其他差异见 跨平台对比与公式转换 一栏,指标本身的计算口径见 通达信指标原理与参数 一栏。

回到最开始那个问题:大智慧公式改通达信,做到编译通过算完成了吗?编译通过只说明语法通了,曲线对齐才说明算法通了,备注写全才说明这次转换以后还看得懂。三步都做完,才算改完。

文中函数类别、参数处理与设置项为通用描述;两家客户端及各自不同版本对函数支持范围、参数默认值、除权处理方式与数据周期的覆盖存在差异,具体请以你所用版本各自编辑器内附的函数说明与设置界面为准。本文只讨论语法与口径的转换方法,不构成任何投资建议。

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