Pine Script如何将指定起始K线收盘价赋值给全局变量供全K线调用
问题原因
你之前的代码问题出在var关键字的初始化逻辑:var修饰的变量只会在脚本加载时的第一根K线完成赋值,你最开始写的var startValue = close[0]是把脚本加载后第一根K线的收盘价存进去了,根本没用到你指定日期的K线收盘价,所以取值错误。
修正方案
不需要复杂的数组逻辑,只要在检测到指定起始K线的时候给var声明的startValue赋值即可,修改后的完整代码如下:
// inputs show_label = input(true, "Show labels") show1 = input(true, "targetVV", inline="targetVV") src1 = input(hlc3, "", type=input.source, inline="targetVV") color1 = input(#f6c309, "", inline="targetVV") date1 = input(title="Date", type=input.time, defval=timestamp("2020-12-11T00:00+00:00"), inline="targetVV") // --------------------------------------------------------------------------- // 声明存储起始价的变量,初始值设为na var float startValue = na // function to calculate targetVV f_avwap(src, date) => start = time >= date and time[1] < date // 检测到起始K线时,给startValue赋值为当前K线收盘价,之后不会再变更 if start startValue := close sumSrc = src * volume sumVol = volume sumSrc := start ? sumSrc : sumSrc + sumSrc[1] sumVol := start ? sumVol : sumVol + sumVol[1] // 未到起始日期时返回na,不绘制 not na(startValue) ? sumSrc / sumVol + startValue : na // --------------------------------------------------------------------------- // plot targetVV plot(show1 ? f_avwap(src1, date1) : na, color=color1, title="targetVV") // --------------------------------------------------------------------------- // plot labels plotshape(show_label and show1 ? time >= date1 and time[1] < date1 : na, text='targetVV', textcolor=color.white, color=color.new(color1, 35), location=location.belowbar, style=shape.labelup, size=size.small)
核心修改点
- 把原来的
var startValue = close[0]改成var float startValue = na,只声明变量不提前赋值 - 在f_avwap函数中检测到起始K线(
start条件成立)时,才给startValue赋值为当前K线的close,因为是var修饰的变量,赋值后后续所有K线都会沿用这个值不会重置 - 增加了非起始日期后的返回na逻辑,避免前面的K线出现错误计算值
内容的提问来源于stack exchange,提问作者user0856
相关产品推荐
相关产品推荐

