Pine Script全局数组无法跨Bar存储值问题求助
Pine Script全局数组无法保留值的问题分析与修复
你的问题出在**run()函数内用var声明了局部变量**,Pine Script里的var关键字会让变量只在第一个bar时初始化一次,后续bars不会重新赋值,直接沿用初始值,导致数组的更新无法被后续调用读取。
错误细节拆解:
var track = array.get(vars, TRACK):第一次运行时从数组取出0,之后再也不会执行array.get,track永远固定为0var newTrack = track+1:同样只初始化一次,永远是0+1=1array.set(vars, TRACK, newTrack):每次都把数组对应位置设为1,但下一次调用run()时,track还是用的初始的0,不会去读取数组里的最新值
修复后的代码:
strategy("Array Issue Fixed", overlay=true, margin_long=100, margin_short=100) var vars = array.new_int(5) var TRACK = 0 init() => if (barstate.isfirst) array.set(vars, TRACK, 0) run() => track = array.get(vars, TRACK) // 去掉var,每次调用都读取数组最新值 label.new(bar_index, high, str.tostring(track)) newTrack = track+1 // 去掉var,每次计算最新值 array.set(vars, TRACK, newTrack) storedTrack = array.get(vars, TRACK) // 去掉var,读取刚更新的数组值 label.new(bar_index, low, str.tostring(storedTrack)) init() run()
修复逻辑说明:
去掉run()内变量的var声明后,每次bar执行run()时,都会重新从数组读取当前的track值,计算加1后的新值再存回数组,这样数组的状态就能在不同bars之间持久化更新,标签显示的数值也会随着bars递增。
内容的提问来源于stack exchange,提问作者Sean Barnard
相关产品推荐
相关产品推荐

