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

17周期内当前阳线高点非前三高的Pine Script代码无效问题

问题排查与解决

原代码的核心错误

原代码逻辑完全偏离需求:

  • ta.highest(high, 17) 计算的是17周期内所有K线(含阴线)的最高值,并非仅阳线的高点集合
  • [3] 是引用3根K线之前的周期最高值,不是取17周期内阳线高点里的"前三高"第三值,两者逻辑完全不相关

正确实现思路

要满足需求需分三步:

  1. 筛选最近17周期内所有阳线的高点
  2. 从这些阳线高点中提取前三高的第三值
  3. 判断当前阳线的高点是否低于该第三值

修正后的代码

//@version=5
indicator("Not Top 3 Bullish Highs", overlay=true)

BullishCandle = close > open

// 初始化数组,存储最近17周期内的阳线高点
var array<float> bullishHighs = array.new_float()

// 每次K线结束时更新数组:收集17周期内的阳线高点
if barstate.islast
    array.clear(bullishHighs)
    // 遍历最近17根K线,筛选阳线高点加入数组
    for i = 0 to 16
        if close[i] > open[i]
            array.push(bullishHighs, high[i])

// 对阳线高点数组降序排序(从最高到最低)
array.sort(bullishHighs, order.descending)

// 最终判断条件:当前是阳线 + 17周期内至少有3根阳线 + 当前高点低于第三高
NotTopThreeHighs = BullishCandle and array.size(bullishHighs) >= 3 and high < array.get(bullishHighs, 2)

// 可视化标记满足条件的K线(可选)
plotshape(NotTopThreeHighs, style=shape.labelup, location=location.belowbar, color=color.green, text="Not Top3")

代码说明

  • 用数组bullishHighs单独存储阳线高点,彻底排除阴线数据干扰
  • 循环遍历最近17根K线,精准筛选符合条件的阳线高点
  • 数组降序排序后,array.get(bullishHighs, 2)对应第三高值(数组索引从0开始,0=最高、1=第二高、2=第三高)
  • 增加array.size(bullishHighs) >=3判断,避免17周期内阳线不足3根时出现索引错误

验证建议

可以手动在图表上统计最近17周期的阳线高点,对比代码标记结果,确认逻辑准确性;若17周期内阳线数量少于3根,条件会自动不触发,符合需求逻辑。

内容的提问来源于stack exchange,提问作者Sander

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:33:01