[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[EquisMetaStock Group] Hull Moving Average...DLL or LastValue



PureBytes Links

Trading Reference Links

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}
     



 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/equismetastock/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/equismetastock/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:equismetastock-digest@xxxxxxxxxxxxxxx 
    mailto:equismetastock-fullfeatured@xxxxxxxxxxxxxxx

<*> To unsubscribe from this group, send an email to:
    equismetastock-unsubscribe@xxxxxxxxxxxxxxx

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/