如何在Pine Script代码开头获取图表总bar数(不使用barstate.islast)
问题:能否在Pine Script代码开头获取当前时间框架的总K线数?
答案是不行,你没办法在代码运行的“开头”(即第一根K线加载时)直接拿到当前图表的总K线数。因为Pine Script是逐K线顺序运行的,总K线数只有当所有K线都加载完成后才能确定,也就是触发barstate.islast的时刻。
不过可以通过以下方式实现你的需求:用var关键字定义一个变量,在最后一根K线时存储总K线数,之后所有K线都能复用这个值,包括之前加载的K线。
示例代码
//@version=5 indicator("总K线数应用示例", overlay=true) n = 5 // 自定义的分割比例系数 var int totalBars = na // 仅在最后一根K线时记录总K线数(bar_index从0开始,总数量需+1) if barstate.islast totalBars := bar_index + 1 // 计算目标区间:总K线数除以n if not na(totalBars) targetInterval = totalBars / n // 在目标区间内应用自定义逻辑 if bar_index < targetInterval plot(close, color=color.red, linewidth=2)
逻辑说明
var关键字确保totalBars变量只会初始化一次,不会随每根K线刷新重置。- 当最后一根K线加载完成时,
totalBars被赋值为当前图表的总K线数。 - 后续所有K线(包括之前已加载的)都会使用这个已确定的
totalBars值,实现按总数量比例应用自定义函数的需求。 - 如果图表后续加载新的K线(如实时行情),
totalBars会自动更新,不会影响现有逻辑。
内容的提问来源于stack exchange,提问作者sey eeet
相关产品推荐
相关产品推荐

