//PRC_step one more average | indicator
//12.12.2016
//Nicolas @ www.prorealcode.com
//Sharing ProRealTime knowledge
//converted and adapted from MT4 version
Length = 25
Speed = 3.0
Adaptive = 1
Sensitivity = 0.5 // Sensivity Factor
StepSize = 50 // Step Size period
Length = Max(Length,1)
Speed = Max(Speed,-1.5)
price = average[1](customclose)
//adaptive period
averagePeriod = Length
if adaptive=1 and averagePeriod > 1 then
minPeriod = averagePeriod/2.0
maxPeriod = minPeriod*5.0
endPeriod = round(maxPeriod)
signal = Abs((price-stored[endPeriod]))
noise = 0.00000000001
for k=1 to endPeriod do
noise=noise+Abs(price-stored[k])
averagePeriod = round(((signal/noise)*(maxPeriod-minPeriod))+minPeriod)
next
endif
tconst=Speed
alpha = (2.0+tconst)/(1.0+tconst+averagePeriod)
e1 = e1 + alpha*(price-e1)
e2 = e2 + alpha*(e1-e2)
v1 = 1.5 * e1 - 0.5 * e2
e3 = e3 + alpha*(v1 -e3)
e4 = e4 + alpha*(e3-e4)
v2 = 1.5 * e3 - 0.5 * e4
e5 = e5 + alpha*(v2 -e5)
e6 = e6 + alpha*(e5-e6)
v3 = 1.5 * e5 - 0.5 * e6
stored=price
//step function
Sensitivity = max(Sensitivity,1*pointsize)
ATRStepSize=averagetruerange[StepSize]
Step = max(ATRStepSize,1*pointsize)
size = sensitivity*Step
phigh = v3
plow = v3[7]
stepMulti = 1.0
workStepsmax = phigh+2.0*size*stepMulti
workStepsmin = plow-2.0*size*stepMulti
workSteptrend = workSteptrend[1]
pprice = customclose
if (pprice>workStepsmax[1]) then
workSteptrend = 1
endif
if (pprice<workStepsmin[1]) then
workSteptrend = -1
endif
if (workSteptrend = 1) then
if (workStepsmin < workStepsmin[1]) then
workStepsmin=workStepsmin[1]
endif
result = workStepsmin+size*stepMulti
color = 1
endif
if (workSteptrend = -1) then
if (workStepsmax > workStepsmax[1]) then
workStepsmax=workStepsmax[1]
endif
result = workStepsmax-size*stepMulti
color = -1
endif
if color<>color[1] then
if color>0 then
drawarrowup(barindex,result)coloured(0,255,0)
else
drawarrowdown(barindex,result)coloured(255,0,0)
endif
endif
RETURN result coloured by color as "OMA step"