多时间框架ATR Trailing Stop颜色异常问题求助
ATR追踪止损线颜色异常问题修复
问题现象
ATR追踪止损线始终显示蓝色,无法根据持仓方向(多头/空头)切换为绿色或红色。
问题根源
原代码中,PlotColor基于当前周期的Position变量计算,但在跨周期调用request.security时,Position并未在目标周期(如60分钟)内同步计算,导致跨周期环境下Position始终为初始值0,对应蓝色。
修复方案
将持仓方向判断与颜色计算逻辑封装为函数,确保跨周期调用时能在目标周期内完成完整计算:
atrTimeframe = input.timeframe(title="ATR Timeframe", defval="60") atrPeriod = input.int(10, "ATR Period") atrMultiplier = input.float(3, "ATR Multiplier", step=.1) ATR = ta.atr(atrPeriod) Stop = atrMultiplier * ATR // 封装止损线计算函数 atrStop() => var atrTrailingstop = 0.0 atrTrailingstop := if close > atrTrailingstop[1] and close[1] > atrTrailingstop[1] math.max(atrTrailingstop[1], close - Stop) else if close < atrTrailingstop[1] and close[1] < atrTrailingstop[1] math.min(atrTrailingstop[1], close + Stop) else if close > atrTrailingstop[1] close - Stop else close + Stop // 封装持仓方向与颜色计算函数 getPositionAndColor() => atrTrailingstop = atrStop() var Position = 0.0 Position := if close[1] < atrTrailingstop[1] and close > atrTrailingstop[1] 1 else if close[1] > atrTrailingstop[1] and close < atrTrailingstop[1] -1 else Position[1] PlotColor = Position == -1 ? color.red : Position == 1 ? color.green : color.blue [atrTrailingstop, PlotColor] // 跨周期获取目标周期的止损线和对应颜色 [atrSecure, mtfColor] = request.security(syminfo.tickerid, atrTimeframe, getPositionAndColor(), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_off) plot(atrSecure, color=mtfColor, linewidth=input(1, "Line Width"), title="ATR Trailing Stop")
关键修改说明
- 新增
getPositionAndColor()函数,将止损线计算、持仓方向判断、颜色计算逻辑整合在一起,确保跨周期调用时,所有计算都基于目标周期的数据执行 request.security直接调用该函数获取结果,保证止损线和颜色的计算环境一致,避免因周期不匹配导致的颜色错误
内容的提问来源于stack exchange,提问作者Shinemon
相关产品推荐
相关产品推荐

