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

KMACD for Amibroker (AFL)

Rating:
3 / 5 (Votes 6)
Tags:
oscillator, amibroker

KMACD – A variation of MACD to catch big trends by Karthik Marar

Visit: http://karthikmarar.blogspot.com/2013/05/kmacd-variation-of-macd-to-catch-big.html

To read about it.

Similar Indicators / Formulas

Febo RSI ..real indicator
Submitted by abhinavsingh about 13 years ago
Trading Volume Statistic
Submitted by tuanstock1 over 10 years ago
Ergodic Oscillator
Submitted by dljtrader about 14 years ago
3 Days Track
Submitted by janet0211 over 14 years ago
Chande Momentum Oscillator
Submitted by klimpek almost 14 years ago

Indicator / Formula

Copy & Paste Friendly
//A new MACD Indicator KMACD Version V.1.0
// By Karthik Marar - www.karthikmarar.blogspot.com
// Public release for personal use only.
//Please do not commercialize this indicator in its original or modified form
_SECTION_BEGIN("Dominant Period");
   
    SetBarsRequired( 1000, 1000);
    prc = ( High + Low ) / 2;
    Cyclepart = 0.7 ;
    pi=4*atan(1);
    RTD=180/pi;
    DTR=pi/180;
    
    Smooth[0] = Detrender[0] = I1[0] = Q1[0] = jI[0] = jQ[0] = I2[0] = I3[0] = Q3[0] = Q2[0] = Re[0] = Re1[0] =Im[0] = Im1[0] = 0;
    Period[0] = Period1[0] = alpha = cycle = SmoothPeriod[0] = imagpart[0] = realpart[0] = DCPhase[0] = 0;
    for ( i = 6; i < BarCount; i++ )
    {
    Smooth[i] = ( 4 * prc[i] + 3 * prc[i-1] + 2 * prc[i-2] + prc[i-3] ) / 10;
    Cycle[i] = ((1-0.5*alpha[i])^2)*(Smooth[i] - 2*Smooth[i-1] + Smooth[i-2]) + 2*(1-alpha[i])*Cycle[i-1] - ((1-alpha[i])^2)*Cycle[i-2];
    AmpCorr[i] = 0.075 * Period[i-1] + 0.54;
    Detrender[i] = ( 0.0962 * Smooth[i] + 0.5769 * Smooth[i-2] - 0.5769 * Smooth[i-4] - 0.0962 * Smooth[i-6] ) * AmpCorr[i];
    Q1[i] = ( 0.0962 * Detrender[i] + 0.5769 * Detrender[i-2] - 0.5769 * Detrender[i-4] - 0.0962 * Detrender[i-6] ) * AmpCorr[i];
    I1[i] = Detrender[i-3];
    jI[i] = ( 0.0962 * I1[i] + 0.5769 * I1[i-2] - 0.5769 * I1[i-4] - 0.0962 * I1[i-6] ) * AmpCorr[i];
    jQ[i] = ( 0.0962 * Q1[i] + 0.5769 * Q1[i-2] - 0.5769 * Q1[i-4] - 0.0962 * Q1[i-6] ) * AmpCorr[i];
    I2[i] = I1[i] - jQ[i];
    Q2[i] = Q1[i] + jI[i];
    I3[i] = 0.2 * I2[i] + 0.8 * I3[i-1];
    Q3[i] = 0.2 * Q2[i] + 0.8 * Q3[i-1];
    Re[i] = I3[i] * I3[i-1] + Q3[i] * Q3[i-1];
    Im[i] = I3[i] * Q3[i-1] - Q3[i] * I3[i-1];
    Re1[i] = 0.2 * Re[i] + 0.8 * Re1[i-1];
    Im1[i] = 0.2 * Im[i] + 0.8 * Im1[i-1];
    {
    if ( Im1[i] != 0 AND Re1[i] != 0 )    Period1[i] = 360*DTR / atan( Im1[i] / Re1[i] );
    else
    Period1[i] = Period1[i-1];
    }
    {
    if ( Period1[i] > 1.5 * Period1[i-1] )  Period2[i] = 1.5 * Period1[i-1];
    else
    {
    if ( Period1[i] < 0.67 * Period1[i-1] ) Period2[i] = 0.67 * Period1[i-1];
    else
    Period2[i] = Period1[i]; 
    } 
    }
    {
    if ( Period2[i] < 6 )    Period3[i] = 6;
    else
    {
    if ( Period2[i] > 50 )   Period3[i] = 50;
    else
    period3[i]=Period2[i];
    }
    }
    Period[i] = 0.2 * Period3[i] + 0.8 * Period[i-1];
    SmoothPeriod[i] = 0.33 * Period[i] + 0.67 * SmoothPeriod[i-1];
    DCPeriod[i] = int(SmoothPeriod[i]+0.5);
}
SetChartBkColor(colorWhite); 
sp=DCperiod;

_SECTION_END();
slowper = 2/(sp+1);
EMAp =Param("EMA Period",14,5,60,1);
VARma = AMA(C,slowper);
OEMA  = EMA(C,EMAp);
MACDee = OEMA - Varma;
j = MACDee;
SetBarFillColor(IIf(MACDee>0,colorLime,colorRed));
PlotOHLC(0,j,0,j,EncodeColor(colorBlue)+"KMACD - V.1.0"+"("+WriteVal(EMAp,0)+","+WriteVal(dcperiod,0)+")",IIf(MACDee>0,colorLime,colorRed), styleCandle |styleOwnScale) ;

5 comments

1. rob hoot

looks into the future…….

2. karthikmarar

It does not look into the future… the code involves simple EMAs which definitely does not look into future.

3. rob hoot

It seems that the formula references FUTURE quotes.
If you backtest this system you may receive outstanding results
that CAN NOT be reproduced in real trading.

2045 data bars used during this check. Total execution time: 0.0194811 sec.
Approximately 1528 past and 1000 future quotes are needed to calculate the formula properly

4. administrator

Rob it’s most likely due to this statement:

SetBarsRequired( 1000, 1000);
5. rob hoot

Yes, you are right administrator. My sincere apologies, karthikmarar!

Leave Comment

Please login here to leave a comment.

Back