Step One More Average

Category: Indicators By: Nicolas Created: December 12, 2016, 1:11 PM
December 12, 2016, 1:11 PM
Indicators
6 Comments

Indicator built upon a special moving average formula that adapt its period automatically accordingly to the market behaviour and noises. This moving average is called the OMA (One More Average), the formula come from an MT4 version found on internet.

Converted from MT4 because of a request on forum.

This version of the one more average indicator embed a step variation of the result of the calculation. The sensitivity and step size can be modified in order to adapt how the moving average respond to the step function, which is comparing how the moving average evolved between difference of actual and past data with current average true range.

The adaptive period can be more or less adaptive by changing the “speed” parameter (0.1 step). The adaptive behaviour of the formula can be shutdown with “Adaptive=0”.

 

//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     = true;
//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

RETURN result coloured by color as "OMA step"

 

Download
Filename: PRC_step-one-more-average.itf
Downloads: 334
Nicolas Master
I created ProRealCode because I believe in the power of shared knowledge. I spend my time coding new tools and helping members solve complex problems. If you are stuck on a code or need a fresh perspective on a strategy, I am always willing to help. Welcome to the community!
Author’s Profile

Comments

Logo Logo
Loading...