Miscellaneous
1
Views
0
Downloads
0
Favorites
_TrendMTFROC
=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<FineVertShift) FineVertShift =3D 0;
ObjectCreate(name, OBJ_TEXT, WindowFind(shortname), =
iTime(NULL,0,0)+3*TimeDiff, VertShift-FineVertShift);
ObjectSetText(name, txt,6,"Arial", TextColor);
}
else
{
ObjectSet(name, OBJPROP_TIME1, iTime(NULL,0,0)+3*TimeDiff);
}
=
//-------------------------------Legend----------------------------------=
------
=20
=20
int FontSz =3D 7;
int XDist =3D 0;
XDist =3D Legend.X;
if (DisplayLegend)
{
name =3D pref+"_LG_"+VertShift+"_Legend";
=20
if (ObjectFind(name) =3D=3D -1)
ObjectCreate(name, OBJ_LABEL, WindowFind(shortname), 0, 0);
=20
//ObjectSet(name, OBJPROP_CORNER, 0);
ObjectSet(name, OBJPROP_XDISTANCE, XDist);
ObjectSet(name, OBJPROP_YDISTANCE, Legend.Y);
ObjectSetText(name, "LEGEND", FontSz, "Arial", Silver);
//---
name =3D pref+"_LG_"+VertShift+"_Sq1";
=20
if (ObjectFind(name) =3D=3D -1)
ObjectCreate(name, OBJ_LABEL, WindowFind(shortname), 0, 0);
=20
XDist =3D XDist + 45;
ObjectSet(name, OBJPROP_XDISTANCE,XDist);
ObjectSet(name, OBJPROP_YDISTANCE, Legend.Y);
ObjectSetText(name, CharToStr(110), FontSz+1, "Wingdings", =
indicator_color1);
=20
name =3D pref+"_LG_"+VertShift+"_Txt1";
=20
if (ObjectFind(name) =3D=3D -1)
ObjectCreate(name, OBJ_LABEL, WindowFind(shortname), 0, 0);
=20
XDist =3D XDist + Legend.SmallSpace;
ObjectSet(name, OBJPROP_XDISTANCE, XDist);
ObjectSet(name, OBJPROP_YDISTANCE, Legend.Y);
ObjectSetText(name, "TREND UP", FontSz, "Arial", indicator_color1);
//---
=20
name =3D pref+"_LG_"+VertShift+"_Sq2";
=20
if (ObjectFind(name) =3D=3D -1)
ObjectCreate(name, OBJ_LABEL, WindowFind(shortname), 0, 0);
=20
XDist =3D XDist + Legend.BigSpace-20;
ObjectSet(name, OBJPROP_XDISTANCE, XDist);
ObjectSet(name, OBJPROP_YDISTANCE, Legend.Y);
ObjectSetText(name, CharToStr(110), FontSz+1, "Wingdings", =
indicator_color3);
=20
name =3D pref+"_LG_"+VertShift+"_Txt2";
=20
if (ObjectFind(name) =3D=3D -1)
ObjectCreate(name, OBJ_LABEL, WindowFind(shortname), 0, 0);
=20
XDist =3D XDist + Legend.SmallSpace;
ObjectSet(name, OBJPROP_XDISTANCE, XDist);
ObjectSet(name, OBJPROP_YDISTANCE, Legend.Y);
ObjectSetText(name, "BULLISH START", FontSz, "Arial", =
indicator_color3);
//---
=20
name =3D pref+"_LG_"+VertShift+"_Sq3";
=20
if (ObjectFind(name) =3D=3D -1)
ObjectCreate(name, OBJ_LABEL, WindowFind(shortname), 0, 0);
=20
XDist =3D XDist + Legend.BigSpace;
ObjectSet(name, OBJPROP_XDISTANCE, XDist);
ObjectSet(name, OBJPROP_YDISTANCE, Legend.Y);
ObjectSetText(name, CharToStr(110), FontSz+1, "Wingdings", =
indicator_color2);
=20
name =3D pref+"_LG_"+VertShift+"_Txt3";
=20
if (ObjectFind(name) =3D=3D -1)
ObjectCreate(name, OBJ_LABEL, WindowFind(shortname), 0, 0);
=20
XDist =3D XDist + Legend.SmallSpace;
ObjectSet(name, OBJPROP_XDISTANCE, XDist);
ObjectSet(name, OBJPROP_YDISTANCE, Legend.Y);
ObjectSetText(name, "BEARISH START", FontSz, "Arial", =
indicator_color2);
=20
//---
=20
name =3D pref+"_LG_"+VertShift+"_Sq4";
=20
if (ObjectFind(name) =3D=3D -1)
ObjectCreate(name, OBJ_LABEL, WindowFind(shortname), 0, 0);
=20
XDist =3D XDist + Legend.BigSpace;
ObjectSet(name, OBJPROP_XDISTANCE, XDist);
ObjectSet(name, OBJPROP_YDISTANCE, Legend.Y);
ObjectSetText(name, CharToStr(110), FontSz+1, "Wingdings", =
indicator_color4);
=20
name =3D pref+"_LG_"+VertShift+"_Txt4";
=20
if (ObjectFind(name) =3D=3D -1)
ObjectCreate(name, OBJ_LABEL, WindowFind(shortname), 0, 0);
=20
XDist =3D XDist + Legend.SmallSpace;
ObjectSet(name, OBJPROP_XDISTANCE, XDist);
ObjectSet(name, OBJPROP_YDISTANCE, Legend.Y);
ObjectSetText(name, "DOWN TREND", FontSz, "Arial", =
indicator_color4); =20
}
=20
=
//-------------------------------2---------------------------------------=
-
double Level =3D NonYenTrendLevel;
if (StringFind(Symbol(), "JPY") !=3D -1) Level =3D YenTrendLevel;
datetime TimeArray_1[];
ArrayCopySeries(TimeArray_1,MODE_TIME,Symbol(),TimeFrame);
int yy;
=20
//limit =3D MathMax(limit, TimeFrame/Period());
=20
for (i=3D0, yy=3D0; i<limit; i++)
{
if (Time[i] < TimeArray_1[yy]) yy++;
double ROC =3D iCustom(NULL, TimeFrame, "i-MA-ATR-ROC", MA.Length, =
MA.Type, MA.Price, ATR.Period, ROC.Period, 0, yy);
=20
//int shift =3D iBarShift(NULL, TimeFrame, Time[i]);
//double ROC =3D iCustom(NULL, TimeFrame, "i-MA-ATR-ROC", MA.Length, =
MA.Type, MA.Price, ATR.Period, ROC.Period, 0, shift);
buf1_down[i] =3D 0;
buf1_up[i] =3D 0; =20
buf2_down[i] =3D 0;
buf2_up[i] =3D 0; =20
if (ROC >=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("??");
}
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---