如何在最近5根非当前K线中找到最低红K的bar_index?
解决Pine Script中寻找最近5根K线(不含当前)最低红K的问题
原代码存在的问题
lowest(5)[1]取的是过去5根K线的整体最低价,但该价格对应的K线可能不是红K(收盘价<开盘价),导致循环无法匹配到符合条件的K线,返回na- 循环参数
no未固定为5,若传入值不符,会超出目标范围或遍历不完整 - 若有多根红K的最低价等于
minValue,循环会保留最后遍历到的那一根,无法精准控制要选取的目标K线
修正后的代码
// 寻找最近5根K线(不含当前)中最低价红K的bar偏移量 findLowestRedBar() => int targetBar = na float lowestRedLow = na // 遍历前1到前5根K线 for i = 1 to 5 isRed = close[i] < open[i] if isRed // 初始化或更新最低红K的价格与对应偏移量 if na(lowestRedLow) or low[i] < lowestRedLow lowestRedLow := low[i] targetBar := i targetBar // 调用函数获取结果 redBarOffset = findLowestRedBar() // 示例:在目标K线位置标注偏移量 if not na(redBarOffset) label.new(bar_index - redBarOffset, low[redBarOffset], str.tostring(redBarOffset), color=color.red, textcolor=color.white)
修正说明
- 先筛选红K再找最低价:遍历过程中先判断K线是否为红K,再记录其中的最低价,避免原代码中整体最低价对应非红K的情况
- 固定遍历范围:直接遍历1到5,确保只检查最近5根不含当前的K线
- 精准控制目标K线:若需选取最早出现的同价红K,可将遍历顺序改为
for i = 5 to 1,并将判断条件改为low[i] <= lowestRedLow
内容的提问来源于stack exchange,提问作者CandyG80
相关产品推荐
相关产品推荐

