如何查找排除当前K线的近5根K线内最高价最高的绿K线?
需求目标
定位最近5根K线中满足以下规则的目标K线:
- 为阳线(收盘价 > 开盘价,即你定义的绿K线)
- 该K线的最高价是统计区间内的最高值
- 统计范围强制排除当前未收盘的K线,避免当前K线数据波动干扰结果
原代码错误点
- 区间统计未排除当前K线:
highest(high, 5)默认包含当前K线计算,不符合剔除当前K线的要求 - 范围判断逻辑完全失效:
bar_index > 0 and bar_index < 6是限制仅在图表最开头的前6根K线范围内查找,和“最近5根已完结K线”的需求完全相悖 - 存在语法错误:最后一行
low_of_that_bar = low[numb])末尾多了一个多余的右括号,会直接触发编译报错 - 查找范围无边界:原生
barssince(find)会从当前位置往全量历史K线匹配符合条件的结果,不会限制在最近5根的区间内,经常会匹配到远超5根范围的历史K线,导致结果错误
修正后实现代码(适配Pine Script v5)
// 配置回看长度 lookback_period = 5 // 偏移1位跳过当前K线,统计最近5根已收盘K线的最高价 range_max_high = ta.highest(high[1], lookback_period) // 匹配条件:在回看区间内,最高价等于区间最高值、收阳的K线 target_condition = high[1] == range_max_high and close[1] > open[1] // 限制最大查找范围为回看区间长度,避免匹配到过久的历史K线 bars_since_target = ta.barssince(target_condition, lookback_period) // 读取目标K线的高低价,增加空值判断,无匹配结果时返回空值 target_high = not na(bars_since_target) ? high[bars_since_target + 1] : na target_low = not na(bars_since_target) ? low[bars_since_target + 1] : na
逻辑说明:
- 所有涉及历史K线取值的位置统一加
[1]偏移,强制跳过当前未走完的K线,从已收盘的上一根K线开始往历史统计- 给
ta.barssince传入第二个长度参数,限制最多仅往历史查找指定回看长度的K线,不会出现匹配到区间外K线的问题- 增加空值判断:如果最近5根已收盘K线内没有符合条件的目标K线,对应高低价返回空值,不会返回错误的历史数据
- 修复了原代码的语法错误
内容的提问来源于stack exchange,提问作者CandyG80
相关产品推荐
相关产品推荐

