//+------------------------------------------------------------------+ //| 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