-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathDynamic Fx - SweetSpots.mq4
132 lines (99 loc) · 3.64 KB
/
Dynamic Fx - SweetSpots.mq4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
//+------------------------------------------------------------------+
//| SweetSpots.mq4 |
//| |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright Shimodax"
#property link "http://www.strategybuilderfx.com"
#property indicator_chart_window
/* Introduction:
This indicator shows lines at sweet spots (50 and 100
pips levels). It is recommended to turn off the grid.
Enjoy!
Markus
*/
extern int NumLinesAboveBelow= 100;
extern int SweetSpotMainLevels= 100;
extern color LineColorMain= DarkSlateGray;
extern int LineStyleMain= STYLE_DOT;
extern bool ShowSubLevels= true;
extern int sublevels= 250;
extern color LineColorSub= DarkSlateGray;
extern int LineStyleSub= STYLE_DOT;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
return(0);
}
int deinit()
{
int obj_total= ObjectsTotal();
for (int i= obj_total; i>=0; i--) {
string name= ObjectName(i);
if (StringSubstr(name,0,11)=="[SweetSpot]")
ObjectDelete(name);
}
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
static datetime timelastupdate= 0;
static datetime lasttimeframe= 0;
// no need to update these buggers too often
if (CurTime()-timelastupdate < 600 && Period()==lasttimeframe)
return (0);
deinit(); // delete all previous lines
int i, ssp1, style, ssp, thickness; //sublevels= 50;
double ds1;
color linecolor;
if (!ShowSubLevels)
sublevels*= 2;
ssp1= Bid / Point;
ssp1= ssp1 - ssp1%sublevels;
for (i= -NumLinesAboveBelow; i<NumLinesAboveBelow; i++) {
ssp= ssp1+(i*sublevels);
if (ssp%SweetSpotMainLevels==0) {
style= LineStyleMain;
linecolor= LineColorMain;
}
else {
style= LineStyleSub;
linecolor= LineColorSub;
}
thickness= 1;
if (ssp%(SweetSpotMainLevels*10)==0) {
thickness= 2;
}
if (ssp%(SweetSpotMainLevels*100)==0) {
thickness= 3;
}
ds1= ssp*Point;
SetLevel(DoubleToStr(ds1,Digits), ds1, linecolor, style, thickness, Time[10]);
}
return(0);
}
//+------------------------------------------------------------------+
//| Helper |
//+------------------------------------------------------------------+
void SetLevel(string text, double level, color col1, int linestyle, int thickness, datetime startofday)
{
int digits= Digits;
string linename= "[SweetSpot] " + text + " Line",
pricelabel;
// create or move the horizontal line
if (ObjectFind(linename) != 0) {
ObjectCreate(linename, OBJ_HLINE, 0, 0, level);
ObjectSet(linename, OBJPROP_STYLE, linestyle);
ObjectSet(linename, OBJPROP_COLOR, col1);
ObjectSet(linename, OBJPROP_WIDTH, thickness);
ObjectSet(linename, OBJPROP_BACK, True);
}
else {
ObjectMove(linename, 0, Time[0], level);
}
}