//+------------------------------------------------------------------+ //| CME_FUTURES_SAVER.mq4 | //| Copyright © 2012–2013, Financial Arsenal LTD | //| http://www.arsenal-forex.ru/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2012–2013, Financial Arsenal LTD" #property link "http://www.arsenal-forex.ru/" //+------------------------------------------------------------------+ //| Super Global variables | //+------------------------------------------------------------------+ extern string DeleteThisSymbols = "" ; //+------------------------------------------------------------------+ //| Includes | //+------------------------------------------------------------------+ #import "user32.dll" int RegisterWindowMessageA(string lpstring); int PostMessageA(int hWnd,int Msg,int wParam,string lParam); #import //+------------------------------------------------------------------+ //| Defines & Global variavles | //+------------------------------------------------------------------+ #define empty EMPTY_VALUE #define per PERIOD_M1 #define WM_COMMAND 0x0111 //+------------------------------------------------------------------+ string symbols[200],symbols_sel[200],sys[100],syv[200],dsys[100]; int pretms[200],vols[200][200][3],lvols[200]; bool first = true; int pause = 1000; int gSz; int tDemoShift = 0; bool NotHaveFutures = true; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ void init(){int i,ii,iii,sz,hd;string sy="",txt="",prom=""; //---- sz = SymbolsList(symbols_sel,true); ArrayResize(symbols_sel,sz); ii=0; prom = ""; NotHaveFutures = false; for(i=0;i0){continue;} if(StringFind(DeleteThisSymbols,symbols_sel[i])>=0){continue;}// не используем символы из списка удаленных prom = prom + symbols_sel[i] + ","; sys[ii] = symbols_sel[i]; syv[ii] = StringSubstr(sys[ii],1); ii++; } tDemoShift = 0; if(ii==0){// ели аккаунт демо и имеем только символы с задержкой prom=""; for(i=0;i0){continue;} if(StringFind(DeleteThisSymbols,symbols_sel[i])>=0){continue;}// не используем символы из списка удаленных prom = prom + symbols_sel[i] + ","; sys[ii] = symbols_sel[i]; syv[ii] = StringSubstr(sys[ii],1); ii++; } tDemoShift = 0; } if(ii==0){NotHaveFutures=true;return;} ArrayResize(sys,ii); ArrayResize(syv,ii); ArrayResize(pretms,ii); ArrayInitialize(pretms,0); ArrayResize(vols,ii); ArrayInitialize(vols,0); ArrayResize(lvols,ii); ArrayInitialize(lvols,0); gSz = ii; Print("Use "+gSz+" Symbols : "+StringSubstr(prom,0,StringLen(prom)-1)); //---- return;} //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ void deinit(){ //---- //---- return;} //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ void start(){int i,ii,iii,sz,hd;string fn="",txt="";int out[800]; //----------------------------------------------------------------+ if(NotHaveFutures){ Comment("Not found any futures Symbols. System stopped."); return; } while(!IsStopped()){RefreshRates(); //-----Объявления системы расчета-------------------------------------------- string lsy = sys[i]+"_L"; string fsy = sys[i]; int dg = MarketInfo(fsy,MODE_DIGITS); double pt = MarketInfo(fsy,MODE_POINT); if(dg==0||pt==0){// если кривой символ - пропускаем его i++; if(i>=gSz){i=0;} Sleep(20); continue; } if(dg==5||dg==3){dg--;pt*=10;}// уменьшаем разрадность до 4 если надо int fvol = iVolume(lsy,per,0); int optm = iTime(fsy,per,tDemoShift); double fbid = MarketInfo(fsy,MODE_BID); double fask = MarketInfo(fsy,MODE_ASK); double last = MarketInfo(lsy,MODE_BID); double op_p = NormalizeDouble(iOpen(fsy,per,0),dg); double bid = NormalizeDouble(MarketInfo(fsy,MODE_BID),dg);// int sm = 100 + MathRound((bid-op_p)/pt);// смещение в полных пипсах относительно цены открытия 1мин ФЬЮЧЕРСА не валюты как раньше int l_s = 2;//---режим распределения объемов в зависимост отположения ласта относительно бид\аска 0=long, 1=short, 2=long/short/2 //-----Работа по приходу бара (форматируем массивы пишем в файл)------------- if(NewBars(i)){ ArrayResize(out,800); ArrayInitialize(out,0); iii=0; for(ii=0;ii<200;ii++){ if(vols[i][ii][1]!=0||vols[i][ii][2]!=0){ out[iii] = vols[i][ii][0]; iii++; out[iii] = ii; iii++; out[iii] = vols[i][ii][1]; iii++; out[iii] = vols[i][ii][2]; iii++; } } //---------------------------------- if(iii>3){ string dtm = TimeToStr(iTime("EURUSD",PERIOD_W1,0),TIME_DATE); dtm = StringSetChar(dtm,4,95); dtm = StringSetChar(dtm,7,95); fn = dtm+"_"+fsy+".vol"; //Print("write file:"+fn); hd = FileOpen(fn,FILE_BIN|FILE_READ); if(hd<1){ Print("Now Create file :"+fn); hd = FileOpen(fn,FILE_BIN|FILE_WRITE); FileWriteArray(hd,out,0,iii); FileClose(hd); }else{ FileClose(hd); hd = FileOpen(fn,FILE_BIN|FILE_READ|FILE_WRITE); FileSeek(hd,0,SEEK_END); FileWriteArray(hd,out,0,iii); FileClose(hd); } } for(ii=0;ii<200;ii++){vols[i][ii][0]=0;vols[i][ii][1]=0;vols[i][ii][2]=0;}// форматируем массив этого символа } //-----Работа по приходу тика (распределяем объемы по ценам)------------- if(fvol - lvols[i] != 0){// пропускаем если нет свежих данных if(last>=fask){// приписываем к лонгам l_s=0; }else if( last<=fbid){// приписываем к шортам l_s=1; }else{// делим на половину лонг\шорт l_s=2; } if(fvol - lvols[i] < 0){// новый бар вписываем объем с открытия vols[i][sm][0] = optm; if(l_s<2){ vols[i][sm][l_s+1] = fvol; }else{ vols[i][sm][1] = fvol/2; vols[i][sm][2] = fvol/2; } }else{// пишем разницу объемов vols[i][sm][0] = optm; if(l_s<2){ vols[i][sm][l_s+1] += fvol-lvols[i]; }else{ vols[i][sm][1] += (fvol-lvols[i])/2; vols[i][sm][2] += (fvol-lvols[i])/2; } } lvols[i] = fvol; } i++; if(i>=gSz){i=0;} //-----Конец расчета------------------------------------------- Comment("Worked "+TimeToStr(TimeLocal(),TIME_SECONDS)); Sleep(15); } //---- return;} //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool NewBars(int sy_i){int tm = iTime(sys[sy_i],per,0); if(pretms[sy_i]==0){ pretms[sy_i]=tm; return(false); } if(pretms[sy_i]