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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:15:05