如何在K线下方(含影线)填充EMA趋势色而非背景色?
解决Pine Script v5中仅在K线下方填充EMA趋势色的问题
原代码使用bgcolor()会覆盖整个图表背景,无法实现仅在K线下方(包含下影线区域)填充实心趋势色的需求。通过以下修改可以达成目标:
修改后的完整代码
//@version=5 indicator(title='EMA 趋势下方填充', overlay=true) // 计算20期和80期EMA s20_ema = ta.ema(close, 20) s80_ema = ta.ema(close, 80) // 绘制EMA均线 plot(s20_ema, color=color.green) plot(s80_ema, color=color.red) // 识别金叉/死叉条件 longCond = ta.crossover(s20_ema, s80_ema) shortCond = ta.crossunder(s20_ema, s80_ema) // 持久化记录趋势状态:1=多头,-1=空头,0=无趋势 var int trend = 0 trend := longCond ? 1 : shortCond ? -1 : trend // 创建两个隐藏的参考线,用于填充区域 p_low = plot(low, display=display.data_window, color=na) p_bottom = plot(chart.bottom, display=display.data_window, color=na) // 根据趋势填充K线最低点到图表底部的区域 fill(p_low, p_bottom, color=trend == 1 ? color.new(color.green, 0) : trend == -1 ? color.new(color.red, 0) : na) // 可选:设置K线颜色匹配趋势 barcolor(trend == 1 ? color.new(color.green, 0) : trend == -1 ? color.new(color.red, 0) : na) // 绘制买卖信号标记 plotshape(series=longCond, title='BUY', style=shape.triangleup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), text='BUY', size=size.small) plotshape(series=shortCond, title='SELL', style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), text='SELL', size=size.small)
关键实现说明
- 趋势状态持久化:用
var int trend变量保存当前趋势,仅在金叉/死叉时切换状态,避免重复计算。 - 隐藏参考线:创建
p_low(对应K线最低点)和p_bottom(对应图表底部)两个隐藏plot,作为填充区域的上下边界。 - 精准区域填充:通过
fill()函数填充两个隐藏线之间的区域,仅在对应趋势下显示颜色,完全限制在K线下方区域,不会覆盖K线上方或整个背景。
内容的提问来源于stack exchange,提问作者ca_us30sniper
相关产品推荐
相关产品推荐

