Stock Portfolio Organizer

The ultimate porfolio management solution.

Shares, Margin, CFD's, Futures and Forex
EOD and Realtime
Dividends and Trust Distributions
And Much More ....
For Portfolio Manager Click Here

WiseTrader Toolbox

#1 Selling Amibroker Plugin featuring:

Advanced Adaptive Indicators
Advanced Pattern Exploration
Neural Networks
And Much More ....
Find Out More Here

Reversing MACD Indicator Panel for Amibroker (AFL)

Copy & Paste Friendly
// This is all-in-one formula for the indicator panel.
// To use it, enter the formula in the AFL Editor, then press "Insert indicator."
// To change indicator, select parameters and select the value from the parameter option
// "Plot Indicator"
//
_SECTION_BEGIN( "Indicator selection" );
SetChartOptions( 0, chartWrapTitle );
GraphXSpace = Param("Chart whitespace", 10, 2, 15, 1 );
p_plot_indicator = ParamList( "Plot indicator", "MACD|MACD_HLC|MACD_BB|MACD_MTF", 0 );
_SECTION_END();

_SECTION_BEGIN( "PMACD functions" );
// General MACD function
function MACDa( price, fast, slow )
{
    return EMA( price, fast ) - EMA( price, slow );
}

// returns price where MACD is equal to previous bar MACD
// note that PMACDeq() computes the next bar value, so
// - it should be plotted by shifting 1 bar forward
// - or reference 1 bar back when comparing to price
function PMACDeq( price, period_X, period_Y )
{
    alphaX = 2. / ( 1. + period_X );
    alphaY = 2. / ( 1. + period_Y );
    return (EMA(price,period_X)*alphaX - EMA(price,period_Y)*alphaY)/(alphaX - alphaY);
}


// returns price where MACD is equal to level value
// e.g. PMACDlevel(0, C, 12, 16) would return the series
//      where next price would make MACD=0
//
// note that PMACDLevel() computes the next bar value, so
// - it should be plotted by shifting 1 bar forward
// - or reference 1 bar back when comparing to price
function PMACDlevel( level, price, period_X, period_Y )
{
    alphaX = 2. / ( 1. + period_X );
    alphaY = 2. / ( 1. + period_Y );
    One_alphaX = 1 - alphaX;
    One_alphaY = 1 - alphaY;
    return ( Level + EMA( price, period_Y ) * One_alphaY - EMA( price, period_X )
             * One_alphaX ) / ( alphaX - alphaY );
}

// for simplicity, case where level=0 in PMACDlevel()
function PMACDzero( price, period_X, period_Y )
{
    return PMACDlevel( 0, price, period_X, period_Y );
}
_SECTION_END();

_SECTION_BEGIN( "MACD" );
// Plot MACD
p_px = ParamField( "Price field", 3 ) ;
p_fast = Param( "Period fast", 12, 1, 24, 1 );
p_slow = Param( "Period slow", 26, 2, 52, 1 );
p_signal  = Param( "Period signal", 9, 1, 18, 1 );

if ( p_plot_indicator == "MACD" ) {
    Plot( md = MACDa( p_px, p_fast, p_slow ), _DEFAULT_NAME(), colorBlue, styleDots |
          styleLine | styleThick );
    PlotShapes( shapeSmallCircle, colorBlue, 0, md, 0 );

    Plot( sl = EMA( md, p_signal ), StrFormat( "Signal(%g)", p_signal ), colorRed,
          styleLine | styleThick );
    Plot( md - sl, "MACD Histogram", colorBlack, styleNoTitle | styleHistogram |
          styleNoLabel );

    // Use for title only - the next price required for MACD to be the same
    Plot( PMACDeq( p_px, p_fast, p_slow ), "Next_PMACDeq" + _PARAM_VALUES() + " from "
          + SelectedValue( p_px ), colorBlue, styleNoDraw | styleOwnScale );

    // Use for title only - the next price required for MACD to across zero
    Plot( PMACDzero( p_px, p_fast, p_slow ), "Next_PMACDzero" + _PARAM_VALUES(),
          colorBlack, styleNoDraw | styleOwnScale );
}
_SECTION_END();

_SECTION_BEGIN( "MACD_HLC" );
// Plot MACD of the High, Low and Close
p_fast = Param( "period fast", 12, 1, 24, 1 );
p_slow = Param( "period slow", 26, 2, 52, 1 );

if ( p_plot_indicator == "MACD_HLC" )
{
    Plot( 0, "", colorBlack, styleLine | styleNoLabel );

    Plot( md = MACDa( H, p_fast, p_slow ), StrFormat( "MACD(H,%g,%g)", p_fast, p_slow ),
          colorGreen, styleDots | styleLine | styleThick );
    // mark each point with a PlotShapes() circle that is larger than default Plot() styleDots
    PlotShapes( shapeSmallCircle, colorGreen, 0, md, 0 );

    Plot( md = MACDa( C, p_fast, p_slow ), StrFormat( "MACD(C,%g,%g)", p_fast, p_slow ),
          colorBlue, styleDots | styleLine | styleThick );
    PlotShapes( shapeSmallCircle, colorBlue, 0, md, 0 );

    Plot( md = MACDa( L, p_fast, p_slow ), StrFormat( "MACD(L,%g,%g)", p_fast, p_slow ),
          colorRed, styleDots | styleLine | styleThick );
    PlotShapes( shapeSmallCircle, colorRed, 0, md, 0 );
}
_SECTION_END();

_SECTION_BEGIN( "MACD_BB" );
// Plot MACD with BB
p_px = ParamField( "Price field", 3 );
p_fast = Param( "period fast", 12, 1, 24, 1 );
p_slow = Param( "period slow", 26, 2, 52, 1 );
p_signal  = Param( "period signal", 9, 1, 18, 1 );
p_bbperiod  = Param( "period bb", 10, 2, 20, 1 );
p_bbwidth = 1;

if ( p_plot_indicator == "MACD_BB" ) {
    md = MACDa( p_px, p_fast, p_slow );
    md1 = Ref( md, -1 );
    mdsig = EMA( md, p_signal );
    BBtop = BBandTop( md, p_bbperiod, p_bbwidth );
    BBbot = BBandBot( md, p_bbperiod, p_bbwidth );
    Hist = md - mdsig;

    Color = IIf( md<0 AND md>md1, colorLime, IIf( md > 0 AND md > md1, colorBrightGreen,
                 IIf( md > 0 AND md < md1, colorOrange, colorRed ) ) );
    Plot( md, _DEFAULT_NAME(), color, styleDots | styleLine );
    PlotShapes( shapeSmallCircle, color, 0, md, 0 );

    // show the MACD zero line
    Plot( 0, "", IIf( md > 0, colorIndigo, colorRed ), styleLine | styleThick |
          styleNoLabel );
    // show the MACD histo as a ribbon on the bottom of the panel
    Plot( 3, "", IIf( Hist > 0, colorIndigo, colorRed ), styleArea | styleOwnScale |
          styleNoLabel, 0, 100, 0, -2 );

    // Plot the BB
    Plot( BBtop, "BBtop", colorGreen, styleDashed | styleNoRescale );
    Plot( BBbot, "BBbot", colorRed, styleDashed |  styleNoRescale );
    PlotOHLC( BBtop, BBtop, BBbot, BBbot, "BB",  colorLightGrey, styleCloud |
              styleNoLabel | styleNoTitle | styleNoRescale, Null, Null, 0, -3 );
    Plot( (BBtop + BBBot)/2, "", colorBlack, styleLine | styleNoRescale, styleNoLabel );
}
_SECTION_END();

_SECTION_BEGIN( "MACD_MTF" );
// Plot MACD_MTF
p_px = ParamField( "Price field", 3 );
p_fast = Param( "period fast", 12, 1, 24, 1 );
p_slow = Param( "period slow", 26, 2, 52, 1 );
p_signal  = Param( "period signal", 9, 1, 18, 1 );

if ( p_plot_indicator == "MACD_MTF" ) {
    Plot( md = MACDa( p_px, p_fast, p_slow ), _DEFAULT_NAME(), colorBlue, styleDots |
          styleLine | styleThick );
    PlotShapes( shapeSmallCircle, colorBlue, 0, md, 0 );

    Plot( 0, "", colorBlack, styleLine );

    // Use for title only - the next price required for MACD to be the same
    Plot( PMACDeq( p_px, p_fast, p_slow ), "Next_PMACDeq" + _PARAM_VALUES() + " from "
          + SelectedValue( p_px ), colorBlue, styleNoDraw | styleOwnScale );

    // Use for title only - the next price required for MACD to across zero
    Plot( PMACDzero( p_px, p_fast, p_slow ), "Next_PMACDzero" + _PARAM_VALUES(),
          colorBlack, styleNoDraw | styleOwnScale );

    // plot higher period MACD lines
    X = 5;  Plot( MACDa( p_px, X * p_fast, X * p_slow ), NumToStr( X, 0 ) + "*"
                  + _DEFAULT_NAME(), colorGreen, styleDots | styleLine | styleThick );
    X = 21; Plot( MACDa( p_px, X * p_fast, X * p_slow ), NumToStr( X, 0 ) + "*"
                  + _DEFAULT_NAME(), colorRed, styleDots | styleLine | styleThick );
}
_SECTION_END();
Back