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

PineScript新手求助:尝试记录24根绿K线至br数组失败

PineScript代码修正:收集指定K线中绿K的高低点差值

你的代码存在几个核心问题,导致无法正确收集数据:

  1. 数组未在每根K线重置,每次bar都会往br里重复添加元素,数组会持续膨胀,无法只保留目标范围内的绿K数据
  2. 直接调用array.get(br,1)未做长度判断,若目标K线内绿K数量不足2根,会触发索引越界报错
  3. 循环逻辑未排除当前未收盘的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:55:19