Pine Script v4中两种change函数写法返回结果不同的原因是什么
highChange = change(high) lowChange = change(low) // 第一种写法:直接在plot内多次调用change函数 plot(((change(high) > change(low) and change(high) > 0 ? change(high) : 0)), linewidth = 1, color = color.red) // 第二种写法:提前缓存change结果到变量 plot(((highChange > lowChange and highChange > 0 ? highChange : 0)), linewidth = 1, color = color.blue)
差异原因说明
两种写法的本质区别是change(high)、change(low)的计算次数和取值时机不同:
- 第二种写法提前把两个
change的计算结果缓存到了highChange、lowChange变量中,每个K线周期内仅计算一次,取值固定。 - 第一种写法在同一个三元表达式里共调用了3次
change(high)、1次change(low),每次调用都会重新计算差值。
如果是在未闭合的实时K线场景下,当前K线的high、low价格会随实盘行情实时变动,每次调用change函数时拿到的当前价可能已经发生变化,导致判断逻辑和最终输出结果和提前缓存固定值的第二种写法不一致。如果是已经收盘的历史K线,所有价格都是固定值,两种写法的输出会完全一致,你可以切换到历史K线区域验证这个特性。
开发建议
编写Pine Script脚本时,所有需要多次引用的计算结果都建议提前赋值给变量缓存,既可以避免实盘场景下的取值偏差,也能减少重复计算,提升脚本运行效率。
内容的提问来源于stack exchange,提问作者StaRen
相关产品推荐
相关产品推荐

