Author: Verdi
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reached
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
Netgatom
//+---------------------------------------------------------------------------------+
//|                                                                    Net^atom.mq4 |
//|                                                                           Verdi |
//|                                                                 nemo811@mail.ru |
//|Ñåòêà îòëîæåííûõ limit-îðäåðîâ ñ ó÷¸òîì òåêóùåé óáûòî÷íîé ïîçèöèè.               |
//|Âûñòàâëåíèå ïàðàìåòðà Lot èä¸ò ïî àðèôìåòè÷åñêîé ïðîãðåññèè; çà åãî áàçîâîå      |
//|çíà÷åíèå áåð¸òñÿ ðàçíîñòü îáú¸ìîâ ðûíî÷íûõ buy è sell îðäåðîâ; ïðè îòñóòñòâèè    |
//|ðûíî÷íûõ îðäåðîâ çíà÷åíèå Lot ðàâíî ñîîòâåòñòâóþùåé ïåðåìåííîé. TP ðàññ÷èòûâàåòñÿ|
//|ñ ïîïðàâêîé  äëÿ âûõîäà ñåòêè â îáùèé 0. Â êîíöå Limit-ñåòêè ñòàâèòñÿ Stop-îðäåð |
//|(TP, SL, Magic = 0) äëÿ ëîêèðîâàíèÿ âñåõ ïîçèöèé.                                |
//|Ñêðèïò äà¸ò ïðåäóïðåæäåíèå è ïðåêðàùàåò ðàáîòó åñëè ïî òåêóùåìó èíñòðóìåíòó:     |
//| - óæå ñòîèò îòëîæåííûé îðäåð;                                                   |
//| - ðûíî÷êûå ïîçèöèè â ñîñòîÿíèè "çàìêà";                                         |
//| - îáú¸ì ðûíî÷íûõ îðäåðîâ Buy áîëüøå ÷åì Sell è äàíà êîìàíäà íà Sell;            |
//| - îáú¸ì ðûíî÷íûõ îðäåðîâ Sell áîëüøå ÷åì Buy è äàíà êîìàíäà íà Buy;             |
//| - ðûíî÷êûå ïîçèöèè â îáùåì ïðîôèòå, âñëåäñòâèå ÷åãî TP ðàññ÷èòûâàåòñÿ           |
//| íåêîððåêòíî.                                                                    |
//+---------------------------------------------------------------------------------+
#property copyright "Verdi"
#property link      "nemo811@mail.ru"
#property show_inputs
//-----------------------------------------------------------------------------------
extern int     Magic       = 0;      //óíèêàëüíûé íîìåð îðäåðîâ ñåòêè (êðîìå Stop-îðäåðà)
extern bool    BUY         = false;  //îòêðûòü ñäåëêó BUY è ïîñòàâèòü ñåòêó BUY LIMIT
extern bool    SELL        = false;  //îòêðûòü ñäåëêó SELL è ïîñòàâèòü ñåòêó SELL LIMIT
extern double  Lot         = 0.01;   //îáú¸ì îòêðûâàåìîãî ðûíî÷íîãî îðäåðà è ïåðâîãî limit-îðäåðà
extern int     delta       = 37;     //øàã ñåòêè
extern int     MaxOrders   = 2;      //êîë-âî limit-îðäåðîâ ñåòêè
extern int     takeprofit  = 52;     //óðîâåíü âûñòàâëåíèÿ TP; åñëè 0, òî TP íå âûñòàâëÿåòñÿ              
extern int     zero_tp     = 1;      //êîýôôèöèåíò ïîïðàâêè takeprofit äëÿ âûõîäà ñåòêè â îáùèé 0; åñëè 0,
                                     //òî takeprofit ïðèìåò ñòàíäàðòíîå çíà÷åíèå, (!)ñòàâèòü 1 èëè 0(!)
extern int     stoploss    = 0;      //óðîâåíü âûñòàâëåíèÿ SL; åñëè 0, òî SL íå âûñòàâëÿåòñÿ
extern int     Proskalz    = 3;      //ìàêñèìàëüíî äîïóñòèìîå îòêëîíåíèå öåíû
//------------------------------------------------------------------------------------
double SL,TP,Price,DeltaProfitR,DeltaProfitL,LotR,LotL,LotS;
//------------------------------------------------------------------------------------
int start()
{
 string SMB=Symbol();
 int SchBS=SchBS_b();
 int SchSS=SchSS_b();
 int SchBL=SchBL_b();
 int SchSL=SchSL_b();
 if (SchBS+SchSS+SchBL+SchSL>0)
  { 
   Alert ("Oòìåíà! ",SMB,": óäàëèòå îòëîæåííûå îðäåðà.");
   return (0);
  }
 double SchBuyLs=SchBuyLs_b();
 double SchSellLs=SchSellLs_b(); 
 if (SchBuyLs>0 || SchSellLs>0)
  { 
   if (SchBuyLs-SchSellLs==0)
    { 
     Alert ("Oòìåíà! ",SMB,": ïîçèöèÿ Lock.");
     return (0);
    }
  }
 if (BUY == true)
  { 
   if (SchBuyLs<SchSellLs)
    { 
     Alert ("Oòìåíà Buy! ",SMB,": îáú¸ì Sell áîëüøå.");
     return (0);
    }
  }
 if (SELL == true)
  { 
   if (SchBuyLs>SchSellLs)
    { 
     Alert ("Oòìåíà Sell! ",SMB,": îáú¸ì Buy áîëüøå.");
     return (0);
    }
  }
 int SchB=SchB_b();
 int SchS=SchS_b();
 if (SchB+SchS>0)
  {
   int f=OrdersTotal();
   if (!OrderSelect(f, SELECT_BY_POS, MODE_TRADES)==true)
    {
     if(OrderSymbol()!=SMB)
      {
       if(OrderType()==OP_BUY || OrderType()==OP_SELL)
        {  
         double rezultSymb=SymbolOrdersProfit_b();
         double dx=SchBuyLs-SchSellLs, dy;
         dy=MathAbs(dx);
         double ad.QuotePoint = MarketInfo(Symbol(), MODE_POINT);
         double ad.QuoteTick = MarketInfo(Symbol(), MODE_TICKSIZE);
         double ad.NominalTick = MarketInfo(Symbol(), MODE_TICKVALUE);
         double ad.NominalPoint = ad.NominalTick  * ad.QuotePoint / ad.QuoteTick;  
         double n=rezultSymb*(-1)/ad.NominalPoint; 
         for (int xxx=1; xxx<=1; xxx++)
          {
           LotR=dy;
           DeltaProfitR = n/(dy+dy);
           if (takeprofit+DeltaProfitR<=0)
            { 
             Alert ("Oòìåíà! ",SMB,": íåêîððåêòíûé TP.");
             return (0);
            }
           if (BUY)
            {
             if (takeprofit!=0) TP  = NormalizeDouble(Ask + (takeprofit+DeltaProfitR*zero_tp)*Point,Digits); else TP=0;
             if (stoploss!=0)   SL  = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;     
             OPENORDER ("Buy",Price,SL,TP,xxx);
            }
           if (SELL)
            {  
             if (takeprofit!=0) TP = NormalizeDouble(Bid - (takeprofit+DeltaProfitR*zero_tp)*Point,Digits); else TP=0;
             if (stoploss!=0)   SL = NormalizeDouble(Bid + stoploss*Point,Digits);  else SL=0;              
             OPENORDER ("Sell",Price,SL,TP,xxx);
            }
          }
         double Sumii=0;
         for (int iii=1; iii<=MaxOrders; iii++)
          {
           LotL=dy*iii;
           Sumii=Sumii+delta*(2*dy+dy*(iii-2))*(iii-1)/2;
           DeltaProfitL = (Sumii+n+2*dy*delta*iii)/((2*dy+dy*(iii-1))*iii/2+2*dy);
           if (takeprofit+DeltaProfitL<=0)
            { 
             Alert ("Oòìåíà! ",SMB,": íåêîððåêòíûé TP.");
             return (0);
            }
           if (BUY)
            {
             Price = NormalizeDouble(Ask-delta*iii*Point,Digits);
             if (takeprofit!=0) TP  = NormalizeDouble(Price + (takeprofit + DeltaProfitL*zero_tp)*Point,Digits); else TP=0;
             if (stoploss!=0)   SL  = NormalizeDouble(Price - stoploss*Point,Digits); else SL=0;     
             OPENORDER ("Buy Limit",Price,SL,TP,iii);
            }
           if (SELL)
            {  
             Price = NormalizeDouble(Bid+delta*iii*Point,Digits);
             if (takeprofit!=0) TP = NormalizeDouble(Price - (takeprofit + DeltaProfitL*zero_tp)*Point,Digits); else TP=0;
             if (stoploss!=0)   SL = NormalizeDouble(Price + stoploss*Point,Digits);  else SL=0;              
             OPENORDER ("Sell Limit",Price,SL,TP,iii);
            }
          }
         for (int vvv=1; vvv<=1; vvv++)
          {
           LotS=(2*dy+dy*(MaxOrders-1))*MaxOrders/2+2*dy;
           if (BUY)
            {
             OPENORDER ("Sell Stop",Price,SL,TP,vvv);
            }
           if (SELL)
            {  
             OPENORDER ("Buy Stop",Price,SL,TP,vvv);
            }
          }
        }
      }
    }
  }
 else
  {
   for (int xx=1; xx<=1; xx++)
    {
     LotR=Lot;
     if (BUY)
      {
       if (takeprofit!=0) TP  = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
       if (stoploss!=0)   SL  = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;     
       OPENORDER ("Buy",Price,SL,TP,xx);
      }
     if (SELL)
      {  
       if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0;
       if (stoploss!=0)   SL = NormalizeDouble(Bid + stoploss*Point,Digits);  else SL=0;              
       OPENORDER ("Sell",Price,SL,TP,xx);
      }
    }
   double Sumi=0;
   for (int ii=1; ii<=MaxOrders; ii++)
    {
     LotL=Lot*ii;
     Sumi=Sumi+delta*(2*Lot+Lot*(ii-2))*(ii-1)/2;
     DeltaProfitL = (Sumi+ii*delta*Lot)/((2*Lot+Lot*(ii-1))*ii/2+Lot);
     if (BUY)
      {
       Price = NormalizeDouble(Ask-delta*ii*Point,Digits);
       if (takeprofit!=0) TP  = NormalizeDouble(Price + (takeprofit + DeltaProfitL*zero_tp)*Point,Digits); else TP=0;
       if (stoploss!=0)   SL  = NormalizeDouble(Price - stoploss*Point,Digits); else SL=0;     
       OPENORDER ("Buy Limit",Price,SL,TP,ii);
      }
     if (SELL)
      {  
       Price = NormalizeDouble(Bid+delta*ii*Point,Digits);
       if (takeprofit!=0) TP = NormalizeDouble(Price - (takeprofit + DeltaProfitL*zero_tp)*Point,Digits); else TP=0;
       if (stoploss!=0)   SL = NormalizeDouble(Price + stoploss*Point,Digits);  else SL=0;              
       OPENORDER ("Sell Limit",Price,SL,TP,ii);
      }
    }
   for (int vv=1; vv<=1; vv++)
    {
     LotS=(2*Lot+Lot*(MaxOrders-1))*MaxOrders/2+Lot;
     if (BUY)
      {
       OPENORDER ("Sell Stop",Price,SL,TP,vv);
      }
     if (SELL)
      {  
       OPENORDER ("Buy Stop",Price,SL,TP,vv);
      }
    }   
  }
 return(0);
}
//-------------------------------------------------------------------------------
int SchB_b()
 {
  string SMB=Symbol();
  int SchB=0;
  int i;
  for (i=OrdersTotal()-1;i>=0;i--)
   {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {ShowERROR();}
    else
     {
      if(OrderSymbol()!= SMB) continue; 
      if(OrderType()==OP_BUY) SchB++;
     }
   }
  return(SchB);
 } 
//-----------------------------------------------------------------------------
int SchS_b()
 {
  string SMB=Symbol();
  int SchS=0;
  int i;
  for (i=OrdersTotal()-1;i>=0;i--)
   {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {ShowERROR();}
    else
     {
      if(OrderSymbol()!=SMB) continue; 
      if(OrderType()==OP_SELL) SchS++;
     }
   }
  return(SchS);     
 }       
//-------------------------------------------------------------------------------
int SchBS_b()
 {
  string SMB=Symbol();
  int SchBS=0;
  int i;
  for (i=OrdersTotal()-1;i>=0;i--)
   {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {ShowERROR();}
    else
     {
      if(OrderSymbol()!= SMB) continue; 
      if(OrderType()==OP_BUYSTOP) SchBS++;
     }
   }
  return(SchBS);
 } 
//-----------------------------------------------------------------------------
int SchSS_b()
 {
  string SMB=Symbol();
  int SchSS=0;
  int i;
  for (i=OrdersTotal()-1;i>=0;i--)
   {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {ShowERROR();}
    else
     {
      if(OrderSymbol()!=SMB) continue; 
      if(OrderType()==OP_SELLSTOP) SchSS++;
     }
   }
  return(SchSS);     
 }       
//-------------------------------------------------------------------------------
int SchBL_b()
 {
  string SMB=Symbol();
  int SchBL=0;
  int i;
  for (i=OrdersTotal()-1;i>=0;i--)
   {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {ShowERROR();}
    else
     {
      if(OrderSymbol()!= SMB) continue; 
      if(OrderType()==OP_BUYLIMIT) SchBL++;
     }
   }
  return(SchBL);
 } 
//-----------------------------------------------------------------------------
int SchSL_b()
 {
  string SMB=Symbol();
  int SchSL=0;
  int i;
  for (i=OrdersTotal()-1;i>=0;i--)
   {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {ShowERROR();}
    else
     {
      if(OrderSymbol()!=SMB) continue; 
      if(OrderType()==OP_SELLLIMIT) SchSL++;
     }
   }
  return(SchSL);     
 }       
//-----------------------------------------------------------------------------
double SchBuyLs_b()
 {
  double SchBuyLs=0;
  int w;
  string SMB=Symbol();
  for (w=OrdersTotal()-1;w>=0;w--)
   {
    if (!OrderSelect(w, SELECT_BY_POS, MODE_TRADES)) {ShowERROR();}
    else
     {
      if(OrderSymbol()!= SMB) continue;
      if(OrderType()==OP_BUY)
       {
        SchBuyLs=SchBuyLs+OrderLots();
       }
     }
   }
  return(SchBuyLs);
 }
//-----------------------------------------------------------------------------
double SchSellLs_b()
 {
  double SchSellLs=0;
  int d;
  string SMB=Symbol();
  for (d=OrdersTotal()-1;d>=0;d--) 
   {
    if (!OrderSelect(d, SELECT_BY_POS, MODE_TRADES)) {ShowERROR();}
    else
     {
      if(OrderSymbol()!= SMB) continue;
      if(OrderType()==OP_SELL)
       {
        SchSellLs=SchSellLs+OrderLots();
       }
     }
   }
  return(SchSellLs);
 }
//-------------------------------------------------------------------------------
double SymbolOrdersProfit_b()
 {
  double rezultSymb=0;
  string SMB=Symbol();
  int i;
  for (i=OrdersTotal()-1;i>=0;i--)
   {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
     {
      if(OrderSymbol()!= SMB) continue;
      if(OrderType()==OP_BUY || OrderType()==OP_SELL)
       {
        rezultSymb+=OrderProfit();
       } 
     }
   }
  return(rezultSymb);
 }
//-------------------------------------------------------------------------------
void OPENORDER(string ord,double Price,double SL,double TP,int i)
 {
  int ticket = -1;
  int err;
  while (ticket<0)
   {
    if (ord=="Buy") ticket=OrderSend(Symbol(),OP_BUY,LotR,NormalizeDouble(Ask,Digits),Proskalz,SL,TP,"R  Magic_" + Magic,Magic,0);
    if (ord=="Sell") ticket=OrderSend(Symbol(),OP_SELL,LotR,NormalizeDouble(Bid,Digits),Proskalz,SL,TP,"R  Magic_" + Magic,Magic,0);
    if (ord=="Buy Limit") ticket=OrderSend(Symbol(),OP_BUYLIMIT,LotL,Price,Proskalz,SL,TP,StringConcatenate("¹"+i,"  Magic_" + Magic),Magic,0);
    if (ord=="Sell Limit") ticket=OrderSend(Symbol(),OP_SELLLIMIT,LotL,Price,Proskalz,SL,TP,StringConcatenate("¹"+i,"  Magic_" + Magic),Magic,0);
    if (ord=="Buy Stop") ticket=OrderSend(Symbol(),OP_BUYSTOP,LotS,NormalizeDouble(Ask+delta*(MaxOrders+1)*Point,Digits),Proskalz,0,0,"Lock  Magic_0",0,0);
    if (ord=="Sell Stop") ticket=OrderSend(Symbol(),OP_SELLSTOP,LotS,NormalizeDouble(Bid-delta*(MaxOrders+1)*Point,Digits),Proskalz,0,0,"Lock  Magic_0",0,0);
    Message(Magic);
    if (ticket==-1)
     {  
      ShowERROR();
      err++;Sleep(2000);RefreshRates();
     }
    if (ticket!=-1 || err >10) return;
   }
  return;
 }                  
//----------------------------------------------------------------------
void Message(string Magic)
 {
  Comment("Magic_" + Magic);
  Print("Magic_" + Magic);
 }                                      
//----------------------------------------------------------------------
void ShowERROR()
 {
  int err=GetLastError();
  switch ( err )
   {                  
    case 0:   Alert("Íåò îøèáêè");return;
    case 1:   Alert("Íåò îøèáêè, íî ðåçóëüòàò íåèçâåñòåí");return;
    case 2:   Alert("Îáùàÿ îøèáêà");return;
    case 3:   Alert("Íåïðàâèëüíûå ïàðàìåòðû ",Symbol());return;
    case 4:   Alert("Òîðãîâûé ñåðâåð çàíÿò");return;
    case 5:   Alert("Ñòàðàÿ âåðñèÿ êëèåíòñêîãî òåðìèíàëà");return;
    case 6:   Alert("Íåò ñâÿçè ñ òîðãîâûì ñåðâåðîì");return;
    case 7:   Alert("Íåäîñòàòî÷íî ïðàâ");return;
    case 64:  Alert("Ñ÷åò çàáëîêèðîâàí");return;
    case 128: Alert("Èñòåê ñðîê îæèäàíèÿ ñîâåðøåíèÿ ñäåëêè ",Symbol());return;
    case 129: Alert("Íåïðàâèëüíàÿ öåíà ",Symbol());return;
    case 131: Alert("Íåïðàâèëüíûé îáúåì ",Symbol());return;
    case 130: Alert("Íåïðàâèëüíûå ñòîïû ",Symbol());return;
    case 134: Alert("Íåäîñòàòî÷íî äåíåã ",Symbol());return;
    case 146: Alert("Ïîäñèñòåìà òîðãîâëè çàíÿòà");return;
    default:  Alert("Error " ,err," ",Symbol());return;
   }
 }
//+-----------------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---