Author: Copyright 2015, Galladion
Miscellaneous
Uses files from the file systemIt writes information to file
0 Views
0 Downloads
0 Favorites
load_hist
//+------------------------------------------------------------------+
//|                                                    Load_Hist.mq4 |
//|                                       Copyright 2015, Galladion  |
//|                                         https://vk.com/id1398982 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Galladion"
#property link      "https://vk.com/id1398982"
#property version   "1.00"
string Global_UPG="UPG";            //Ãëîá.ïåðåìåííàÿ äëÿ ïðîâåðêè âûïîëíåíèÿ ñêðèïòà íà çàãðóçêó èñòîðèè

extern string FileName="Symbols";   // Èìÿ ôàéëà äëÿ çàïèñè èíôîðìàöèè ïî ñèìâîëàì
extern int Pause=500;               // Òåõíè÷åñêàÿ ïàóçà â ìèëëèñåêóíäàõ
extern int j=10;                    // Ìíîæèòåëü äëÿ ñðåäíåãî áàðà
extern bool load_hist= false;       // Âûïîëíÿòü çàãðóçêó èñòîðèè
extern bool art_line = false;       // Îòìå÷àòü áàðû (÷àðò îñòàåòñÿ îòêðûòûì)

#import "user32.dll"
int PostMessageA(int hWnd,int Msg,int wParam,int lParam);
int SendMessageA(int hWnd,int Msg,int wParam,int lParam);
int GetParent(int hWnd);
int GetDlgItem(int hDlg,int nIDDlgItem);
#import

#define VK_HOME 0x24
#define VK_DOWN 0x28
#define WM_CLOSE 0x0010
#define WM_COMMAND 0x0111
#define WM_KEYDOWN 0x0100
#define LVM_GETITEMCOUNT 0x1004
#define VAR_HANDLE "Symbol_Handle"
// Âîçâðàùàåò õýíäë îñíîâíîãî îêíà òåðìèíàëà
int Parent()
  {
   int hwnd=WindowHandle(Symbol(),Period());
   int hwnd_parent=0;

   while(!IsStopped())
     {
      hwnd=GetParent(hwnd);

      if(hwnd==0)
         break;

      hwnd_parent=hwnd;
     }

   return(hwnd_parent);
  }
// Âîçâðàùàåò êîëè÷åñòâî ñèìâîëîâ â îêíå "Market Watch"
int SymbolCount()
  {
   int hwnd=Parent();
   int Count=0;

   if(hwnd!=0) // íàøëè ãëàâíîå îêíî
     {
      hwnd=GetDlgItem(hwnd,0xE81C); // Íàøëè ñïèñîê ñèìâîëîâ
      hwnd = GetDlgItem(hwnd, 0x50);
      hwnd = GetDlgItem(hwnd, 0x8A71);

      Count=SendMessageA(hwnd,LVM_GETITEMCOUNT,0,0); // ïîëó÷èëè êîëè÷åñòâî ýëåìåíòîâ ñïèñêà
     }

   return(Count);
  }
// Îòêðûâàåò îêíî ãðàôèêà ñèìâîëà, ðàñïîëîæåííîãî â ñòðîêå íîìåð Num îêíà "Market Watch"
void OpenChart(int Num)
  {
   int hwnd= Parent();
   if(hwnd!=0) // íàøëè ãëàâíîå îêíî
     {
      hwnd=GetDlgItem(hwnd,0xE81C); // íàøëè "Market Watch"
      hwnd = GetDlgItem(hwnd, 0x50);
      hwnd = GetDlgItem(hwnd, 0x8A71);

      PostMessageA(hwnd,WM_KEYDOWN,VK_HOME,0); // âåðõíÿÿ ñòðî÷êà îêíà "Market Watch"

      while(Num>1)
        {
         PostMessageA(hwnd,WM_KEYDOWN,VK_DOWN,0); // ñìåñòèëèñü íà íóæíóþ ñòðî÷êó
         Num--;
        }
     }

   PostMessageA(Parent(),WM_COMMAND,33160,0); // îòêðûëè ãðàôèê

   return;
  }
// Çàêðûâàåò îêíî ãðàôèêà
void CloseChart(int hwnd)
  {
   PostMessageA(GetParent(hwnd),WM_CLOSE,0,0);

   return;
  }
// Çàïóñêàåò âûáðàííûé â îêíå "Navigator" ñêðèïò 
void RunScript()
  {
   PostMessageA(Parent(),WM_COMMAND,33042,0); // èñïîëíèòü ñêðèïò íà òåêóùåì ãðàôèêå

   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void UpgScript()
  {
   int B=Bars,h=1;
   PostMessageA(WindowHandle(Symbol(),Period()),WM_KEYDOWN,VK_HOME,0); // íàæàòèå êíîïêè "HOME" â àêòèâíîì îêíå ãðàôèêà
   while(true) // Öèêë âûïîëíÿåòñÿ äî òåõ ïîð....
     {
      PostMessageA(WindowHandle(Symbol(),Period()),WM_KEYDOWN,VK_HOME,0); // íàæàòèå êíîïêè "HOME" â àêòèâíîì îêíå ãðàôèêà
      Sleep(3*Pause);
      RefreshRates();
      if(B==Bars) // ...ïîêà îáíîâëÿåòñÿ ãðàôèê ïî íàæàòèþ êë. "HOME"
        {
         if(h<=5) {Sleep(h*Pause);h++;continue;} // (åñëè ìåäëåííûé èíåò - òî êë. æìåòñÿ åùå ðàç)
         GlobalVariableSet(Global_UPG,0);  // åñëè âñå òàêè âñÿ èñòîðèÿ çàãðóæåí - îáíîâëÿåì ãëîá. ïåðåìåííóþ
         return; // âûõîäèì
        }
      B=Bars;h=1;
     }
  }
// Çàïèñûâàåò õàðàêòåðèñòèêà òåêóùåãî òîðãîâîãî ñèìâîëà â ôàéë
void WriteSymbol(string per)
  {
   int handle;
   string Str;
   double price=0;
   int k=0; // ïåðåìåííàÿ äëÿ èìåíè "ãàëêè" - ìàðêåð áàðà
   string direction; // íàïðàâëåíèå òðåíäà áàðà
   for(int m=Bars-1;m>=0;m--) // èùåì ñðåäíèé áàð âî âñåé èñòîðèè
     {
      price+=High[m]-Low[m];
     }
   price/=Bars-1;
   for(int l=Bars-1;l>=0;l--) // èùåì áàðû áîëüøå êîýô. * ñð.áàð è ïèøåì â ôàéë
     {
      if(High[l]-Low[l]>j*price)
        {
         if(Open[l]<Close[l])direction = "UP";
         if(Open[l]>Close[l])direction = "DOWN";
         if(Open[l]==Close[l])direction="0";
         Str=Str+"\n"+per+";"+Symbol()+";"+TimeToStr(Time[l],TIME_DATE|TIME_MINUTES)+";"+DoubleToStr(price,MarketInfo(Symbol(),MODE_DIGITS))+";"+IntegerToString(j,0)+";"+DoubleToStr(round(j*price/Point),0)+";"+direction+";"+DoubleToStr(round((High[l]-Low[l])/Point)*MarketInfo(Symbol(),MODE_TICKVALUE),2)+";";
         while(art_line) // åñëè íàäî ñòàâèì ìàðêåð íà ýòîì áàðå
           {
            ObjectCreate(ChartID(),(string)k,OBJ_ARROW_CHECK,0,Time[l]+Time[0]-Time[1],High[l]);
            //--- óñòàíîâèì ñïîñîá ïðèâÿçêè
            ObjectSetInteger(ChartID(),(string)k,OBJPROP_ANCHOR,ANCHOR_BOTTOM);
            //--- óñòàíîâèì ðàçìåð çíàêà
            ObjectSetInteger(ChartID(),(string)k,OBJPROP_WIDTH,3);
            break;
           }
         k++;
        }
     }

   handle=FileOpen(FileName,FILE_READ|FILE_WRITE|FILE_CSV,';');
   FileSeek(handle,-2,SEEK_END);

   FileWrite(handle,Str);
   FileClose(handle);
   return;
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string interval;
   switch(Period()) // îïðåäåëÿåì ïåðèîä ãðàôèêà è äîïèñûâàåì â èìÿ ôàéëà
     {              // ÷àðò îòêðûâàåòñÿ ïî øàáëîíó default
      case 1: interval = "PERIOD_M1";break;
      case 5: interval = "PERIOD_M5";break;
      case 15: interval = "PERIOD_M15";break;
      case 30: interval = "PERIOD_M30";break;
      case 60: interval = "PERIOD_H1";break;
      case 240: interval= "PERIOD_H4";break;
      case 1440: interval="PERIOD_D1";break;
      case 10080: interval = "PERIOD_W1";break;
      case 43200: interval = "PERIOD_MN";break;
      default : return;
     }
   FileName+="_"+interval+".csv";
   int handle,Count,i=1;
   handle=FileOpen(FileName,FILE_READ|FILE_WRITE|FILE_CSV,';');
   FileWrite(handle,"Ïåðèîä;Ñèìâîë;ÄÀÒÀ;Ñð.áàð;Ìíîæ.;Êîë.ïï.;Íàïð.;Ñò-òü H/L;");
   FileClose(handle);
//---
   if(GlobalVariableCheck(VAR_HANDLE)) // Çàïóñòèëè íå ïåðâûé ðàç...
     {
      GlobalVariableSet(VAR_HANDLE,WindowHandle(Symbol(),Period()));
      if(load_hist)UpgScript();
      WriteSymbol(interval);
     }
   else  // çàïóñòèëè ïåðâûé ðàç
     {
      GlobalVariableSet(VAR_HANDLE,WindowHandle(Symbol(),Period()));

      handle=FileOpen(FileName,FILE_WRITE|FILE_CSV,';'); // îáíóëèëè ôàéë ñ äàííûìè
      FileClose(handle);

      Count=SymbolCount();

      while(!IsStopped())
        {
         if(i>Count)
            break;

         OpenChart(i); // îòêðûëè ãðàôèê î÷åðåäíîãî ñèìâîëà èç îêíà "Market Watch"
         Sleep(Pause);

         if(GlobalVariableCheck(Global_UPG))GlobalVariableSet(Global_UPG,1);  // ïðåäîòâðàùàåò ïðåäæåâðåìåííîå çàêðûòèå îêíà

         RunScript(); // çàïóñòèëè íà òîëüêî ÷òî îòêðûòîì ãðàôèêå òåêóùèé ñêðèïò
         Sleep(Pause);

         while(load_hist) // öèêë âûïîëíÿåòñÿ åñëè íåîáõîäèìî çàãðóæàòü èñòîðèþ
           {
            if(GlobalVariableCheck(Global_UPG)==true && (GlobalVariableGet(Global_UPG)==0)) break;  // èñòîðèÿ çàãðóæåíà ìîæíî çàêðûâàòü ÷àðò
           }
         while(!art_line) // åñëè ìàðêèðóåì áàðû, îêíî ÷àðòà íå çàêðûâàåòñÿ
           {
            CloseChart(GlobalVariableGet(VAR_HANDLE)); // çàêðûëè îêíî ãðàôèêà
            Sleep(Pause);
            break;
           }
         i++;
        }

      GlobalVariableDel(VAR_HANDLE);
      GlobalVariableDel(Global_UPG);

      // çàïèñàëè â ôàéë êîëè÷åñòâî ñèìâîëîâ â îêíå "Market Watch"
      handle=FileOpen(FileName,FILE_READ|FILE_WRITE|FILE_CSV,';');
      FileSeek(handle,0,SEEK_END);

      FileWrite(handle,"\nAMOUNT OF SYMBOLS = "+Count);
      FileClose(handle);
     }
   return;
  }
//+------------------------------------------------------------------+

Comments