Merge branch 'master' of git://repo.or.cz/mqlkit
[mqlkit.git] / indicators / VGridLinesX4.LC.mq4
bloba4187b44229433405b4a7d27c5bed4cb67314ef5
1 /*\r
2 Äëÿ  ðàáîòû  èíäèêàòîðà  ñëåäóåò  ïîëîæèòü ôàéë \r
3   \r
4 INDICATOR_COUNTED.mqh   \r
5 \r
6 â ïàïêó (äèðåêòîðèþ): MetaTrader\experts\include\\r
7 \r
8 Èíäèêàòîð  ïðåäíàçíà÷åí  äëÿ  ðàáîòû  òîëüêî òàéìôðåéìàõ  íå  áîëååå \r
9 ÷åòûð¸õ÷àñîâûõ.\r
10 */\r
11 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
12 //|                                              VGridLinesX4.LC.mq4 |\r
13 //|                             Copyright © 2006,   Nikolay Kositsin | \r
14 //|                              Khabarovsk,   farria@mail.redcom.ru | \r
15 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ \r
16 #property copyright "Nikolay Kositsin"\r
17 #property link "farria@mail.redcom.ru" \r
18 //---- îòðèñîâêà èíäèêàòîðà âî âñåõ îêíàõ\r
19 #property indicator_chart_window \r
20 //---- ÂÕÎÄÍÛÅ ÏÀÐÀÌÅÒÐÛ ÈÍÄÈÊÀÒÎÐÀ þþþþþþþþþþþþþþþþþææææþþþþþþþþþææææææææææþþþþþææþþææ+\r
21 extern int   Ind_Shift = 0;     // cäâèã èíäèêàòîðà âäîëü îñè âðåìåíè  â áàðàõ \r
22 extern int   Count_Bar = 300;   // Êîëè÷åñòâî ïîñëåäíèõ áàðîâ äëÿ ðàñ÷¸òà èíäèêàòîðà\r
23 extern int   Ind_Style = 0;     // Ñòèëü èçîáðàæåíèÿ èíäèêàòîðà (0 - ïî óìîë÷àíèþ)\r
24 extern bool  AllDelate = false; // óäàëåíèå âñåõ öèêëîâ è âñåõ âåðòèêàëüíûõ ëèíèé  \r
25 //--+\r
26 extern int   Hour_Shift0 = 0;   // cäâèã ñóòî÷íîãî öèêëà â ÷àñàõ \r
27 extern int   Hour_Shift1 = 0;   // cäâèã ïåðâîãî  äâàäöàòè÷åòûð¸õ÷àñîâîãî öèêëà â ÷àñàõ\r
28 extern int   Hour_Shift2 = 8;   // cäâèã âòîðîãî  äâàäöàòè÷åòûð¸õ÷àñîâîãî öèêëà â ÷àñàõ\r
29 extern int   Hour_Shift3 = 16;  // cäâèã òðåòüåãî äâàäöàòè÷åòûð¸õ÷àñîâîãî öèêëà â ÷àñàõ \r
30 //--+\r
31 extern color      COLOR0 = C'148,135,218';// öâåò ëèíèè íåäåëüíîãî öèêëà\r
32 extern int   Line_Style0 = 3;             // Ñòèëü èçîáðàæåíèÿ ëèíèè  íåäåëüíîãî öèêëà\r
33 extern int   Line_Width0 = 0;             // Òîëùèíà ëèíèè íåäåëüíîãî öèêëà\r
34 //--+\r
35 extern color      COLOR1 = C'176,0,176';  // öâåò ëèíèè ñóòî÷íîãî öèêëà 1 \r
36 extern int   Line_Style1 = 4;             // Ñòèëü èçîáðàæåíèÿ ëèíèè ñóòî÷íîãî öèêëà 1 \r
37 extern int   Line_Width1 = 0;             // Òîëùèíà ëèíèè ñóòî÷íîãî öèêëà 1 \r
38 //--+\r
39 extern color      COLOR2 = C'0,119,119';  // öâåò ëèíèè ñóòî÷íîãî öèêëà 2\r
40 extern int   Line_Style2 = 4;             // Ñòèëü èçîáðàæåíèÿ ëèíèè ñóòî÷íîãî öèêëà 2\r
41 extern int   Line_Width2 = 0;             // Òîëùèíà ëèíèè ñóòî÷íîãî öèêëà 2\r
42 //--+\r
43 extern color      COLOR3 = C'119,0,170';  // öâåò ëèíèè ñóòî÷íîãî öèêëà 3\r
44 extern int   Line_Style3 = 4;             // Ñòèëü èçîáðàæåíèÿ ëèíèè ñóòî÷íîãî öèêëà 3\r
45 extern int   Line_Width3 = 0;             // Òîëùèíà ëèíèè ñóòî÷íîãî öèêëà 3\r
46 //---- ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ+\r
47 //---- èíäèêàòîðíûå áóôôåðû\r
48 double Buffer[];\r
50 //---- öåëûå ïåðåìåííûå  \r
51 int   time0,time1,fix0,fix1,fix2,fix3,Wind_total,Del_time,Start_Time,ii,bar;\r
52 color COLOR0x,COLOR1x,COLOR2x,COLOR3x;\r
53 int Line_Style0x,Line_Style1x,Line_Style2x,Line_Style3x,Line_Width0x,Line_Width1x,Line_Width2x,Line_Width3x;\r
54 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ \r
55 //| VGridLinesX4.LC initialization function                          | \r
56 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ \r
57 int init() \r
58 {\r
59 if (Period()>240)return(0);\r
60 //--+ óäàëåíèå âñåõ âåðòèêàëüíûõ ëèíèé è öèêëîâ ñ ãðàôèêà \r
61 if (AllDelate==true){ObjectsDeleteAll(EMPTY, OBJ_VLINE);ObjectsDeleteAll(EMPTY,OBJ_CYCLES);}\r
62 //--+ ïîäñ÷¸ò âñåõ ñóùåñòâóþùèõ îêîí ãðàôèêà\r
63 Wind_total=WindowsTotal();\r
64 //---- 1 èíäèêàòîðíûé áóôôåð èñïîëüçîâàí äëÿ ñ÷¸òà\r
65 SetIndexBuffer(0,Buffer);\r
66 //---- âûáîð ñòèëÿ èçîáðàæåíèÿ ëèíèé èíäèêàòîðà\r
67 switch(Ind_Style)\r
68  {\r
69  case  0: StileCreat(COLOR0,COLOR1,COLOR2,COLOR3,Line_Style0,Line_Style1,Line_Style2,Line_Style3,Line_Width0,Line_Width1,Line_Width2,Line_Width3);break;\r
70  case  1: StileCreat(Red,C'198,0,198',C'0,119,119',C'119,0,170',4,4,4,4,0,0,0,0);break;\r
71  case  2: StileCreat(Magenta,Red,SpringGreen,C'128,0,255',4,4,4,4,0,0,0,0);break;\r
72  case  3: StileCreat(Magenta,Red,SpringGreen,C'128,0,255',0,0,0,0,2,2,2,3);break;\r
73  case  4: StileCreat(Red,Magenta,MediumSeaGreen,Blue,0,0,0,0,2,2,2,2);break;\r
74  case  5: StileCreat(Orange,Red,SpringGreen,C'128,0,255',0,0,0,0,3,2,2,3);break;\r
75  case  6: StileCreat(Yellow,Red,C'0,217,108',C'170,85,255',1,1,1,1,0,0,0,0);break;\r
76  case  7: StileCreat(Yellow,Red,C'0,217,108',C'170,85,255',4,4,4,4,0,0,0,0);break;\r
77  case  8: StileCreat(Gold,C'236,0,0',C'0,147,73',C'116,0,232',4,4,4,4,0,0,0,0);break;\r
78  case  9: StileCreat(Orange,C'213,0,0',C'0,125,63',C'99,0,198',4,4,4,4,0,0,0,0);break;\r
79   \r
80  default: StileCreat(COLOR0,COLOR1,COLOR2,COLOR3,Line_Style0,Line_Style1,Line_Style2,Line_Style3,Line_Width0,Line_Width1,Line_Width2,Line_Width3);\r
81  }           \r
82 //---- çàâåðøåíèå èíèöèàëèçàöèè\r
83 return(0); \r
84 \r
85 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
86 //| VGridLinesX4.LC deinitialization function                        |\r
87 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
88 int deinit()\r
89   {\r
90 //--+ Î÷èñòêà âñåõ îêîí îò âåðòèêàëüíûõ ëèíèé è öèêëîâ , ñîçäàííûõ ïðè ðàáîòå èíäèêàòîðà \r
91 VLineDelateAll("VLine_Grid");\r
92 CycleDelateAll();\r
93 //ObjectsDeleteAll(EMPTY,OBJ_VLINE) ;\r
94 //ObjectsDeleteAll(EMPTY,OBJ_CYCLES); \r
95 //---- çàâåðøåíèå äåèíèöèàëèçàöèè\r
96    return(0);\r
97   }\r
98 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
99 //| VGridLinesX4.LC iteration function                               |\r
100 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
101 int start()\r
103 if (Period()>240)return(0);\r
104 //----+ ïðîâåðêè êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü\r
105 if (Count_Bar<7500/Period())Count_Bar=7500/Period();\r
106 if((Count_Bar==7500/Period())&&(Count_Bar>Bars-1))COLOR0x=CLR_NONE;\r
107 if (Count_Bar>Bars-1)Count_Bar=Bars-1;\r
108 if (Count_Bar<4500/Period())Count_Bar=4500/Period();\r
109 if (Count_Bar>Bars-1)return(0);\r
110 //----+ Ââåäåíèå öåëûõ ïåðåìåííûõ è ïîëó÷åíèå óæå ïîäñ÷èòàííûõ áàðîâ\r
111 //---- áëîêèðîâàíèå ïåðåñ÷¸òà âñåõ ïîäñ÷èòàííûõ è îòðèñîâàííûõ áàðîâ ïðè ïîäêëþ÷åíèè ê èíòåðíåòó\r
112 int daily_lewel,weekl_lewel,Hour_ShiftW,counted_bars=INDICATOR_COUNTED(0); INDICATOR_COUNTED(1);\r
113 //---- ïðîâåðêà íà âîçìîæíûå îøèáêè\r
114 if (counted_bars<0){INDICATOR_COUNTED(-1);return(-1);}\r
115 //---- ïîñëåäíèé ïîäñ÷èòàííûé áàð äîëæåí áûòü ïåðåñ÷èòàí \r
116 if (counted_bars>0) counted_bars--;\r
117 //---- \r
118 Hour_ShiftW=Hour_Shift0+48;\r
119 //+---+ Èíèöèàëèçàöèÿ íóëÿ ïðè ñìåíå äíÿ íåäåëè\r
120 time0=Time[0];\r
121 time1=Time[1];\r
122 weekl_lewel=168*MathFloor(time0/604800);\r
123 fix0=3600*(weekl_lewel+Hour_ShiftW);\r
124 if((time0>=fix0)&&(time1<fix0))counted_bars=0;\r
125 //---- îïðåäåëåíèå íîìåðà ñàìîãî ñòàðîãî áàðà, íà÷èíàÿ ñ êîòîðîãî áóäåò ïðîèçåä¸í ïåðåñ÷¸ò íîâûõ áàðîâ\r
126 int limit=Count_Bar-counted_bars-1; \r
127 //+---+ Î÷èñòêà îêîí îò âåðòèêàëüíûõ ëèíèé, ñîçäàííûõ íà ïðåæíåì ñòàðòå èíäèêàòîðà\r
128 //---- èíèöèàëèçàöèÿ âñåõ ýëåìåíòîâ ìàññèâà çíà÷åíèåì -1\r
129 if (counted_bars==0)\r
130   {\r
131    VLineDelateAll("VLine_Grid");\r
132    CycleDelateAll();\r
133    ArrayInitialize(Buffer,-1);\r
134   }\r
135 //+---+ Ïîñòðîåíèå âåðòèêàëüíîé ñåòêè â âèäå ïîñëåäîâàòåëüíîñòè îòäåëüíûõ âåðòèêàëüíûõ ëèíèé \r
136 for(int bar=limit;bar>=0;bar--)\r
137   //+------+\r
138  {\r
139   if(Buffer[bar]!=-1)continue; \r
140   else                   \r
141    //+---+ \r
142    {\r
143    ObjectDelete("VLine_Grid"+Time[bar]+"");                   \r
144    time0=Time[bar+0];\r
145    time1=Time[bar+1];\r
146    //+---+\r
147    daily_lewel=024*MathFloor(time0/086400);\r
148    weekl_lewel=168*MathFloor(time0/604800);\r
149    //+---+\r
150    fix1=3600*(daily_lewel+Hour_Shift1);\r
151    fix2=3600*(daily_lewel+Hour_Shift2);\r
152    fix3=3600*(daily_lewel+Hour_Shift3);\r
153    fix0=3600*(weekl_lewel+Hour_ShiftW);\r
154    //+---+\r
155    //+---+ òðè îáðàùåíèÿ ê ôóíêöèè VLineCreate äëÿ ïîñòðîåíèÿ âåðòèêàëüíûõ ëèíèé\r
156          if((time0>=fix0)&&(time1<fix0)){VLineCreate("VLine_Grid",time0,COLOR0x,Line_Style0x,Line_Width0x);Buffer[bar]=0;}\r
157    else {if((time0>=fix1)&&(time1<fix1)){VLineCreate("VLine_Grid",time0,COLOR1x,Line_Style1x,Line_Width1x);Buffer[bar]=1;}\r
158    else {if((time0>=fix2)&&(time1<fix2)){VLineCreate("VLine_Grid",time0,COLOR2x,Line_Style2x,Line_Width2x);Buffer[bar]=2;}\r
159    else  if((time0>=fix3)&&(time1<fix3)){VLineCreate("VLine_Grid",time0,COLOR3x,Line_Style3x,Line_Width3x);Buffer[bar]=3;}}}\r
160    //+---+   \r
161    } \r
162    //+---+ Óäàëåíèå âåðòèêàëüíûõ ëèíèé, âûõîäÿùèõ çà ãðàíèöó Count_Bar                                 \r
163   Del_time=Time[bar+Count_Bar];\r
164   ObjectDelete("VLine_Grid"+Del_time+"");\r
165    //+---+\r
166  }\r
167 //+---+ Äîðèñîâêà ñåòêè ïîñëå íóëåâîãî áàðà èç öèêëîâ\r
168 if(Buffer[0]==-1)\r
169  {  \r
170    //+---+ Î÷èñòêà îêîí îò ëèíèé öèêëîâ, ñîçäàííûõ íà ïðåæíåì ñòàðòå èíäèêàòîðà\r
171    CycleDelateAll();\r
172    //+---+ ïîèñê íà÷àëà öèêëà\r
173    for(int aa=0;aa<=Bars-1;aa++){if (Buffer[aa]!=-1)break;}  \r
174    Start_Time=3600*(24*MathCeil(Time[aa]/86400)-Ind_Shift+0);\r
175    //+---+  \r
176   for(ii=0;ii<Wind_total;ii++)\r
177     {\r
178      //+---+ òðè îáðàùåíèÿ ê ôóíêöèè CycleCreate äëÿ ñîçäàíèÿ òð¸õ öèêëîâ\r
179      CycleCreate("Cycle_Grid1",Start_Time,Hour_Shift1,024,COLOR1x,Line_Style1x,Line_Width1x,ii);\r
180      CycleCreate("Cycle_Grid2",Start_Time,Hour_Shift2,024,COLOR2x,Line_Style2x,Line_Width2x,ii);\r
181      CycleCreate("Cycle_Grid3",Start_Time,Hour_Shift3,024,COLOR3x,Line_Style3x,Line_Width3x,ii);\r
182     }  \r
183   //+---+ ïîèñê íà÷àëà öèêëà   \r
184   for(int bb=0;bb<=Bars-1;bb++){if (Buffer[bb]==0)break;}  \r
185   Start_Time=3600*(168*MathCeil(Time[bb]/604800)-Ind_Shift);\r
186   int Hour_ShiftX=Hour_Shift0+96;\r
187   CycleDelate("Cycle_GridW");\r
188   //+---+ îäíî îáðàùåíèå ê ôóíêöèè CycleCreate äëÿ ñîçäàíèÿ îäíîãî öèêëà\r
189   for(ii=0;ii<Wind_total;ii++) CycleCreate("Cycle_GridW",Start_Time,Hour_ShiftX,120,COLOR0x,Line_Style0x,Line_Width0x,ii);  \r
190 //+---+ \r
191  } \r
192 //+---+ çàâåðøåíèå ïîñòðîåíèÿ öèêëîâ\r
193   \r
194 return(0);\r
196 //+---+ << Ââåäåíèå ôóíêöèè StileCreat >>-----------------------------------------------------------------------------------------------+\r
197 void StileCreat\r
199 color COLOR0g,   color COLOR1g,   color COLOR2g,   color COLOR3g,\r
200 int Line_Style0g,int Line_Style1g,int Line_Style2g,int Line_Style3g,\r
201 int Line_Width0g,int Line_Width1g,int Line_Width2g,int Line_Width3g\r
204 COLOR0x=COLOR0g; COLOR1x=COLOR1g; COLOR2x=COLOR2g; COLOR3x=COLOR3g;\r
205 Line_Style0x=Line_Style0g;Line_Style1x=Line_Style1g;Line_Style2x=Line_Style2g;Line_Style3x=Line_Style3g;\r
206 Line_Width0x=Line_Width0g;Line_Width1x=Line_Width1g;Line_Width2x=Line_Width2g;Line_Width3x=Line_Width3g;\r
207 }         \r
208 //+---+ << Ââåäåíèå ôóíêöèè VLineDelateAll >>-------------------------------------------------------------------------------------------+\r
209 void  VLineDelateAll(string  VLineDelateAll.Line_Name)\r
210   {\r
211    for(int pp=Bars-1;pp>=0;pp--)ObjectDelete(VLineDelateAll.Line_Name+Time[pp]+"");\r
212   }\r
213 //+---+ << Ââåäåíèå ôóíêöèè CycleDelate >> ---------------------------------------------------------------------------------------------+\r
214 void  CycleDelate(string CycleDelate.Cycle_Name)\r
215   {\r
216    int TT=WindowsTotal();\r
217    for(int rr=0; rr<TT; rr++)ObjectDelete(CycleDelate.Cycle_Name+rr+"");  \r
218   } \r
219 //+---+ << Ââåäåíèå ôóíêöèè CycleDelateAll >> ------------------------------------------------------------------------------------------+\r
220 void  CycleDelateAll()\r
221   {\r
222    CycleDelate("Cycle_GridW");CycleDelate("Cycle_Grid1");CycleDelate("Cycle_Grid2");CycleDelate("Cycle_Grid3"); \r
223   } \r
224 //+---+ << Ââåäåíèå ôóíêöèè VLineCreate >>----------------------------------------------------------------------------------------------+\r
225 void VLineCreate\r
227 string VLineCreate.Line_Name, int VLineCreate.time, color VLineCreate.Color, int VLineCreate.Line_Style, int VLineCreate.width\r
229 //+---+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - + \r
231    for(int ii=0;ii<WindowsTotal();ii++)\r
232    ObjectCreate(VLineCreate.Line_Name+VLineCreate.time+"", OBJ_VLINE, ii, VLineCreate.time, EMPTY);  \r
233    ObjectSet   (VLineCreate.Line_Name+VLineCreate.time+"", OBJPROP_BACK, true);\r
234    ObjectSet   (VLineCreate.Line_Name+VLineCreate.time+"", OBJPROP_STYLE, VLineCreate.Line_Style);\r
235    ObjectSet   (VLineCreate.Line_Name+VLineCreate.time+"", OBJPROP_COLOR, VLineCreate.Color);  \r
236    ObjectSet   (VLineCreate.Line_Name+VLineCreate.time+"", OBJPROP_WIDTH, VLineCreate.width); \r
237 }  \r
239 //+---+ << Ââåäåíèå ôóíêöèè CycleCreate >> ---------------------------------------------------------------------------------------------+\r
240 void CycleCreate\r
242 string CycleCreate.Cycle_Name, int CycleCreate.Start_Time, int CycleCreate.Hour_Shift,  int CycleCreate.Period, \r
243 color  CycleCreate.Color,      int CycleCreate.Style,      int CycleCreate.Width,       int CycleCreate.Window\r
245 //+---+ Ïàðàìåòð CycleCreate.Period èçìåðÿåòñÿ â äíÿõ\r
246 //+---+ Ïàðàìåòð CycleCreate.Start_Time èçìêðÿåòñÿ â ñåêóíäàõ \r
247 //+---+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \r
248 {  \r
249   int CycleCreate.St_time=CycleCreate.Start_Time+CycleCreate.Hour_Shift*3600; \r
250   int CycleCreate.Object_time=CycleCreate.St_time+CycleCreate.Period*3600;\r
251   \r
252   ObjectCreate(CycleCreate.Cycle_Name+CycleCreate.Window+"", OBJ_CYCLES,CycleCreate.Window,CycleCreate.St_time,-1000,CycleCreate.Object_time,-1000);  \r
253   ObjectSet   (CycleCreate.Cycle_Name+CycleCreate.Window+"", OBJPROP_BACK, true);\r
254   ObjectSet   (CycleCreate.Cycle_Name+CycleCreate.Window+"", OBJPROP_STYLE,  CycleCreate.Style);\r
255   ObjectSet   (CycleCreate.Cycle_Name+CycleCreate.Window+"", OBJPROP_COLOR,  CycleCreate.Color);\r
256   ObjectSet   (CycleCreate.Cycle_Name+CycleCreate.Window+"", OBJPROP_WIDTH,  CycleCreate.Width);\r
258 //+-----+ << Ââåäåíèå ôóíêöèè INDICATOR_COUNTED >> --------------------------------------------------------------------------------------+\r
259 //----+(ôàéë INDICATOR_COUNTED.mqh ñëåäóåò ïîëîæèòü â ïàïêó (äèðåêòîðèþ): MetaTrader\experts\include)\r
260 #include <INDICATOR_COUNTED.mqh> \r
261 //+--------------------------------------------------------------------------------------------------------------------------------------+