s-Downloader





//+------------------------------------------------------------------+
//|                                                 s-Downloader.mq4 |
//|                                          Copyright © 2009, Talex |
//|                                      talex.kaliningrad@gmail.com |
//+------------------------------------------------------------------+
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  Äàííûé ñêðèïò çàêà÷èâàåò èñòîðèþ ïî âñåì ñèìâîëàì, êîòîðûå íàõîäÿòñÿ
  â "Îáçîðå ðûíêà" è òàéìôðåéìàì. Ïîäêà÷êà îñóùåñòâëÿåòñÿ ýìóëÿöèåé
  íàæàòèÿ êíîïêè HOME, îñóùåñòâëÿÿ ïðè ýòîì êîíòðîëü çàêà÷êè, ò.å.
  åñëè çàêà÷êà ïî êëàâèøå îñòàíîâèëàñü íà âðåìÿ îêîëî 5 ñåêóíä, òî 
  ñ÷èòàåòñÿ, ÷òî âñå ïî äàííîìó ñèìâîëó è òàéìôðåéìó çàêà÷àëîñü è 
  íà÷èíàåòñÿ ñëåäóþùàÿ èòòåðàöèÿ. Òàêæå ñêðèïò îáíîâëÿåò ãðàôèê, äîêà-
  ÷èâàÿ, òàêèì îáðàçîì, "ñâåæóþ" èñòîðèþ.
  ÂÎ ÂÐÅÌß ÐÀÁÎÒÛ ÑÊÐÈÏÒÀ ÍÅ ÏÐÎÈÇÂÎÄÈÒÜ ÍÈÊÀÊÈÕ ÄÅÉÑÒÂÈÉ Ñ ÒÅÐÌÈÍÀËÎÌ
  ÇÀÊÀ×ÊÀ ÏÐÎÄÎËÆÀÅÒÑß ÄÎÂÎËÜÍÎ ÏÐÎÄÎËÆÈÒÅËÜÍÎÅ ÂÐÅÌß, ÏÎÝÒÎÌÓ ËÓ×ØÅ
  ÎÑÒÀÂËßÒÜ ÑÊÐÈÏÒ ÐÀÁÎÒÀÒÜ ÍÀ ÍÎ×Ü.
  Õî÷ó ïîáëàãîäàðèòü Ilnur, getch, Zhunko, YuraZ è äðóãèõ ó÷àñòíèêîâ
  ôîðóìà http://forum.mql4.com/ru/ çà èíòåðåñíûå èäåè ïî WINAPI, áåç 
  íèõ ÿ âðÿä ëè áû ñäåëàë ýòîò ñêðèïò.
*///++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#property copyright "Copyright © 2009, Talex"
#property link      "talex.kaliningrad@gmail.com"
#import "kernel32.dll"
   int _lopen  (string path, int of);
   int _llseek (int handle, int offset, int origin);
   int _lread  (int handle, string buffer, int bytes);
   int _lclose (int handle);
#import
#import "user32.dll"
   int GetAncestor (int hWnd, int gaFlags);
   int GetParent (int hWnd);
   int GetDlgItem (int hDlg, int nIDDlgItem);
   int SendMessageA (int hWnd, int Msg, int wParam, int lParam);
   int PostMessageA (int hWnd, int Msg, int wParam, int lParam);
#import
#define LVM_GETITEMCOUNT   0x1004
#define WM_COMMAND         0x0111
#define WM_SCROLL          0x80F9
#define WM_KEYDOWN         0x0100
#define WM_CLOSE           0x0010
#define VK_HOME            0x24
#define VK_END             0x23
#define VK_DOWN            0x28

int nsymb,Pause=500;
string Symbols[];                                // ìàññèâ â êîòîðîì áóäóò õðàíèòñÿ ñèìâîëû
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
void start() {
   int i;
//--------------------------------------------------------------------
   if(GlobalVariableCheck("glSymbolHandle")) {   // Åñëè çàïóñêàåì íå ïåðâûé ðàç.
      GlobalVariableSet("glSymbolHandle",WindowHandle(Symbol(),Period())); // óñòàíîâèì íîâîå çíà÷åíèå ãëîá. ïåðåìåííîé
      for(i=0;i<nsymb;i++) {                     // â öèêëå íàéäåì ïîçèöèþ ñèìâîëà ãðàôèêà
         if(Symbols[i]==Symbol()) {              // â ìàññèâå Symbols[i] è çíà÷åíèå
            GlobalVariableSet("glSymbol",i);     // ïðèñâîèì ãëîá.ïåðåìåííîé
            return;                                                        
         }
      }
      return;
   } 
   MarketInfoToSymbols();                        // çàïèñûâàåì íàáîð ñèìâîëîâ ïðåäñòàâëÿåìûõ ÄÖ â ìàññèâ Symbols[]
   DownloadHomeKey();                            // ïîî÷åðåäè îòêðûâàåì ãðàôèêè èç "Îáçîðà ðûíêà"
   return;                                       // è íàæèìàåì êëàâèøó HOME, ïðîâåðÿÿ îêîí÷àíèå çàãðóçêè
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| MarketInfoToSymbols()                                            |
//| Íàçíà÷åíèå:                                                      |
//|     Çàïèñûâàåò íàáîð ñèìâîëîâ ïðåäñòàâëÿåìûõ ÄÖ â ãëîáàë. ìàññèâ |
//|     Symbols[], ïðèøëîñü ñäåëàòü ÷åðåç ïðîìåæóòî÷íûé ôàéë, èíà÷å  |
//|     âîçíèêàëà ïðîáëåìà http://forum.mql4.com/ru/23603            |
//+------------------------------------------------------------------+
void MarketInfoToSymbols() {
   int i,handle,handleset,size;
   string symb="symbols     ",path;
//--------------------------------------
   size=1936;
   path=StringConcatenate(TerminalPath(),"\\history\\",AccountServer(),"\\symbols.raw");
   handle=_lopen(path,0);                                            // îòêðûâàåì symbols.raw
   if(handle<0) {
      Print("Îøèáêà îòêðûòèÿ ôàéëà symbols.raw : ",GetLastError());
      return;
   }
   handleset=FileOpen("quoting.set",FILE_READ | FILE_WRITE);         // îòêðûâàåì ïðîìåæóòî÷íûé ôàéë
   if(handleset<0) {
      Print("Îøèáêà îòêðûòèÿ ôàéëà quoting.set : ",GetLastError());
      return;
   }
   nsymb=_llseek(handle,0,2)/size;                                   // íàõîäèì êîëè÷åñòâî ñèìâîëîâ
   for(i=0;i<nsymb;i++){                                             // â öèêëå çàïèñûâàåì âñå
      _llseek(handle,i*size,0);                                      // ñèìâîëû â ïðîìåæóòî÷íûé
      _lread(handle,symb,12);                                        // ôàéë
      FileWrite(handleset,symb);
   }
   _lclose(handle);                                                  // çàêðûâàåì symbols.raw
   if(!FileSeek(handleset,0,SEEK_SET)) {
      Print("Êóðñîð íå ñìåñòèëñÿ â íà÷àëî ôàéëà quoting.set èç-çà îøèáêè: ",GetLastError());
   }
   ArrayResize(Symbols,nsymb);                                       // ðåñàéçèì ìàññèâ ñèìâîëîâ
   for(i=0;i<nsymb;i++){                                             // â öèêëå çàãîíÿåì èç ïðî-
      Symbols[i]=FileReadString(handleset);                          // ìåæóòî÷íîãî ôàéëà â ìàññèâ
   }                                                                 // âñå ñèìâîëû
   FileClose(handleset);                                             // çàêðûâàåì ïðîìåæóòî÷íûé ôàéë
   FileDelete("quoting.set");                                        // óäàëÿåì ïðîìåæóòî÷íûé ôàéë
   return;
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| DownloadHomeKey()                                                |
//| Íàçíà÷åíèå:                                                      |
//|     Ïîäêà÷êà èñòîðèè â òåðìèíàë ïî âñåì ñèìâîëàì è ÒÔ ñ ýìóëÿöèåé|
//|     íàæàòèÿ êëàâèøè HOME                                         |
//+------------------------------------------------------------------+
void DownloadHomeKey() {
   int i,j,k,hmain,handle,handlechart,count,num,
       TF[8]={33136,33134,33141,33334,33137,33138,33139,33140},
       tf[9]={60,240,1440,10080,43200,1,5,15,30};
   datetime ebt,prebt;
//------------------------------------
   GlobalVariableSet("glSymbolHandle",WindowHandle(Symbol(),Period()));
   hmain=GetAncestor(WindowHandle(Symbol(),Period()),2);   // íàéäåì ãëàâíîå îêíî òåðìèíàëà.
   if (hmain!=0) { 
      handle=GetDlgItem(hmain,0xE81C);                    
      handle=GetDlgItem(handle,0x50);
      handle=GetDlgItem(handle,0x8A71);                    // íàõîäèì ñïèñîê ñèìâîëîâ.
      count=SendMessageA(handle,LVM_GETITEMCOUNT,0,0);     // ïîëó÷àåì êîëè÷åñòâî ýëåìåíòîâ ñïèñêà.
   }
   else Print("Îøèáêà : ",GetLastError());
   for(i=1;i<=count&&!IsStopped();i++) {                   // â öèêëå îòêðûâàåì îêíà ñ ãðàôèêàìè.
      OpenChart(i,hmain);                                  // îòêðûâàåì ãðàôèê î÷åðåäíîãî ñèìâîëà èç îêíà "Îáçîð ðûíêà"
      Sleep(Pause);
      PostMessageA(hmain,WM_COMMAND,33042,0);              // çàïóñêàåì íà òîëüêî, ÷òî îòêðûòîì ãðàôèêå ýòîò ñêðèïò.
      Sleep (Pause);
      handlechart=GlobalVariableGet ("glSymbolHandle");    // îïðåäåëÿåì äåñêðèïòîð òîëüêî, ÷òî îòêðûòîãî îêíà.
      for (j=0;j<9&&!IsStopped();j++) {                    // ïåðåêëþ÷åíèå ÒÔ è ýìóëÿöèÿ
         if (j!=0) {                                       // ïåðâóþ èòåðàöèþ ïðîïóñêàåì. Ïî óìîë÷àíèþ ïåðâûé ÒÔ H1.
            PostMessageA(handlechart,WM_COMMAND,TF[j-1],0);// óñòàíàâëèâàåì ÒÔ.
         }
         k=0;
         PostMessageA(handlechart,WM_COMMAND,WM_SCROLL,0); // îòêëþ÷àåì ñêðîëëèíã
         while(!IsStopped()) {
            PostMessageA(handlechart,WM_KEYDOWN,VK_HOME,0);// íàæèìàåì êëàâèøó "HOME"
            Sleep(200);
            PostMessageA(handlechart,WM_KEYDOWN,VK_HOME,0);// íàæèìàåì êëàâèøó "HOME"
            Sleep(200);
            PostMessageA(handlechart,WM_KEYDOWN,VK_HOME,0);// íàæèìàåì êëàâèøó "HOME"
            Sleep(200);
            PostMessageA(handlechart,WM_KEYDOWN,VK_HOME,0);// íàæèìàåì êëàâèøó "HOME"
            Sleep(200);
            PostMessageA(handlechart,WM_KEYDOWN,VK_HOME,0);// íàæèìàåì êëàâèøó "HOME"
            Sleep(200);
            num=GlobalVariableGet("glSymbol");             // ïîëó÷àåì èíäåêñ ñèìâîëà 
            ebt=iTime(Symbols[num],tf[j],(iBars(Symbols[num],tf[j])-1));// ïîëó÷àåì âðåìÿ ïîñëåäíåãî áàðà
            if(ebt!=prebt) {                               // åñëè âðåìÿ èçìåíÿåòñÿ, òî ïîäêà÷èâàåì äàëüøå
               prebt=ebt;
               k=0;
            }
            else k++;                                      // èíà÷å óâåëè÷èâàåì çíà÷åíèå ïåðåìåííîé íà 1
            if(k>4) break;                                 // è åñëè îíî áîëüøå 4, ïðåêðàùàåì "æàòü" íà HOME
         }
         PostMessageA(handlechart,WM_KEYDOWN,VK_END,0);    // óñòàíàâëèâàåò ãðàôèê â êîíåö (èëè íà÷àëî?) :)
         PostMessageA(handlechart,WM_COMMAND,WM_SCROLL,0); // âêëþ÷àåì ñêðîëëèíã
         PostMessageA(handlechart,WM_COMMAND,33324,0);     // îáíîâëÿåì îêíî äëÿ ïîäêà÷êè "ñâåæåé èñòîðèè"
         Sleep(Pause);
      }
      PostMessageA(GetParent(handlechart),WM_CLOSE,0,0);   // çàêðûâàåì îêíî ãðàôèêà. 
      Sleep(Pause);
   }
   GlobalVariableDel ("glSymbolHandle");                   // óäàëÿåì ãëîáàëüíûå ïåðåìåííûå
   GlobalVariableDel ("glSymbol");
   return;
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| OpenChart()                                                      |
//| Íàçíà÷åíèå:                                                      |
//| Îòêðûâàåò îêíî ãðàôèêà ñèìâîëà èç îêíà "Îáçîð ðûíêà".            |
//+------------------------------------------------------------------+
void OpenChart (int Num, int handle) {
   int hwnd;
//-------------------------------------  
   hwnd=GetDlgItem(handle,0xE81C); 
   hwnd=GetDlgItem(hwnd,0x50);
   hwnd=GetDlgItem(hwnd,0x8A71);                 // Íàøëè "Îáçîð ðûíêà".
   PostMessageA(hwnd,WM_KEYDOWN,VK_HOME,0);      // Âåðõíÿÿ ñòðî÷êà îêíà "Îáçîð ðûíêà".
   while (Num>1) {
      PostMessageA(hwnd,WM_KEYDOWN,VK_DOWN,0);   // Ñìåñòèëèñü íà íóæíóþ ñòðî÷êó.
      Num--;
   }
   PostMessageA(handle,WM_COMMAND,33160,0);      // Îòêðûëè ãðàôèê.
   return;
}
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:



Indicator Curves created:


Indicators Used:



Custom Indicators Used:
kernel32
user32

Order Management characteristics:

Other Features:


Uses files from the file system
It writes information to file
It reads information from a file