.

ADX Modified - Amibroker AFL Code

Click Image To Enlarge. Please Rate And Comment.

ADX Modified

_SECTION_BEGIN("ADX");
// ADX/DMI Indicator
range = Param("Periods", 14, 2, 200, 1 );
Plot( ad = ADX(range), _DEFAULT_NAME(), ParamColor( "ADX color", colorBlue ), ParamStyle("ADX style", styleThick ) );
Plot( pd = PDI(range), "+DI", ParamColor( "+DI color", colorGreen ), ParamStyle("+DI style") );
Plot( md = MDI(range), "-DI", ParamColor( "-DI color", colorRed ), ParamStyle("-DI style") );

if( Status("action") == actionCommentary )
{
ep = IIf( pd > md, 
          ValueWhen( Cross( pd, md ), High ), 
          ValueWhen( Cross( md, pd ), Low ) );

good = IIf( pd > md, 
            High > ep, 
            Low < ep );

bs = IIf( pd > md, 
          BarsSince( Cross( pd, md ) ), 
          BarsSince( Cross( md, pd ) ) );

printf("Directional movement:\n");
printf("\nPlus directional movement index line (+DI) is currently "+
WriteIf( pd > md,"above", "below")+
" minus directional movement index (-DI)");

printf("\nIt crossed "+ 
WriteIf( pd > md, "above", "below" ) 
+ " " + 
WriteVal( bs, 1.0 ) + " bars ago.\n");


printf("\nWelles Wilder (the author of Directional Movement indicator) suggests buying when the +DI rises above the -DI and selling when the +DI falls below the -DI.");

printf("\n" + WriteIf( bs < 4, 
"\nSince the crossover happened just recently, this may be a good opportunity to enter " + 
WriteIf( pd > md, "long" , "short" ) + 
" trade (or close already open "+
WriteIf( pd > md, "short", "long")+
" trade (if any)\n",
"\nCrossover happened more than 3 bars ago, so it is too late to act on this signal.\n")+

WriteIf( bs < 4,
"Wilder, however, suggest to qualify simple +DI/-DI crossover with 'extreme point rule'. When the +DI rises above the -DI, the extreme price is the high price on the day the lines cross. When the +DI falls below the -DI, the extreme price is the low price on the day the lines cross. The extreme point is then used as a trigger point at which you should implement the trade.\n","")+ 
WriteIf( bs < 4, "Current extreme point value is " + 
WriteVal( ep ) + "." +
WriteIf( good, " Since today's " + 
WriteIf( pd > md, 
"high ("+WriteVal( High ) +") is higher", 
"low ("+WriteVal(Low)+") is lower" ) + 
" than extreme point so the rule is fulfilled and " + 
WriteIf( pd > md, "buy","sell")+
" signal is confirmed.\n",
"Until now this rule is NOT fulfilled, so it is suggested to wait for the confirmation.\n"),""));

falling = ROC( Ad, 2 ) < 0;

strength = IIf( Ad < 15 OR ( Ad < 25 AND falling ), 0,
           IIf( Ad < 25 OR ( Ad < 35 AND falling ), 1,
                2 ) );

printf("\nTrend strength:\n");

printf("\nThe ADX is currently " + WriteVal( Ad ) + " and "
+WriteIf( falling, "falling.", "rising." )); 

printf("\nThis suggests that the trend is "+
WriteIf( strength == 0,
"rather weak or very weak. Important: when trend is weak directional movement system generates signal too frequently and whipsaws can 'eat' all your profits.", 
WriteIf( strength == 2, 
"rather strong.",
"medium in its strength.")));

printf("\n\nThis commentary is not a recommendation to buy or sell. Use at your own risk.");
}
_SECTION_END();

_SECTION_BEGIN("ADX Indicator");
//Trend Following Systems DO NOT work when ADX is Below 20 - Tech Analysis A-Z; page 120

P1 = Param("Period",14,0,100,1);

MyPDI= PDI(P1);//Positive Directional Indicator

MyMDI= MDI(P1);//Negative Directional Indicator (Minus)

MyADX= ADX(P1);//Average Directional Movement Index

//Green ADX Line=Rising; Red ADX Line=Falling

col = IIf( MyADX > Ref( MyADX, -1 ), colorGreen, colorIndigo );

Plot( MyPDI,"+DI",colorBlue, styleLine);

Plot( MyMDI,"-DI",colorRed, styleLine);

Plot( MyADX,"ADX",col, styleLine);

Title=Name()+ " " + Date() + " Price: " + C + EncodeColor(colorIndigo) +"  ADX" + WriteVal( MyADX )+ EncodeColor(colorBlue) + "  +DMI" + WriteVal( MyPDI )+ EncodeColor(colorRed) + "  -DMI" + WriteVal( MyMDI );
_SECTION_END();
Previous Post Next Post