如何获取图表起始处的K线总数?Pine Script报错求助
解决Pine Script中K线总数获取与线条起始绘制问题
错误原因分析
input.int的defval参数要求是常量(const int),而你定义的total_candles是series int类型(随每根K线动态变化的序列值),类型不匹配导致第一个报错。- 第二个报错是因为
for循环的结束值必须是常量,如果你用了series类型的变量作为结束条件,Pine Script无法在编译阶段确定其值,因此报错。
解决方案
1. 正确获取总K线数并避免input类型冲突
不能将动态计算的total_candles直接作为input.int的默认值,可通过以下方式绕开:
//@version=5 indicator("总K线数示例", overlay=true) // 定义input,默认值设为0(常量),用户可手动修改 compteur = input.int(defval = 0, title='Nombre de bougies') // 仅在最后一根K线时计算总K线数,此时变量为单值而非序列 var int total_candles = na if barstate.islast total_candles := bar_index + 1 // 逻辑中优先使用用户输入,若输入为0则自动用总K线数 used_count = compteur == 0 ? total_candles : compteur
2. 让线条从图表最起始处绘制
如果需要绘制从第一根K线开始的线条,可直接通过bar_index == 0标记起始点,或在最后一根K线时绘制贯穿起始点的线条:
//@version=5 indicator("从起始点绘制线条", overlay=true) // 保存第一根K线的收盘价作为起始价格 var float start_price = na if bar_index == 0 start_price := close // 从第一根K线到当前每根K线绘制线条(实时更新) line.new(0, start_price, bar_index, close, color=color.blue, width=2) // 或者在最后一根K线时,绘制从起始点到指定数量K线的线条 var int total_candles = na if barstate.islast total_candles := bar_index + 1 // 绘制从第一根到最后一根K线的水平线示例 line.new(0, start_price, total_candles - 1, start_price, color=color.red, width=1, style=line.style_dashed)
3. 修复for循环错误
若需基于总K线数执行循环,必须在barstate.islast中执行,此时total_candles已确定为单值:
if barstate.islast // 循环遍历所有K线 for i = 0 to total_candles - 1 // 示例:在每根K线底部添加索引标签 label.new(i, low[i] - ta.atr(10), str.tostring(i), color=color.gray, textcolor=color.white, size=size.small)
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

