Reputation: 9
So I have an old pinescript I believe v2 or v3 that I Need help converting into V5 as my knowledge of pinescript is very limited, but I can not do that auto convert to work because the values seem to be not converting or it has changed so much. Any assistance would be greatly appreciated. Thank you!
study(title="MA", shorttitle="MA", overlay=true)
src=close
l =input(6, title="VMA Length")
std=input(false, title="Show Trend Direction")
bc=input(false, title="Color bars based on Trend")
k = 1.0/l
pdm = max((src - src[1]), 0)
mdm = max((src[1] - src), 0)
pdmS = ((1 - k)*nz(pdmS[1]) + k*pdm)
mdmS = ((1 - k)*nz(mdmS[1]) + k*mdm)
s = pdmS + mdmS
pdi = pdmS/s
mdi = mdmS/s
pdiS = ((1 - k)*nz(pdiS[1]) + k*pdi)
mdiS = ((1 - k)*nz(mdiS[1]) + k*mdi)
d = abs(pdiS - mdiS)
s1 = pdiS + mdiS
iS = ((1 - k)*nz(iS[1]) + k*d/s1)
hhv = highest(iS, l)
llv = lowest(iS, l)
d1 = hhv - llv
vI = (iS - llv)/d1
vma = (1 - k*vI)*nz(vma[1]) + k*vI*src
vmaC=(vma > vma[1]) ? green : (vma<vma[1]) ? red : (vma==vma[1]) ? blue : black
plot(vma, color=std?vmaC:black, linewidth=3, title="VMA")
barcolor(bc?vmaC:na)
`
Upvotes: 0
Views: 335
Reputation: 3108
In pinescript v5, you must declare you variable before calling it.
So :
pdmS = ((1 - k)*nz(pdmS[1]) + k*pdm)
doesn't work anymore, because you try to acces pdmS[1] before declaring it.
Use 'var' to declare a variable with a value used only one the frst loop over your code.
Here is your code in v5 :
//@version=5
indicator(title='MA', shorttitle='MA', overlay=true)
src = close
l = input(6, title='VMA Length')
std = input(false, title='Show Trend Direction')
bc = input(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 pdmS = 0.0
pdmS := (1 - k) * nz(pdmS[1]) + k * pdm
var mdmS = 0.0
mdmS := (1 - k) * nz(mdmS[1]) + k * mdm
s = pdmS + mdmS
pdi = pdmS / s
mdi = mdmS / s
var pdiS = 0.0
pdiS := (1 - k) * nz(pdiS[1]) + k * pdi
var mdiS = 0.0
mdiS := (1 - k) * nz(mdiS[1]) + k * mdi
d = math.abs(pdiS - mdiS)
s1 = pdiS + mdiS
var iS = 0.0
iS := (1 - k) * nz(iS[1]) + k * d / s1
hhv = ta.highest(iS, l)
llv = ta.lowest(iS, l)
d1 = hhv - llv
vI = (iS - llv) / d1
var vma = 0.0
vma := (1 - k * vI) * nz(vma[1]) + k * vI * src
vmaC = vma > vma[1] ? color.green : vma < vma[1] ? color.red : vma == vma[1] ? color.blue : color.black
plot(vma, color=std ? vmaC : color.black, linewidth=3, title='VMA')
barcolor(bc ? vmaC : na)
Upvotes: 0