在通达信中,如果需要精确引用某个历史交易日的收盘价(例如寻找关键支撑压力位,或复盘某一重要日期),可以使用自定义指标来实现。通达信自带的 REF 函数只能按周期数取值,无法直接“202年1月1日”这样的日历日期。但通过对日期函数和取值函数的组合,可以轻松构建一个“指定日期收盘价”的指标。
下面是一种非常简洁的实现方式。首先打开通达信公式管理器,新建一个技术指标公式,选择“主图叠加”“副图”均可,然后粘贴以下代码:
tongdaxin
目标日期:=20200101 {此处填写你需要的日期,格式为八位整数}
目标收盘:VALUEWHEN(DATE=目标日期,CL);
公式运行后,在目标日期之后的每一个K线上,该指标都会输出一个固定数值,即目标日期的收盘价如果用在主图上,会看到一条水平线,标示出该日收盘价的位置;用在副图中,则会显示为一个恒定数值的曲线。
这段代码的核心有两点:
DATE函数:返回当前K线对应的日期,格式为YYYYMMDD的整数,例如年1月日对应20201。注意日期不能用引号,也不能写成年月日分隔形式,必须按八位整数直接书写。VALUEWHEN函数:VALUEWHEN(COND, X)是取最近一次满足条件COND时的X值在这里,当DATE=目标日期这个条件第一次(也只能是唯一一次)成立时VALUEWHEN会锁定当天的CLOSE,并且在之后的所有K线上反复返回该值。
还有一种替代方案,使用 REF 和 BARSLAST 进行偏移引用。公式可以写成:
tongdaxin
条件:=DATE=20200101;
周期差:=BARSLAST日期条件);
目标:REF(CLOSE,周期差);
这种写法也能在目标日期之后逐根K线回溯取值,并且数值正确。但需要注意:如果在目标日期之前就启动该指标,由于条件尚未成立,BARSLAST 会返回无效数据或错误值,导致指标产生干扰信号。因此使用这种方式时,最好加上条件,例如:
tongdaxin
日期条件:=DATE=00101;
周期差:=BARS(日期条件);
目标:IF(DATE>=00101,REF(CLOSE,差),DRAWNULL
相比之下,VALUEWHEN 的代码更简洁,在没有历史前置数据的情况下不会产生无效量,所以更推荐使用第一种写法。
在使用该指标时,需要注意:
- 确保目标日期在所选股票或指数上市之后,否则指标整个区间都没有输出。如果目标日期是周末或节假日,通达信K线上不存在该日期,条件永远无法满足,那么指标同样无值。
- 更换日期,只需要修改公式中的
目标日期后面的数字。如果经常需要变换日期,可以将这一句替换为参数输入形式,例如:
tongdaxin
目标日期:19800101;
目标收盘:VALUEWHENATE=目标日期CLOSE);
这样在指标参数设置面板中就可以动态调整日期,而无需每次重新编辑公式。
这个指标本身并不复杂,但非常实用。它可以:
- 作为判定动态支撑/压力线的工具,将历史特定日期的收盘价画在图上;
- 用于比较当前价格与某一历史时间段价格的位置关系;
- 与成本线、均线等指标结合,形成多周期共振判断。
DATE 函数返回的日期数据与行情K线周期无关。无论是日线、周线还是分钟,DATE 都能识别K线所对应的自然日期。不过如果您在周线或月线上使用,目标日期必须与K线起始日期严格匹配。例如周线中,当周的起始日期就是该周的周一交易日,若您设置的日期不是该周的第一个交易日,那么条件不会命中,指标也就不会输出。因此,该指标最常用于日线周期,使用起来最为直接。







