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

如何在5分钟脚本中存储15分钟MACD趋势的最新值?

解决15分钟MACD趋势状态持久化问题

你的核心需求是让15分钟级别的MACD趋势状态(上行/下行)在5分钟脚本里保持,直到15分钟趋势反转。当前代码的isUpTrend和isDownTrend仅在15分钟bar更新时变化,但5分钟bar会频繁刷新,需要用状态持久化变量锁定趋势,直到新的15分钟趋势信号出现。

以下是修改后的完整代码:

//@version=5
indicator("5min Filter with 15min MACD Trend", overlay=false)

// MACD参数
fastLength = input.int(12, title="Fast Length")
slowLength = input.int(26, title="Slow Length")

// 15分钟时间框架
LT = '15'

// 获取15分钟已收盘bar的MACD值(关闭前瞻)
[fastMA_LT, slowMA_LT] = request.security(syminfo.tickerid, LT, [ta.ema(close, fastLength), ta.ema(close, slowLength)], lookahead=barmerge.lookahead_off)
LT_macd = fastMA_LT - slowMA_LT

// 定义持久化趋势状态变量:0=无趋势, 1=上行, -1=下行(var关键字保证只初始化一次)
var int currentLTTreend = 0

// 当15分钟MACD出现明确趋势变化时更新状态
if barstate.islast
    // 检测15分钟MACD转为上行,且之前不是上行趋势
    if LT_macd > nz(LT_macd[1]) and currentLTTreend != 1
        currentLTTreend := 1
    // 检测15分钟MACD转为下行,且之前不是下行趋势
    else if LT_macd < nz(LT_macd[1]) and currentLTTreend != -1
        currentLTTreend := -1

// 生成过滤器信号
filterAllowLong = currentLTTreend == 1  // 仅15分钟MACD上行时允许做多
filterAllowShort = currentLTTreend == -1 // 仅15分钟MACD下行时允许做空

// 示例:可视化过滤器状态
plotshape(filterAllowLong, title="Allow Long", location=location.belowbar, color=color.green, style=shape.labelup, text="LONG OK")
plotshape(filterAllowShort, title="Allow Short", location=location.abovebar, color=color.red, style=shape.labeldown, text="SHORT OK")

关键说明:

  • var关键字:初始化currentLTTreend时使用var,确保变量在脚本运行期间仅初始化一次,之后保持上一次赋值结果,直到主动更新。
  • 趋势更新逻辑:仅在15分钟bar完成(barstate.islast确保只在最新bar判断)且趋势反转时,才更新状态变量。这样5分钟脚本里的currentLTTreend会一直锁定上一次的15分钟趋势,直到新的趋势信号出现。
  • 过滤器使用:你可以直接将filterAllowLong或filterAllowShort作为5分钟交易信号的前置条件,比如仅当filterAllowLong为true时,才触发5分钟做多信号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 12:27:36