同一段 MACD背离选股公式,在通达信里标记的位置,搬到另一个软件上未必落在同一根 K 线上。差异不来自哪一边写错了,而来自两边在函数集、参数定义方式、复权基准与数据起点上的处理不同。知道差异落在哪几处,改写就不再是逐行重写,而是一次有针对性的替换。

下面按差异分类、参数表处理、改写示例、数据口径、验证顺序、边界展开。文中提到的函数名与菜单以通达信金融终端个人版为准,其它平台的函数集与设置项以该软件自带的函数列表为准。全文只讨论公式的可移植性,不涉及具体标的的判断。

一、跨平台要改的到底是什么

先划清边界。基础统计与均线类函数在两边的语义是一致的:EMA、SMA、REF、LLV、HHV、COUNT、CROSS 这类按同一含义实现,直接沿用即可。真正需要处理的是另外四处:通达信特有函数、参数表、复权与数据口径、绘图语句。

这四处里,前两处会在编辑阶段就报错或漏参,后两处不会报错——公式能编译、能运行,只是结果与原来的位置对不上。后者更费时间,因为它没有提示可看。

二、背离判定能不能只用公开函数写出来

背离在计算上是一句相对位置的比较:价格创出区间内的新低,而同时期的指标值没有创出新低,称底部背离;反过来称顶部背离。这句话可以只用公开函数写成,不需要依赖任何平台的专有函数。

{ MACD 的两条线 }
DIF:=EMA(C,12)-EMA(C,26);
DEA:=EMA(DIF,9);

{ 近 30 根内,价格创出新低 }
价新低:=L=LLV(L,30);

{ 同一窗口内,DIF 没有创新低 }
指标未新低:=DIF>LLV(DIF,30);

{ 两个条件同时成立即为底部背离 }
底背离: 价新低 AND 指标未新低;

这段写法只用到 EMA、LLV 与比较运算符,这几项在各平台上都存在,因此它属于可移植的写法。窗口长度 30 与 DIF 的比较对象是两个可调的地方:窗口取短,判定的次数增加;把比较对象从 DIF 换成 DEA 或柱线,判定结果也会改变。这些选择属于公式定义的一部分,跨平台时要在两边用同一组取值,否则比较的不是同一件事。

判断一段 MACD背离选股公式能不能搬,先看它调用了哪些函数。只用到基础统计与比较运算符的,改写量小;出现平台特有函数的,要先找到等价写法或者换掉判定逻辑。

三、需要逐个核对的四类差异

类别 差异表现 核对方式
函数可用性 通达信特有的 ZTPRICE、DTPRICE、NAMELIKE、SUMBARSX 在其它平台的函数列表里找不到对应项 把源码里出现的函数名逐个在目标平台的函数列表里查一遍
参数定义方式 通达信在公式编辑器的参数表里定义参数(参数名、缺省值、最小、最大),复制源码时参数表不跟着走 搬过去之后检查参数是否缺失或被当成未定义变量
复权与数据口径 前复权以最新价为基准回溯调整,后复权以上市首日为基准向前调整;两边的除权因子与数据起点不同 把两边的 DIF 取同一根 K 线对比数值水平
绘图语句 DRAWICON、DRAWTEXT、STICKLINE 的参数位置与图标编号不一致;条件选股公式里不允许保留绘图语句 搬过去之前直接把绘图语句删掉,只留逻辑输出

其中第一类的处理最直接:目标平台没有的函数,只能改写逻辑或删除对应语句,没有替代实现可以照抄。第二类容易漏,因为源码粘过去之后编辑阶段未必报错——参数被当成未定义的变量时才会提示,如果恰好与某个内置名重名就不会提示,运行时结果却是错的。

四、改写示例:从一端到另一端

把上面那段可移植写法换成带通达信特有调用的形式,再换回去,可以看清哪一层在变、哪一层不变。

{ 带平台特有调用的形式:用 ZTPRICE 处理涨停价 }
涨停价:=ZTPRICE(REF(C,1),0.1);
接近涨停:=C>涨停价*0.98;

{ 这一句搬到别的平台需要整体替换:
  ZTPRICE 是通达信特有的价格限制计算函数 }

{ 可移植的形式:用价格比较表达同一件事 }
前收:=REF(C,1);
涨幅:=(C-前收)/前收;
接近涨幅上限:=涨幅>0.09;

{ 两种写法在通达信里都可以编译 }
{ 但只有下面这种能直接搬到其它平台 }

替换之后要注意两点。一是比例档位:0.1 与 0.09 是取值设定,换成别的市场或品种时这两个数要跟着改。二是分母为零:前收 在新股首日、复牌当日可能取不到值,直接用会得到一个无效结果,需要用 DIV 一类写法处理,或者先判断分母不为零。

五、数据口径:复权与周期

数据口径造成的差异不会报错,但会让两边的信号位置错开。要理解这一点,需要知道两件事。

第一件是复权基准。前复权把历史价格按比例调整到与最新价可比,后复权把后续价格按比例放大到与上市首日可比,两种处理的缩放系数不同。等比缩放不改变均线之间的大小关系,但会改变价格数值,也会改变除权日附近的涨跌幅计算结果。所以”两条线谁在上方”这类判断在两边的结论一致,而”涨幅是否超过某个数值”这类判断可能不一致。

第二件是数据起点。EMA 是递推计算:第一个值取第一根 K 线的收盘价,之后按权重逐步递推。两边的历史数据起点不同时,靠前的那一段 EMA 数值会有差异,随着根数增加逐步收敛。这意味着同一段行情在两边的 DIF 数值水平可能不同,靠近数据起点的位置差异更明显。

数据起点不同还会影响 REF 与 LLV 这类需要往回取值的语句。窗口取 30 根时,数据起点之后的第 30 根之前都取不满窗口,这一段的判定与两边数据长度有关。核对信号时把最左边那一段单独排除,再看剩余部分的差异。

六、改写之后怎么验证

  1. 先对齐两条线:在新平台上把 DIF 与 DEA 画出来,与原平台同周期、同复权设置下对比,取三根间隔较大的 K 线记录数值。这一步不涉及信号,只比数值。
  2. 看差异集中在哪一段:集中在最左边,指向数据起点与递推初值;集中在除权日附近,指向复权处理;整体平移,指向复权基准或参数取值不同。
  3. 再对齐信号:把两边信号都输出成同一个形式,例如成立时输出 1、不成立时输出 0,逐根比对。差异根列的日期记下来。
  4. 核对设置项:条件选股器的周期、范围、复权设置与公式预期是否一致。这一步最容易被跳过,也最容易造成”公式没问题但清单对不上”。

七、结论与下一步

MACD背离选股公式的跨平台改写,工作量集中在四类差异上,其中函数可用性靠查函数列表解决,参数定义靠重新填参数表解决,绘图语句靠删除解决,只有数据口径这一类无法通过改写消除,只能靠对齐设置和核对数值来处理。

下一步的动作很具体:先在原平台上记录三根 K 线的 DIF 与 DEA 数值,连同当时的周期、复权方式、数据区间一起写下来;再在新平台上用同样的设置读出同样三根 K 线。数值对上了,再谈信号对齐;数值对不上,先把口径调平。

需要说清的边界有两条。背离本身是价格与指标在某个区间内的相对位置比较,窗口长度与比较对象一变,判定结果就变,它输出的是一份满足表达式的清单,不含任何参与与否的结论。另外,含 ZIG、PEAK、TROUGH 这类函数的背离写法,历史标记会随新数据改写,搬到哪里都一样,不适合作为可执行的信号使用。

本文讲的是函数可用性与数据口径,不涉及具体标的的判断。站内还有 跨平台对比与公式转换 的其他条目,量价形态与信号拆解 里讲背离这类相对位置条件怎么拆,指标回测与风险验证 里讲改写之后怎么在历史行情上核对,可对照查看。

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