如何将Pine Script V2代码转换为V4/V5版本?
Ehlers MESA自适应移动均线Pine Script V2转V5问题
我正尝试将一段Ehlers MESA自适应移动均线的Pine Script V2代码转换为V4或V5版本,使用右上角三点自动转换及手动修改均未成功,主要卡在第13、14、16、17、20、21、24、25、26、30、36、37行的转换上。我尝试用var=0声明未定义标识符,附上原V2代码及自行修改的代码如下:
原V2代码
strategy("Ehlers MESA Adaptive Moving Average", shorttitle="EMAMA2", overlay=true, precision=3) //Heikin Ashi res = input(title="Resolution", type=resolution, defval="60") haTicker = heikinashi(tickerid) haClose = security(haTicker, res, close) src = input(hlc3, title="Source") fl = input(.8, title="Fast Limit") sl = input(.035, title="Slow Limit") fl2 = input(0.0, title="Fast Limit 2") sl2 = input(.02, title="Slow Limit 2") pi = 3.1415926 sp = (4*src + 3*src[1] + 2*src[2] + src[3]) / 10.0 dt = (.0962*sp + .5769*nz(sp[2]) - .5769*nz(sp[4]) - .0962*nz(sp[6])) * (.075*nz(p[1]) + .54) q1 = (.0962*dt + .5769*nz(dt[2]) - .5769*nz(dt[4]) - .0962*nz(dt[6])) * (.075*nz(p[1]) + .54) i1 = nz(dt[3]) jI = (.0962*i1 + .5769*nz(i1[2]) - .5769*nz(i1[4]) - .0962*nz(i1[6])) * (.075*nz(p[1]) + .54) jq = (.0962*q1 + .5769*nz(q1[2]) - .5769*nz(q1[4]) - .0962*nz(q1[6])) * (.075*nz(p[1]) + .54) i2_ = i1 - jq q2_ = q1 + jI i2 = .2*i2_ + .8*nz(i2[1]) q2 = .2*q2_ + .8*nz(q2[1]) re_ = i2*nz(i2[1]) + q2*nz(q2[1]) im_ = i2*nz(q2[1]) - q2*nz(i2[1]) re = .2*re_ + .8*nz(re[1]) im = .2*im_ + .8*nz(im[1]) p1 = iff(im!=0 and re!=0, 2*pi/atan(im/re), nz(p[1])) p2 = iff(p1 > 1.5*nz(p1[1]), 1.5*nz(p1[1]), iff(p1 < 0.67*nz(p1[1]), 0.67*nz(p1[1]), p1)) p3 = iff(p2<6, 6, iff (p2 > 50, 50, p2)) p = .2*p3 + .8*nz(p3[1]) spp = .33*p + .67*nz(spp[1]) phase = 180/pi * atan(q1 / i1) dphase_ = nz(phase[1]) - phase dphase = iff(dphase_< 1, 1, dphase_) alpha_ = fl / dphase alpha = iff(alpha_ < sl, sl, iff(alpha_ > fl, fl, alpha_)) mama = alpha * src + (1 - alpha) * nz(mama[1]) fama = .5 * alpha * mama + (1 - .5 * alpha) * nz(fama[1]) famal = plot(fama, title="FAMA", color=white, transp=0, linewidth=3) alpha_2 = fl2 / dphase alpha2 = iff(alpha_2 < sl2, sl2, iff(alpha_2 > fl2, fl2, alpha_2)) mama2 = alpha2 * src + (1 - alpha2) * nz(mama2[1]) fama2 = .5 * alpha2 * mama2 + (1 - .5 * alpha2) * nz(fama2[1]) famal2 = plot(fama2, title="FAMA2", color=white, transp=0, linewidth=3) longCondition = crossover(haClose, fama) and (haClose >= fama2) if (longCondition) strategy.entry("Long Entry Id", strategy.long) alertcondition(longCondition, title='Buy Long', message='Buy Long') closeLong = strategy.close_all(crossunder(haClose, fama)) alertcondition(longCondition == false, title='Close Long', message='Close Long') shortCondition = crossunder(haClose, fama) and (haClose <= fama2) if (shortCondition) strategy.entry("Short Entry Id", strategy.short) alertcondition(shortCondition, title='Buy Short', message='Buy Short') closeShort = strategy.close_all(crossover(haClose, fama)) alertcondition(shortCondition == false, title='Close Short', message='Close Short')
自行修改的代码
strategy('Ehlers MESA Adaptive Moving Average', shorttitle='EMAMA2', overlay=true, precision=3) //Heikin Ashi res = input('180', 'Resolution') haTicker = ticker.heikinashi(syminfo.tickerid) haClose = request.security(haTicker, res, close) //haClose = request.security(ticker.heikinashi(syminfo.tickerid), res, close) src = input(hlc3, title='Source') fl = input(.8, title='Fast Limit') sl = input(.035, title='Slow Limit') fl2 = input(0.0, title='Fast Limit 2') sl2 = input(.02, title='Slow Limit 2') pi = 3.1415926 var p = 0. sp = (4 * src + 3 * src[1] + 2 * src[2] + src[3]) / 10.0 dt = (.0962 * sp + .5769 * nz(sp[2]) - .5769 * nz(sp[4]) - .0962 * nz(sp[6])) * (.075 * nz(p[1]) + .54) q1 = (.0962 * dt + .5769 * nz(dt[2]) - .5769 * nz(dt[4]) - .0962 * nz(dt[6])) * (.075 * nz(p[1]) + .54) i1 = nz(dt[3]) jI = (.0962 * i1 + .5769 * nz(i1[2]) - .5769 * nz(i1[4]) - .0962 * nz(i1[6])) * (.075 * nz(p[1]) + .54) jq = (.0962 * q1 + .5769 * nz(q1[2]) - .5769 * nz(q1[4]) - .0962 * nz(q1[6])) * (.075 * nz(p[1]) + .54) i2_ = i1 - jq q2_ = q1 + jI var i2 = 0. var q2 = 0. var re = 0. var im = 0. var spp = 0. var mama = 0. var fama = 0. var fama2 = 0. var mama2 = 0. i2 := .2 * i2_ + .8 * i2 q2 := .2 * q2_ + .8 * q2 re_ = i2 * nz(i2[1]) + q2 * nz(q2[1]) im_ = i2 * nz(q2[1]) - q2 * nz(i2[1]) re := .2 * re_ + .8 * re im := .2 * im_ + .8 * im p1 = im != 0 and re != 0 ? 2 * pi / math.atan(im / re) : nz(p[1]) iff_1 = p1 < 0.67 * nz(p1[1]) ? 0.67 * nz(p1[1]) : p1 p2 = p1 > 1.5 * nz(p1[1]) ? 1.5 * nz(p1[1]) : iff_1 iff_2 = p2 > 50 ? 50 : p2 p3 = p2 < 6 ? 6 : iff_2 p := .2 * p3 + .8 * nz(p3[1]) spp := .33 * p + .67 * spp phase = 180 / pi * math.atan(q1 / i1) dphase_ = nz(phase[1]) - phase dphase = dphase_ < 1 ? 1 : dphase_ alpha_ = fl / dphase iff_3 = alpha_ > fl ? fl : alpha_ alpha = alpha_ < sl ? sl : iff_3 mama := alpha * src + (1 - alpha) * mama fama := .5 * alpha * mama + (1 - .5 * alpha) * fama famal = plot(fama, 'FAMA', color.new(color.white, 1), linewidth=3) alpha_2 = fl2 / dphase iff_4 = alpha_2 > fl2 ? fl2 : alpha_2 alpha2 = alpha_2 < sl2 ? sl2 : iff_4 mama2 := alpha2 * src + (1 - alpha2) * mama2 fama2 := .5 * alpha2 * mama2 + (1 - .5 * alpha2) * fama2 famal2 = plot(fama2, 'FAMA2', color.new(color.white, 1), linewidth=3) longCondition = ta.crossover(haClose, fama) and haClose >= fama2 if longCondition strategy.entry('Long Entry Id', strategy.long) //alertcondition(longCondition, title='Buy Long', message='Buy Long') //closeLong = strategy.close_all(crossunder(haClose, fama)) //alertcondition(longCondition == false, title='Close Long', message='Close Long') shortCondition = ta.crossunder(haClose, fama) and haClose <= fama2 if shortCondition strategy.entry('Short Entry Id', strategy.short) //alertcondition(shortCondition, title='Buy Short', message='Buy Short')
修正后的Pine Script V5代码
//@version=5 strategy("Ehlers MESA Adaptive Moving Average", shorttitle="EMAMA2", overlay=true, precision=3) // Heikin Ashi res = input.timeframe(title="Resolution", defval="60") haTicker = ticker.heikinashi(syminfo.tickerid) haClose = request.security(haTicker, res, close) src = input(hlc3, title="Source") fl = input.float(0.8, title="Fast Limit") sl = input.float(0.035, title="Slow Limit") fl2 = input.float(0.0, title="Fast Limit 2") sl2 = input.float(0.02, title="Slow Limit 2") pi = 3.1415926 var float p = 0.0 sp = (4 * src + 3 * src[1] + 2 * src[2] + src[3]) / 10.0 dt = (0.0962 * sp + 0.5769 * nz(sp[2]) - 0.5769 * nz(sp[4]) - 0.0962 * nz(sp[6])) * (0.075 * nz(p[1]) + 0.54) q1 = (0.0962 * dt + 0.5769 * nz(dt[2]) - 0.5769 * nz(dt[4]) - 0.0962 * nz(dt[6])) * (0.075 * nz(p[1]) + 0.54) i1 = nz(dt[3]) jI = (0.0962 * i1 + 0.5769 * nz(i1[2]) - 0.5769 * nz(i1[4]) - 0.0962 * nz(i1[6])) * (0.075 * nz(p[1]) + 0.54) jq = (0.0962 * q1 + 0.5769 * nz(q1[2]) - 0.5769 * nz(q1[4]) - 0.0962 * nz(q1[6])) * (0.075 * nz(p[1]) + 0.54) i2_ = i1 - jq q2_ = q1 + jI var float i2 = 0.0 var float q2 = 0.0 var float re = 0.0 var float im = 0.0 var float spp = 0.0 var float mama = 0.0 var float fama = 0.0 var float mama2 = 0.0 var float fama2 = 0.0 i2 := 0.2 * i2_ + 0.8 * nz(i2[1]) q2 := 0.2 * q2_ + 0.8 * nz(q2[1]) re_ = i2 * nz(i2[1]) + q2 * nz(q2[1]) im_ = i2 * nz(q2[1]) - q2 * nz(i2[1]) re := 0.2 * re_ + 0.8 * nz(re[1]) im := 0.2 * im_ + 0.8 * nz(im[1]) p1 = (im != 0 and re != 0) ? 2 * pi / math.atan(im / re) : nz(p[1]) p2 = p1 > 1.5 * nz(p1[1]) ? 1.5 * nz(p1[1]) : (p1 < 0.67 * nz(p1[1]) ? 0.67 * nz(p1[1]) : p1) p3 = p2 < 6 ? 6 : (p2 > 50 ? 50 : p2) p := 0.2 * p3 + 0.8 * nz(p3[1]) spp := 0.33 * p + 0.67 * nz(spp[1]) phase = 180 / pi * math.atan(q1 / i1) dphase_ = nz(phase[1]) - phase dphase = dphase_ < 1 ? 1 : dphase_ alpha_ = fl / dphase alpha = alpha_ < sl ? sl : (alpha_ > fl ? fl : alpha_) mama := alpha * src + (1 - alpha) * nz(mama[1]) fama := 0.5 * alpha * mama + (1 - 0.5 * alpha) * nz(fama[1]) plot(fama, title="FAMA", color=color.white, transp=0, linewidth=3) alpha_2 = fl2 / dphase alpha2 = alpha_2 < sl2 ? sl2 : (alpha_2 > fl2 ? fl2 : alpha_2) mama2 := alpha2 * src + (1 - alpha2) * nz(mama2[1]) fama2 := 0.5 * alpha2 * mama2 + (1 - 0.5 * alpha2) * nz(fama2[1]) plot(fama2, title="FAMA2", color=color.white, transp=0, linewidth=3) // 交易信号 longCondition = ta.crossover(haClose, fama) and (haClose >= fama2) if (longCondition) strategy.entry("Long Entry Id", strategy.long) alertcondition(longCondition, title='Buy Long', message='Buy Long') closeLong = strategy.close_all(ta.crossunder(haClose, fama)) alertcondition(closeLong, title='Close Long', message='Close Long') shortCondition = ta.crossunder(haClose, fama) and (haClose <= fama2) if (shortCondition) strategy.entry("Short Entry Id", strategy.short) alertcondition(shortCondition, title='Buy Short', message='Buy Short') closeShort = strategy.close_all(ta.crossover(haClose, fama)) alertcondition(closeShort, title='Close Short', message='Close Short')
关键修改说明
- 版本声明:添加
//@version=5明确指定Pine Script版本 - 输入类型规范:
相关产品推荐
相关产品推荐

