You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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版本
  • 输入类型规范:
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 06:10:28