Pine Script中:=运算符为何导致两段代码输出不同?
Pine Script中
longStop与longStop2输出差异的核心原因 先明确Pine Script里两种赋值运算符的本质:
=运算符:- v4版本:仅在脚本运行的第一个K线执行一次,完成变量的声明与初始化,后续K线不会重新计算右侧表达式。
- v5版本:每个K线都会执行,重新计算右侧表达式并赋值给变量(相当于v4的
:=,但用于声明新变量)。
:=运算符:- 无论v4/v5,都是对已存在的变量进行重新赋值,每个K线都会执行,覆盖变量当前K线的取值。
两段代码执行流程拆解
假设你用的是v4版本(这是出现此类差异的常见场景):
第一段代码(修改原变量longStop)
//@version=4 study("Scenario 1") // 仅第一个K线执行,给longStop赋值为当前K线的low[1](前一根K线的最低价) longStop = low[1] // 每个K线执行,将当前K线的longStop值赋值给longStopPrev // - 第一个K线:longStopPrev = low[1] // - 后续K线:longStopPrev = 上一根K线被:=修改后的longStop值 longStopPrev = longStop // 每个K线执行,将longStop重新赋值为当前K线的5周期最低价,覆盖原有值 longStop := ta.lowest(low, 5) // 绘图用的是修改后的longStop,每个K线都是最新的5周期最低价 plot(longStop, color=color.red)
第二段代码(赋值给新变量longStop2)
//@version=4 study("Scenario 2") // 仅第一个K线执行,给longStop赋值为low[1],后续K线不会更新这个值 longStop = low[1] // 每个K线执行,longStopPrev = 当前K线的longStop值(一直是第一个K线的low[1]) longStopPrev = longStop // 仅第一个K线执行,给longStop2赋值为当前K线的5周期最低价,后续K线不会重新计算 longStop2 = ta.lowest(low, 5) // 绘图用的longStop2,只有第一个K线是5周期最低价,后续K线一直保持这个初始值 plot(longStop2, color=color.blue)
差异的根源
- 第一段代码中,
longStop通过:=实现每个K线更新,所以绘图的是实时的5周期最低价。 - 第二段代码中,
longStop2用=赋值,在v4里仅初始化一次,后续K线不会重新计算ta.lowest(low,5),所以绘图的是固定的第一个K线的5周期最低价。
如果你的第二段代码改用longStop2 := ta.lowest(low,5)(v5支持直接用:=给新变量赋值,v4需先声明变量再用:=),两段代码的绘图结果会完全一致。若使用v5版本且未加var关键字,两段代码本应无差异,差异可能来自变量引用顺序的逻辑影响。
内容的提问来源于stack exchange,提问作者denizt
相关产品推荐
相关产品推荐

