2 Äëÿ ðàáîòû èíäèêàòîðà ñëåäóåò ïîëîæèòü ôàéës INDICATOR_COUNTED.mqh
\r
3 â ïàïêó (äèðåêòîðèþ): MetaTrader\experts\include\
\r
5 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+
\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
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
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
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
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
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
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
107 //---- Ñòèëü èñïîëíåíèÿ ãðàôèêà âèäå ãèñòîãðàììû
\r
108 SetIndexStyle(1,DRAW_HISTOGRAM);
\r
109 SetIndexStyle(2,DRAW_HISTOGRAM);
\r
110 SetIndexStyle(3,DRAW_HISTOGRAM);
\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
135 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+
\r
136 //| JTRIX iteration function |
\r
137 //+SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS+
\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
156 for(int ttt=Bars-1;ttt>MaxBar;ttt--)
\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
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
181 //---- Ðàñ÷¸ò Bollinger Bands îò èíäèêàòîðà
\r
183 if (Bands_Period<=0)return(0);
\r
184 //---- êîðåêöèÿ ìàêñèìàëüíîãî íîìåðà ñàìîãî ñòàðîãî áàðà, íà÷èíàÿ ñ êîòîðîãî áóäåò ïðîèçåä¸í ïåðåñ÷¸ò íîâûõ áàðîâ
\r
185 //---- èíèöèàëèçàöèÿ íóëÿ
\r
186 if(limit<MaxBarBB) bar=limit;
\r
190 for(int yyy=MaxBar;yyy>MaxBarBB;yyy--)
\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
202 kkk=bar+Bands_Period-1;
\r
204 for(int iii=0;iii<=Bands_Period-1;iii++)midline=midline+Ind_Buffer1[bar+iii];
\r
205 midline=midline/Bands_Period;
\r
208 priceswing=Ind_Buffer1[kkk]-midline;
\r
209 sumtotal+=priceswing*priceswing;
\r
212 deviation=Bands_Deviations*MathSqrt(sumtotal/Bands_Period);
\r
213 Ind_Buffer5[bar]=midline+deviation; Ind_Buffer6[bar]=midline-deviation;
\r
215 deviation=2*deviation;
\r
216 Ind_Buffer7[bar]=midline+deviation; Ind_Buffer8[bar]=midline-deviation;
\r
220 //---- çàâåðøåíèå âû÷èñëåíèé çíà÷åíèé èíäèêàòîðà
\r
225 //+---------------------------------------------------------------------------------------------------------------------------+
\r
226 //----+ Ââåäåíèå ôóíêöèè INDICATOR_COUNTED (ôàéë INDICATOR_COUNTED.mqh ñëåäóåò ïîëîæèòü â ïàïêó (äèðåêòîðèþ): MetaTrader\experts\include)
\r
227 #include <INDICATOR_COUNTED.mqh>
\r
228 //+---------------------------------------------------------------------------------------------------------------------------+
\r