You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pine Script中如何存储计算值并作为input.float默认值使用

问题原因说明

  1. Pine Script 中所有input.*类函数的默认值参数仅支持编译期常量,也就是脚本运行前就能确定的固定值。你计算得到的Calculation2_01是脚本运行到指定的endBar01时间点才会生成的动态值,自然无法作为input.float的默认值,这条路走不通。
  2. 直接赋值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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:24:00