Click Image To Enlarge. Please Rate And Comment.
_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();