//+------------------------------------------------------------------+ //| | //| ///TD Alignment/// | //| ///Developed by 4rex/// | //| ///Soheil.4x@Gmail.com/// | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009,4rex" #property link "" #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 RoyalBlue #property indicator_minimum -5.5 #property indicator_maximum 5.5 #property indicator_width1 2 #property indicator_level1 4 #property indicator_level2 -4 //---- input parameters extern int NoBars=500; extern string TDDemarkerI="TD-Demarker-I"; extern int TDDemarkerIperiod=13; extern int TDDemarkerILookBackCandle=1; extern double TDDemarkerIOverBought=60; extern double TDDemarkerIOverSold=40; extern string TDDemarkerII="TD-Demarker-II"; extern int TDDemarkerIIperiod=8; extern int TDDemarkerIILookBackCandle=1; extern double TDDemarkerIIOverBought=60; extern double TDDemarkerIIOverSold=40; extern string TDPressure="TD-Pressure"; extern int TDPressureperiod=5; extern double TDPressureOverBought=82; extern double TDPressureOverSold=18; extern string TDREI="TD-REI"; extern int TDREIperiod=5; extern int TDREILookBackCandle=2; extern double TDREIOverBought=40; extern double TDREIOverSold=-40; extern string TDROCI="TD-ROC-I"; extern int TDROCIperiod=12; extern double TDROCIOverBought=101; extern double TDROCIOverSold=99; //----Variables int i,nCountedBars,ROCIA,PressureA,DemarkerIA,DemarkerIIA,REIA,Sum,max,max1,max2,max3; double ROCI,Pressure,DemarkerI,DemarkerII,REI; //---- buffers double Alignment[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { string short_name; //---- IndicatorBuffers(1); SetIndexBuffer(0,Alignment); //---- indicator line SetIndexStyle(0,DRAW_LINE); //---- name for DataWindow and indicator subwindow label short_name="TD-Alignment"; IndicatorShortName(short_name); SetIndexLabel(0,short_name); //---- first values aren't drawn SetIndexDrawBegin(0,max); //---- return(0); } //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| TD Alignment | //+------------------------------------------------------------------+ int start() { max1=MathMax(TDDemarkerIperiod,TDDemarkerIIperiod); max2=MathMax(max1,TDPressureperiod); max3=MathMax(max2,TDREIperiod); max=MathMax(max3,TDROCIperiod); if(Bars<=NoBars-max) { Alert("Not enough bars in ",Symbol(),Period()," chart.","\n","Please set No.Bars to ",Bars-max-2," or less."); return(0); } //---- insufficient data if(Bars<=max) return(0); //---- bars count that does not changed after last indicator launch. nCountedBars=IndicatorCounted(); //---- i=NoBars; while(i>=0) { ROCI=iCustom(NULL,0,"TD-ROC-I",TDROCIperiod,0,i); if(ROCI>=TDROCIOverBought) ROCIA=1; if(ROCITDROCIOverSold) ROCIA=0; if(ROCI<=TDROCIOverSold) ROCIA=-1; Pressure=iCustom(NULL,0,"TD-Pressure",NoBars,TDPressureperiod,false,0,i); if(Pressure>=TDPressureOverBought) PressureA=1; if(PressureTDPressureOverSold) PressureA=0; if(Pressure<=TDPressureOverSold) PressureA=-1; DemarkerI=iCustom(NULL,0,"TD-Demarker-I",NoBars,TDDemarkerIperiod,TDDemarkerILookBackCandle,false,0,i); if(DemarkerI>=TDDemarkerIOverBought) DemarkerIA=1; if(DemarkerITDDemarkerIOverSold) DemarkerIA=0; if(DemarkerI<=TDDemarkerIOverSold) DemarkerIA=-1; DemarkerII=iCustom(NULL,0,"TD-Demarker-II",NoBars,TDDemarkerIIperiod,TDDemarkerIILookBackCandle,false,0,i); if(DemarkerII>=TDDemarkerIIOverBought) DemarkerIIA=1; if(DemarkerIITDDemarkerIIOverSold) DemarkerIIA=0; if(DemarkerII<=TDDemarkerIIOverSold) DemarkerIIA=-1; REI=iCustom(NULL,0,"TD-REI",NoBars,TDREIperiod,TDREILookBackCandle,false,0,i); if(REI>=TDREIOverBought) REIA=1; if(REITDREIOverSold) REIA=0; if(REI<=TDREIOverSold) REIA=-1; Sum=ROCIA+PressureA+DemarkerIA+DemarkerIIA+REIA; Alignment[i]=Sum; i--; } return(0); } //------- //End of Program