cm-Close Far Loss

Author: Copyright © 2021, Vladimir Hlystov
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
cm-Close Far Loss
ÿþ#property copyright "Copyright © 2021, Vladimir Hlystov"

#property link      "cmillion@narod.ru"

#property strict

#property description "1.A>25B=8: >BA;568205B >B:@KBK5 ?>78F88 ?> 2A5< 8;8 7040==><C 8=AB@C<5=BC. !:;04K205B ?@>D8B 2A5E ?>;>68B5;L=KE ?>78F89."

#property description "2 8I5B A0<CN C1KB>G=CN ?>78F8N."

#property description "3 70:@K205B 40;L=NN 8 2A5 ?>;>68B5;L=K5 ?@8 4>AB865=88 AC<<0@=>3> ?@>D8B0"

//-------------------------------------------------------------------

enum tt 

{

   tr2=0,    //?> B5:CI59 20;NB5

   tr1=1,    //?> 2A5< A8<2>;0<

};

input double   CloseProfit  = 10;     //70:@K20BL ?> AC<<0@=><C ?@>D8BC 2 20;NB5

input tt       Symb>l       = 1;     //AC<<8@C5< ?@>D8B

//-------------------------------------------------------------------

int Magic = -1;     //2A5 >@45@0 (-1) 8;8 B>;L:> A <038:><

string AC;

int font_size=10;

color text_color=Aqua;

//-------------------------------------------------------------------

void OnTick()

{

   if (!IsTradeAllowed()) 

   {

      DrawLABEL("">@3>2;O",1,0,0,clrRed,"">@3>2;O 70?@5I5=0");

      return;

   } 

   else DrawLABEL("">@3>2;O",1,0,0,clrGreen,"">@3>2;O @07@5H5=0");



   //---



   double MaxOrderBuy=0,MinOrderSell=0;

   double ProfitFar=0,OOP,Profit=0,ProfitPlus=0,Loss=0;

   int Ticket=0,tip;

   string Sym=NULL;

   for (int i=0; i<OrdersTotal(); i++)

   {    

      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

      { 

         if ((OrderSymbol()==Symbol() || Symb>l==1) && (Magic==OrderMagicNumber() || Magic==-1))

         { 

            tip = OrderType(); 

            OOP = NormalizeDouble(OrderOpenPrice(),Digits);

            Profit=OrderProfit()+OrderCommission()+OrderSwap();

            if (Profit>0) ProfitPlus+=Profit;

            else

            {

               if (Profit<=ProfitFar)             

               {  

                  ProfitFar=Profit; Ticket=OrderTicket(); Sym=OrderSymbol(); Loss=Profit;

               }                                         

            }

         }

      }

   }



   //---

   

   if (ProfitPlus+Loss>=CloseProfit && Loss<0) 

   {

      if (OrderSelect(Ticket, SELECT_BY_TICKET))

      {

         Alert("5@5:@KB C1KB>: >@45@0 ",Ticket," (",StringConcatenate(DoubleToStr(ProfitPlus,2),DoubleToStr(Loss,2)),")");

         double price=NormalizeDouble((MarketInfo(OrderSymbol(),(OrderType()==OP_BUY?MODE_BID:MODE_ASK))),(int)MarketInfo(OrderSymbol(),MODE_DIGITS));

         if (OrderClose(Ticket,OrderLots(),price,30,clrBlue))

         {

            CloseAll();

         }

      }

   }



   //---

   

   DrawLABEL("Loss"  ,1,5,0,Color(Loss>0,clrGray,clrRed),StringConcatenate("#1KB>G=K9 ",Sym,"  " ,Ticket," | ",DoubleToStr(Loss,2),AC));

   DrawLABEL("Take"  ,1,5,0,Color(ProfitPlus>0,clrGreen,clrRed),StringConcatenate("!C<<0@=K9 ?@>D8B ?> ",Symb>l==1?"2A5< A8<2>;0< ":"B5:CI59 20;NB5 ",DoubleToStr(ProfitPlus,2),AC));



   

}

//------------------------------------------------------------------

void OnDeinit(const int reason)

{

   if (!IsTesting()) 

   {

      ObjectsDeleteAll(0);

   }

}

//-------------------------------------------------------------------

void DrawLABEL(string name, int CORNER, int X, int Y, color clr, string Name)

{

   if (ObjectFind(name)==-1)

   {

      ObjectCreate(name, OBJ_LABEL, 0, 0, 0);

      ObjectSet(name, OBJPROP_CORNER, CORNER);

      ObjectSet(name, OBJPROP_XDISTANCE, X);

      ObjectSet(name, OBJPROP_YDISTANCE, Y);

   }

   ObjectSetText(name,Name,font_size,"Arial",clr);

}

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

int OnInit()

{

   AC = StringConcatenate(" ", AccountCurrency());

   

   int Y=20;

   DrawLABEL("">@3>2;O",1,5,Y,clrRed,"">@3>2;O 70?@5I5=0");Y += font_size*2;

   DrawLABEL("Loss" ,1,5,Y,clrGray," " );Y += font_size*2;

   DrawLABEL("Take" ,1,5,Y,clrGreen,"Profit ");Y += font_size*2;

   

   return(INIT_SUCCEEDED);

}

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

void Text(color COLOR,double Price,string Name,int a)

{

   string name = StringConcatenate(TimeToStr(TimeCurrent(),TIME_SECONDS)," ",Name);

   ObjectDelete(name);

   ObjectCreate(name, OBJ_TEXT,0,Time[0],Price,0,0,0,0);

   ObjectSet(name, OBJPROP_ANGLE, a);

   ObjectSetText(name, Name,font_size, "Times New Roman", COLOR);

}

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

color Color(bool P,color a,color b)

{

   if (P) return(a);

   else return(b);

}

//------------------------------------------------------------------

bool CloseAll()

{

   bool error=true;

   int err,nn=0,OT,j;

   double Profit;

   while(true)

   {

      for (j = OrdersTotal()-1; j >= 0; j--)

      {

         if (OrderSelect(j, SELECT_BY_POS))

         {

            if ((OrderSymbol()==Symbol() || Symb>l==1) && (Magic==OrderMagicNumber() || Magic==-1))

            {

               Profit=OrderProfit()+OrderCommission()+OrderSwap();

               if (Profit<0) continue;

               OT = OrderType();

               if (OT>1) error=OrderDelete(OrderTicket());

               if (OT==OP_BUY) 

               {

                  error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),(int)MarketInfo(OrderSymbol(),MODE_DIGITS)),30,Blue);

               }

               if (OT==OP_SELL) 

               {

                  error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),(int)MarketInfo(OrderSymbol(),MODE_DIGITS)),30,Red);

               }

               if (!error) 

               {

                  err = GetLastError();

                  if (err<2) continue;

                  if (err==129) 

                  {

                     RefreshRates();

                     continue;

                  }

                  if (err==146) 

                  {

                     if (IsTradeContextBusy()) Sleep(2000);

                     continue;

                  }

                  Print("H81:0 ",err," 70:@KB8O >@45@0 N ",OrderTicket(),"     ",TimeToStr(TimeCurrent(),TIME_SECONDS));

               }

            }

         }

      }

      int n=0;

      for (j = 0; j < OrdersTotal(); j++)

      {

         if (OrderSelect(j, SELECT_BY_POS))

         {

            if ((OrderSymbol()==Symbol() || Symb>l==1) && (Magic==OrderMagicNumber() || Magic==-1))

            {

               Profit=OrderProfit()+OrderCommission()+OrderSwap();

               if (Profit<0) continue;

               n++;

            }

         }  

      }

      if (n==0) break;

      nn++;

      if (nn>10) 

      {

         Alert(Symbol()," 5 C40;>AL 70:@KBL 2A5 A45;:8, >AB0;>AL 5I5 ",n);

         return(false);

      }

      Sleep(1000);

      RefreshRates();

   }

   return(true);

}

//--------------------------------------------------------------------







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