如何根据ADX指标的数值将其绘制线设置为绿色或红色
ADX指标条件着色修复方案
你的代码无法正常运行主要是以下3个问题:
- 缺少Pine Script版本声明,当前TradingView默认使用v5版本,旧版语法存在兼容问题
- 颜色参数未加
color.命名空间前缀,直接写green、red无法被系统识别 - 计算DI+、DI-时没有处理真实波幅为0的场景,会触发除零报错
修正后的完整可运行代码如下:
//@version=5 indicator("ADX条件着色", overlay=false) ////////ADX len = input.int(14, minval=1, title="长度") th = input.float(0.15, minval=0.01, title="阈值") TrueRange = math.max(math.max(high-low, math.abs(high-nz(close[1]))), math.abs(low-nz(close[1]))) DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? math.max(high-nz(high[1]), 0): 0 DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? math.max(nz(low[1])-low, 0): 0 SmoothedTrueRange = 0.0 SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange SmoothedDirectionalMovementPlus = 0.0 SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus SmoothedDirectionalMovementMinus = 0.0 SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus DIPlus = SmoothedDirectionalMovementPlus / nz(SmoothedTrueRange, 1) DIMinus = SmoothedDirectionalMovementMinus / nz(SmoothedTrueRange, 1) DX = math.abs(DIPlus-DIMinus) / (DIPlus+DIMinus) ADX = ta.sma(DX, len) plotColour = ADX >= th ? color.green : color.red plot(ADX, color=plotColour, linewidth=3) hline(th, color=color.black)
以上代码适配Pine Script v5版本,运行后即可实现ADX数值≥0.15显示绿色、<0.15显示红色的效果,指标参数可在设置面板中自行调整。
内容的提问来源于stack exchange,提问作者Blind Blake
相关产品推荐
相关产品推荐

