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

EMA上下绘制更高高点/更低低点的Pine Script实现问题

解决Pine Script中基于EMA趋势跟踪动态最高/最低点的问题

问题分析

你当前的代码错误地将布尔序列aboveema/belowema传入ta.highest()/ta.lowest()的长度参数,而该参数要求是整数型的回溯周期数,无法识别布尔条件,因此无法实现“仅在EMA上方跟踪更高高点、EMA下方跟踪更低低点”的逻辑。

实现思路

要达成需求,我们需要:

  • 用var变量持久化存储当前趋势阶段的最高/最低值
  • 跟踪趋势状态的切换(价格从EMA下方进入上方,或从上方进入下方),切换时重置对应跟踪值
  • 在同一趋势状态内,持续更新最高/最低值,同时在突破新高/新低时重置跟踪起点

修正后的代码

//@version=5
indicator('Highest High, Lowest Low EMA', shorttitle='HHLL EMA', overlay=true)

// 输入参数
maPer = input(20, title="EMA周期")
topSrc = input(high, title="高点跟踪数据源")
botSrc = input(low, title="低点跟踪数据源")

// 计算EMA
ema = ta.ema(close, maPer)

// 判断当前趋势状态
aboveEma = close > ema
belowEma = close < ema

// 用var变量持久化跟踪当前趋势阶段的最高/最低值
var float currentTop = na
var float currentBot = na

// 趋势状态切换或突破新高/新低时重置并更新跟踪值
if aboveEma
    // 刚进入EMA上方趋势,或当前高点突破之前的跟踪高点时重置
    if not aboveEma[1] or topSrc > currentTop
        currentTop := topSrc
    // 否则持续更新为当前阶段的最高值
    else
        currentTop := math.max(currentTop, topSrc)
else
    // 离开EMA上方趋势,清空跟踪值
    currentTop := na

if belowEma
    // 刚进入EMA下方趋势,或当前低点跌破之前的跟踪低点时重置
    if not belowEma[1] or botSrc < currentBot
        currentBot := botSrc
    // 否则持续更新为当前阶段的最低值
    else
        currentBot := math.min(currentBot, botSrc)
else
    // 离开EMA下方趋势,清空跟踪值
    currentBot := na

// 绘图
plot(currentTop, 'Highest Band', color=#00ff00, linewidth=2)
plot(currentBot, 'Lowest Band', color=#ff0000, linewidth=2)
plot(ema, 'Moving Average', color=#00ffff, linewidth=1)

代码说明

  1. 趋势状态判断:用aboveEma和belowEma标记当前K线是否收在EMA上下方
  2. 持久化跟踪变量:var关键字确保currentTop和currentBot在K线周期内不会被自动重置,仅在指定条件下更新
  3. 更新逻辑:
    • 首次进入EMA上方趋势,或当前高点突破之前跟踪的高点时,重置currentTop为当前高点
    • 在EMA上方趋势持续期间,每次取当前高点与currentTop的最大值更新
    • 离开EMA上方趋势时,将currentTop设为na,停止绘图
    • 低点跟踪逻辑与高点完全对称
  4. 突破重置:满足“突破新高/新低时重新计数”的需求,每次突破时会从当前K线开始重新跟踪后续的高点/低点

内容的提问来源于stack exchange,提问作者Manish

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 16:14:53