ExpertSource

Author: Copyright � Evgeniy Trofimov, 2009
Orders Execution
Checks for the total of open orders
Miscellaneous
Uses files from the file systemIt reads information from a fileIt writes information to file
0 Views
0 Downloads
0 Favorites
ExpertSource
//Âíèìàíèå! Ýòîò ýêñïåðò òðåáóåò ðàçðåøåíèÿ íà èçïîëüçîâàíèå ñòîðîííèõ áèáëèîòåê DLL
//Ýêñïåðò óñòàíàâëèâàåòñÿ íà ëþáóþ ïàðó â òåðìèíàëå ñî ñ÷¸òîì èñòî÷íèêà ñäåëîê.
#property copyright "Copyright © Evgeniy Trofimov, 2009"
#property link      "http://www.mql4.com/ru/users/EvgeTrofi"
#property show_inputs
#include <WinUser32.mqh>
#import "kernel32.dll"
   int _lopen  (string path, int of);
   int _lclose (int handle);
   int CopyFileA (string lpExistingFileName, string lpNewFileName, int bFailIfExists);
#import
// Êàê ýòî ðàáîòàåò:
// _lopen : Îòêpûâàåò óêàçàííûé ôàéë. Âîçâpàùàåò: îïèñàòåëü ôàéëà. 
// _lclose : Çàêpûâàåò óêàçàííûé ôàéë. Âîçâpàùàåò: 0.
//  ñëó÷àå íåóñïåøíîãî çàâåpøåíèÿ âñå ôóíêöèè âîçâðàùàþò çíà÷åíèå HFILE_ERROR=-1.
// CopyFileA : Êîïèðóåò ôàéë â ëþáîå ìåñòî
// lpExistingFileName : ïóòü ê èñòî÷íèêó
// lpNewFileName : ïóòü ê ïîëó÷àòåëþ
// bFailIfExists : 0 - êîïèðîâàòü ìîë÷à, 1 - åñëè ôàéë ñóùåñòâóåò, òî ñïðàøèâàòü ðàçðåøåíèå íà ïåðåçàïèñü
// path : Ñòpîêà, îïpåäåëÿþùàÿ ïóòü è èìÿ ôàéëà.
// of : Ñïîñîá îòêðûòèÿ.
// attrib : 0 - ÷òåíèå èëè çàïèñü; 1 - òîëüêî ÷òåíèå; 2 - íåâèäèìûé èëè 3 - ñèñòåìíûé.
// handle : Ôàéëîâûé îïèñàòåëü.

// Ñïîñîáû îòêðûòèÿ (ïàðàìåòð of):
int OF_READ = 0; // Îòêðûòü ôàéë òîëüêî äëÿ ÷òåíèÿ
int OF_WRITE = 1; // Îòêðûòü ôàéë òîëüêî äëÿ çàïèñè
int OF_READWRITE = 2; // Îòêðûòü ôàéë â ðåæèìå çàïèñü/÷òåíèå
int OF_SHARE_COMPAT = 4; // Îòêðûâàåò ôàéë â ðåæèìå îáùåãî ñîâìåñòíîãî äîñòóïà.  ýòîì ðåæèìå ëþáîé ïðîöåññ ìîæåò îòêðûòü äàííûé ôàéë ëþáîå êîëè÷åñòâî ðàç. Ïðè ïîïûòêå îòêðûòü ýòîò ôàéë â ëþáîì äðóãîì ðåæèìå, ôóíêöèÿ âîçâðàùàåò HFILE_ERROR.
int OF_SHARE_EXCLUSIVE =16; // Çàïðåò òåêóùåìó è äðóãèì ïðîöåññàì íà äîñòóï ê ýòîìó ôàéëó â ðåæèìàõ ÷òåíèÿ/çàïèñè. Ôàéë â ýòîì ðåæèìå ìîæíî îòêðûòü òîëüêî îäèí ðàç (òåêóùèì ïðîöåññîì). Âñå îñòàëüíûå ïîïûòêè îòêðûòèÿ ôàéëà áóäóò ïðîâàëåíû.
int OF_SHARE_DENY_WRITE=32; // Îòêðûâàåò ôàéë â ðåæèìå îáùåãî äîñòóïà ñ çàïðåòîì íà çàïèñü äðóãèì ïðîöåññàì. Ïðè ïîïûòêå îòêðûòèÿ äàííîãî ôàéëà ñ ôëàãàìè OF_SHARE_COMPAT è/èëè OF_WRITE èëè OF_READWRITE, ôóíêöèÿ âîçâðàùàåò HFILE_ERROR.
int OF_SHARE_DENY_READ =48; // Îòêðûâàåò ôàéë â ðåæèìå îáùåãî äîñòóïà ñ çàïðåòîì íà ÷òåíèå äðóãèì ïðîöåññàì. Ïðè ïîïûòêå îòêðûòèÿ äàííîãî ôàéëà ñ ôëàãàìè OF_SHARE_COMPAT è/èëè OF_READ èëè OF_READWRITE, ôóíêöèÿ âîçâðàùàåò HFILE_ERROR.
int OF_SHARE_DENY_NONE =64; // Îòêðûâàåò ôàéë â ðåæèìå îáùåãî äîñòóïà áåç çàïðåòà íà ÷òåíèå/çàïèñü äðóãèì ïðîöåññàì. Ïðè ïîïûòêå îòêðûòèÿ äàííîãî ôàéëà â ðåæèìå OF_SHARE_COMPAT, ôóíêöèÿ âîçâðàùàåò HFILE_ERROR.
//---------------------------------------------------------------------------
extern string FileName = "Orders.txt"; // Èìÿ ôàéëà äëÿ ïîëó÷àòåëÿ
extern string Path = "D:\test";        // Êàòàëîã ïîëó÷àòåëÿ
//---------------------------------------------------------------------------
void start() {
   string buffer[], oldBuffer[1000];
   double risk;
   string slash=StringSubstr("\a",0,1);
   int dig, j, handle, k;
   int  total = OrdersTotal();
   bool ReWrite=false;
   ArrayResize(buffer,total);
   for(int i = 0; i < total; i++) {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
         risk = 100*OrderLots()*MarketInfo(OrderSymbol(), MODE_MARGINREQUIRED)/AccountEquity();
         dig  = MarketInfo(OrderSymbol(), MODE_DIGITS);
         buffer[j] = DoubleToStr(risk,3)+" "+OrderTicket()+" "+OrderSymbol()+" "+OrderType()+" "
         +DoubleToStr(OrderOpenPrice(),dig)+" "
         +DoubleToStr(OrderStopLoss(),dig)+" "
         +DoubleToStr(OrderTakeProfit(),dig);
         j++;
      }
   }//Next i
   //Îòêðîåì ôàéë äëÿ ÷òåíèÿ è ïîñòðî÷íî ñðàâíèì, èçìåíèëîñü ëè ÷åãî ñ ïðîøëîãî ðàçà èëè íåò
   handle=FileOpen(FileName,FILE_BIN);
   if(handle<0) {
      Print("Îòñóòñòâóåò ôàéë îðäåðîâ. Ôàéë áóäåò ñîçäàí.");
      ReWrite=true;
   } else {
      k=FileReadArray(handle,oldBuffer,0,1000);
      FileClose(handle);
      if(k!=j) {
         Print("Ïîìåíÿëîñü êîëè÷åñòâî îðäåðîâ. Ôàéë áóäåò ïåðåïèñàí.");
         ReWrite=true;
      } else {
         for(i=0; i<j; i++) {
            if(StringSubstr(buffer[i], 6)!=StringSubstr(oldBuffer[i], 6)) {
               Print("Ïîìåíÿëèñü çíà÷åíèÿ. Ôàéë áóäåò ïåðåïèñàí.");
               Print(StringSubstr(buffer[i], 6));
               Print(StringSubstr(oldBuffer[i], 6));
               ReWrite=true;
               break;
            }
            if(oldBuffer[i]=="") break;
         }//Next i
      }
      if(k==0){
         Print("Íåò íè îäíîãî îòêðûòîãî îðäåðà. Ôàéë áóäåò ïåðåïèñàí. (íà ñëó÷àé, êîãäà èñòî÷íèê ñëèøêîì áûñòðî çàêðîåò âñå îðäåðà)");
         ReWrite=true;
      }
   }
   if(ReWrite) {
      handle=FileOpen(FileName,FILE_BIN|FILE_WRITE);
      if(FileWriteArray(handle, buffer, 0, j)>0) {
         FileClose(handle);
         j = _lopen(Path+slash+FileName,OF_READ);
         if(j<0) {//Ôàéë íå ïåðåçàïèñûâàåì!
            CopyFileA(TerminalPath()+"\experts\files"+slash+FileName, Path+slash+FileName, 0);
         } else {
            _lclose(j);
            FileDelete(FileName);
            Print("Ôàéë îðäåðîâ óäàë¸í, ïîòîìó ÷òî ôàéë, íàõîäÿùèéñÿ ó ïîëó÷àòåëÿ, åù¸ íå îáðàáîòàí.");
         }
      }
   }
} //start()

Comments