如何在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
相关产品推荐
相关产品推荐

