PositionManager

Author: Verdi
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt Closes Orders by itself
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
PositionManager
//+------------------------------------------------------------------+
//|                                              PositionManager.mq4 |
//|                                                            Verdi |
//|                                                  nemo811@mail.ru |
//+------------------------------------------------------------------+

/*
Ñîâåòíèê çàòî÷åí ïîä ñêàëüïèíã. 
Ïîëóàâòîìàò: îñíîâíîå ïðåäíàçíà÷åíèå - âåäåíèå óæå îòêðûòûõ ïîçèöèé.
Ôóíêöèè:
 - îòëîâ ïðèáûëè (ProfitPoint, âèðòóàëüíûé óðîâåíü);
 - ëîêèðîâàíèå ïîçèöèè (LossPoint, âèðòóàëüíûé óðîâåíü). 
Îòñëåæèâàåò ïîçèöèè, îòêðûòûå â îäíîì íàïðàâëåíèè (èëè Buy, èëè Sell), ïî èíñòðóìåíòó, íà êîòîðîì áûë èíèöèàëèçèðîâàí.
Åñëè îòêðûòû îðäåðà è Buy, è Sell - âñå ôóíêöèè ñîâåòíèêà áëîêèðóþòñÿ (äà¸òñÿ ñîîòâåòñòâóþùåå ïðåäóïðåæäåíèå).
Ïðèâåä¸ííûå íàñòðîéêè ðàññ÷èòàíû íà ðàáîòó â ñðåäíåì äâóìÿ market-îðäåðàìè îäèíàêîâîãî îáú¸ìà ïî ÒÑ ñ ïîëîæèòåëüíûì ìàòîæèäàíèåì.
*/

#property copyright "Verdi"
#property link      "nemo811@mail.ru"

extern int ProfitPoint = 12; //ïðèáûëü ïî êàæäîìó îðäåðó, ïï; åñëè 0 - Âûêë.
                             //ïðè äîñòèæåíèè óðîâíÿ ProfitPoint çàêðûâàåòñÿ ñîîòâåòñòâóþùèé îðäåð è óäàëÿþòñÿ âñå îòëîæåííèêè
extern int LossPoint   = 15; //ëîññ ïî ïåðâîìó market-îðäåðó, êîòîðûì áûë ïðîèçâåä¸í âõîä, ïï.; åñëè 0 - Âûêë.
                             //åñëè áûë äîñòèãíóò óðîâåíü LossPoint - îòêðûâàåòñÿ ëîêèðóþùèé îðäåð íà âñþ òåêóùóþ ïîçèöèþ è óäàëÿþòñÿ âñå îòëîæåííèêè

string Comm1,Comm2; 

int init()
  {
   if (!IsTesting())
    {
     if(!IsExpertEnabled())
      {
       Alert("ÒÎÐÃÎÂËß ÑÎÂÅÒÍÈÊÀÌÈ ÇÀÏÐÅÙÅÍÀ !");
       Comment("ÒÎÐÃÎÂËß ÑÎÂÅÒÍÈÊÀÌÈ ÇÀÏÐÅÙÅÍÀ !");
       return(0);
      }
     else
      {
       Comment("Èíèöèàëèçàöèÿ ïðîøëà óñïåøíî. Æä¸ì ñâåæóþ êîòèðîâêó.");
       Print("Èíèöèàëèçàöèÿ ïðîøëà óñïåøíî. Æä¸ì ñâåæóþ êîòèðîâêó.");
      }
    }
   return(0);
  }

int deinit()
  {
   if (!IsTesting())
    {
     Print("Ñîâåòíèê äåèíèöèàëèçèðîâàí (âûêëþ÷åí).");
    }
   return(0);
  }

int start()
  {

   if(!IsTradeAllowed())
    {
     Comment("Òîðãîâëÿ çàïðåùåíà â íàñòðîéêàõ òåðìèíàëà, ëèáî òîðãîâûé ïîòîê çàíÿò.");
     return(0);
    }

   RefreshRates();

   if(ProfitPoint>0)
    { 
     CloseTicketProfit_b();
    }

   double SchBuyLots=NormalizeDouble(SchBuyLots_b(),8);
   double SchSellLots=NormalizeDouble(SchSellLots_b(),8);
   double Zero=NormalizeDouble(0,8);   

   if(LossPoint>0)
    { 
     double FirstBuyOpenPrice=FirstBuyOpenPrice_b();
     double FirstSellOpenPrice=FirstSellOpenPrice_b();
     if (SchBuyLots>Zero && SchSellLots==Zero && FirstBuyOpenPrice-NormalizeDouble(LossPoint*Point,Digits)>=Ask)   
      {
       DeleteOtlozh();
       OPENORDER ("Sell");
      }
 
     if (SchBuyLots==Zero && SchSellLots>Zero && FirstSellOpenPrice+NormalizeDouble(LossPoint*Point,Digits)<=Bid)   
      {
       DeleteOtlozh();
       OPENORDER ("Buy");
      }
    }

   if (SchBuyLots>Zero && SchSellLots>Zero)
    {
     if (SchBuyLots!=SchSellLots)
      {
       Comment("ÂÎÇÍÈÊØÀß ÒÎÐÎÃÎÂÀß ÑÈÒÓÀÖÈß\nÑÎÂÅÒÍÈÊÎÌ ÍÅ ÎÒÑËÅÆÈÂÀÅÒÑß !");
      }
     else
      {
       Comment("Ñèòóàöèÿ LOCK");
      }
    }
   else
    {
     if (ProfitPoint>0)
      { 
       Comm1=StringConcatenate(DoubleToStr(ProfitPoint,0)," ïï.");
      }
     else
      {
       Comm1="Îòêë.";
      }

     if (LossPoint>0)
      { 
       Comm2=StringConcatenate(DoubleToStr(LossPoint,0)," ïï.");
      }
     else
      {
       Comm2="Îòêë.";
      }

     Comment("ProfitPoint - ",Comm1,
             "\nLossPoint - ",Comm2,
             "\nwww.mt4.ucoz.com");

    }
     
   return(0);
  }
//+------------------------------------------------------------------+

double SchBuyLots_b()
 {
  double SchBuyLots=0;
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--)
   {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
     {
      Alert ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
      Print ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
     }
    else
     {
      if(OrderSymbol()==SMB && OrderType()==OP_BUY)
       {
        SchBuyLots=SchBuyLots+OrderLots();
       }
     }
   }
  return(SchBuyLots);
 }

double SchSellLots_b()
 {
  double SchSellLots=0;
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--)
   {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
     {
      Alert ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
      Print ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
     }
    else
     {
      if(OrderSymbol()==SMB && OrderType()==OP_SELL)
       {
        SchSellLots=SchSellLots+OrderLots();
       }
     }
   }
  return(SchSellLots);
 }

int TicketProfit_b(int ProfitPoint)
 {
  int i;
  int TicketProfit=0;
  double OpenPrice=0;
  string SMB=Symbol();

  double SchBuyLots=NormalizeDouble(SchBuyLots_b(),8);
  double SchSellLots=NormalizeDouble(SchSellLots_b(),8);
  double Zero=NormalizeDouble(0,8);

  for(i=OrdersTotal()-1;i>=0;i--)
   {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
     {
      Alert ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
      Print ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
     }
    else
     {
      if(OrderSymbol()==SMB)
       {
        if (SchBuyLots>Zero && SchSellLots>Zero)
         {
          TicketProfit=0;
         } 
        else
         {
          if(OrderType()==OP_BUY)
           {
            OpenPrice=OrderOpenPrice();
            if (OpenPrice+NormalizeDouble(ProfitPoint*Point,Digits)<=Bid) TicketProfit=OrderTicket();
           }  
          if(OrderType()==OP_SELL)
           {
            OpenPrice=OrderOpenPrice();
            if (OpenPrice-NormalizeDouble(ProfitPoint*Point,Digits)>=Ask) TicketProfit=OrderTicket();
           } 
         }  
       }          
     }
   }
  return(TicketProfit);
 }

double FirstBuyOpenPrice_b()
 {
  int i;
  double FirstBuyOpenPrice=0;
  string SMB=Symbol();   
  for (i=OrdersTotal()-1;i>=0;i--)
   {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
     {
      Alert ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
      Print ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
     }
    else
     {
      if(OrderSymbol()==SMB && OrderType()==OP_BUY)
       { 
        FirstBuyOpenPrice=OrderOpenPrice();
       }
     }
   }
  return(FirstBuyOpenPrice);
 }

double FirstSellOpenPrice_b()
 {
  int i;
  double FirstSellOpenPrice=0;
  string SMB=Symbol();   
  for (i=OrdersTotal()-1;i>=0;i--)
   {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
     {
      Alert ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
      Print ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
     }
    else
     {
      if(OrderSymbol()==SMB && OrderType()==OP_SELL)
       { 
        FirstSellOpenPrice=OrderOpenPrice();
       }
     }
   }
  return(FirstSellOpenPrice);
 }
 
void OPENORDER(string ord)
 {
  int ticket = -1;

  double Lot;
  double SchBuyLots  = SchBuyLots_b();
  double SchSellLots = SchSellLots_b();

  Lot=MathAbs(SchBuyLots-SchSellLots);

  while (ticket<0)
   {
    if (ord=="Buy")  ticket=OrderSend(Symbol(),OP_BUY, Lot,Ask,3,0,0,"Óñòàíîâëåí çàìîê",0,0);
    if (ord=="Sell") ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,0,0,"Óñòàíîâëåí çàìîê",0,0);
    if (ticket==-1)
     {  
      Alert ("Îøèáêà ",GetLastError()," óñòàíîâêè ëîêîâîãî îðäåðà!");
      Print ("Îøèáêà ",GetLastError()," óñòàíîâêè ëîêîâîãî îðäåðà!");
     }
    else
     {   
      Alert ("Óñòàíîâëåí çàìîê ñîãëàñíî LossPoint ",LossPoint," ïï.\nwww.mt4.ucoz.com");
      Print ("Óñòàíîâëåí çàìîê ñîãëàñíî LossPoint ",LossPoint," ïï.");
      return (0);
     }
   }
  return;
 } 

void DeleteOtlozh()
 {
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--) 
   {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
     {
      Alert ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
      Print ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
     }
    else
     {
      if(OrderSymbol()==SMB)
       { 
        if(OrderType()==OP_BUYLIMIT || OrderType()==OP_SELLLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP)
         {
          if(!OrderDelete(OrderTicket(),CLR_NONE))
           {
            Alert("Îøèáêà ",GetLastError()," ïðè óäàëåíèè îòëîæåííîãî îðäåðà íîìåð ",OrderTicket()," ïî ïàðå ",Symbol());
           }
         }  
       } 
     }       
   }
 }

void CloseTicketProfit_b()
 { 
  int i;
  string SMB=Symbol();

  int TicketProfit=TicketProfit_b(ProfitPoint);

  if (TicketProfit<=0) return;

  for (i=OrdersTotal()-1;i>=0;i--)
   {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
     {
      Alert ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
      Print ("Îøèáêà ",GetLastError()," âûáîðà îðäåðà!");
     }
    else
     {
      if(OrderSymbol()==SMB) 
       { 
        if(OrderType()==OP_BUY && OrderTicket()==TicketProfit)
         {
          if(!OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(), MODE_BID),3,CLR_NONE))
           {
            Alert("Îøèáêà ",GetLastError()," ïðè çàêðûòèè Buy-îðäåðà íîìåð ",OrderTicket()," ïî ïàðå ",Symbol());
            Print("Îøèáêà ",GetLastError()," ïðè çàêðûòèè Buy-îðäåðà íîìåð ",OrderTicket()," ïî ïàðå ",Symbol());
           }
          else
           {   
            Alert("Ïîëó÷åí ïðîôèò ñîãëàñíî ProfitPoint ",ProfitPoint," ïï.\nwww.mt4.ucoz.com");
            Print("Ïîëó÷åí ïðîôèò ñîãëàñíî ProfitPoint ",ProfitPoint," ïï.");
           }
         }  
        if(OrderType()==OP_SELL && OrderTicket()==TicketProfit)
         {
          if(!OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(), MODE_ASK),3,CLR_NONE))
           {
            Alert("Îøèáêà ",GetLastError()," ïðè çàêðûòèè Sell-îðäåðà íîìåð ",OrderTicket()," ïî ïàðå ",Symbol());
            Print("Îøèáêà ",GetLastError()," ïðè çàêðûòèè Sell-îðäåðà íîìåð ",OrderTicket()," ïî ïàðå ",Symbol());
           }
          else
           {   
            Alert("Ïîëó÷åí ïðîôèò ñîãëàñíî ProfitPoint ",ProfitPoint," ïï.\nwww.mt4.ucoz.com");
            Print("Ïîëó÷åí ïðîôèò ñîãëàñíî ProfitPoint ",ProfitPoint," ïï.");
           }
         }
       }  
     }
   }
  DeleteOtlozh();
 }

//+------------------------------------------------------------------+

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