请求协助将PineScript V2/V3指标转换为V5版本
PineScript V2/V3 转 V5 版本代码(VMA指标)
转换后的完整V5代码
//@version=5 indicator(title="MA", shorttitle="MA", overlay=true) src = close l = input.int(6, title="VMA Length") std = input.bool(false, title="Show Trend Direction") bc = input.bool(false, title="Color bars based on Trend") k = 1.0 / l pdm = math.max(src - src[1], 0) mdm = math.max(src[1] - src, 0) // 递归变量用var声明,确保跨K线周期保持状态 var float pdmS = 0.0 pdmS := (1 - k) * nz(pdmS[1]) + k * pdm var float mdmS = 0.0 mdmS := (1 - k) * nz(mdmS[1]) + k * mdm s = pdmS + mdmS // 处理分母为0的情况,避免运行报错 pdi = pdmS / nz(s, 1) mdi = mdmS / nz(s, 1) var float pdiS = 0.0 pdiS := (1 - k) * nz(pdiS[1]) + k * pdi var float mdiS = 0.0 mdiS := (1 - k) * nz(mdiS[1]) + k * mdi d = math.abs(pdiS - mdiS) s1 = pdiS + mdiS var float iS = 0.0 iS := (1 - k) * nz(iS[1]) + k * d / nz(s1, 1) hhv = ta.highest(iS, l) llv = ta.lowest(iS, l) d1 = hhv - llv vI = (iS - llv) / nz(d1, 1) var float vma = 0.0 vma := (1 - k * vI) * nz(vma[1]) + k * vI * src // 定义VMA趋势颜色 vmaC = color.black if vma > vma[1] vmaC := color.green elif vma < vma[1] vmaC := color.red else vmaC := color.blue plot(vma, color=std ? vmaC : color.black, linewidth=3, title="VMA") barcolor(bc ? vmaC : na)
关键改动说明
- 替换
study()为V5标准的indicator()函数,这是V5脚本声明的强制要求 - 为所有递归计算变量添加
var关键字,确保变量在K线周期间保留前值,解决自动转换时的数值异常问题 - 将原代码中的颜色常量替换为V5规范的
color.xxx格式 - 对所有除法运算添加
nz()处理分母为0的情况,避免运行时错误 - 调整输入参数为类型明确的
input.int、input.bool,提升代码可读性 - 修正原代码中的HTML符号转义问题(
>改为正常的>)
内容的提问来源于stack exchange,提问作者LJ2
相关产品推荐
相关产品推荐

