通达信REF函数怎么用?历史引用、同根对齐与比较错位排查

发布日期:2026年10月8日。写了REF(CLOSE,1),不代表同一行中的所有价格都变成上一根。如果另一边仍写OPEN,比较的就是“上一根收盘与当前开盘”。本篇解决历史引用放在哪一层、同一条件的字段是否属于同一根的问题,避免公式能运行但比较对象已经错位。
函数语义按通达信官方红宝书《通达信公式-全部函数.docx》REF/REFX条目核对,日期2026年10月8日。表格和代码由本站原创;本次核对的是固定数据计算模型,未做具体客户端、手机版或跨周期调用实测。
一、REF移的是一个表达式的历史值
基本写法REF(X,A)引用A个计算周期前的X值。本文只用正整数常量1和2,先在同一周期内讨论,避免把动态参数、缺失历史和跨周期数据混在一个例子里。
PREVC:=REF(CLOSE,1);
PREVO:=REF(OPEN,1);
PREVBULL:PREVC>PREVO;
这样分别移动收盘与开盘,比较的是上一根内部的两个字段。若只将PREVC与当前OPEN比较,则表达式变成另一种条件,不能继续解释成“上一根收阳”。
二、用原创开收盘表找出错位
下面四根K线为合成数据,不对应任何股票:
| 根序号 | OPEN | CLOSE | 当前CLOSE>OPEN |
|---|---|---|---|
| 1 | 10 | 11 | 真 |
| 2 | 13 | 12 | 假 |
| 3 | 9 | 10 | 真 |
| 4 | 12 | 13 | 真 |
在第3根,上一根CLOSE为12、上一根OPEN为13,所以REF(CLOSE,1)>REF(OPEN,1)为假。但当前OPEN为9,REF(CLOSE,1)>OPEN为真。看见同样的REF和大于号并不能认定这两行表达同一问题。
在第2根也可看到相反方向的错位:上一根收盘11高于上一根开盘10,但不高于当前开盘13。建议将两根的字段写成表,再解释条件名称,避免用名称掩盖实际代码。
三、引用整条条件和逐项引用有什么关系
A:=CLOSE>OPEN;
PREV1:REF(A,1);
PREV2:REF(CLOSE,1)>REF(OPEN,1);
在这组字段有效、使用同一固定偏移、同一周期的简单样本中,PREV1和PREV2都询问上一根是否收盘高于开盘。因此第2、3、4根依次应为真、假、真。第1根缺少所需上一根数据,本篇不擅自规定软件应显示0、空值或哪种特殊值。
这种对齐关系不能不加条件地推广到任意表达式。不同偏移、跨周期调用、动态参数、初始化或特殊数据更新,可能引入额外限制。先在可核对区间对照,再讨论替换。
四、上一根、前两根和当前根要分别标清
比较当前收盘与上一根收盘可写为:
NOWVSPREV:CLOSE>REF(CLOSE,1);
比较上一根与前两根,应把两边都移到正确位置:
PREVVSOLDER:REF(CLOSE,1)>REF(CLOSE,2);
它与“当前比前两根高”不同。给变量起名时注明参照位置,例如NOW、PREV、OLDER,有助于排查;中文名字写得像昨天,也不会自动改变代码的周期位置。
五、REF的单位不是固定自然日
同一周期内的A=1表示上一根计算周期;在日线通常对应上一根可用日K线,在5分钟图是上一根5分钟K线。周末、休市或证券停牌时,不要把一根之前直接翻译成日历上的昨天。历史数据完整性、复权方式和实际周期都应写进记录。
比较窗口与历史最大值的组合已有专门文章,可看HHV窗口与排除当前值。本篇重点是字段对齐,不用改变窗口长度替代引用位置检查。
六、怎样排查“历史条件和图上不一致”
- 先分别输出当前CLOSE、OPEN和引用后的字段,暂时不叠加交易信号或图标。
- 固定至少三根都有有效字段的样本,逐根记录实际引用来源。
- 检查某个字段是否忘了REF,或者两边用了不同A值。
- 核对条件是在当前根判断,还是引用了上一根已经算好的判断结果。
- 将缺失历史、动态参数和跨周期调用另列问题,不用模型补出来的值冒充软件输出。
- 完整公式若还有特殊引用或改历史显示的语句,继续做未来函数与时间可用性检查。
官方另列REFX为引用后续周期的未来函数,不能为了让历史图“对齐”而拿它代替本篇正周期REF。即使某一行只读过去,也不能由此保证整条指标不存在其他未来信息依赖。
来源与限制
原始资料入口:通达信用户红宝书;基础结构见选股公式入门,返回教程中心。本文为公式语义学习,不提供个股建议、兼容保证或收益承诺。




