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

RE: Hall Moving Avg. code?



PureBytes Links

Trading Reference Links

Tony,

Assuming you mean the Hull MA, here's atavachron's function and indicator
code from TSW (I am making the hopefully correct assumption that he won't
mind it posted here, as he posted it on TSW for 2000i users as well as TS8)
:

Function :

{jtHMA - Hull Moving Average Function}
{Author: Atavachron}
{May 2005}

Inputs: price(NumericSeries), length(NumericSimple);
Vars: halvedLength(0), sqrRootLength(0);

{
 Original equation is:
 ---------------------
 waverage(2*waverage(close,period/2)-waverage(close ,period),
SquareRoot(Period)
 Implementation below is more efficient with lengthy Weighted Moving
Averages.
 In addition, the length needs to be converted to an integer value after it
is halved and
 its square root is obtained in order for this to work with Weighted Moving
Averaging
}

if ((ceiling(length / 2) - (length / 2))  <= 0.5) then
	halvedLength = ceiling(length / 2)
else
	halvedLength = floor(length / 2);

if ((ceiling(SquareRoot(length)) - SquareRoot(length))  <= 0.5) then
	sqrRootLength = ceiling(SquareRoot(length))
else
	sqrRootLength = floor(SquareRoot(length));

Value1 = 2 * WAverage(price, halvedLength);
Value2 = WAverage(price, length);
Value3 = WAverage((Value1 - Value2), sqrRootLength);

jtHMA = Value3;

Indicator :

{jtHMA - Hull Moving Average Indicator}
{Author: Atavachron}
{May 2005}

{
	Inputs:
	-------
	price: the time series being smoothed, usually Close, High, etc,
	       but could be RSI(Close, 25) for example.
	length: the length of the MA, pretty meaningless in the normal sense
	        of moving averages, as this quantity is heavily modified
			in the code.  You need to experiment, do not just use a setting
			of 20 because that is what works for you with Simple Moving Averages.
	zeroLine: if you are using this in an indicator pane, you might
	          want to display a centre line of some sort, ths allows
  			  one to set its value
	zeroVisible: boolean variable, determines whether the centre line
	            (zeroLine) is plotted.
	upColour: If you wish to differentiate upward movements by colour coding.
	downColour: If you wish to differentiate downward movements by colour
coding.
	colourDeltaBar: Set this to 1 if you wish the colour change to be effective
on
	                the actual bar where the direction change occurred.
					Set this to 0 for default behaviour.  All other values
                    are pretty meaningless.
}

Inputs: price(Close), length(21),
		zeroLine(0.0), zeroVisible(false),
	    upColour(Blue), downColour(Red), colourDeltaBar(1);

Value1 = jtHMA(price, length);

Plot1(Value1, "jtHMA");

If ZeroVisible = true then
	Plot2(zeroLine, "Zero");

{ Color criteria }
if (Value1 > Value1[1]) then
	SetPlotColor[colourDeltaBar](1, upColour)
else if (Value1 < Value1[1]) then
	SetPlotColor[colourDeltaBar](1, downColour);

Hope this is what you are looking for.

J.
--