请求协助将PineScript v2版本ADX脚本转换为v4版本
PineScript v2 转 v4:ADX 脚本转换完成版
转换后的完整v4代码
//@version=4 study("ADX", overlay=false) len = input(title="Length", type=input.integer, defval=3) len1 = input(title="Length1", type=input.integer, defval=1) th = input(title="threshold", type=input.integer, defval=20) TrueRange = ta.max(ta.max(high-low, math.abs(high-nz(close[1]))), math.abs(low-nz(close[1]))) DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? ta.max(high-nz(high[1]), 0) : 0 DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? ta.max(nz(low[1])-low, 0) : 0 var float SmoothedTrueRange = na SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange var float SmoothedDirectionalMovementPlus = na SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus var float SmoothedDirectionalMovementMinus = na SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100 DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100 DX = math.abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100 ADX = ta.sma(DX, len) crosscall = DIPlus > DIMinus crossput = DIMinus > DIPlus DIPcross = ta.sma(crosscall ? 1.0 : 0.0, len1) DIPput = ta.sma(crossput ? 1.0 : 0.0, len1) DIPOVB = DIPlus > 60 DIMOVS = DIMinus > 60 bgcolor(DIMOVS ? color.lime : na, transp=40) bgcolor(DIPOVB ? color.orange : na, transp=20) plot(DIPlus, color=color.green, linewidth=3, title="DI+") plot(DIMinus, color=color.red, linewidth=3, title="DI-") plot(ADX, color=color.white, linewidth=1, title="ADX") hline(th, color=color.white, linewidth=1, linestyle=hline.style_dashed) bgcolor(DIPcross > 0 ? color.new(color.green, 60) : na) bgcolor(DIPput > 0 ? color.new(color.red, 60) : na)
核心转换要点
- 版本与基础声明:更新版本标识为
//@version=4,显式声明overlay=false明确指标独立显示 - 输入参数规范:将v2的
type=integer替换为v4标准的input.integer类型 - 函数命名空间:v4对内置函数做了分类,
max→ta.max、abs→math.abs、sma→ta.sma,需加上对应命名空间前缀 - 循环变量初始化:对于自引用的平滑变量(如
SmoothedTrueRange),必须用var关键字声明,确保仅初始化一次 - 布尔值处理:v4的
sma不支持直接计算布尔值,需将crosscall/crossput转换为1.0(真)/0.0(假)的数值后再计算均线 - 颜色系统更新:v4颜色需使用
color.前缀,如lime→color.lime,背景色透明度可通过color.new()或transp参数设置
内容的提问来源于stack exchange,提问作者LJ2
相关产品推荐
相关产品推荐

