通达信VALUEWHEN怎么用?条件取值、持续更新与首次触发排错

VALUEWHEN条件取值与保持流程的原创示意,非软件截图
原创条件跟随示意,非通达信客户端截图。

发布日期:2026年10月13日。用VALUEWHEN记录条件成立时的数值,为什么连续几根都在变?因为它不是“只记第一次”的开关:条件每次成立都会取当前值;不成立时才沿用上次结果。先分开条件序列、输入序列和返回序列,才能判断是否真的异常。

适用环境:支持VALUEWHEN的通达信公式编辑环境。依据官方用户红宝书,本文代码、数表为原创学习示例,未做具体客户端实测。先另存测试副本,不覆盖已有指标,不保证手机或所有版本兼容,不作个股买卖建议。

一、条件跟随保存的是哪一个值

官方用法为VALUEWHEN(COND,X):COND成立时取X当前值,否则取本函数上一周期的值。这里“上一个值”指已经算出的返回结果,不是每次都取上一根X,更不是寻找X的历史最大值。

RAW:=CLOSE>OPEN;
KEEP:VALUEWHEN(RAW,CLOSE);

这段原创示例只记录满足RAW时的CLOSE,不代表任何交易信号。CLOSE在未完成周期里还可能变化,RAW也可能由真变假;记录一个条件价格不等于永久固定全部历史结果。

二、逐根表说明为什么连续成立会更新

下面是假设数据,不对应真实股票。为了不猜测首次触发前的初始行为,第一根就设为条件成立,让后续每一步都有明确的已知上期结果。

周期 COND X 返回结果
D1 真 10 10
D2 假 12 10
D3 真 15 15
D4 真 14 14
D5 假 9 14

D3和D4连续为真,结果从15变成14,符合定义。D5为假时保持14,而不是变成上一根以外的任意历史价格。若希望只保留某个事件的起始值,必须先重新定义触发条件,不能把“状态一直为真”当作“状态首次出现”。

三、首次触发前不能擅自补成零

本次核对的红宝书条目没有说明第一段COND一直不成立时的具体初始化数值。因此不能承诺它一定为0、空值或第一根X,也不能拿这段未确认的数值参与价差或除法。应先在本机把触发前、首次成立和再次成立三段分别截取核对。

扩大加载范围后可能出现此前屏幕外的一次触发,改变可见区域的保持结果。这时先检查计算起点及此前事件,不要只比较屏幕上看见的几根K线。源数据、复权口径和公式参数也要一起记录。

四、与REF和BARSLAST不要混用概念

REF(X,1)按固定距离引用上一周期的X;VALUEWHEN按COND更新并保留值;BARSLAST返回距离上次条件成立的周期数。三者的结果单位和含义不同。把固定一根前的数值当成“最近事件数值”,遇到长时间没有触发的区间就会暴露差异。

排错时先分别输出RAW、CLOSE和KEEP,逐根记录真假与价格。确认单一函数的结果后再组合条件,不用复杂嵌套掩盖初始化、数据缺失或事件定义问题。

五、盘中变化与历史回看怎样核对

  1. 记录品种、周期、复权、加载范围和采样时间。
  2. 确认COND依赖的是已结束周期还是正在变化的当前周期。
  3. 保留首次成立前后及连续成立段的输入、条件和输出。
  4. 对照收盘后结果,区分当前周期正常更新与历史数据修订。
  5. 检查依赖公式是否含即时行情、跨周期引用或未来数据,不能仅凭VALUEWHEN名称给整套公式作保证。

一张盘后静态图无法证明盘中从未出现过其他结果,也不能用现在重算的序列代替当时没有保存的快照。本文只核对函数定义与模型,不承诺“信号不漂移”或任何胜率。

来源与相关教程

原始依据为通达信用户红宝书所列《通达信公式-全部函数.docx》的VALUEWHEN条目;首次触发前处理以实际环境验证为准。入口见通达信教程中心,延伸阅读REF历史引用与对齐、BARSLAST事件距离和信号漂移与未来数据检查。