e-CloseByLossPosInCurrency

Author: ��� ����� �. aka KimIV
Orders Execution
It Closes Orders by itself Checks for the total of open orders
Miscellaneous
It plays sound alerts
0 Views
0 Downloads
0 Favorites
e-CloseByLossPosInCurrency
//+----------------------------------------------------------------------------+
//|                                            e-CloseByLossPosInCurrency.mq4  |
//|                                                                            |
//|                                                    Êèì Èãîðü Â. aka KimIV  |
//|                                                       http://www.kimiv.ru  |
//|                                                                            |
//+----------------------------------------------------------------------------+
#property copyright "Êèì Èãîðü Â. aka KimIV"
#property link      "http://www.kimiv.ru"


//------- Âíåøíèå ïàðàìåòðû ñîâåòíèêà -----------------------------------------+
string _P_Expert="---------- Ïàðàìåòðû ñîâåòíèêà";
extern int    NumberAccount = 0;       // Íîìåð òîðãîâîãî ñ÷¸òà
extern string symbol        = "";      // Òîðãîâûé èíñòðóìåíò
                                       //   ""  - ëþáîé
//   "0" - òåêóùèé
extern int    Operation     = -1;      // Òîðãîâàÿ îïåðàöèÿ:
                                       //   -1 - ëþáàÿ
//    0 - OP_BUY
//    1 - OP_SELL
extern double TargetLoss    = 50;      // Óáûòîê â âàëþòå äåïîçèòà
extern int    MagicNumber   = 0;       // MagicNumber
extern bool   ShowComment   = True;    // Ïîêàçûâàòü êîììåíòàðèé


//------- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà -------------------------------------+
bool   gbNoInit      = False;          // Ôëàã íåóäà÷íîé èíèöèàëèçàöèè
int    Slippage      = 3;              // Ïðîñêàëüçûâàíèå öåíû
int    NumberOfTry   = 5;              // Êîëè÷åñòâî òîðãîâûõ ïîïûòîê
bool   UseSound      = True;           // Èñïîëüçîâàòü çâóêîâîé ñèãíàë
string NameFileSound = "expert.wav";   // Íàèìåíîâàíèå çâóêîâîãî ôàéëà
color  clCloseBuy    = Blue;           // Öâåò çíà÷êà çàêðûòèÿ ïîêóïêè
color  clCloseSell   = Red;            // Öâåò çíà÷êà çàêðûòèÿ ïðîäàæè

//------- Ïîäêëþ÷åíèå âíåøíèõ ìîäóëåé -----------------------------------------+
#include <stdlib.mqh>             // Ñòàíäàðòíàÿ áèáëèîòåêà
//+----------------------------------------------------------------------------+
//|                                                                            |
//|  ÏÐÅÄÎÏÐÅÄÅ˨ÍÍÛÅ ÔÓÍÊÖÈÈ                                                  |
//|                                                                            |
//+----------------------------------------------------------------------------+
//|  expert initialization function                                            |
//+----------------------------------------------------------------------------+
void init() 
  {
   gbNoInit=False;
   if(!IsTradeAllowed()) 
     {
      Message("Äëÿ íîðìàëüíîé ðàáîòû ñîâåòíèêà íåîáõîäèìî\n"+
              "Ðàçðåøèòü ñîâåòíèêó òîðãîâàòü");
      gbNoInit=True; return;
     }
   if(!IsLibrariesAllowed()) 
     {
      Message("Äëÿ íîðìàëüíîé ðàáîòû ñîâåòíèêà íåîáõîäèìî\n"+
              "Ðàçðåøèòü èìïîðò èç âíåøíèõ ýêñïåðòîâ");
      gbNoInit=True; return;
     }
   if(Operation<-1 || Operation>1) 
     {
      Message("Íåäîïóñòèìîå çíà÷åíèå âíåøíåãî ïàðàìåòðà Operation");
      gbNoInit=True; return;
     }
   if(symbol!="0" && symbol!="") 
     {
      if(MarketInfo(StringUpper(symbol),MODE_BID)==0) 
        {
         Message("Â îáçîðå ðûíêà îòñóòñòâóåò ñèìâîë "+symbol);
         gbNoInit=True; return;
        }
     }
   if(!IsTesting()) 
     {
      if(IsExpertEnabled()) Message("Ñîâåòíèê áóäåò çàïóùåí ñëåäóþùèì òèêîì");
      else Message("Îòæàòà êíîïêà \"Ðàçðåøèòü çàïóñê ñîâåòíèêîâ\"");
     }
   start();
  }

//+----------------------------------------------------------------------------+
//|  expert deinitialization function                                          |
//+----------------------------------------------------------------------------+
void deinit() { if(!IsTesting()) Comment(""); }
//+----------------------------------------------------------------------------+
//|  expert start function                                                     |
//+----------------------------------------------------------------------------+
void start() 
  {
   if(gbNoInit) 
     {
      Comment("Íå óäàëîñü èíèöèàëèçèðîâàòü ñîâåòíèê!"); return;
     }
   if(!IsTesting()) 
     {
      if(NumberAccount>0 && NumberAccount!=AccountNumber()) 
        {
         Comment("Ðàáîòà íà ñ÷¸òå: "+AccountNumber()+" ÇÀÏÐÅÙÅÍÀ!");
         return;
        }
      else Comment("");
      if(ShowComment) 
        {
         string st="NumberAccount="+DoubleToStr(NumberAccount,0)
                   +"  Symbol="+IIFs(symbol=="","All",IIFs(symbol=="0",Symbol(),StringUpper(symbol)))
                   +"  Operation="+IIFs(Operation<0,"All",GetNameOP(Operation))
                   +"  TargetLoss="+DoubleToStr(TargetLoss,2)+" "+AccountCurrency()
                   +"  MagicNumber="+DoubleToStr(MagicNumber,0)
                   ;
         Comment(st);
        }
      else Comment("");
     }

   ClosePosBySizeLossInCurrency(StringUpper(symbol),Operation,MagicNumber,TargetLoss);
  }
//+----------------------------------------------------------------------------+
//|                                                                            |
//|  ÏÎËÜÇÎÂÀÒÅËÜÑÊÈÅ ÔÓÍÊÖÈÈ                                                  |
//|                                                                            |
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ  : 19.02.2008                                                      |
//|  Îïèñàíèå: Çàêðûòèå îäíîé ïðåäâàðèòåëüíî âûáðàííîé ïîçèöèè                 |
//+----------------------------------------------------------------------------+
void ClosePosBySelect() 
  {
   bool   fc;
   color  clClose;
   double ll,pa,pb,pp;
   int    err,it;

   if(OrderType()==OP_BUY || OrderType()==OP_SELL) 
     {
      for(it=1; it<=NumberOfTry; it++) 
        {
         if(!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
         while(!IsTradeAllowed()) Sleep(5000);
         RefreshRates();
         pa=MarketInfo(OrderSymbol(), MODE_ASK);
         pb=MarketInfo(OrderSymbol(), MODE_BID);
         if(OrderType()==OP_BUY) 
           {
            pp=pb; clClose=clCloseBuy;
              } else {
            pp=pa; clClose=clCloseSell;
           }
         ll=OrderLots();
         fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
         if(fc) 
           {
            if(UseSound) PlaySound(NameFileSound); break;
              } else {
            err=GetLastError();
            if(err==146) while(IsTradeContextBusy()) Sleep(1000*11);
            Print("Error(",err,") Close ",GetNameOP(OrderType())," ",
                  ErrorDescription(err),", try ",it);
            Print(OrderTicket(),"  Ask=",pa,"  Bid=",pb,"  pp=",pp);
            Print("sy=",OrderSymbol(),"  ll=",ll,"  sl=",OrderStopLoss(),
                  "  tp=",OrderTakeProfit(),"  mn=",OrderMagicNumber());
            Sleep(1000*5);
           }
        }
     }
   else Print("Íåêîððåêòíàÿ òîðãîâàÿ îïåðàöèÿ. Close ",GetNameOP(OrderType()));
  }
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 25.04.2008                                                     |
//|  Îïèñàíèå : Çàêðûòèå òåõ ïîçèöèé, ó êîòîðûõ óáûòîê â âàëþòå äåïîçèòà       |
//|             ïðåâûñèë íåêîòîðîå çíà÷åíèå                                    |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   (-1   - ëþáàÿ ïîçèöèÿ)                  |
//|    mn - MagicNumber                (-1   - ëþáîé ìàãèê)                    |
//|    pr - ïðîôèò/óáûòîê                                                      |
//+----------------------------------------------------------------------------+
void ClosePosBySizeLossInCurrency(string sy="",int op=-1,int mn=-1,double pr=0) 
  {
   int i,k=OrdersTotal();

   if(sy=="0") sy=Symbol();
   for(i=k-1; i>=0; i--) 
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 
        {
         if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) 
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL) 
              {
               if(mn<0 || OrderMagicNumber()==mn) 
                 {
                  if(OrderProfit()+OrderSwap()<-MathAbs(pr)) ClosePosBySelect();
                 }
              }
           }
        }
     }
  }
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 01.09.2005                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò íàèìåíîâàíèå òîðãîâîé îïåðàöèè                      |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    op - èäåíòèôèêàòîð òîðãîâîé îïåðàöèè                                    |
//+----------------------------------------------------------------------------+
string GetNameOP(int op) 
  {
   switch(op) 
     {
      case OP_BUY      : return("Buy");
      case OP_SELL     : return("Sell");
      case OP_BUYLIMIT : return("Buy Limit");
      case OP_SELLLIMIT: return("Sell Limit");
      case OP_BUYSTOP  : return("Buy Stop");
      case OP_SELLSTOP : return("Sell Stop");
      default          : return("Unknown Operation");
     }
  }
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 01.02.2008                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò îäíî èç äâóõ çíà÷åíèé âçàâèñèìîñòè îò óñëîâèÿ.      |
//+----------------------------------------------------------------------------+
string IIFs(bool condition,string ifTrue,string ifFalse) 
  {
   if(condition) return(ifTrue); else return(ifFalse);
  }
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 01.09.2005                                                     |
//|  Îïèñàíèå : Âûâîä ñîîáùåíèÿ â êîììåíò è â æóðíàë                           |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    m - òåêñò ñîîáùåíèÿ                                                     |
//+----------------------------------------------------------------------------+
void Message(string m) 
  {
   Comment(m);
   if(StringLen(m)>0) Print(m);
  }
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 01.09.2005                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò ñòðîêó â ÂÅÐÕÍÅÌ ðåãèñòðå                           |
//+----------------------------------------------------------------------------+
string StringUpper(string s) 
  {
   int c,i,k=StringLen(s),n;
   for(i=0; i<k; i++) 
     {
      n=0;
      c=StringGetChar(s, i);
      if(c>96 && c<123) n=c-32;    // a-z -> A-Z
      if(c>223 && c<256) n=c-32;   // à-ÿ -> À-ß
      if(c==184) n=168;            //  ¸  ->  ¨
      if(n>0) s=StringSetChar(s,i,n);
     }
   return(s);
  }
//+----------------------------------------------------------------------------+

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