Pine Script中如何存储计算值并作为input.float默认值使用
问题原因说明
- Pine Script 中所有
input.*类函数的默认值参数仅支持编译期常量,也就是脚本运行前就能确定的固定值。你计算得到的Calculation2_01是脚本运行到指定的endBar01时间点才会生成的动态值,自然无法作为input.float的默认值,这条路走不通。 - 直接赋值
Line1_01 = Calculation2_01时绘图起始位置不对,是因为Calculation2_01只有到达endBar01时间点后才会有有效值,之前K线上它的值都是na,对应Band1_01在endBar01之前也都是空值,无法显示。
解决方法
把计算得到的百分比值存入一个var修饰的变量中,这个变量一旦被赋值就会永久保留该值,之后从VWAP开始计算的时间点就用这个值计算偏移带即可,修改后的完整代码如下:
//@version=5 indicator("Anchored VWAP", overlay=true) src = input.source(hl2, "Source") startCalculationDate = input.time(timestamp("20 Jan 2021"), "Start Calculation", confirm=true) endBar01 = input.time(timestamp("20 Feb 2021"), "Get Midas Percentage", confirm=true) // 可选:新增手动调整偏移的输入项,优先级高于自动计算值 manualPercent = input.float(0, "手动调整偏移百分比", step=0.01) // 新增:var变量存储自动计算的百分比,初始为na var float calcPercent = na vwap_calc() => var srcVolArray = array.new_float(na) var volArray = array.new_float(na) if startCalculationDate <= time array.push(srcVolArray, src*volume) array.push(volArray, volume) else array.clear(srcVolArray), array.clear(volArray) array.sum(srcVolArray)/array.sum(volArray) anchoredVwap = vwap_calc() plot(anchoredVwap, "VWAP", linewidth=3) getPriceForTime(t)=> var float price = na if time[1] <= t and time >= t and na(price) price := high price getMidasForTime(t)=> var float price = na if time[1] <= t and time >= t and na(price) price := anchoredVwap price float midasPrice2_01 = getMidasForTime(endBar01) float entryPrice2_01 = getPriceForTime(endBar01) // 计算百分比,赋值给var变量永久保存 Calculation2_01 = math.round((entryPrice2_01 / midasPrice2_01) * 100, 2) - 100 if not na(Calculation2_01) and na(calcPercent) calcPercent := Calculation2_01 // 优先用手动输入值,其次用自动计算值,从VWAP起始日开始绘制 Band1_01 = na float usePercent = manualPercent != 0 ? manualPercent : calcPercent if time >= startCalculationDate and not na(usePercent) Band1_01 := anchoredVwap * ((100 + usePercent) / 100) trend = str.tostring(Calculation2_01) f_print(_txt) => var _lbl = label.new(endBar01, high, _txt, xloc.bar_time, yloc.abovebar, style = label.style_label_down, color = color.navy, textcolor = color.white, size = size.small) label.set_xy(_lbl, endBar01, high) label.set_text(_lbl, _txt + "%") f_print(trend) plot(Band1_01, "偏移带", color.white, linewidth=1)
内容的提问来源于stack exchange,提问作者Lenon Fernandes
相关产品推荐
相关产品推荐

