KMACD for Amibroker (AFL)
Nazrulcpa about 13 years ago Amibroker (AFL)
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.
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
Leave Comment
Please login here to leave a comment.
looks into the future…….
It does not look into the future… the code involves simple EMAs which definitely does not look into future.
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
Rob it’s most likely due to this statement:
Yes, you are right administrator. My sincere apologies, karthikmarar!