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

[EquisMetaStock Group] Re: HEIKIN-ASHI CANDLESTICK OSCILLATOR



PureBytes Links

Trading Reference Links

As a former user of MetaStock software, I can comment on why the
indicator is not programmed for MS.  The MetaStock formula language
does not have nearly enough functions to implement the code.

Below, I show the indicator programmed in AmiBroker by Tomasz Janeczko.

Here is an incomplete list of required functions that MS lacks:
IIF - an immediate IF function that works on data arrays
IF  - a conditional execution statement that allows blocks of
statements to be conditionally executed
Hold - holds a logic true/false in a certain state for a number of bars
AMA - an adaptive moving average function
ParamToggle - switches the logic state of a variable
Flip - works like an electrical FlipFlop logic circuit
StyleArea & StyleOwnScale - allows proper plotting of Heikin bars.

If you wanted to implement this indicator in MS you would need to buy
the software developers kit which has software hooks into the MS
package.  Plus buy some fully capable language compiler like C++.  

Or, for $199 you could buy AB and use the code below :)

***********************

HA Candelstick Oscillator in AmiBroker;

function ZeroLagTEMA( array, period )
{
 TMA1 = TEMA( array, period );
 TMA2 = TEMA( TMA1, period );
 Diff = TMA1 - TMA2;
 return TMA1 + Diff ;
}

/////////////////////
// Heikin-Ashi code
HaClose = (O+H+L+C)/4;
HaOpen = AMA( Ref( HaClose, -1 ), 0.5 );

avp = Param("Up TEMA avg", 34, 1, 100 );
avpdn = Param("Dn TEMA avg", 34, 1, 100 );

// Velvoort is using not original, but modified Heikin-Ashi close
HaClose = ( HaClose + HaOpen + Max( H, HaOpen ) + Min( L, HaOpen ) )/4;

// up average
ZlHa = ZeroLagTEMA( HaClose, avp );
ZlCl = ZeroLagTEMA( ( H + L ) / 2, avp );
ZlDif = ZlCl - ZlHa;

keep1 = Hold( HaClose >= HaOpen, 2 );
keep2 = ZlDif >= 0;
keeping = keep1 OR keep2;
keepall = keeping OR ( Ref( keeping, -1 ) AND ( C > O ) OR C >= Ref(
C, -1 ) );
keep3 = abs( C - O ) < ( H - L ) * 0.35 AND H >= Ref( L, -1 );
utr = keepall OR ( Ref( keepall, -1 ) AND keep3 );

// dn average
ZlHa = ZeroLagTEMA( HaClose, avpdn );
ZlCl = ZeroLagTEMA( ( H + L ) / 2, avpdn );
ZlDif = ZlCl - ZlHa;

keep1 = Hold( HaClose < HaOpen, 2 );
keep2 = ZlDif < 0;
keeping = keep1 OR keep2;
keepall = keeping OR ( Ref( keeping, -1 ) AND ( C < O ) OR C < Ref( C,
-1 ) );
keep3 = abs( C - O ) < ( H - L ) * 0.35 AND L <= Ref( H, -1 );
dtr = keepall OR ( Ref( keepall, -1 ) AND keep3 );

upw = dtr == 0 AND Ref( dtr, -1 ) AND utr;
dnw = utr == 0 AND Ref( utr, -1 ) AND dtr;

Haco = Flip( upw, dnw );


if( ParamToggle("Chart Type", "Price with color back|HACO wave" ) )
{
 Plot( Haco, "Haco", colorRed );
}
else
{
 Plot( C, "Close", colorBlack, ParamStyle( "Style", styleCandle,
maskPrice ) );
 Plot( 1, "", IIf( Haco , colorPaleGreen, colorRose ), styleArea |
styleOwnScale, 0, 1 );
}--- In equismetastock@xxxxxxxxxxxxxxx, "maurizio_innamorati"
<maurizio.innamorati@xxx> wrote:
>
> The above indicator is discussed in TASC December issue. unfortunately, 
> the formula in MS code is not listed in Traders' Tips (given in article 
> itself only available to subscribers). Could somebody share the code 
> for the above indicator witg us? Thanks.
>



------------------------------------

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/