bleh
[mqlkit.git] / include / 3c_BB_Osc.mqh
blob4fba8da6891d5885271332c2a79fd67e3dba97ed
1 /*\r
2 Äëÿ ðàáîòû èíäèêàòîðà  ñëåäóåò  ïîëîæèòü  ôàéës  INDICATOR_COUNTED.mqh\r
3 â ïàïêó (äèðåêòîðèþ): MetaTrader\experts\include\\r
4 \r
5 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ \r
6 //|                                                    3c_BB_Osc.mqh |\r
7 //|                        Copyright © 2006,        Nikolay Kositsin | \r
8 //|                              Khabarovsk,   farria@mail.redcom.ru | \r
9 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ \r
10 #property copyright "Nikolay Kositsin"\r
11 #property link "farria@mail.redcom.ru" \r
12 #property indicator_separate_window\r
13 //---- öâåòà èíäèêàòîðà\r
14 #property indicator_buffers 8 \r
15 #property indicator_color1 Blue\r
16 #property indicator_color2 Lime\r
17 #property indicator_color3 OrangeRed\r
18 #property indicator_color4 Gray\r
19 //---- öâåòà Bollinger Bands\r
20 #property indicator_color5 Gray\r
21 #property indicator_color6 Gray\r
22 #property indicator_color7 Gray\r
23 #property indicator_color8 Gray\r
24 */\r
25 //---- ÂÕÎÄÍÛÅ ÏÀÐÀÌÅÒÐÛ ÈÍÄÈÊÀÒÎÐÀ þþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþææ+\r
26 extern int Bands_Period = 100;// Bollinger Bands óñðåäíåíèå, åñëè Bands_Period=0 , òî Bollinger Bands óäàëÿåòñÿ èç ãðàôèêà\r
27 extern double Bands_Deviations = 1.0; // äåâèàòàöèÿ \r
28 extern int Drow_style  = 0;  // Ñòèëü èñïîëíåíèÿ ãðàôèêà 0 - â âèäå òî÷å÷íîé ëèíèè, 1 - â âèäå ãèñòîãðàììû, äðóãîå çíà÷åíèå - ïðîñòî ëèíèÿ\r
29 extern int Ind_Shift    = 0;  // cäâèã èíäèêàòîðà âäîëü îñè âðåìåíè \r
30 extern int BB_Shift     = 0;  // cäâèã BollingerBands âäîëü îñè âðåìåíè \r
31 //---- æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ+\r
32 //---- èíäèêàòîðíûå áóôôåðû\r
33 double Ind_Buffer1 [];\r
34 double Ind_Buffer2 [];\r
35 double Ind_Buffer3 [];\r
36 double Ind_Buffer4 [];\r
37 double Ind_Buffer5 [];\r
38 double Ind_Buffer6 [];\r
39 double Ind_Buffer7 [];\r
40 double Ind_Buffer8 [];\r
41 //---- öåëûå ïåðåìåííûå \r
42 int bar; \r
43 //---- ïåðåìåííûå ñ ïëàâàþùåé òî÷êîé \r
44 double Series,Out_Series,trend,deviation,sumtotal,midline,priceswing;\r
45 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ \r
46 //| Custom indicator initialization function                         | \r
47 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ \r
48 int init() \r
49 {\r
50 //---- 4 èíäèêàòîðíûõ áóôôåðà èñïîëüçîâàíû äëÿ ñ÷¸òà.  \r
51 SetIndexBuffer(0,Ind_Buffer1 );\r
52 SetIndexBuffer(1,Ind_Buffer2 );\r
53 SetIndexBuffer(2,Ind_Buffer3 );\r
54 SetIndexBuffer(3,Ind_Buffer4 );\r
55 if (Bands_Period>0)\r
56 {\r
57 //---- åù¸ 4 èíäèêàòîðíûõ áóôôåðà äîáàâëåíû äëÿ ñ÷¸òà.\r
58 IndicatorBuffers(8);\r
59  SetIndexBuffer(4,Ind_Buffer5 );\r
60  SetIndexBuffer(5,Ind_Buffer6 );\r
61  SetIndexBuffer(6,Ind_Buffer7 ); \r
62  SetIndexBuffer(7,Ind_Buffer8 ); \r
63 //---- ãîðèçîíòàëüíûé ñäâèã Bollinger Bands\r
64  SetIndexShift (4, BB_Shift ); \r
65  SetIndexShift (5, BB_Shift ); \r
66  SetIndexShift (6, BB_Shift ); \r
67  SetIndexShift (7, BB_Shift ); \r
68 //---- óñòàíîâêà íîìåðà áàðà, íà÷èíàÿ ñ êîòîðîãî áóäåò îòðèñîâûâàòüñÿ Bollinger Bands\r
69  int draw_beginBB=COUNT_begin()+Bands_Period+BB_Shift+1;\r
70  SetIndexDrawBegin(4,draw_beginBB+Bands_Period);\r
71  SetIndexDrawBegin(5,draw_beginBB+Bands_Period);\r
72  SetIndexDrawBegin(6,draw_beginBB+Bands_Period);\r
73  SetIndexDrawBegin(7,draw_beginBB+Bands_Period);\r
74 //---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå\r
75  SetIndexEmptyValue(4,EmptyValue);\r
76  SetIndexEmptyValue(5,EmptyValue);\r
77  SetIndexEmptyValue(6,EmptyValue);\r
78  SetIndexEmptyValue(7,EmptyValue);\r
79 //---- èìåíà äëÿ îêîí äàííûõ è ëýéáû äëÿ ñóáúîêîí.  \r
80  SetIndexLabel   (4,"BollingerBands+1"  );\r
81  SetIndexLabel   (5,"BollingerBands-1"  );\r
82  SetIndexLabel   (6,"BollingerBands+2"  );\r
83  SetIndexLabel   (7,"BollingerBands-2"  );\r
84 }\r
85 //---- ãîðèçîíòàëüíûé ñäâèã èíäèêàòîðíûõ ëèíèé\r
86 SetIndexShift (0, Ind_Shift); \r
87 SetIndexShift (1, Ind_Shift); \r
88 SetIndexShift (2, Ind_Shift); \r
89 SetIndexShift (3, Ind_Shift); \r
91 //---- îïðåäåëåíèå ñòèëÿ èñïîëíåíèÿ ãðàôèêà\r
92 SetIndexStyle(0,DRAW_LINE);\r
93 if (Drow_style==0)\r
94 {\r
95 //---- Ñòèëü èñïîëíåíèÿ ãðàôèêà âèäå òî÷å÷íîé ëèíèè\r
96  SetIndexStyle(1,DRAW_ARROW);\r
97  SetIndexStyle(2,DRAW_ARROW);\r
98  SetIndexStyle(3,DRAW_ARROW);\r
99 //---- Îïðåäåëåíèå ñòèëÿ òî÷å÷íûõ îáúåêòîâ\r
100  SetIndexArrow(1,159);\r
101  SetIndexArrow(2,159);\r
102  SetIndexArrow(3,159);\r
103 //---- \r
105 if (Drow_style==1)\r
107 //---- Ñòèëü èñïîëíåíèÿ ãðàôèêà âèäå ãèñòîãðàììû\r
108  SetIndexStyle(1,DRAW_HISTOGRAM);\r
109  SetIndexStyle(2,DRAW_HISTOGRAM);\r
110  SetIndexStyle(3,DRAW_HISTOGRAM);\r
111 //---- \r
113 //---- óñòàíîâêà çíà÷åíèé èíäèêàòîðà, êîòîðûå íå áóäóò âèäèìû íà ãðàôèêå\r
114 SetIndexEmptyValue(0,EmptyValue);\r
115 SetIndexEmptyValue(1,EmptyValue);\r
116 SetIndexEmptyValue(2,EmptyValue);\r
117 SetIndexEmptyValue(3,EmptyValue);\r
118 //---- èìåíà äëÿ îêîí äàííûõ è ëýéáû äëÿ ñóáúîêîí.  \r
119 IndicatorShortName(""+Label+"");\r
120 SetIndexLabel   (0,NULL);\r
121 SetIndexLabel   (1,"Up_Trend");\r
122 SetIndexLabel   (2,"Down_Trend");\r
123 SetIndexLabel   (3,"Straight_Trend");\r
124 //---- Óñòàíîâêà ôîðìàòà òî÷íîñòè (êîëè÷åñòâî çíàêîâ ïîñëå äåñÿòè÷íîé òî÷êè) äëÿ âèçóàëèçàöèè çíà÷åíèé èíäèêàòîðà \r
125 IndicatorDigits(digits());\r
126 //---- óñòàíîâêà íîìåðà áàðà, íà÷èíàÿ ñ êîòîðîãî áóäåò îòðèñîâûâàòüñÿ èíäèêàòîð\r
127 int draw_begin=COUNT_begin()+Ind_Shift+1;\r
128 SetIndexDrawBegin(0,draw_begin);\r
129 SetIndexDrawBegin(1,draw_begin);\r
130 SetIndexDrawBegin(2,draw_begin);\r
131 SetIndexDrawBegin(3,draw_begin);\r
132 //---- çàâåðøåíèå èíèöèàëèçàöèè\r
133 return(0); \r
134 \r
135 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ \r
136 //| JTRIX iteration function                                         | \r
137 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+ \r
138 int start() \r
139 \r
140 //----+ Ââåäåíèå öåëûõ ïåðåìåííûõ è ïîëó÷åíèå óæå ïîäñ÷èòàííûõ áàðîâ\r
141 //---- áëîêèðîâàíèå ïåðåñ÷¸òà âñåõ ïîäñ÷èòàííûõ è îòðèñîâàííûõ áàðîâ ïðè ïîäêëþ÷åíèè ê èíòåðíåòó\r
142 int limit,kkk,MaxBar,MaxBarBB,counted_bars=INDICATOR_COUNTED(0); INDICATOR_COUNTED(1);\r
143 //---- ïðîâåðêà íà âîçìîæíûå îøèáêè\r
144 if (counted_bars<0){INDICATOR_COUNTED(-1);return(-1);}\r
145 //---- ïîñëåäíèé ïîäñ÷èòàííûé áàð äîëæåí áûòü ïåðåñ÷èòàí\r
146 if (counted_bars>0) counted_bars--;\r
147 //---- îïðåäåëåíèå íîìåðà ñàìîãî ñòàðîãî áàðà, íà÷èíàÿ ñ êîòîðîãî áóäåò ïðîèçåä¸í ïåðåñ÷¸ò íîâûõ áàðîâ\r
148 limit=Bars-counted_bars-1; MaxBar=Bars-1-COUNT_begin()-1; MaxBarBB=MaxBar+1-Bands_Period;          \r
149 //---- Çàãðóçêà çíà÷åíèé èñõîäíîãî èíäèêàòîðà â áóôôåð\r
150 for(bar=limit; bar>=0; bar--)Ind_Buffer1[bar]=INDICATOR(bar);\r
151 //---- êîðåêöèÿ ìàêñèìàëüíîãî íîìåðà ñàìîãî ñòàðîãî áàðà, íà÷èíàÿ ñ êîòîðîãî áóäåò ïðîèçåä¸í ïåðåñ÷¸ò íîâûõ áàðîâ \r
152 //---- èíèöèàëèçàöèÿ íóëÿ\r
153 if (limit>MaxBar)\r
154  {\r
155   limit=MaxBar; \r
156   for(int ttt=Bars-1;ttt>MaxBar;ttt--)\r
157    {\r
158     Ind_Buffer2[ttt]=EmptyValue; \r
159     Ind_Buffer3[ttt]=EmptyValue; \r
160     Ind_Buffer4[ttt]=EmptyValue;\r
161     Ind_Buffer5[ttt]=EmptyValue; \r
162     Ind_Buffer6[ttt]=EmptyValue; \r
163     Ind_Buffer7[ttt]=EmptyValue;\r
164     Ind_Buffer8[ttt]=EmptyValue; \r
165    }\r
166  }\r
168 //---- Ðàñ÷¸ò èíäèêàòîðà\r
169 for(bar=limit;bar>=0;bar--)\r
171 Out_Series=Ind_Buffer1[bar];\r
173 //---- +SSSSSSSSSSSSSSSS <<< Òð¸õöâåòíûé êîä èíäèêàòîðà >>> SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
174 trend=Out_Series-Ind_Buffer1[bar+1];     \r
175 if(trend>0)     {Ind_Buffer2[bar]=Out_Series; Ind_Buffer3[bar]=EmptyValue; Ind_Buffer4[bar]=EmptyValue;}\r
176 else{if(trend<0){Ind_Buffer2[bar]=EmptyValue; Ind_Buffer3[bar]=Out_Series; Ind_Buffer4[bar]=EmptyValue;}\r
177 else            {Ind_Buffer2[bar]=EmptyValue; Ind_Buffer3[bar]=EmptyValue; Ind_Buffer4[bar]=Out_Series;}}    \r
178 //---- +SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+\r
179 \r
181 //---- Ðàñ÷¸ò Bollinger Bands îò èíäèêàòîðà\r
183 if (Bands_Period<=0)return(0);\r
184 //---- êîðåêöèÿ ìàêñèìàëüíîãî íîìåðà ñàìîãî ñòàðîãî áàðà, íà÷èíàÿ ñ êîòîðîãî áóäåò ïðîèçåä¸í ïåðåñ÷¸ò íîâûõ áàðîâ \r
185 //---- èíèöèàëèçàöèÿ íóëÿ\r
186 if(limit<MaxBarBB) bar=limit; \r
187 else\r
188  {\r
189   bar=MaxBarBB;\r
190   for(int yyy=MaxBar;yyy>MaxBarBB;yyy--)\r
191    {\r
192     Ind_Buffer5[yyy]=EmptyValue; \r
193     Ind_Buffer6[yyy]=EmptyValue; \r
194     Ind_Buffer7[yyy]=EmptyValue;\r
195     Ind_Buffer8[yyy]=EmptyValue; \r
196    }\r
197  }\r
198 //----+ \r
199 while(bar>=0)\r
200  {\r
201   sumtotal=0.0;\r
202   kkk=bar+Bands_Period-1;\r
203   midline=0.0;\r
204   for(int iii=0;iii<=Bands_Period-1;iii++)midline=midline+Ind_Buffer1[bar+iii];\r
205   midline=midline/Bands_Period;\r
206   while(kkk>=bar)\r
207    {\r
208     priceswing=Ind_Buffer1[kkk]-midline;\r
209     sumtotal+=priceswing*priceswing;\r
210     kkk--;\r
211    }\r
212   deviation=Bands_Deviations*MathSqrt(sumtotal/Bands_Period); \r
213   Ind_Buffer5[bar]=midline+deviation; Ind_Buffer6[bar]=midline-deviation;\r
214   //----+ \r
215   deviation=2*deviation; \r
216   Ind_Buffer7[bar]=midline+deviation; Ind_Buffer8[bar]=midline-deviation;\r
217   //----+ \r
218   bar--;\r
219  }\r
220 //---- çàâåðøåíèå âû÷èñëåíèé çíà÷åíèé èíäèêàòîðà\r
222 return(0); \r
223 \r
225 //+---------------------------------------------------------------------------------------------------------------------------+\r
226 //----+ Ââåäåíèå ôóíêöèè INDICATOR_COUNTED (ôàéë INDICATOR_COUNTED.mqh ñëåäóåò ïîëîæèòü â ïàïêó (äèðåêòîðèþ): MetaTrader\experts\include)\r
227 #include <INDICATOR_COUNTED.mqh> \r
228 //+---------------------------------------------------------------------------------------------------------------------------+\r