| 
Rank: Advanced Member
 Groups: Registered, Registered Users, SubscribersJoined: 10/28/2004(UTC)
 Posts: 110
 
 | 
            
	      
                All,
 Seems we never tire of playing with moving averages. The other day I
 discussed the DEMA and TEMA and how they were derived. Now I would
 like to introduce the idea of using a mechanism/s to futher smooth
 your moving averages.
 
 One of the problems in performing the task is how to overcome the
 problem of a variable input that metastock will not normally except.
 In the past I've discussed the virtues of using a DLL. The purpose
 of using a DLL was to overcome metastock's shortcoming of the
 variable input value. Thus you could use an indicator and its
 velocity or momentum value for your lookback periods and allow them
 to change with the market. Great idea but I also want to introduce
 you to one more method that I thought you might enjoy.
 
 That method is the use of the LastValue function. Below you will
 find some information about the Hull Moving average. I thought it
 explained very well the reason for smoothing moving averages and how
 that is accomplished. At the end of the discussion you will also see
 three indicators. The first comes from the article and shows how you
 write the formula for a manual input of the square root value. The
 next is a DLL version which I wrote and automatically scales in the
 square root value. The last is a version of the same indicator
 written by Alan Hull and uses the LastValue function. Notice in this
 version that I have commented in where you could insert another
 indicator inplace of the square root.
 
 Have fun and enjoy,
 
 
 Preston
 
 
 
 http://www.justdata.com.au/Journals/AlanHull/hull_ma.htm
 
 The Hull Moving Average solves the age old dilemma of making a
 moving average more responsive to current price activity whilst
 maintaining curve smoothness. In fact the HMA almost eliminates lag
 altogether and manages to improve smoothing at the same time. To
 understand how it achieves both of these opposing outcomes
 simultaneously we need to start with an easily understood frame of
 reference.
 
 Firstly, solving the problem of curve smoothing can be done by
 taking an average of the average, ie. 16 period SMA(16 period SMA
 (Price)). The bad news is that it causes a huge increase in lag.
 
 Solving the problem of lag is a bit more involved and requires an
 explanation with numbers rather than charts. Consider a series of 10
 numbers from '0' to '9' inclusive and imagine that they are
 successive price points on a chart with 9 being the most recent
 price point at the right hand leading edge. If we take the 10 period
 simple average of these numbers then, not surprisingly, we will
 determine the midpoint of 4.5 which significantly lags behind the
 most recent price point of 9. Here's the clever bit…first let's
 halve the period of the average to 5 and apply it to the most recent
 numbers of 5,6,7,8, and 9, the result being the midpoint of 7.
 
 Finally, to remove the lag we take the midpoint of 7 and add the
 difference between the two averages which equals 2.5 (7 - 4.5). This
 gives a final answer of 9.5 (7 + 2.5) which is a slight
 overcompensation. But this overcompensation is very handy because it
 offsets the lagging effect of the nested averaging. Hence the result
 of combining these 2 techniques is a near perfect balance between
 lag reduction and curve smoothing.
 
 The HMA manages to keep up with rapid changes in price activity
 whilst having superior smoothing over an SMA of the same period. The
 HMA employs weighted moving averages and dampens the smoothing
 effect (and resulting lag) by using the square root of the period
 instead of the actual period itself…as seen below.
 
 Integer(SquareRoot(Period)) WMA [2 x Integer(Period/2) WMA(Price)
 - Period WMA(Price)]
 
 Unfortunately the MetaStock version of the indicator requires
 the 'Integer part of the square root of the period' to be entered
 manually as an input. For example, if the period is 25
 then 'sqrtperiod' equals 5 and if the period is 30 then 'sqrtperiod'
 also equals 5. ('sqrtperiod' increments up to 6 when period = 36 and
 so on.)
 
 MetaStock Formula
 period:=Input("Period",1,200,20) ;
 sqrtperiod:=Input("Square Root of Period",1,20,4);
 Mov(2*(Mov(C,period/2,W))
 -Mov(C,period,W),sqrtperiod,W);{end}
 
 
 {Hull MA}
 {dll version}
 {written by Preston Umrysh}
 {This indicator uses Dll software
 developed by MetaStock Forum Crew}
 {http://forum.equis.com)}
 period:=Input("Period",1,250,20) ;
 ExtFml( "ForumDLL.VarMOV",2*(Mov(C,period/2,W))
 -Mov(C,period,W),Sqrt(period),W);{end}
 
 {Hull MA}
 {Lastvalue version}
 period:=Input("Period",1,200,20) ;
 sqrtperiod:= Sqrt(period);{another indicator could be used here}
 HMA:=Mov(2*Mov(C,period/2,W)
 -Mov(C,period,W),LastValue(sqrtperiod),W);
 HMA;{end}
 Found at http://trader.online.pl/MSZ/e-w-Hull_Moving_Average.html
 |