CME_FUTURES_SAVER

Author: Copyright � 2012�2013, Financial Arsenal LTD
9 Views
0 Downloads
0 Favorites
CME_FUTURES_SAVER
//+------------------------------------------------------------------+
//|                                            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;i<sz;i++){
      if(StringFind(symbols_sel[i],"f")!=0){continue;}
      if(StringFind(symbols_sel[i],"_L")>0){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;i<sz;i++){
         if(StringFind(symbols_sel[i],"df")!=0){continue;}
         if(StringFind(symbols_sel[i],"_L")>0){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]<tm){
      pretms[sy_i]=tm;
      return(true);
   }
   return(false);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int SymbolsList(string &Symbols[], bool Selected)
{
   string SymbolsFileName;
   int Offset, SymbolsNumber;
   
   if(Selected) SymbolsFileName = "symbols.sel";
   else         SymbolsFileName = "symbols.raw";
   int hFile = FileOpenHistory(SymbolsFileName, FILE_BIN|FILE_READ);
   if(hFile < 0) return(-1);
   if(Selected) { SymbolsNumber = (FileSize(hFile) - 4) / 128; Offset = 116;  }
   else         { SymbolsNumber = FileSize(hFile) / 1936;      Offset = 1924; } 
   ArrayResize(Symbols, SymbolsNumber);
   if(Selected) FileSeek(hFile, 4, SEEK_SET);   
   for(int i = 0; i < SymbolsNumber; i++){
      Symbols[i] = FileReadString(hFile, 12);
      FileSeek(hFile, Offset, SEEK_CUR);
   }
   FileClose(hFile);
   return(SymbolsNumber);
}
//+------------------------------------------------------------------+

Comments