ARTICLE · 1102190
电脑正常,手机却报错?先查跨周期引用|通达信指标公式排错教程
同一段公式在电脑上测试正常,复制到手机版却提示错误,很多人第一反应是改变量名、删颜色。
如果公式里出现#WEEK、#MONTH这类写法,先把跨周期引用单独查一遍,往往能更快缩小问题范围。
免责声明:本文仅做通达信公式技术与使用方法分享,不构成投资建议,不推荐具体个股或交易策略。不同客户端版本的公式支持存在差异,实际结果以当前客户端测试为准。
先搜一个符号
打开公式编辑器,直接搜索#。
看到下面这类写法,就说明公式正在引用其他周期的数据:
周收:=C#WEEK;
周DIF:=MACD.DIF#WEEK;
月DIF:=MACD.DIF#MONTH;
这类代码本身不代表公式有问题。
真正需要检查的是:当前公式运行周期、被引用周期和引用对象是否符合要求。

先查跨周期引用
跨周期引用不是简单换一个参数。
例如日线公式调用周线数据时,公式使用的已经不是单纯的日线数据。
如果还写成:
MACD.DIF#WEEK
那么又多了一层指标引用。
所以电脑端正常、手机端异常时,先把这些位置单独拿出来测试,比整段源码一起乱改更容易定位问题。
排查顺序
第一步:找到所有#
只要存在,先记录下来,不要一上来整段删除。
第二步:检查周期方向
通达信跨周期引用要求:
被引用的周期必须高于当前运行周期。
例如日线公式可以引用周线、月线数据。
反过来,如果在大周期公式里直接使用#去取得更小周期数据,就不符合这种跨周期转换方式。
第三步:把可疑引用单独测试
例如完整公式里有:
周收:=C#WEEK;
排查时可以先把复杂条件暂时拿掉,只测试这一项在当前客户端能不能通过。
如果最小测试已经报错,问题范围就明显缩小了。
如果能够通过,再继续检查其他代码。
第四步:分清两种引用
属于直接引用其他周期的基础行情数据。
MACD.DIF#WEEK
属于引用其他指标在周线周期下的输出。
两种写法不要混在一起排查。
而且跨周期指标引用还有一个容易忽略的限制:
不能给被引用的指标再带参数。
所以碰到带参数的指标引用时,也要单独检查。
第五步:不要直接删除#WEEK
这是最容易产生新问题的一步。
原公式如果本来要比较日线与周线状态,把#WEEK直接删除以后,原来的周线条件就变成当前周期条件。
公式可能不报错了,但计算含义已经改变。
所以正确顺序应该是:
先确定问题是不是出在跨周期引用,再决定保留、替换,还是为手机版单独做兼容处理。
还有一个重要边界
跨周期引用得到的大周期数据,在这个大周期尚未结束时仍可能变化。
例如本周还没有结束,周线的最高价、最低价和收盘价都还可能继续改变。
因此这类数据不能简单理解成“出现以后就固定不动”的历史信号。
做历史分析时,对涉及跨周期数据的信号尤其要注意这一点。
一句话
电脑正常、手机报错,不要先乱删变量。公式里只要有#,先把跨周期引用单独测试。
免责声明:本文仅用于通达信公式技术与使用方法交流,不构成投资建议,不推荐具体个股或交易策略。不同客户端及数据环境可能存在差异,请以实际测试结果为准并独立判断。