PineScript高低点计算异常:length=3仅显示当前K线高低点问题
问题分析
你的代码逻辑存在两个潜在问题,导致无法看到预期的3周期高低点:
- 重置时机偏差:原代码中
left >=4时才触发重置,意味着left的取值周期是1→2→3→4→0→1...,你关注的left=3状态仅在第3根K线出现,第4根就会重置,可能你没捕捉到这个状态下的数值变化; ta.highest逻辑误解:ta.highest(high, length)是取**当前K线往前数length根(包含当前)**的最高值,如果你希望的是从left重置后开始的连续3根K线的最高(而非回溯历史K线),原代码的逻辑就不符合需求。
解决方案
根据你的实际需求,分两种场景给出修正代码:
场景1:回溯最近3根K线的最高(修正原逻辑)
如果你的需求是当left计数到3时,取当前及前2根K线的最高值,只需调整重置条件为left >=3,确保计数到3后立即重置:
//@version=5 indicator("My script", overlay = true) varip int left = 0 varip float highestHigh = na varip float lowestLow = na left := left + 1 highestHigh := ta.highest(high, left) lowestLow := ta.lowest (low, left) plot(highestHigh, "Highest High", color=color.orange) // 计数到3后重置left if (left >= 3) left := 0
场景2:从重置点开始的连续3根K线最高
如果你的需求是每次重置后,收集接下来3根K线的高低值并计算区间最高(而非回溯历史K线),可以用变量累计的方式实现:
//@version=5 indicator("My script", overlay = true) varip int left = 0 varip float highestHigh = na varip float lowestLow = na if left == 0 // 重置后初始化计数和高低值 left := 1 highestHigh := high lowestLow := low else // 累计计数并更新区间高低 left := left + 1 highestHigh := math.max(highestHigh, high) lowestLow := math.min(lowestLow, low) // 计数到3后重置 if left >= 3 left := 0 plot(highestHigh, "Highest High", color=color.orange)
验证方法
运行修正后的代码后,你可以通过以下方式确认效果:
- 添加
plotchar(left, "Left Count", "", location.top)来显示当前left的数值,直观确认计数逻辑; - 观察
left=3的K线,highestHigh会显示对应区间的最高值。
内容的提问来源于stack exchange,提问作者DeshBhakt
相关产品推荐
相关产品推荐

