如何在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
相关产品推荐
相关产品推荐

