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

PineScript高低点计算异常:length=3仅显示当前K线高低点问题

问题分析

你的代码逻辑存在两个潜在问题,导致无法看到预期的3周期高低点:

  1. 重置时机偏差:原代码中left >=4时才触发重置,意味着left的取值周期是1→2→3→4→0→1...,你关注的left=3状态仅在第3根K线出现,第4根就会重置,可能你没捕捉到这个状态下的数值变化;
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 04:30:42