17周期内当前阳线高点非前三高的Pine Script代码无效问题
问题排查与解决
原代码的核心错误
原代码逻辑完全偏离需求:
ta.highest(high, 17)计算的是17周期内所有K线(含阴线)的最高值,并非仅阳线的高点集合[3]是引用3根K线之前的周期最高值,不是取17周期内阳线高点里的"前三高"第三值,两者逻辑完全不相关
正确实现思路
要满足需求需分三步:
- 筛选最近17周期内所有阳线的高点
- 从这些阳线高点中提取前三高的第三值
- 判断当前阳线的高点是否低于该第三值
修正后的代码
//@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
相关产品推荐
相关产品推荐

