=20 #property copyright "Copyright =A9 2007, Tim Hyder" #property link "" #define vers "04.09.2007" #define major 1 #define minor 1 #property indicator_separate_window #property indicator_minimum 0 #property indicator_maximum 6 #property indicator_buffers 4 #property indicator_color1 Lime #property indicator_color2 DarkOrange #property indicator_color3 Green #property indicator_color4 Red extern string _tmp1_ =3D " --- #TrendMTFROC options ---"; //Use VertShift as unique number to indentify each indicator=20 //when multiple are displayed. extern int VertShift =3D 1; extern double FineVertShift =3D -0.3; extern bool DisplayLegend =3D True;=20 extern int TimeFrame =3D 0; extern double NonYenTrendLevel =3D 50; extern double YenTrendLevel =3D 0.5; extern int MaxBars =3D 500; extern string _tmp2_ =3D " --- MA-ATR-ROC options ---"; extern int MA.Length =3D 20; extern int MA.Type =3D MODE_SMA; extern int MA.Price =3D PRICE_CLOSE; extern int ATR.Period =3D 5; extern int ROC.Period =3D 5; extern string _tmp3_ =3D " --- Alerts ---"; extern bool AllowTextAlerts =3D true; extern bool AllowSoundAlerts =3D true; extern string LongSound =3D "alert3.wav"; extern string ShortSound =3D "alert4.wav"; extern bool AllowEmailAlerts =3D false; //colour of time frame label on far right of indicator color TextColor =3D White; //extern string _tmp4_ =3D " --- Legend Positioning ---"; int Legend.X =3D 550; int Legend.Y =3D 2; int Legend.BigSpace =3D 78; int Legend.SmallSpace =3D 12; //---- buffers double buf2_up[]; double buf2_down[]; double buf1_up[]; double buf1_down[]; string shortname =3D ""; string pref =3D "MTF_ROC"; int ArrSize =3D 110;//159; int BarWidth =3D 0; datetime LastTime =3D -1; //-----------------------------------------------------------------------= ---------------------------------------- void init() { =20 SetIndexStyle(0, DRAW_ARROW, 0, BarWidth); SetIndexStyle(1, DRAW_ARROW, 0, BarWidth); SetIndexStyle(2, DRAW_ARROW, 0, BarWidth); SetIndexStyle(3, DRAW_ARROW, 0, BarWidth); =20 SetIndexArrow(0, ArrSize); SetIndexArrow(1, ArrSize); SetIndexArrow(2, ArrSize); SetIndexArrow(3, ArrSize); =20 SetIndexBuffer(0, buf1_up); SetIndexBuffer(1, buf1_down); SetIndexBuffer(2, buf2_up); SetIndexBuffer(3, buf2_down); =20 SetIndexEmptyValue(0, 0.0); SetIndexEmptyValue(1, 0.0); SetIndexEmptyValue(2, 0.0); SetIndexEmptyValue(3, 0.0); SetIndexLabel(0, NULL); SetIndexLabel(1, NULL); SetIndexLabel(2, NULL); SetIndexLabel(3, NULL); IndicatorDigits(0); =20 //shortname =3D "TrendMTFROC ("+UniqueNum+", "+TimeFrame+", = "+VertShift+")"; shortname =3D "#TrendMTFROC"; if (DisplayLegend) IndicatorShortName(shortname); } void deinit() { for (int i=3DObjectsTotal()-1; i>-1; i--) { if (StringFind(ObjectName(i), pref+"_TF_"+VertShift) >=3D 0) { ObjectDelete(ObjectName(i)); continue; } =20 if (StringFind(ObjectName(i), pref+"_LG_"+VertShift) >=3D 0) { ObjectDelete(ObjectName(i)); continue; } } } void start() { if (TimeFrame > 0 && TimeFrame < Period()) { //Alert("Period of the indicator must be equal or greater than = current timeframe"); //return; } int counted_bars=3DIndicatorCounted(); //---- check for possible errors if (counted_bars < 0) return(-1); //---- the last counted bar will be recounted if (counted_bars > 0) counted_bars--; int limit =3D Bars - counted_bars; limit =3D MathMin(limit, MaxBars); =20 int i,tf; = //-------------------------------1---------------------------------------= - =20 =20 string txt =3D tf2txt(TimeFrame); double TimeDiff =3D Time[0]-Time[1]; =20 string name =3D pref+"_TF_"+VertShift+"_"+txt; =20 if (ObjectFind(name) =3D=3D -1) { =20 if(VertShift=3D Level)=20 buf1_up[i] =3D VertShift; else if(ROC < Level && ROC >=3D 0) buf2_up[i] =3D VertShift; else if(ROC < 0 && ROC >=3D -Level) buf1_down[i] =3D VertShift; else if(ROC < -Level)=20 buf2_down[i] =3D VertShift; } =20 //----- /* buf1_up //Lime buf2_up //Green buf1_down //DarkOrange buf2_down //Red */ =20 string MailSubject =3D "#TrendMTFROC Alert"; string msg; =20 int bar =3D 1; =20 if (LastTime !=3D Time[0]) { //-> Lime if (buf1_up[bar] !=3D 0 && buf1_up[bar+1] =3D=3D 0) { msg =3D "ROC Trend on " +Symbol()+ " " +tf2txt(TimeFrame)+ " has = changed to Strong Long"; if (AllowTextAlerts) Alert(msg); if (AllowSoundAlerts) PlaySound(LongSound); if (AllowEmailAlerts) SendMail(MailSubject, msg); } //<- Lime if (buf1_up[bar] =3D=3D 0 && buf1_up[bar+1] !=3D 0) { msg =3D "ROC Trend on " +Symbol()+ " " +tf2txt(TimeFrame)+ " has = changed from Strong Long"; if (AllowTextAlerts) Alert(msg); if (AllowSoundAlerts) PlaySound(LongSound); if (AllowEmailAlerts) SendMail(MailSubject, msg); } //-> Red if (buf2_down[bar] !=3D 0 && buf2_down[bar+1] =3D=3D 0) { msg =3D "ROC Trend on " +Symbol()+ " " +tf2txt(TimeFrame)+ " has = changed to Strong Short"; if (AllowTextAlerts) Alert(msg); if (AllowSoundAlerts) PlaySound(ShortSound); if (AllowEmailAlerts) SendMail(MailSubject, msg); } //<- Red if (buf2_down[bar] =3D=3D 0 && buf2_down[bar+1] !=3D 0) { msg =3D "ROC Trend on " +Symbol()+ " " +tf2txt(TimeFrame)+ " has = changed from Strong Short"; if (AllowTextAlerts) Alert(msg); if (AllowSoundAlerts) PlaySound(ShortSound); if (AllowEmailAlerts) SendMail(MailSubject, msg); } =20 //----- =20 LastTime =3D Time[0]; } =20 return(0); } =20 =20 =20 //+------------------------------------------------------------------+ /* void getPeriod() { switch(Period())=20 { case 1:=20 Period_1=3D1; Period_2=3D5; //Period_3=3D15; Period_4=3D30; break; case 5:=20 Period_1=3D5; Period_2=3D15;// Period_3=3D30; Period_4=3D60; break; case 15:=20 Period_1=3D15; Period_2=3D30; //Period_3=3D60; = Period_4=3D240; break; case 30:=20 Period_1=3D30; Period_2=3D60; //Period_3=3D240; = Period_4=3D1440; break; case 60:=20 Period_1=3D60; Period_2=3D240;// Period_3=3D1440; = Period_4=3D10080; break; case 240:=20 Period_1=3D240; Period_2=3D1440;// Period_3=3D10080; = Period_4=3D43200; break; case 1440:=20 Period_1=3D1440; Period_2=3D10080; //Period_3=3D43200; = Period_4=3D43200; break; case 10080:=20 Period_1=3D10080; Period_2=3D43200;// Period_3=3D43200; = Period_4=3D43200; break; case 43200:=20 Period_1=3D43200; Period_2=3D43200;// Period_3=3D43200; = Period_4=3D43200; break; =20 } } */ string tf2txt(int tf) { if (tf =3D=3D 0) tf =3D Period(); =20 if (tf =3D=3D PERIOD_M1) return("M1"); if (tf =3D=3D PERIOD_M5) return("M5"); if (tf =3D=3D PERIOD_M15) return("M15"); if (tf =3D=3D PERIOD_M30) return("M30"); if (tf =3D=3D PERIOD_H1) return("H1"); if (tf =3D=3D PERIOD_H4) return("H4"); if (tf =3D=3D PERIOD_D1) return("D1"); if (tf =3D=3D PERIOD_W1) return("W1"); if (tf =3D=3D PERIOD_MN1) return("MN"); =20 return("??"); }