Ach_CheckOrders

Author: Copyright 2014, MetaQuotes Software Corp.
Orders Execution
Checks for the total of open orders
0 Views
0 Downloads
0 Favorites
Ach_CheckOrders
//+------------------------------------------------------------------+
//|                                                  Ach CheckOrders.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict
// Äàííûé ïðîäóêò áûë íàïèñàí äëÿ èñïîëüçîâàíèÿ â ñîâåòíèêå ÷òîáû ïîýêñïåðèìåíòèðîâàòü ñ ìàðòèíîì.×òî áû äàííûå î îðäåðàõ áûëè â îäíîì ôëàêîíå. 
// ×òî âûâîäèò ñìîòðåòü ñ 80 ïî 109 ñòðîêó. Íà ïåðâûé âçãëÿä çàïóòàííî, íî ñî øïàðãàëêîé 
// Ïðèìåð èñïîëüçîâàíèÿ â ñîâåòíèêå
//   if(order[6]==0 && order[7]<0) // åñëè ó Âàñ íåò ñäåëîê (çàêðûëàñü ïî TP èëè SL) íî îñòàëèñü îòëîæåííûå îðäåðà êîòîðûå íàäî óäàëèòü
//     {
//      if(OrderDelete(order[8])!=tru)Fun_Error(GetLastError(); // óäàëÿåì ïåðâûé îòëîæåíûé îðäåð ñ äàííûì òèêåòîì order[8], åñëè èõ íåñêîëüêî òî íà ñëåä òèêå óäàëèòñÿ ñëåäóþùèé è òä
//      return;  //âûõîä â OnTick
//     }
//     
extern int Magic=1234;

double buy[5],sell[5],prof[6]; // ïåðåìåííûå ó÷åòà îðäåðîâ 
int order[15],order_old[15]; //// ïåðåìåííûå ó÷åòà îðäåðîâ

double L_buy[5],L_sell[5],L_prof[6]; // ïåðåìåííûå ó÷åòà îðäåðîâ
int L_order[15],L_order_old[15]; //// ïåðåìåííûå ó÷åòà îðäåðîâ
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
    CheckOrders(Magic,_Symbol,order,order_old,buy,sell,prof); 

// CheckOrders(Magic,_Symbol,L_order,L_order_old,L_buy,L_sell,L_prof);
   
 // Âûâîä êîììåíòàðèÿ äëÿ ïðîâåðêè ðàáîòû CheckOrders()
   Comment("Buy      ",order[0],"  ",buy[0],"  ",sell[0],"  ",prof[0],
           "\nSell       ",order[1],"  ",buy[1],"  ",sell[1],"  ",prof[1],
           "\nbuylimit ",order[2],"  ",buy[2],"  ",sell[2],"  ",prof[2],
           "\nselllimit   ",order[3],"  ",buy[3],"  ",sell[3],"  ",prof[3],
           "\nbuystop  ",order[4],"  ",buy[4],"  ",sell[4],"  ",prof[4],
           "\nsellstop  ",order[5],"                            ",prof[5],
           "\nÑäåëîê      ",order[6],
           "\nÎòëîæåê    ",order[7],
           "\nòèê 0 ORD ",order[8],
           "\n ",order[9],
           "\n ",order[10],
           "\n ",order[11],
           "\n ",order[12],
           "\n ",order[13],
           "\n ",order[14]);
  }
void CheckOrders(int Mag,string Symbl,int &orders[15],int &orders_Old[15],double &buy_mas[5],double &sell_mas[5],double &prof_mas[6])
  {

   ArrayCopy(orders_Old,orders);// Ñîõðàíÿåì ïðåäûäóùóþ èñòîðèþ

   ArrayInitialize(orders,0);// îáíóëÿåì ìàññèâ 
   ArrayInitialize(buy_mas,0);
   ArrayInitialize(sell_mas,0);
   ArrayInitialize(prof_mas,0);// îáíóëÿåì ìàññèâ 

/* orders[0] - êîëè÷åñòâî Buy
// orders[1] - êîëè÷åñòâî Sell
// orders[2] - êîëè÷åñòâî buylimit
// orders[3] - selllimit
// orders[4] - êîëè÷åñòâî buystop
// orders[5] - êîëè÷åñòâî sellstop
// orders[6] - êîëè÷åñòâî ñäåëîê
// orders[7] - êîëè÷åñòâî îòëîæåê
// orders[8] - òèêåò ïåðâîãî ëþáîãî íóëåâîãî îðäåðà 
// orders[9] - òèêåò ïåðâîãî ñ ìåíüøèì ïîðÿäêîâûì íîìåðîì Buy
// orders[10] - òèêåò ïîñëåäíåãî ñ áîëüøèì ïîðÿäêîâûì íîìåðîì Buy
// orders[11] - òèêåò ïåðâîãî ñ ìåíüøèì ïîðÿäêîâûì íîìåðîì Sell
// orders[12] - òèêåò ïîñëåäíåãî ñ áîëüøèì ïîðÿäêîâûì íîìåðîì Sell
// orders[13] - íàëè÷èå ëèìèòíûõ buylimit è selllimit îðäåðîâ
// orders[14] - íàëè÷èå  buystop  è sellstop îðäåðîâ

// buy_mas[0] - Öåíà ïîñëåäíåãî îòêðûòîãî Buy    sell_mas[0] - Öåíà ïîñëåäíåãî îòêðûòîãî Sell 
// buy_mas[1] - Öåíà áåçóûòêà NonLosBuy          sell_mas[1] - Öåíà áåçóûòêà NonLosSell 
// buy_mas[2] - max ëîò Buy                      sell_mas[2] - max ëîò Sell
// buy_mas[3] - ñóììà âñåõ ëîòîâ Buy             sell_mas[3] - ñóììà âñåõ ëîòîâ Sell
// buy_mas[4] - ëîò ïåðâîãî buy                  sell_mas[4] - ëîò ïåðâîãî sell

// prof_mas[0] - Ïðîôèò Buy ñäåëîê   
// prof_mas[1] - Ïðîôèò Sell ñäåëîê            
// prof_mas[2] - îáùèé ïðîôèò ïî òåêùåìó èíñòðóìåíòó                     
// prof_mas[3] - Ïðîôèò ïî ìàãèêó           
// prof_mas[4] - Ïðîôèò ïî ñ÷åòó
// prof_mas[5] - NoLossTotal  áåçóáûòîê ïðè íàëè÷èè âñòðå÷íûõ îðäåðîâ ïðè ïåðåâåñå êîëè÷åñòâà ëîòîâ â ëþáóþ ñòîðîíó */        


 double techBuy,technSell; // òåõíè÷åñêèé îïåðàòîð
   techBuy=0;
   technSell=0;
   int tip;
   int poz;
   int tiket=-1;
   for(poz=OrdersTotal()-1;poz>=0;poz--)
      //+------------------------------------------------------------------+
      //|    ïåðåáîð îðäåîâ îò áîëüøãî ê ìíåíüøåìó                         |
      //+------------------------------------------------------------------+
     {

      if(OrderSelect(poz,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()==_Symbol && OrderMagicNumber()==Mag  && OrderTicket()!=tiket)
        {
         tiket=OrderTicket();
         orders[8]=tiket; // òèêåò ëþáîãî ñàìîãî ïåðâîãî îðäåðà
         tip=OrderType();
         switch(tip)
           {

            case 0:{orders[0]++;orders[6]++;buy_mas[3]+=OrderLots();buy_mas[4]=OrderLots();orders[9]=OrderTicket();break;}
            case 1:{orders[1]++;orders[6]++;sell_mas[3]+=OrderLots();sell_mas[4]=OrderLots();orders[11]=OrderTicket();break;}
            case 2:{orders[2]++;orders[7]++;orders[13]++;break;}
            case 3:{orders[3]++;orders[7]++;orders[13]++;break;}
            case 4:{orders[4]++;orders[7]++;orders[14]++;break;}
            case 5:{orders[5]++;orders[7]++;orders[14]++;break;}
           }
         if(orders[10]<orders[9])orders[10]=orders[9]; //òèêåò ïîñëåäíåãî ñ áîëüøèì íîìåðîì áàÿ
         if(orders[12]<orders[11])orders[12]=orders[11];  //òèêåò ïîñëåäíåãî ñ áîëüøèì íîìåðîì ñåëëà
         if(buy_mas[2]<buy_mas[4])buy_mas[2]=buy_mas[4];  //max ëîò Buy
         if(sell_mas[2]<sell_mas[4])sell_mas[2]=sell_mas[4];  //max ëîò Sell

         if(OrderType()==OP_BUY)
           {

            techBuy=techBuy+OrderOpenPrice()*OrderLots();
            prof_mas[0]=prof_mas[0]+OrderProfit()+OrderSwap(); //Ïðîôèò Buy ñäåëîê 
           buy_mas[1]=NormalizeDouble(techBuy/buy_mas[3],_Digits);  //Öåíà áåçóûòêà NonLosBuy áåç ó÷åòà Swop è êîìèññèè
           }

         if(OrderType()==OP_SELL)
           {
            technSell=technSell+OrderOpenPrice()*OrderLots();
            prof_mas[1]=NormalizeDouble(prof_mas[1]+OrderProfit()+OrderSwap(),_Digits);  //Ïðîôèò Sell ñäåëîê
            sell_mas[1]=NormalizeDouble(technSell/sell_mas[3],_Digits);   //Öåíà áåçóûòêà NonLosSell  áåç ó÷åòà Swop è êîìèññèè
           }
        }
      if(OrderSelect(poz,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()==_Symbol )
        {
         prof_mas[2]=NormalizeDouble(prof_mas[2]+OrderProfit()+OrderSwap(),2);   // îáùèé ïðîôèò ïî òåêùåìó èíñòðóìåíòó
        }
         if(OrderSelect(poz,SELECT_BY_POS,MODE_TRADES)==true)
        {
         prof_mas[4]=NormalizeDouble(prof_mas[4]+OrderProfit()+OrderSwap(),2);   // îáùèé ïðîôèò ïî ñ÷åòó
        }
     }


 if(orders[0]>0 && orders[1]>0 && buy_mas[3]!=sell_mas[3])prof_mas[5]=NormalizeDouble(Bid-prof_mas[2]/MarketInfo(Symbol(),MODE_TICKVALUE)/(buy_mas[3]-sell_mas[3])*Point,Digits); 
   prof_mas[3]=NormalizeDouble(prof_mas[0]+prof_mas[1],2);  //îáùèé ïðîôèò ïî òåêóùåìó ìàãèêó
   if(OrderSelect(orders[10],SELECT_BY_TICKET,MODE_TRADES)==true)buy_mas[0]=OrderOpenPrice();   // Öåíà ïîñëåäíåãî îòêðûòîãî áàÿ
   if(OrderSelect(orders[12],SELECT_BY_TICKET,MODE_TRADES)==true)sell_mas[0]=OrderOpenPrice();  // Öåíà ïîñëåäíåãî îòêðûòîãî ñåëëà
   return;
  }
//+------------------------------------------------------------------+

Comments