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

双时间框架Heikin Ashi SuperTrend指标优化:趋势同步显示需求

修改双时间框架Heikin Ashi SuperTrend指标的显示条件

需求说明

我正在开发一款双时间框架的Heikin Ashi SuperTrend指标,当前在2分钟周期图表上使用5分钟作为更高时间框架输入,基础功能运行正常。现需添加条件:仅当5分钟周期处于上升趋势时,才显示2分钟周期的上升趋势线;仅当5分钟周期处于下跌趋势时,才显示2分钟周期的下跌趋势线。

解决方案

核心思路是利用更高时间框架的趋势状态TrendHtf过滤当前时间框架的趋势线显示:

  • 当TrendHtf == 1(更高时间框架上升)时,仅显示当前时间框架的上升趋势线
  • 当TrendHtf == -1(更高时间框架下跌)时,仅显示当前时间框架的下跌趋势线

修改后的完整代码

//@version=5
indicator('Supertrend MTF Heikin Ashi', overlay=true)
HTF= input.timeframe('5', title='Time Frame')
Mult = input.float(defval=1.2, title='ATR Factor', minval=0.5, maxval=100,step=0.1)
Period = input.int(defval=5, title='ATR Period', minval=1, maxval=100)

// 本地时间框架Heikin Ashi数据
h = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, high)
l = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, low)
c = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close)
Atr = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, ta.atr(Period))

// 本地时间框架SuperTrend计算
Up = (h + l) / 2 - Mult * Atr
Dn = (h + l) / 2 + Mult * Atr
float TUp = na
float TDown = na
Trend = 0
TUp := c[1] > TUp[1] ? math.max(Up, TUp[1]) : Up
TDown := c[1] < TDown[1] ? math.min(Dn, TDown[1]) : Dn
Trend := c > TDown[1] ? 1 : c < TUp[1] ? -1 : nz(Trend[1], 1)
Trailingsl = Trend == 1 ? TUp : TDown

// 更高时间框架Heikin Ashi SuperTrend计算
highhtf = request.security(ticker.heikinashi(syminfo.tickerid), HTF, high[1], lookahead=barmerge.lookahead_on)
lowhtf = request.security(ticker.heikinashi(syminfo.tickerid), HTF, low[1], lookahead=barmerge.lookahead_on)
closehtf = request.security(ticker.heikinashi(syminfo.tickerid), HTF, close[1], lookahead=barmerge.lookahead_on)
HTfatr = request.security(ticker.heikinashi(syminfo.tickerid), HTF, ta.atr(Period)[1], lookahead=barmerge.lookahead_on)

Uphtf = (highhtf + lowhtf) / 2 - Mult * HTfatr
Dnhtf = (highhtf + lowhtf) / 2 + Mult * HTfatr
float TUphtf = na
float TDownhtf = na
TrendHtf = 0
TUphtf := closehtf[1] > TUphtf[1] ? math.max(Uphtf, TUphtf[1]) : Uphtf
TDownhtf := closehtf[1] < TDownhtf[1] ? math.min(Dnhtf, TDownhtf[1]) : Dnhtf
TrendHtf := closehtf > TDownhtf[1] ? 1 : closehtf < TUphtf[1] ? -1 : nz(TrendHtf[1], 1)
TrailingslHtf = TrendHtf == 1 ? TUphtf : TDownhtf
linecolorHtf = TrendHtf == 1 and nz(TrendHtf[1]) == 1 ? color.lime : TrendHtf == -1 and nz(TrendHtf[1]) == -1 ? color.red : na

// 关键修改:根据更高时间框架趋势过滤本地时间框架趋势线显示
linecolor = na
if TrendHtf == 1 and Trend == 1 and nz(Trend[1]) == 1
    linecolor = color.lime
if TrendHtf == -1 and Trend == -1 and nz(Trend[1]) == -1
    linecolor = color.red

// 绘制趋势线
plot(Trailingsl, color=linecolor, linewidth=2, title='SuperTrend')
plot(TrailingslHtf, color=linecolorHtf, linewidth=3, title='Supertrend HTF')

关键修改说明

  1. 移除了原代码中Uphtf和Dnhtf里多余的math.abs(highhtf + lowhtf本身为正数,绝对值计算无意义)
  2. 重构了linecolor的赋值逻辑:
    • 仅当更高时间框架与本地时间框架趋势方向一致时,才设置对应颜色
    • 趋势方向不一致时,linecolor为na,本地时间框架趋势线自动隐藏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:25:39