1 //+------------------------------------------------------------------+
\r
2 //| Meta COT cotlib.mq4 |
\r
3 //| Copyright © 2009, C-4 (Vasiliy Sokolov, Russia, St.-Petersburg,|
\r
4 //| 2009), All Rights Reserved. |
\r
6 //+------------------------------------------------------------------+
\r
7 #property copyright "Copyright © 2009, C-4 (Vasiliy Sokolov, SPb), All Rights Reserved."
\r
8 #property link "vs-box@mail.ru"
\r
10 // Âîçìîæíûå çíà÷åíèÿ ïàðàìåòðà "type" ôóíêöèè get_data()
\r
12 #define NONCOMM_LONG 1
\r
13 #define NONCOMM_SHORT 2
\r
14 #define OPERATORS_LONG 3
\r
15 #define OPERATORS_SHORT 4
\r
16 #define NONREP_LONG 5
\r
17 #define NONREP_SHORT 6
\r
18 #define NET_NONCOMM 7
\r
19 #define NET_OPERATORS 8
\r
20 #define NET_NONREP 9
\r
21 #define OI_NONCOMM_LONG 10
\r
22 #define OI_NONCOMM_SHORT 11
\r
23 #define OI_OPERATORS_LONG 12
\r
24 #define OI_OPERATORS_SHORT 13
\r
25 #define OI_NONREP_LONG 14
\r
26 #define OI_NONREP_SHORT 15
\r
27 #define WILLCO_NONCOMM 16
\r
28 #define WILLCO_OPERATORS 17
\r
29 #define WILLCO_NONREP 18
\r
31 #define INDEX_NONCOMM 20
\r
32 #define INDEX_OPERATORS 21
\r
33 #define INDEX_NONREP 22
\r
34 #define MOVEMENT_NONCOMM 23
\r
35 #define MOVEMENT_OPERATORS 24
\r
36 #define MOVEMENT_NONREP 25
\r
37 #define MOVEMENT_OI 26
\r
38 #define OI_NET_NONCOMM 27
\r
39 #define OI_NET_OPERATORS 28
\r
40 #define OI_NET_NONREP 29
\r
43 extern bool load_cot_file=false;
\r
44 extern string cot_file="COT - U.S. DOLLAR CONCATENATE.csv";
\r
45 extern string settings="settings.ini";
\r
53 //***************************************************************************************************************
\r
54 // ÒÀÁËÈÖÀ ÄÀÍÍÛÕ COT
\r
55 int n_str; //ñîäåðæèò êîë-âî ñòðîê
\r
57 // Ìàññèâ ñîäåðæèò äàòó
\r
58 datetime realize_data[];
\r
59 // Ìàññèâû ñîäåðæàò îáñîëþòíûå ïîçèöèè
\r
60 double open_interest[]; // Îòêðûòûé èíòåðåñ
\r
61 double noncomm_long[]; // Äëèííûå ïîçèöèè íåêîììåð÷åñêèõ òðåéäåðîâ
\r
62 double noncomm_short[]; // Êîðîòêèå ïîçèöèè íåêîììåð÷åñêèõ òðåéäåðîâ
\r
63 double noncomm_spread[]; // Ïîêðûòèå íåêîììåð÷åñêèõ òðåéäåðîâ
\r
64 double operators_long[]; // Äëèííûå ïîçèöèè íåêîììåð÷åñêèõ òðåéäåðîâ (îïåðàòîðîâ)
\r
65 double operators_short[]; // Êîðîòêèå ïîçèöèè íåêîììåð÷åñêèõ òðåéäåðîâ (îïåðàòîðîâ)
\r
66 double nonrep_long[]; // Äëèííûå ïîçèöèè íåïîäîò÷åòíûõ òðåéäåðîâ (ïóáëèêè)
\r
67 double nonrep_short[]; // Êîðîòêèå îïçèöèè íåïîäîò÷åòíûõ òðåéäåðîâ (ïóáëèêè)
\r
69 // Ìàññèâû ñîäåðæàò ðåçóëüòàò äåëåíèÿ îáñîëþòíîé äëèííîé è êîðîòêîé ïîçèöèè êàæäîé èç òðåõ ãðóïï òðåéäåðîâ íà îòêðûòûé èíòåðåñ
\r
70 double oi_noncomm_long[]; // Îòêðûòûé èíòåðåñ / Äëèííûå ïîçèöèè íåêîììåð÷åñêèõ òðåéäåðîâ
\r
71 double oi_noncomm_short[]; // Îòêðûòûé èíòåðåñ / Êîðîòêèå ïîçèöèè íåêîììåð÷åñêèõ òðåéäåðîâ
\r
72 double oi_operators_long[]; // Îòêðûòûé èíòåðåñ / Äëèííûå ïîçèöèè íåêîììåð÷åñêèõ òðåéäåðîâ (îïåðàòîðîâ)
\r
73 double oi_operators_short[]; // Îòêðûòûé èíòåðåñ / Êîðîòêèå ïîçèöèè íåêîììåð÷åñêèõ òðåéäåðîâ (îïåðàòîðîâ)
\r
74 double oi_nonrep_long[]; // Îòêðûòûé èíòåðåñ / Äëèííûå ïîçèöèè íåïîäîò÷åòíûõ òðåéäåðîâ (ïóáëèêè)
\r
75 double oi_nonrep_short[]; // Îòêðûòûé èíòåðåñ / Êîðîòêèå îïçèöèè íåïîäîò÷åòíûõ òðåéäåðîâ (ïóáëèêè)
\r
77 //Ìàññèâû ñîäåðæàò ðåçóëüòàò äåëåíèÿ ÷èñòîé ïîçèöèè êàæäîé èç òðåõ ãðóïï òðåéäåðîâ íà îòêðûòûé èíòåðåñ
\r
78 //èñïîëüçóåòñÿ äëÿ ïîñòðîåíèÿ èíäåêñà WILLCO
\r
79 double oi_net_noncomm[];
\r
80 double oi_net_operators[];
\r
81 double oi_net_nonrep[];
\r
83 // Ìàññèâû ñîäåðæàò ÷èñòûå ïîçèöèè êîììåð÷åñêèõ òðåéäåðîâ, îïåðàòîðîâ è íå ïîäîò÷åòíîé ïóáëèêè
\r
84 double net_noncomm[]; // ×èñòûå ïîçèöèè íåêîììåð÷åñêèõ òðåéäåðîâ
\r
85 double net_operators[]; // ×èñòûå ïîçèöèè êîììåð÷åñêèõ òðåéäåðîâ
\r
86 double net_nonrep[]; // ×èñòûå ïîçèöèè íåïîäîò÷åòíûõ òðåéäåðîâ
\r
88 // Ìàññèâû ñîäåðæàò èíäåêñ ÷èñòûõ ïîçèöèé êàæäîé èç òðåõ ãðóïï
\r
89 double index_oi[]; // Èíäåêñ îòêðûòîãî èíòåðåñà
\r
90 double index_ncomm[]; // Èíäåêñ íåêîììåð÷åñêèõ òðåéäåðîâ
\r
91 double index_operators[]; // Èíäåêñ êîììåð÷åñêèõ òðåéäåðîâ (îïåðàòîðîâ)
\r
92 double index_nonrep[]; // Èíääåêñ íåïîäîò÷åòíûõ òðåéäåðîâ (ïóáëèêè)
\r
94 // Ìàññèâû ñîäåðæàò ñòîõàñòè÷åñêèé îñöèëÿòîð âûñ÷èòàííûé èç îòíîøåíèÿ îòêðûòîãî èíòåðåñà ê ÷èñòîé ïîçèèöèè êàæäîé èç òðåõ ãðóïï
\r
95 // Stohastic(OI/NET_POSITION)
\r
96 double willco_ncomm[]; //
\r
97 double willco_operators[]; //
\r
98 double willco_nonrep[]; //
\r
101 double movement_oi[];
\r
102 double movement_ncomm[];
\r
103 double movement_operators[];
\r
104 double movement_nonrep[];
\r
105 //***********************************************************************************************************************************
\r
111 int handle_cotfile;
\r
115 handle_cotfile=FileOpen(cot_file,FILE_READ|FILE_CSV);
\r
116 //handle_cotfile=FileOpen("COT - U.S. DOLLAR CONCATENATE.csv",FILE_READ|FILE_CSV);
\r
117 if(handle_cotfile==-1){
\r
118 Print("Íå óäàëîñü çàãðóçèòü ôàéë. Äàëüíåéøåå ïðîäîëæåíèå íåâîçìîæíî ", cot_file);
\r
119 Print(GetLastError());
\r
122 while(FileIsEnding(handle_cotfile)==false){
\r
123 data=FileReadString(handle_cotfile);
\r
124 if(FileIsLineEnding(handle_cotfile)&&data!="")str++;
\r
126 ArrayResize(realize_data,str);
\r
128 ArrayResize(open_interest,str);
\r
129 ArrayResize(noncomm_long,str);
\r
130 ArrayResize(noncomm_short,str);
\r
131 ArrayResize(noncomm_spread,str);
\r
132 ArrayResize(operators_long,str);
\r
133 ArrayResize(operators_short,str);
\r
134 ArrayResize(nonrep_long,str);
\r
135 ArrayResize(nonrep_short,str);
\r
137 ArrayResize(oi_noncomm_long,str);
\r
138 ArrayResize(oi_noncomm_short,str);
\r
139 ArrayResize(oi_operators_long,str);
\r
140 ArrayResize(oi_operators_short,str);
\r
141 ArrayResize(oi_nonrep_long,str);
\r
142 ArrayResize(oi_nonrep_short,str);
\r
144 ArrayResize(oi_net_noncomm,str);
\r
145 ArrayResize(oi_net_operators,str);
\r
146 ArrayResize(oi_net_nonrep,str);
\r
148 ArrayResize(net_noncomm,str);
\r
149 ArrayResize(net_operators,str);
\r
150 ArrayResize(net_nonrep,str);
\r
152 ArrayResize(index_oi,str);
\r
153 ArrayResize(index_ncomm,str);
\r
154 ArrayResize(index_operators,str);
\r
155 ArrayResize(index_nonrep,str);
\r
157 ArrayResize(willco_ncomm,str);
\r
158 ArrayResize(willco_operators,str);
\r
159 ArrayResize(willco_nonrep,str);
\r
161 ArrayResize(movement_oi,str);
\r
162 ArrayResize(movement_ncomm,str);
\r
163 ArrayResize(movement_operators,str);
\r
164 ArrayResize(movement_nonrep,str);
\r
166 FileClose(handle_cotfile);
\r
171 /*void settings_load()
\r
173 int h_set, _column;
\r
175 if(load_cot_file==true)return;
\r
176 h_set=FileOpen(settings,FILE_READ|FILE_CSV,";");
\r
177 //FileOpen("\Temp\Cot_file.txt",FILE_WRITE,FILE_CSV);
\r
178 if(h_set==-1)return;
\r
179 while(FileIsEnding(h_set)==false){
\r
180 set=FileReadString(h_set);
\r
182 if(set==Symbol()&&_column!=1){cot_file=sname;return;}
\r
183 if(_column==2&&set!="")name=set; // Âòîðàÿ êîëîíêà - æåëàåìîå íàçâàíèå èíäèêàòîðà
\r
184 if(FileIsLineEnding(h_set)==true)_column=0;
\r
185 if(_column==1)sname=set;
\r
191 // Íà ñåãîäíÿøíèé äåíü, åäèíñòâåííûé áðîêåð â Ðîññèè, êîòîðûé ïîääåðæèâàåò ïðàêòè÷åñêè âñå èíñòðóìåíòû
\r
192 // ïîïàäàþùèå â îò÷åò òðåéäåðîâ ÿâëÿåòñÿ Broco Company. Ïîýòîìó ïîääåðæêà áðîêåðà âêëþ÷åíà â ïðîåêò.
\r
193 // Ýòî îçíà÷àåò, ÷òî âàì íå íàäî áóäåò âûáèðàòü íàçâàíèå èíñòðóìåíòà, èç ñîòíè ôàéëîâ, âñå áóäåò ñäåëàíî
\r
194 // àâòîìàòè÷åñêè!!!
\r
195 void settings_load()
\r
197 int h_set, _column;
\r
199 if(load_cot_file==true)return;
\r
200 h_set=FileOpen(settings,FILE_READ|FILE_CSV,";");
\r
201 //FileOpen("\Temp\Cot_file.txt",FILE_WRITE,FILE_CSV);
\r
202 if(h_set==-1)return;
\r
203 while(FileIsEnding(h_set)==false){
\r
204 set=FileReadString(h_set);
\r
206 if(_column==1&&set!="")sname=set;
\r
207 if(_column==2&&set!="")name=set; // Âòîðàÿ êîëîíêà - æåëàåìîå íàçâàíèå èíäèêàòîðà
\r
208 if(_column>2&&set!=""&&StringFind(Symbol(),set)==0){cot_file=sname;return;}
\r
209 if(FileIsLineEnding(h_set)==true)_column=0;
\r
215 datetime data_realize;
\r
216 int handle_cotfile;
\r
218 handle_cotfile=FileOpen(cot_file,FILE_READ|FILE_CSV, ";");
\r
219 Print("Ôàéë íàéäåí");
\r
220 while(FileIsEnding(handle_cotfile)==false){
\r
221 data=FileReadString(handle_cotfile);
\r
223 if(FileIsLineEnding(handle_cotfile)==true||FileIsEnding(handle_cotfile)==true){//column=12 - îáíóëÿåò ðàíüøå âðåìåíè
\r
225 nonrep_short[n_str]=StrToDouble(data);
\r
227 if(data!="")n_str++;
\r
232 realize_data[n_str]=StrToTime(data);
\r
235 open_interest[n_str]=StrToDouble(data);
\r
236 //Print(open_interest[n_str]);
\r
239 noncomm_long[n_str]=StrToDouble(data);
\r
242 noncomm_short[n_str]=StrToDouble(data);
\r
245 noncomm_spread[n_str]=StrToDouble(data);
\r
248 operators_long[n_str]=StrToDouble(data);
\r
251 operators_short[n_str]=StrToDouble(data);
\r
254 nonrep_long[n_str]=StrToDouble(data);
\r
259 FileClose(handle_cotfile);
\r
260 Print("Ôàéë çàãðóæåí");
\r
269 for(int i=0;i<n_str;i++){
\r
270 index_oi[i]=EMPTY_VALUE;
\r
271 index_ncomm[i]=EMPTY_VALUE;
\r
272 index_operators[i]=EMPTY_VALUE;
\r
273 index_nonrep[i]=EMPTY_VALUE;
\r
274 willco_ncomm[i]=EMPTY_VALUE;
\r
275 willco_operators[i]=EMPTY_VALUE;
\r
276 willco_nonrep[i]=EMPTY_VALUE;
\r
277 movement_ncomm[i]=EMPTY_VALUE;
\r
278 movement_operators[i]=EMPTY_VALUE;
\r
279 movement_nonrep[i]=EMPTY_VALUE;
\r
281 for(i=0;i<n_str;i++){
\r
282 if(open_interest[i]==0){
\r
283 oi_noncomm_long[i]=0;
\r
284 oi_noncomm_short[i]=0;
\r
285 oi_operators_long[i]=0;
\r
286 oi_operators_short[i]=0;
\r
287 oi_nonrep_long[i]=0;
\r
288 oi_nonrep_short[i]=0;
\r
291 oi_noncomm_long[i]=noncomm_long[i]/open_interest[i];
\r
292 oi_noncomm_short[i]=noncomm_short[i]/open_interest[i];
\r
293 oi_operators_long[i]=operators_long[i]/open_interest[i];
\r
294 oi_operators_short[i]=operators_short[i]/open_interest[i];
\r
295 oi_nonrep_long[i]=nonrep_long[i]/open_interest[i];
\r
296 oi_nonrep_short[i]=nonrep_short[i]/open_interest[i];
\r
299 net_noncomm[i]=noncomm_long[i]-noncomm_short[i];
\r
300 net_operators[i]=operators_long[i]-operators_short[i];
\r
301 net_nonrep[i]=nonrep_long[i]-nonrep_short[i];
\r
303 if(open_interest[i]==0){
\r
304 oi_net_noncomm[i]=0;
\r
305 oi_net_operators[i]=0;
\r
306 oi_net_nonrep[i]=0;
\r
309 oi_net_noncomm[i]=net_noncomm[i]/open_interest[i];
\r
310 oi_net_operators[i]=net_operators[i]/open_interest[i];
\r
311 oi_net_nonrep[i]=net_nonrep[i]/open_interest[i];
\r
315 for(i=0;i<n_str-period;i++){
\r
317 max=ArrayMaximum(open_interest,period,i);
\r
318 min=ArrayMinimum(open_interest,period,i);
\r
319 delta=open_interest[max]-open_interest[min];
\r
320 if(delta==0)delta=1;
\r
321 index_oi[i]=(open_interest[i]-open_interest[min])/delta*100;
\r
323 max=ArrayMaximum(net_noncomm,period,i);
\r
324 min=ArrayMinimum(net_noncomm,period,i);
\r
325 delta=net_noncomm[max]-net_noncomm[min];
\r
326 if(delta==0)delta=1;
\r
327 index_ncomm[i]=(net_noncomm[i]-net_noncomm[min])/delta*100;
\r
329 max=ArrayMaximum(net_operators,period,i);
\r
330 min=ArrayMinimum(net_operators,period,i);
\r
331 delta=net_operators[max]-net_operators[min];
\r
332 if(delta==0)delta=1;
\r
333 index_operators[i]=(net_operators[i]-net_operators[min])/delta*100;
\r
335 max=ArrayMaximum(net_nonrep,period,i);
\r
336 min=ArrayMinimum(net_nonrep,period,i);
\r
337 delta=net_nonrep[max]-net_nonrep[min];
\r
338 if(delta==0)delta=1;
\r
339 index_nonrep[i]=(net_nonrep[i]-net_nonrep[min])/delta*100;
\r
341 max=ArrayMaximum(oi_net_noncomm,period,i);
\r
342 min=ArrayMinimum(oi_net_noncomm,period,i);
\r
343 delta=oi_net_noncomm[max]-oi_net_noncomm[min];
\r
344 if(delta==0)delta=1;
\r
345 willco_ncomm[i]=(oi_net_noncomm[i]-oi_net_noncomm[min])/delta*100;
\r
347 max=ArrayMaximum(oi_net_operators,period,i);
\r
348 min=ArrayMinimum(oi_net_operators,period,i);
\r
349 delta=oi_net_operators[max]-oi_net_operators[min];
\r
350 if(delta==0)delta=1;
\r
351 willco_operators[i]=(oi_net_operators[i]-oi_net_operators[min])/delta*100;
\r
353 max=ArrayMaximum(oi_net_nonrep,period,i);
\r
354 min=ArrayMinimum(oi_net_nonrep,period,i);
\r
355 delta=oi_net_nonrep[max]-oi_net_nonrep[min];
\r
356 if(delta==0)delta=1;
\r
357 willco_nonrep[i]=(oi_net_nonrep[i]-oi_net_nonrep[min])/delta*100;
\r
359 for(i=0;i<n_str-period-movement_index;i++){
\r
360 movement_oi[i]=index_oi[i]-index_oi[i-movement_index];
\r
361 movement_ncomm[i]=index_ncomm[i]-index_ncomm[i-movement_index];
\r
362 movement_operators[i]=index_operators[i]-index_operators[i-movement_index];
\r
363 movement_nonrep[i]=index_nonrep[i]-index_nonrep[i-movement_index];
\r
367 // Âîçâðàùàåò îäíî èç çíà÷åíèé COT òàáëèöû îïðåäåëåííîå ïåðåìåííîé "type" äëÿ áàðà "bar"
\r
368 double get_data(int type, int bar)
\r
371 int i_data=get_cot(bar);
\r
372 if(i_data==EMPTY_VALUE)return(EMPTY_VALUE);
\r
375 return(open_interest[i_data]);
\r
377 return(noncomm_long[i_data]+noncomm_spread[i_data]);
\r
378 //return(noncomm_long[i_data]);
\r
379 case NONCOMM_SHORT:
\r
380 return(noncomm_short[i_data]+noncomm_spread[i_data]);
\r
381 //return(noncomm_short[i_data]);
\r
382 case OPERATORS_LONG:
\r
383 return(operators_long[i_data]);
\r
384 case OPERATORS_SHORT:
\r
385 return(operators_short[i_data]);
\r
387 return(nonrep_long[i_data]);
\r
389 return(nonrep_short[i_data]);
\r
391 return(net_noncomm[i_data]);
\r
392 case NET_OPERATORS:
\r
393 return(net_operators[i_data]);
\r
395 return(net_nonrep[i_data]);
\r
397 return(index_oi[i_data]);
\r
398 case INDEX_NONCOMM:
\r
399 return(index_ncomm[i_data]);
\r
400 case INDEX_OPERATORS:
\r
401 return(index_operators[i_data]);
\r
403 return(index_nonrep[i_data]);
\r
404 case OI_NONCOMM_LONG:
\r
405 return(oi_noncomm_long[i_data]);
\r
406 case OI_NONCOMM_SHORT:
\r
407 return(oi_noncomm_short[i_data]);
\r
408 case OI_OPERATORS_LONG:
\r
409 return(oi_operators_long[i_data]);
\r
410 case OI_OPERATORS_SHORT:
\r
411 return(oi_operators_short[i_data]);
\r
412 case OI_NONREP_LONG:
\r
413 return(oi_nonrep_long[i_data]);
\r
414 case OI_NONREP_SHORT:
\r
415 return(oi_nonrep_short[i_data]);
\r
416 case WILLCO_NONCOMM:
\r
417 return(willco_ncomm[i_data]);
\r
418 case WILLCO_OPERATORS:
\r
419 return(willco_operators[i_data]);
\r
420 case WILLCO_NONREP:
\r
421 return(willco_nonrep[i_data]);
\r
422 case OI_NET_NONCOMM:
\r
423 return(oi_net_nonrep[i_data]);
\r
424 case OI_NET_OPERATORS:
\r
425 return(oi_net_operators[i_data]);
\r
426 case OI_NET_NONREP:
\r
427 return(oi_net_nonrep[i_data]);
\r
428 case MOVEMENT_NONCOMM:
\r
429 return(movement_ncomm[i_data]);
\r
430 case MOVEMENT_OPERATORS:
\r
431 return(movement_operators[i_data]);
\r
432 case MOVEMENT_NONREP:
\r
433 return(movement_nonrep[i_data]);
\r
435 return(movement_oi[i_data]);
\r
437 return(EMPTY_VALUE);
\r
440 //Âîçâðàùàåò íîìåð ÿ÷åéêå â ìàññèâå, â êîòîðîì ýòè äàííûå õðàíÿòñÿ, âîçâðàùàåò çíà÷åíèå EMPTY_VALUE, åñëè íå óäàëîñü íàéòè áàð
\r
443 datetime tbar=iTime(Symbol(),0,i);
\r
444 for(int k=0;k<n_str;k++)
\r
445 if(realize_data[k]<tbar)return(k);
\r
446 return(EMPTY_VALUE);
\r
449 // Âîçâðàùàåò áàð äëÿ êîòîðîãî èçâåñòíî ïîñëåäíåå çíà÷åíèå COT äàííûõ
\r
452 return(iBarShift(Symbol(),0,realize_data[n_str-1],false));
\r
455 // Âîçâðàùàåò ñòðîêó áåç ðàñøèðåíèÿ è ïåðâûõ 6 ñèìâîëîâ (áûëî "COT - FileName.csv" ñòàëî "FileName")
\r
456 string str_trim(string fname)
\r
458 int strlen=StringLen(fname)-1;
\r
461 for(int i=strlen;i>0;i--){
\r
462 char=StringGetChar(fname,i);
\r
464 for(int b=6;b<i;b++)//ïîìåíÿòü íà b=0 åñëè íå òðåáóåòñÿ óäàëÿòü ïåðâûå 6 ñèìâîëîâ
\r
465 str=str+CharToStr(StringGetChar(fname,b));
\r