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

如何在bar_index==0时获取更新后的last_bar_index?Pine Script技术问询

问题:新K线生成时last_bar_index未在bar_index == 0逻辑中更新

需求与问题

  • 需求:在第一根K线(bar_index == 0)时获取图表上可用的最后一根K线的bar_index
  • 问题:当新K线生成时,last_bar_index并未在bar_index == 0的判断逻辑中更新(测试环境:BTCUSDT 1分钟图表)

测试代码

var arr_test_1 = array.new_float()
var arr_test_2 = array.new_float()

if array.size(arr_test_1) > 2
    array.shift(arr_test_1)
array.push(arr_test_1, last_bar_index )


// 新K线生成时此部分不会更新
if bar_index == 0 
    if array.size(arr_test_2) > 2
        array.shift(arr_test_2)    
    array.push(arr_test_2, last_bar_index )


var label lbl_4 = na
label.delete(lbl_4)
lbl_4 := label.new (barstate.islast ? bar_index  : na, 
     y=close, 
     xloc=xloc.bar_index, 
     yloc=yloc.belowbar, 
     style = label.style_label_up,
     size = size.large,
     color = color.new(color.aqua, 60),
     textcolor = color.new(color.black, 0),
     textalign = text.align_left,
     text = "arr_test_1 " + str.tostring( arr_test_1  )  + "\narr_test_2 " +  str.tostring(  arr_test_2 )  + "\nlast_bar_index " +  str.tostring(  last_bar_index )
     )  

测试截图

测试截图

原因分析

bar_index == 0的判断仅会在脚本首次加载时的第一根K线触发一次,后续新K线生成时,当前K线的bar_index不会为0,因此这段逻辑不会再次执行,导致arr_test_2中存储的last_bar_index始终是脚本首次加载时的初始值。

解决方案

根据实际需求分两种情况处理:

情况1:需要在每一根新K线生成时记录最新的last_bar_index

将bar_index == 0替换为barstate.isnew,该条件会在每一根新K线开始时触发:

var arr_test_1 = array.new_float()
var arr_test_2 = array.new_float()

if array.size(arr_test_1) > 2
    array.shift(arr_test_1)
array.push(arr_test_1, last_bar_index )

// 新K线生成时记录last_bar_index
if barstate.isnew 
    if array.size(arr_test_2) > 2
        array.shift(arr_test_2)    
    array.push(arr_test_2, last_bar_index )

var label lbl_4 = na
label.delete(lbl_4)
lbl_4 := label.new (barstate.islast ? bar_index  : na, 
     y=close, 
     xloc=xloc.bar_index, 
     yloc=yloc.belowbar, 
     style = label.style_label_up,
     size = size.large,
     color = color.new(color.aqua, 60),
     textcolor = color.new(color.black, 0),
     textalign = text.align_left,
     text = "arr_test_1 " + str.tostring( arr_test_1  )  + "\narr_test_2 " +  str.tostring(  arr_test_2 )  + "\nlast_bar_index " +  str.tostring(  last_bar_index )
     )  

情况2:仅需在脚本加载时的第一根K线记录,但希望标签显示最新last_bar_index

如果需求确实是只执行一次bar_index == 0的逻辑,那么arr_test_2中的值不会更新是正常的,但标签里的last_bar_index字段本身会实时显示当前最新值,无需额外修改代码。

内容的提问来源于stack exchange,提问作者Ady

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 16:17:14