Author: ����� �������������
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt Closes Orders by itself
0 Views
0 Downloads
0 Favorites
grid_v2
//+------------------------------------------------------------------+
//|                                                         grid.mq4 |
//|                                              Ðîìàí Àëåêñàíäðîâè÷ |
//|                                           roman_machanow@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Ðîìàí Àëåêñàíäðîâè÷"
#property link      "roman_machanow@mail.ru"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Îáúÿâëåíèå ïåðåìåííûõ                                            |
//+------------------------------------------------------------------+
input int Hag = 10;        //øàã îòëîæåííèêîâ
input double Lot  = 0.01;  //ëîò îðäåðà
input int tp= 200;         //òåéê ïðîôèò
input double Profit_S=1;   //ïðèáûëü äëÿ íà÷àëà ïåðåçàïóñêà ðîáîòà
input bool Martin=true; //âêëþ÷åíèå îòêëþ÷åíèå ìàðòèíãåéëà (false=âûêë)
//---
bool Poisc_Po;          //ïîèñê îòêðûòîé ïîçèöèè íà ïîêóïêó
bool Poisc_Pr;          //ïîèñê îòêðûòîé ïîçèöèè íà ïðîäàæó
//---
double
PriceAsk,               //öåíà òðàëà íà ïîêóïêó
PriceBid,               //öåíà òðàëà íà ïðîäàæó
Sredstva,               //äîñòóïíûå ñðåäñòâà
LotSell,                //ëîò íà ïðîäàæó
LotBuy,                 //ëîò íà ïîêóïêó
MaxLotBay,              //ìàêñèìàëüíûé ëîò íà ïîêóïêó
MaxLotSell;             //ìàêñèìàëüíûé ëîò íà ïðîäàæó
//---
int
TotalOrder,//îáùåå ÷èñëî îðäåðîâ
TotalBuy,
TotalSell,
TotalBuyStop,
TotalSellStop,
BuySell,
Perezapusk;
//---
string
textLots;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   TotalOrder=OrdersTotal();

   for(int i=0; i<=TotalOrder;i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
        {
         int OrderTupe=OrderType();
         if(OrderTupe==OP_SELL) {TotalSell++;}
         if(OrderTupe==OP_BUY ) {TotalBuy++;}
        }
      BuySell=TotalSell+TotalBuy;
     }
//---
   Sredstva=AccountFreeMargin();
//---
   LotBuy = Lot;
   LotSell=Lot;
//---
   Perezapusk=0;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   RefreshRates();
   ComentInform();//ÂÛÂÎÄ ÒÎÐÃÎÂÛÕ ÄÀÍÍÛÕ
   ModDelOtlSdelok();//ÌÎÄÓËÜ ÎÏÐÅÄÅËÈÒÅËÜ ÑÎÂÅÐØÅÍÍÛÕ ÑÄÅËÎÊ È ÇÀÊÐÛÒÈÅ ÎÒËÎÆÅÍÍÈÊÎÂ
   ProfitReturn();//ÌÎÄÓËÜ ÎÏÐÅÄÅËÈÒÅËÜ ÑÎÂÅÐØÅÍÍÛÕ ÑÄÅËÎÊ È ÇÀÊÐÛÒÈÅ ÎÒËÎÆÅÍÍÈÊÎÂ
   LotSellBuy();//ÐÀÑ×ÅÒ ÓÐÎÂÍß ËÎÒÀ
//--- ÐÀÑ×ÅÒ ÖÅÍÛ
   PriceBid=MathFloor(Bid/(Hag*Point))*(Hag*Point);//öåíà òðàëà íà ïðîäàæó            
   PriceAsk=MathFloor(Ask/(Hag*Point))*(Hag*Point)+(Hag*Point);//öåíà òðàëà íà ïîêóïêó
//---
   Poisc_Po = true;                                //ðàçðåøåíèÿ ïîêóïêè
   Poisc_Pr = true;                                //ðàçðåøåíèå ïðîäàæè
//--- ÎÏÐÅÄÅËÅÍÈÅ ÍÀ ÐÀÇÐÅØÅÍÈÅ ÑÄÅËÎÊ
   for(int i=0; i<=OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
        {
         double PriceOrder=OrderOpenPrice();
         int OrderTupe=OrderType();
         if(NormalizeDouble(PriceAsk,Digits)==NormalizeDouble(PriceOrder,Digits))
           {
            if((OrderTupe==OP_BUYSTOP) || (OrderTupe==OP_BUY) || (OrderTupe==OP_SELLSTOP) || (OrderTupe==OP_SELL))
              {
               Poisc_Po=false;
               continue;
              }
           }
        }
     }
//---
   for(int i=0; i<=OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
        {
         double PriceOrder=OrderOpenPrice();
         int OrderTupe=OrderType();
         if(NormalizeDouble(PriceBid,Digits)==NormalizeDouble(PriceOrder,Digits))
           {
            if((OrderTupe==OP_SELLSTOP) || (OrderTupe==OP_SELL) || (OrderTupe==OP_BUYSTOP) || (OrderTupe==OP_BUY))
              {
               Poisc_Pr=false;
               continue;
              }
           }
        }
     }
//--- ÑÎÂÅÐØÅÍÈÅ ÑÄÅËÎÊ
   if(Poisc_Pr)
     {
      int Error_SELLSTOP=OrderSend(Symbol(),OP_SELLSTOP,LotSell,PriceBid,3,0,PriceBid-tp*Point);
      if(Error_SELLSTOP<0)
        {
         Print("Îøèáêà SELLSTOP ",GetLastError());
        }
     }
//---
   if(Poisc_Po)
     {
      int Error_BUYSTOP=OrderSend(Symbol(),OP_BUYSTOP,LotBuy,PriceAsk,3,0,PriceAsk+tp*Point);
      if(Error_BUYSTOP<0)
        {
         Print("Îøèáêà BUYSTOP ",GetLastError());
        }
     }
  }
//+------------------------------------------------------------------+
//| ÂÛÂÎÄ ÒÎÐÃÎÂÛÕ ÄÀÍÍÛÕ                                            |
//+------------------------------------------------------------------+
int ComentInform()
  {
   SvodInform();
//---
   Comment("Âñåãî îðäåðîâ   : "+IntegerToString(TotalOrder)+
           "\n ÏÅÐÅÇÀÏÓÑÊÎÂ: "+IntegerToString(Perezapusk)+
           "\n SELL        : "+IntegerToString(TotalSell)+
           "\n BUY         : "+IntegerToString(TotalBuy)+
           "\n SELLSTOP    : "+IntegerToString(TotalSellStop)+
           "\n BUYSTOP     : "+IntegerToString(TotalBuyStop)+
           "\n ÏÐÈÁÛËÜ     : "+DoubleToStr(AccountProfit(),1)+
           "\n ÑÐÅÄÑÒÂÀ    : "+DoubleToStr(Sredstva,0)+textLots);
//AccountFreeMargin()
// Print("Ñðåäñòâà ñ÷åòà = ",AccountEquity());
   return(0);
  }
//--- ÐÀÑ×ÅÒ×ÈÊ
int SvodInform()
  {
   TotalOrder=OrdersTotal();
   TotalSell=0;
   TotalBuy=0;
   TotalSellStop=0;
   TotalBuyStop=0;
//---
   for(int i=0; i<=TotalOrder;i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
        {
         int OrderTupe=OrderType();
         if(OrderTupe==OP_SELL) {TotalSell++;}
         if(OrderTupe==OP_BUY ) {TotalBuy++;}
         if(OrderTupe==OP_SELLSTOP) {TotalSellStop++;}
         if(OrderTupe==OP_BUYSTOP) {TotalBuyStop++;}
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| ÌÎÄÓËÜ ÎÏÐÅÄÅËÈÒÅËÜ ÑÎÂÅÐØÅÍÍÛÕ ÑÄÅËÎÊ È ÇÀÊÐÛÒÈÅ ÎÒËÎÆÅÍÍÈÊÎÂ   |
//+------------------------------------------------------------------+
int ModDelOtlSdelok()
  {
   for(int i=0; i<=TotalOrder;i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
        {
         int OrderTupe=OrderType();
         if(OrderTupe==OP_SELL) {TotalSell++;}
         if(OrderTupe==OP_BUY ) {TotalBuy++;}
        }
     }
   if(BuySell!=(TotalSell+TotalBuy))
     {
      for(int i=0; i<=TotalOrder;i++)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
           {
            int OrderTupe = OrderType();
            if(OrderType()==OP_BUYSTOP)
              {
               bool ord_close=OrderDelete(OrderTicket(),clrNONE);
               if(!ord_close) i--;
              }
            if(OrderType()==OP_SELLSTOP)
              {
               bool ord_close=OrderDelete(OrderTicket(),clrNONE);
               if(!ord_close) i--;
              }
           }
        }
      BuySell=TotalSell+TotalBuy;
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| ÌÎÄÓËÜ ÏÅÐÅÇÀÏÓÑÊÀ ÐÎÁÎÒÀ ÏÎÑËÅ ÄÎÑÒÈÆÅÍÈß ÓÐÎÂÍß PROFIT         |
//+------------------------------------------------------------------+
int ProfitReturn()
  {
   if(AccountProfit()>=Profit_S)
     {
      for(int i=0; i<=OrdersTotal();i++)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
           {
            int OrderTupe= OrderType();
            if((OrderTupe==OP_SELLSTOP)||(OrderTupe==OP_BUYSTOP))
              {
               bool ord_close=OrderDelete(OrderTicket(),clrNONE);
               if(!ord_close) i--;
              }
            if(OrderTupe==OP_SELL)
              {
               bool ord_close=OrderClose(OrderTicket(),OrderLots(),Ask,5);
               if(!ord_close) i--;
              }
            if(OrderTupe==OP_BUY)
              {
               bool ord_close=OrderClose(OrderTicket(),OrderLots(),Bid,5);
               if(!ord_close) i--;
              }
           }
        }
      Perezapusk++;
      Sredstva=AccountFreeMargin();
      LotSell=0.01;
      LotBuy=0.01;
     }
//---
   return(0);
  }
//+-------------------------------------------------------------------------+
//| ÌÎÄÓËÜ ÏÅÐÅÇÀÏÓÑÊÀ ÐÎÁÎÒÀ ÏÎÑËÅ ÄÎÑÒÈÆÅÍÈß ÓÐÎÂÍß PROFIT_äðóãîé âàðèàíò |
//+-------------------------------------------------------------------------+
int ProfitReturn_1()
  {
   if(AccountProfit()>=Profit_S)
     {
      for(int i=0; i<=OrdersTotal();i++)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
           {
            int OrderTupe= OrderType();
            if((OrderTupe==OP_SELLSTOP)||(OrderTupe==OP_BUYSTOP))
              {
               bool ord_close=OrderDelete(OrderTicket(),clrNONE);
               if(!ord_close) i--;
              }
            if(OrderTupe==OP_SELL)
              {
               bool ord_close=OrderClose(OrderTicket(),OrderLots(),Ask,5);
               if(!ord_close) i--;
              }
            if(OrderTupe==OP_BUY)
              {
               bool ord_close=OrderClose(OrderTicket(),OrderLots(),Bid,5);
               if(!ord_close) i--;
              }
           }
        }
      Sredstva=AccountFreeMargin();
      LotSell=0.01;
      LotBuy=0.01;
     }
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| ÐÀÑ×ÅÒ ÓÐÎÂÍß ËÎÒÀ                                               |
//+------------------------------------------------------------------+
int LotSellBuy()
  {
   if(Martin==true)
     {
      double
      ToAllLotSell=0,
      ToAllLotBuy=0;
      //---
      for(int i=0; i<=OrdersTotal();i++)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
           {
            double LotOrder=OrderLots();
            int OrderTupe = OrderType();
            if(OrderType()==OP_SELL) {ToAllLotSell=ToAllLotSell+LotOrder;}
            if(OrderType()==OP_BUY) {ToAllLotBuy=ToAllLotBuy+LotOrder;}
           }
        }
      //---
      if(ToAllLotSell>ToAllLotBuy){LotBuy=ToAllLotSell+Lot;}else{LotSell=ToAllLotBuy+Lot;}
      //---
      if(ToAllLotBuy>MaxLotBay){MaxLotBay=ToAllLotBuy;}
      if(ToAllLotSell>MaxLotSell){MaxLotSell=ToAllLotSell;}
      //---
      textLots=("\nÂñåãî ëîòîâ êóïëåíî : "+DoubleToStr(ToAllLotBuy,2)+
                "\nÂñåãî ëîòîâ ïðîäàíî : "+DoubleToStr(ToAllLotSell,2)+
                "\nÌàêñèìàëüíûé ëîò íà ïîêóïêó : "+DoubleToStr(MaxLotBay,2)+
                "\nÌàêñèìàëüíûé ëîò íà ïðîäàæó : "+DoubleToStr(MaxLotSell,2));
     }
   else
     {
      textLots="";
     }
//---
   return(0);
  }
//+------------------------------------------------------------------+

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