PineScript中历史运算符与Occurrence的差异及代码效果确认
关于Pine Script中历史运算符与valuewhen参数的差异分析
这两段代码的最终效果完全一致,本质是对同一逻辑的不同写法,不存在功能差异。
核心语法与逻辑拆解
先明确两个关键语法的作用:
- 历史运算符
[n]:用于引用当前K线之前第n根K线的变量/表达式结果。比如ta.crossover(...)返回当前K线是否发生交叉,[1]就是取前一根K线的交叉状态。 ta.valuewhen(condition, source, occurrence):返回满足condition条件时的source值,occurrence指定取第几次符合条件的记录:0代表最近一次,1代表上一次,以此类推。
两段代码的等价性验证
第一段代码:
ta.valuewhen(ta.crossover(ema1 , ema2)[1], close, 0)- 触发条件是前一根K线发生了ema1上穿ema2的交叉,当条件成立时,取当前K线的收盘价(
occurrence=0对应最近一次满足条件的时刻,也就是当前K线)。
- 触发条件是前一根K线发生了ema1上穿ema2的交叉,当条件成立时,取当前K线的收盘价(
第二段代码:
ta.valuewhen(ta.crossover(ema1 , ema2)[0], close, 1)- 触发条件是当前K线发生了ema1上穿ema2的交叉,
occurrence=1指定取上一次满足交叉条件时的收盘价——而“上一次交叉”恰好就是前一根K线发生交叉时的收盘价,和第一段的结果完全匹配。
- 触发条件是当前K线发生了ema1上穿ema2的交叉,
在Pine Script的回测或实时运行中,这两行代码输出的序列值会完全重合,因为它们最终都是在获取“前一根K线出现ema1上穿ema2交叉时的收盘价”。
内容的提问来源于stack exchange,提问作者PPP
相关产品推荐
相关产品推荐

