请求将PineScript V2版本ADX指标脚本转换为V5版本
PineScript V2 ADX 脚本转V5版本实现
转换后的V5代码
//@version=5 indicator("ADX", overlay=false) len = input.int(title="Length", defval=14) // 计算真实波幅(TR) trueRange = ta.tr // 计算+DM和-DM upMove = high - high[1] downMove = low[1] - low directionalMovementPlus = upMove > downMove and upMove > 0 ? upMove : 0 directionalMovementMinus = downMove > upMove and downMove > 0 ? downMove : 0 // 平滑TR、+DM、-DM(使用RMA,与原V2平滑逻辑等价) smoothedTrueRange = ta.rma(trueRange, len) smoothedDirectionalMovementPlus = ta.rma(directionalMovementPlus, len) smoothedDirectionalMovementMinus = ta.rma(directionalMovementMinus, len) // 计算DI+、DI-、DX、ADX diPlus = smoothedDirectionalMovementPlus / smoothedTrueRange * 100 diMinus = smoothedDirectionalMovementMinus / smoothedTrueRange * 100 dx = math.abs(diPlus - diMinus) / (diPlus + diMinus) * 100 adx = ta.sma(dx, len) // 定义颜色(含透明度) colorBuy = color.new(color.green, 0) colorSell = color.new(color.red, 0) colorDoNothing = color.new(color.white, 100) // 绘制指标线 plot(diPlus, color=color.green, title="DI+", linewidth=3, style=plot.style_line) plot(diMinus, color=color.red, title="DI-", linewidth=3, style=plot.style_line) plot(adx, color=ta.barssince(0) >= len ? (adx > diMinus and diPlus > diMinus and adx > adx[1] ? colorBuy : (adx > diPlus and diMinus > diPlus and adx > adx[1] ? colorSell : colorDoNothing)) : colorDoNothing, title="ADX", style=plot.style_columns)
关键改动说明
- 脚本类型声明:V2的
study()替换为V5的indicator(),添加overlay=false明确指标独立显示,不叠加K线 - 输入参数优化:
input(type=integer)改为V5专属的input.int(),参数类型更明确 - 内置函数替代手动计算:用
ta.tr直接计算真实波幅,和原手动计算逻辑完全一致,代码更简洁 - 平滑逻辑简化:原V2中手动递推的平滑公式等价于V5的
ta.rma()函数,直接调用内置函数避免手动维护历史变量 - 颜色处理更新:V5需通过
color.new()设置颜色透明度,替代V2直接传透明度参数的写法 - 信号有效性判断:新增
ta.barssince(0) >= len判断,确保ADX完成初始周期计算后再显示颜色,避免初期无效信号 - 编码规范统一:变量名改为小驼峰风格,符合PineScript V5的主流编码习惯
内容的提问来源于stack exchange,提问作者LJ2
相关产品推荐
相关产品推荐

