PineScript新手求助:尝试记录24根绿K线至br数组失败
PineScript代码修正:收集指定K线中绿K的高低点差值
你的代码存在几个核心问题,导致无法正确收集数据:
- 数组未在每根K线重置,每次bar都会往
br里重复添加元素,数组会持续膨胀,无法只保留目标范围内的绿K数据 - 直接调用
array.get(br,1)未做长度判断,若目标K线内绿K数量不足2根,会触发索引越界报错 - 循环逻辑未排除当前未收盘的K线(
i=0),可能引入未确定的价格数据
以下是针对「收集最近24根已收盘K线中绿K的高低差」需求的修正代码:
n = input(24, title = "统计K线数量") // 简化绿K判断逻辑 isGreen = close > open // 每根K线重置数组,确保只统计当前bar往前n根已收盘K线的绿K数据 br = array.new_float(0) // 遍历最近n根已收盘K线(从1开始跳过当前未完成bar) for i = 1 to n if isGreen[i] array.push(br, high[i] - low[i]) // 仅当数组元素足够时绘制,避免报错 if array.size(br) >= 1 plot(array.get(br, 0), title="最近第1根绿K高低差") if array.size(br) >= 2 plot(array.get(br, 1), title="最近第2根绿K高低差", color=color.red)
关键修正说明:
- 每根K线重新初始化
br数组,确保数据不会累积膨胀 - 循环从
i=1开始,跳过当前未收盘的bar,避免引入不稳定数据 - 增加数组长度判断后再执行
array.get,彻底规避索引越界问题 - 简化变量命名,让逻辑更直观
如果你的需求是收集最近24根绿K(而非24根K线里的绿K),可以改用以下代码:
targetGreenCount = input(24, title="目标绿K数量") isGreen = close > open br = array.new_float(0) // 当出现绿K时记录高低差 if isGreen array.push(br, high - low) // 超过目标数量时,移除最早的绿K数据 if array.size(br) > targetGreenCount array.shift(br) // 绘制最新的绿K高低差 if array.size(br) > 0 plot(array.get(br, array.size(br)-1), title="最新绿K高低差")
内容的提问来源于stack exchange,提问作者gary
相关产品推荐
相关产品推荐

