//+------------------------------------------------------------------+ //| TSD_PP_MACD_FORCE_Ind_v1.mq4 | //| (From Elders Book) | //| Copyright ® 2005 Bob O'Brien / Barcode | //| TSD Indicator by Pedro Puado | //| TSD Indicator version 1 | //+------------------------------------------------------------------+ #property copyright "Pedro Puado (From Elders Book)" #property link "http://www.metaquotes.net" #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 Green #property indicator_color2 Red //---- input parameters extern int Force=2; extern int FastMA=12; extern int SlowMA=26; extern int Signal=9; extern int MaxBars=1000; //---- buffers double ExtMapBuffer1[]; double ExtMapBuffer2[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexBuffer(0,ExtMapBuffer1); SetIndexLabel(0,"Up"); SetIndexStyle(1,DRAW_HISTOGRAM); SetIndexBuffer(1,ExtMapBuffer2); SetIndexLabel(1,"Down"); //---- return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); double MacdPrevious, MacdPrevious2, force, ForcePos, ForceNeg; int Direction; //---- int i,k, nDay, nWeek; i=Bars-1; if(counted_bars>0) i=Bars-counted_bars+0; i = MathMin(i, MaxBars); while (i >=0) { nWeek = GetWeekIndex(i); MacdPrevious = iMACD(Symbol(),PERIOD_W1,SlowMA,FastMA,Signal,PRICE_CLOSE,MODE_MAIN,nWeek+1); MacdPrevious2 = iMACD(Symbol(),PERIOD_W1,SlowMA,FastMA,Signal,PRICE_CLOSE,MODE_MAIN,nWeek+2); if (MacdPrevious > MacdPrevious2) Direction = 1; if (MacdPrevious < MacdPrevious2) Direction = -1; if (MacdPrevious == MacdPrevious2) Direction = 0; nDay = GetDayIndex(i); force = iForce(Symbol(),PERIOD_D1,Force,MODE_EMA,PRICE_CLOSE,nDay+1); ForcePos = force > 0; ForceNeg = force < 0; Print(nWeek, " - ", Direction, " - ", nDay, " - ", Force); if(Direction == 1 && ForceNeg) { ExtMapBuffer1[i] = 1; ExtMapBuffer2[i] = 0.0; } if(Direction == -1 && ForcePos) { ExtMapBuffer1[i] = 0.0; ExtMapBuffer2[i] = -1; } i--; } //---- return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ int GetWeekIndex(int x) { datetime dSun = StrToTime(TimeToStr(Time[x]-(TimeDayOfWeek(Time[x])*86400),TIME_DATE)); return (((iTime(Symbol(),PERIOD_W1,0)-dSun)/86400)/7); } //+------------------------------------------------------------------+ int GetDayIndex(int x) { if (Period() == PERIOD_D1) return (x); int nWeek = GetWeekIndex(x)*5; //number of days since datetime dSun = StrToTime(TimeToStr(Time[x],TIME_DATE)); int i = MathAbs((iTime(Symbol(),PERIOD_D1,nWeek)-dSun)/86400); return (nWeek-i); } //+------------------------------------------------------------------+