在15分钟周期指标中获取日线MACD柱颜色异常的解决方法
解决方案
问题出在你直接使用了未完成的日线MACD柱数据计算颜色——当15分钟周期的K线实时更新时,request.security返回的hist_1d是当前正在形成的日线临时MACD柱值,这个值会随价格波动变化,导致颜色错误切换。要实现「仅当完整日线MACD柱颜色变化时才更新显示」,需要只在日线K线确认闭合后才更新颜色,否则沿用之前的正确值。
修改后的完整代码如下:
// Plot colors col_macd = input(#2962FF, "MACD Line", group="Color Settings", inline="MACD") col_signal = input(#FF6D00, "Signal Line", group="Color Settings", inline="Signal") col_grow_above = input(color.green, "Above Zero - Grow", group="Histogram", inline="Above") //#26A69A col_fall_above = input(color.red, "Above Zero - Fall", group="Histogram", inline="Above") //#f80000 col_grow_below = input(color.green, "Below Zero - Grow", group="Histogram", inline="Below") //#26A69A col_fall_below = input(color.red, "Below Zero - Fall", group="Histogram", inline="Below") //#f80000 col_grow_above_ = color.green col_fall_above_ = color.red col_grow_below_ = color.green col_fall_below_ = color.red // 获取日线MACD数据,同时获取日线K线的确认状态(是否已闭合) [macd_1d, signal_1d, hist_1d, is_daily_bar_confirmed] = request.security(syminfo.tickerid, "D", [getMACDData(src, fast_length, slow_length, signal_length, sma_source, sma_signal), barstate.isconfirmed]) // 基于完整日线数据计算MACD柱的正确颜色 daily_hist_color = hist_1d >= 0 ? (hist_1d[1] < hist_1d ? col_grow_above_ : col_fall_above_) : (hist_1d[1] < hist_1d ? col_grow_below_ : col_fall_below_) // 用var变量存储显示颜色,仅在日线K线确认闭合时更新 var color displayed_daily_color = na if is_daily_bar_confirmed displayed_daily_color := daily_hist_color // 绘制日线MACD柱颜色 plot(0.0000, title="1D Histogram", color=displayed_daily_color, linewidth=15)
关键修改点说明:
- 获取日线K线确认状态:在
request.security中加入barstate.isconfirmed,这个值在日线周期中仅当K线完全闭合(不再更新)时为true。 - 存储并复用颜色:用
var关键字初始化displayed_daily_color,确保变量值不会随15分钟K线更新而重置。只有当日线K线确认闭合时,才用新计算的daily_hist_color更新它。 - 基于完整数据计算颜色:
daily_hist_color的计算逻辑和你原来的一致,但仅在日线K线闭合时才会被用来更新显示颜色,避免了临时数据导致的错误。
这样修改后,指标会始终显示上一根完整日线的MACD柱颜色,直到新的日线K线完全闭合,才会更新为新的颜色,不会再因15分钟周期的价格波动而错误变色。
内容的提问来源于stack exchange,提问作者JDPinTrade
相关产品推荐
相关产品推荐

