### Stock Portfolio Organizer

The ultimate porfolio management solution.

### WiseTrader Toolbox

**#1** Selling **Amibroker** Plugin featuring:

### MACD - Adaptive V.1.0 for Amibroker (AFL)

This indicator was created by Karthik Marar. It is based on classic macd but with an exceptional smoothing.

This smoothing eliminates the noise of the classic macd as you see in the image.

So he calculated the adaptive MACD with two adaptive moving averages, one adaptive to the dominant cycle and the other adaptive to twice the dominant cycle. As the basic behind the MACD is the difference of two moving averages we cannot find much difference between the conventional MACD (12, 26) and the adaptive MACD. However the adaptive MACD is less prone for less whipsaws and the catch the trends very well at the same time the catches the turning points in time. The Adaptive MACD is definite one notch better than the conventional MACD.

### Screenshots

### Indicator / Formula

//||===================================================================================|| //|| MACD - Adaptive V.1.0 - Adaptive MACD by Karthimarar || //|| 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); } sp=DCperiod; _SECTION_END(); _SECTION_BEGIN("Adaptive MACD V.1.0"); SetChartBkColor(colorWhite); fastper = 2/((sp)+1); slowper = 2/(2*sp+1); slowema = AMA(C,slowper); fastema = AMA(C,fastper); MACDee = fastema-slowema; sig = MA(MACDee,9); Plot(MACDee,EncodeColor(colorBlue)+"MACD - Adaptive V.1.0"+"("+WriteVal(dcperiod/2,0)+","+WriteVal(dcperiod,0)+")",colorLime,1|styleThick); Plot(MA(MACDee,9),"sig",colorRed,1|styleThick); r = MACDee; s = MA(MACDee,9); j = MACDee-MA(MACDee,9); SetBarFillColor(IIf( r-s > 0, colorAqua, colorOrange)); PlotOHLC(0,j,0,j,"",IIf( r-s > 0, colorAqua, IIf(r-s <0 ,colorOrange,colorWhite)), styleCandle |styleOwnScale) ; _SECTION_END();

### 5 comments

#### Leave Comment

Please login here to leave a comment.

Back
1.42grOutput is good but the code needs refactoring (cleaning).

The param Cyclepart is being set to the value 0.7 but not used anywhere in the code.

2.42grRefer to edit below

3.42grOutput is good but the code needs refactoring (cleaning).

The param Cyclepart is being set to the value 0.7 but not used anywhere in the code.

Also change

`slowema = AMA( C ,slowper);`

To

`slowema = AMA( Avg ,slowper);`

When crossing with

`fastema = AMA(C,fastper);`

You get signals on average 1 bar earlier.

Reason is that the slowema

forms a more stable base from the fastema is compared to.

.

4.42grMy comments are being changed by the system

The parameters for slowema = AMA and Fastema = AMA have lost their params

Admin: is the system changing or deleting parts of my edits ?

Thanks

5.administratorI have fixed your comment. Comments are formatted using Markdown that’s why.