cm BASKET mql

Author: Copyright 2020, cmillion@narod.ru
Price Data Components
Series array that contains open time of each bar
Orders Execution
Checks for the total of open ordersChecks for the total of closed ordersIt Closes Orders by itself It automatically opens orders when conditions are reached
Miscellaneous
It sends emailsIt opens Message Boxes to the user
0 Views
0 Downloads
0 Favorites
cm BASKET mql
ÿþ//+------------------------------------------------------------------+

//|                                            SMARTHEDGE basket.mq4 |

//|                                Copyright 2019, cmillion@narod.ru |

//|                                           http://www.cmillion.ru |

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

#property copyright "Copyright 2020, cmillion@narod.ru"

#property link      "http://www.cmillion.ru"

string ver = "BASKET 1.1";

#property version   "1.1"

#property strict

#property description "!>25B=8: C?@02;ONI89 AG5B><. >:07K205B :0:85 ?0@K 8=AB@C<5=B>2 A59G0A B>@3CNBAO =0 40==>< AG5B5."

#property description ">:07K205B ?@81K;L ?>;CG5==CN ?> :064>9 ?0@5 70 >?@545;5==>5 2@5<O. ><>305B ?5@5:;NG0BLAO <564C <=>65AB20 >B:@KBKE >:>="

#property description "Advisor managing individual. Shows which pairs of instruments are currently traded on this account."

#ifdef __MQL5__

MqlTick tick;

MqlTradeRequest request;

MqlTradeResult result;

MqlTradeCheckResult check;

ENUM_ORDER_TYPE_FILLING FillingMode=ORDER_FILLING_RETURN;

#endif   

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

input color    colorfon    = clrIvory;

input double   WindSizeX   = 1.2;

input double   WindSizeY   = 1.0;

input color    colorGREEN  = clrLime;

input color    colorRED    = clrPink;

input bool     SendMailInfo= true;

input int      ReOpen      = false;

input double   AutoClose   = 0.0;



int orders=0,AN,Y=0,X=0,dY=0,dX=0,n=0;

bool LANGUAGE=false;

double tOrders[100][3];

double History[100][6];

string NameAccount,Symbl[100];

double ProfitAll[7];

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

void OnTimer(){ OnTick();}

void OnTick()

{

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

   //                                                                       //

   //                                                                       //

   //                        :>=B@>;L ?>78F89                              //

   //                                                                       //

   //                                                                       //

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



   ArrayInitialize(tOrders,0);

   double Profit=0,ProfitALL=0;

   int OT=0,i,j;

   string Symb;



   #ifdef __MQL4__ //---------------------------- MT4 ---------------------------------------------------  

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

   {                                               

      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

      Symb = OrderSymbol();

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

      if (OrderType()==OP_BUY) OT=1; else OT=-1;

   #endif

         

   #ifdef __MQL5__ //--------------------------- MT5 ---------------------------------------------------  

   for(i=PositionsTotal()-1; i>=0; i--)

   {

      Symb=PositionGetSymbol(i);

      Profit=PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP)+GetPositionCommission()*2;

      if (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) OT=1; else OT=-1;

   #endif

         

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

   

      ProfitALL+=Profit;

      j=Insrt(Symb);

      if (n<j) n=j;

      tOrders[j][0]+=Profit;// [0] ?@>D8B ?> 2A5<C 8=AB@C<5=BC

      if (OT>0) tOrders[j][1]++;// [1] G8A;> buy 

      if (OT<0) tOrders[j][2]++;// [1] G8A;> sell 

   }

   

   //Comment(n," ",ProfitALL);

   //EditCreate(0,"cm _1",0,0,0,50,20,IntegerToString(n),"Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrWhite,clrBlue);

   //EditCreate(0,"cm _4",0,55,0,70,20,DoubleToString(ProfitALL,2),"Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrWhite,clrBlue);

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

   //                                                                                  //

   //                           0:@KB85 ?> AC<<0@=><C ?@>D8BC                         //

   //                                                                                  //

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



   if (AutoClose!=0 && ProfitALL!=0 && ProfitALL>=AutoClose)

   {

      if (SendMailInfo) SendMail(IntegerToString(AN)," basket close all");

      CloseAll();   

   }

   

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

   //                                                                                  //

   //                   2K2>48< B01;8FC ?@>D8B>2 ?> 8=AB@C<5=B0<                       //

   //                                                                                  //

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

   

   string name,SN;

   Y=25;

   int DY=19;

   for(j=0;j<=n;j++)//2A53> 8=AB@C<5=B>2 A >B:@KBK<8 ?>78F8O<8

   {

      SN=IntegerToString(j);

      name=StrCon("cm Insrt",SN);X=0;

      EditCreate(0,name,0,X,Y+DY*j,100,20,Symbl[j],"Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrBlack,clrWhite);//8<O 8=AB@C<5=B0

      name=StrCon(name,"Profit");X+=105;

      EditCreate(0,name,0,X,Y+DY*j,70,20,DoubleToString(tOrders[j][0],2),"Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrBlack,//?@>D8B ?> 8=AB@C<5=BC

      tOrders[j][0]>0?colorGREEN:tOrders[j][0]<0?colorRED:clrWhite);



      name=StrCon("cm OrdersB ",SN);X+=75;

      EditCreate(0,name,0,X,Y+DY*j,30,20,DoubleToString(tOrders[j][1],0),"Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrBlack,clrWhite);



      name=StrCon("cm OrdersS ",SN);X+=29;

      EditCreate(0,name,0,X,Y+DY*j,30,20,DoubleToString(tOrders[j][2],0),"Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrBlack,clrWhite);



      for(i=0;i<6;i++)//AC<<K ?@>D8B>2 ?> 4=O< =545;O< <5A

      {

         EditCreate(0,StrCon("cm HP"+IntegerToString(i)+IntegerToString(j)),0,X+35+75*i,Y+DY*j,70,20,DoubleToString(History[j][i],2),"Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrBlack,

                                                                                                    History[j][i]>0?colorGREEN:History[j][i]<0?colorRED:clrWhite);

      }



      /*name=name," History ";

      EditCreate(0,name,0,X+130,Y+DY*j,70,20,DoubleToString(History[j][0],2),"Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrBlack,//8AB>@8O A53>4=O

      History[j][0]>0?colorGREEN:History[j][0]<0?colorRED:clrWhite);

      name=StrCon(name," 2");

      EditCreate(0,name,0,X+205,Y+DY*j,70,20,DoubleToString(History[j][1],2),"Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrBlack,//8AB>@8O ?> 2G5@0

      History[j][1]>0?colorGREEN:History[j][1]<0?colorRED:clrWhite);

      name=StrCon(name," 3");

      EditCreate(0,name,0,X+280,Y+DY*j,70,20,DoubleToString(History[j][2],2),"Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrBlack,//8AB>@8O ?> 8=AB@C<5=BC

      History[j][2]>0?colorGREEN:History[j][2]<0?colorRED:clrWhite);

      name=StrCon(name," 4");

      EditCreate(0,name,0,X+355,Y+DY*j,70,20,DoubleToString(History[j][3],2),"Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrBlack,//8AB>@8O ?> 8=AB@C<5=BC

      History[j][3]>0?colorGREEN:History[j][3]<0?colorRED:clrWhite);

      name=StrCon(name," 5");

      EditCreate(0,name,0,X+430,Y+DY*j,70,20,DoubleToString(History[j][4],2),"Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrBlack,//8AB>@8O ?> 8=AB@C<5=BC

      History[j][4]>0?colorGREEN:History[j][4]<0?colorRED:clrWhite);

      name=StrCon(name," 6");

      EditCreate(0,name,0,X+505,Y+DY*j,70,20,DoubleToString(History[j][5],2),"Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrBlack,//8AB>@8O ?> 8=AB@C<5=BC

      History[j][5]>0?colorGREEN:History[j][5]<0?colorRED:clrWhite);*/

   }



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

   //                                                                                  //

   //                             86=OO H0?:0 "                                   //

   //                                                                                  //

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

   X=0;

   EditCreate(0,"cm ALL",0,X,Y+5+DY*j,100,20,"© https://cmillion.ru","Arial",8,ALIGN_CENTER,false,CORNER_LEFT_UPPER,clrGray,clrWhite);X+=105;

   EditCreate(0,"cm ProfitALL",0,X,Y+5+DY*j,70,20,DoubleToString(ProfitALL,2),"Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrBlack,ProfitALL>0?colorGREEN:ProfitALL<0?colorRED:clrWhite);

   //EditCreate(0,"cm HistoryALL",0,X+130,Y+5+DY*j,70,20,DoubleToString(HistoryALL,2),"Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrWhite,clrBlue);



   X+=104;

   for(i=0;i<6;i++)//AC<<K ?@>D8B>2 ?> 4=O< =545;O< <5A

   {

      EditCreate(0,"cm ProfitAll"+IntegerToString(i),0,X+35+75*i,Y+5+DY*j,70,20,DoubleToString(ProfitAll[i],2),"Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrBlack,ProfitAll[i]>0?colorGREEN:ProfitAll[i]<0?colorRED:clrWhite);

   }

   if (orders!=OrdersTotal()) History();

   orders=OrdersTotal();

}

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

int Insrt(string Sym)

{

   int j=0;

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

   {

      if (Sym==Symbl[j] || Symbl[j]==NULL) break;

   }

   if (j>99) j=99;

   Symbl[j]=Sym;

   return(j);

}

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

bool EditCreate(const long             chart_ID=0,               // ID 3@0D8:0 

                const string           name="Edit",              // 8<O >1J5:B0 

                const int              sub_window=0,             // =><5@ ?>4>:=0 

                const int              x=0,                      // :>>@48=0B0 ?> >A8 X 

                const int              y=0,                      // :>>@48=0B0 ?> >A8 Y 

                const int              width=50,                 // H8@8=0 

                const int              height=18,                // 2KA>B0 

                const string           text="Text",              // B5:AB 

                const string           font="Arial",             // H@8DB 

                const int              font_size=8,             // @07<5@ H@8DB0 

                const ENUM_ALIGN_MODE  align=ALIGN_RIGHT,       // A?>A>1 2K@02=820=8O 

                const bool             read_only=true,           // 2>7<>6=>ABL @540:B8@>20BL 

                const ENUM_BASE_CORNER corner=CORNER_RIGHT_LOWER, // C3>; 3@0D8:0 4;O ?@82O7:8 

                const color            clr=clrBlack,             // F25B B5:AB0 

                const color            back_clr=clrWhite,        // F25B D>=0 

                const color            border_clr=clrNONE,       // F25B 3@0=8FK 

                const bool             back=false,               // =0 704=5< ?;0=5 

                const bool             selection=false,          // 2K45;8BL 4;O ?5@5<5I5=89 

                const bool             hidden=true,              // A:@KB 2 A?8A:5 >1J5:B>2 

                const long             z_order=0)                // ?@8>@8B5B =0 =060B85 <KHLN 

  { 

   ResetLastError(); 

   if (ObjectFind(chart_ID,name)!=-1) ObjectDelete(chart_ID,name);

   if(!ObjectCreate(chart_ID,name,OBJ_EDIT,sub_window,0,0)) 

     { 

      Print(__FUNCTION__, 

            ": =5 C40;>AL A>740BL >1J5:B ",name,"! >4 >H81:8 = ",GetLastError()); 

      return(false); 

     } 

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,(int)(dX+x*WindSizeX)); 

   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,(int)(dY+y*WindSizeY)); 

   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,(int)(width*WindSizeX)); 

   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,(int)(height*WindSizeY)); 

   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); 

   ObjectSetString(chart_ID,name,OBJPROP_FONT,font); 

   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); 

   ObjectSetInteger(chart_ID,name,OBJPROP_ALIGN,align); 

   ObjectSetInteger(chart_ID,name,OBJPROP_READONLY,read_only); 

   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner); 

   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 

   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr); 

   ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr); 

   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); 

   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 

   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); 

   return(true); 

  } 

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

bool ButtonCreate(const long              chart_ID=0,               // ID 3@0D8:0

                  const string            name="Button",            // 8<O :=>?:8

                  const int               sub_window=0,             // =><5@ ?>4>:=0

                  const long               x=0,                      // :>>@48=0B0 ?> >A8 X

                  const long               y=0,                      // :>>@48=0B0 ?> >A8 Y

                  const int               width=50,                 // H8@8=0 :=>?:8

                  const int               height=18,                // 2KA>B0 :=>?:8

                  const string            text="Button",            // B5:AB

                  const string            font="Arial",             // H@8DB

                  const int               font_size=10,             // @07<5@ H@8DB0

                  const color             clr=clrRed,               // F25B B5:AB0

                  const color             clrfon=clrBlack,          // F25B D>=0

                  const color             border_clr=clrNONE,       // F25B 3@0=8FK

                  const bool              state=false,

                  const ENUM_BASE_CORNER  CORNER=CORNER_RIGHT_LOWER)

  {

   if (ObjectFind(chart_ID,name)==-1)

   {

      ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0);

      ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,(int)(height*WindSizeY));

      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER);

      ObjectSetString(chart_ID,name,OBJPROP_FONT,font);

      ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);

      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,0);

      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,0);

      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,0);

      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,1);

      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,1);

   }

      ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);

      ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,(int)(width*WindSizeX));

   ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);

   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,clrfon);

   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);

   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,(int)(dX+x*WindSizeX));

   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,(int)(dY+y*WindSizeY));

   return(true);

}

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

bool RectLabelCreate(const long             chart_ID=0,               // ID 3@0D8:0

                     const string           name="RectLabel",         // 8<O <5B:8

                     const int              sub_window=0,             // =><5@ ?>4>:=0

                     const long              x=0,                     // :>>@48=0B0 ?> >A8 X

                     const long              y=0,                     // :>>@48=0B0 ?> >A8 y

                     const int              width=50,                 // H8@8=0

                     const int              height=18,                // 2KA>B0

                     const color            back_clr=clrNONE,         // F25B D>=0

                     const color            clr=clrNONE,              // F25B ?;>A:>9 3@0=8FK (Flat)

                     const ENUM_LINE_STYLE  style=STYLE_SOLID,        // AB8;L ?;>A:>9 3@0=8FK

                     const int              line_width=1,             // B>;I8=0 ?;>A:>9 3@0=8FK

                     const bool             back=false,               // =0 704=5< ?;0=5

                     const bool             selection=false,          // 2K45;8BL 4;O ?5@5<5I5=89

                     const bool             hidden=true,              // A:@KB 2 A?8A:5 >1J5:B>2

                     const long             z_order=0,

                     const int              CORNER=CORNER_LEFT_LOWER)                // ?@8>@8B5B =0 =060B85 <KHLN

  {

   ResetLastError();

   if (ObjectFind(chart_ID,name)==-1)

   {

      ObjectCreate(chart_ID,name,OBJ_RECTANGLE_LABEL,sub_window,0,0);

   }

   ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,BORDER_FLAT);

   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER);

   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);

   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width);

   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);

   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);

   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);

   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);

   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);

   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,(int)(width*WindSizeX));

   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,(int)(height*WindSizeY));

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,(int)(dX+x*WindSizeX));

   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,(int)(dY+y*WindSizeY));

   return(true);

}

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

bool LabelCreate(const long              chart_ID=0,               // ID 3@0D8:0 

                 const string            name="Label",             // 8<O <5B:8 

                 const int               sub_window=0,             // =><5@ ?>4>:=0 

                 const int               x=0,                      // :>>@48=0B0 ?> >A8 X 

                 const int               y=0,                      // :>>@48=0B0 ?> >A8 Y 

                 const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // C3>; 3@0D8:0 4;O ?@82O7:8 

                 const string            text="Label",             // B5:AB 

                 const string            font="Arial",             // H@8DB 

                 const int               font_size=10,             // @07<5@ H@8DB0 

                 const color             clr=clrBlack,             // F25B 

                 const double            angle=0.0,                // =0:;>= B5:AB0 

                 const ENUM_ANCHOR_POINT anchor=ANCHOR_RIGHT_UPPER,// A?>A>1 ?@82O7:8 

                 const bool              back=false,               // =0 704=5< ?;0=5 

                 const bool              selection=false,          // 2K45;8BL 4;O ?5@5<5I5=89 

                 const bool              hidden=true,              // A:@KB 2 A?8A:5 >1J5:B>2 

                 const long              z_order=0)                // ?@8>@8B5B =0 =060B85 <KHLN 

  { 

   ResetLastError(); 

   if(ObjectFind(chart_ID,name)==-1) 

   { 

      if(!ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0)) 

      { 

         return(false); 

      } 

   } 

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,(int)(dX+x*WindSizeX)); 

   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,(int)(dY+y*WindSizeY)); 

   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner); 

   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); 

   ObjectSetString(chart_ID,name,OBJPROP_FONT,font); 

   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); 

   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle); 

   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor); 

   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 

   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); 

   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 

   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); 

   return(true); 

  } 

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

void OnDeinit(const int reason)

{

   ObjectsDeleteAll(0);

   EventKillTimer();

   /*if (reason!=REASON_RECOMPILE && reason!=REASON_CHARTCHANGE) 

   { 

      ObjectsDeleteAll(0,"kn");

      ObjectsDeleteAll(0,"cm");

   }*/

}

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

bool Liz()

{

   if(AccountInfoInteger(ACCOUNT_TRADE_MODE)!=ACCOUNT_TRADE_MODE_REAL) return(true);



   if (AN==0) return(true);

   if (StringFind(NameAccount,"%;KAB>2 ;048<8@ !B5?0=>28G")!=-1) return(true);

   if (StringFind(NameAccount,";048<8@ !B5?0=>28G %;KAB>2")!=-1) return(true);

   

   return(false);

}

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

void History()

{

   double Profit=0;

   datetime OCT;

   ulong Ticket;

   int i,j;

   string Symb;

   ArrayInitialize(ProfitAll,0);

   ArrayInitialize(History,0);

   #ifdef __MQL4__ //---------------------------- MT4 ---------------------------------------------------  

   for (i=OrdersHistoryTotal()-1; i>=0; i--)

   {                                               

      if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;

      if (OrderType()!=OP_BUY && OrderType()!=OP_SELL) continue;

      Symb  = OrderSymbol();

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

      OOT = OrderOpenTime();

      OCT = OrderCloseTime();

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

    #endif

         

  #ifdef __MQL5__ //--------------------------- MT5 ---------------------------------------------------  

   ulong order_ticket;           // B8:5B >@45@0,?> :>B>@><C 1K;0 A>25@H5=0 A45;:0 

   long deal_type ;              // B8? B>@3>2>9 >?5@0F88 

   long position_ID;             // 845=B8D8:0B>@ ?>78F88 

   datetime from_date=0;          // A A0<>3> =0G0;0 

   datetime to_date=TimeCurrent();// ?> B5:CI89 <><5=B 

   HistorySelect(from_date,to_date); 

   int deals=HistoryDealsTotal(); 

   for(i=0;i<deals;i++) 

   { 

      Ticket=                    HistoryDealGetTicket(i); 

      order_ticket=              HistoryDealGetInteger(Ticket,DEAL_ORDER); 

      deal_type=                 HistoryDealGetInteger(Ticket,DEAL_TYPE); 

      Symb=                      HistoryDealGetString(Ticket,DEAL_SYMBOL); 

      position_ID=               HistoryDealGetInteger(Ticket,DEAL_POSITION_ID); 

      if(deal_type!=DEAL_TYPE_BUY && deal_type!=DEAL_TYPE_SELL) continue;

      Profit=HistoryDealGetDouble(Ticket,DEAL_PROFIT)+HistoryDealGetDouble(Ticket,DEAL_COMMISSION)+HistoryDealGetDouble(Ticket,DEAL_SWAP); 

      OCT=(datetime)HistoryDealGetInteger(Ticket,DEAL_TIME);

   #endif





      if (OCT==0) continue;

      if(Profit==0) continue;

      

      j=Insrt(Symb);

      if (n<j) n=j;

      

      if (OCT>=iTime(NULL,PERIOD_D1,0))         {History[j][0]+=Profit;ProfitAll[0]+=Profit;}//A53>4=O

      else

      {

         if (OCT>=iTime(NULL,PERIOD_D1,1))      {History[j][1]+=Profit;ProfitAll[1]+=Profit;}//2G5@0

         else

         {

            if (OCT>=iTime(NULL,PERIOD_D1,2))   {History[j][2]+=Profit;ProfitAll[2]+=Profit;}//?>702G5@0

         }

      }

      if (OCT>=iTime(NULL,PERIOD_W1,0))         {History[j][3]+=Profit;ProfitAll[3]+=Profit;}//=545;O

      if (OCT>=iTime(NULL,PERIOD_MN1,0))        {History[j][4]+=Profit;ProfitAll[4]+=Profit;}//<5AOF

                                                 History[j][5]+=Profit;ProfitAll[5]+=Profit; // [1] =0:>?;5==K9 ?@>D8B ?> 2A5<C 8=AB@C<5=BC

      

   }

}

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

#ifdef __MQL5__   

double GetPositionCommission(void)

  {

   double Commission=::PositionGetDouble(POSITION_COMMISSION);

// 0 A;CG09, 5A;8 POSITION_COMMISSION =5 @01>B05B

   if(Commission==0)

     {

      ulong Ticket=GetPositionDealIn();



      if(Ticket>0)

        {

         const double LotsIn=::HistoryDealGetDouble(Ticket,DEAL_VOLUME);

         if(LotsIn>0)

            Commission=::HistoryDealGetDouble(Ticket,DEAL_COMMISSION)*::PositionGetDouble(POSITION_VOLUME)/LotsIn;

        }

     }

   return(Commission);

  }

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

ulong GetPositionDealIn(const ulong HistoryTicket=0)

  {

   ulong Ticket=0;



   if((HistoryTicket==0) ? ::HistorySelectByPosition(::PositionGetInteger(POSITION_TICKET)) : ::HistorySelectByPosition(HistoryTicket))

     {

      const int Total=::HistoryDealsTotal();



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

        {

         const ulong TicketDeal=::HistoryDealGetTicket(i);



         if(TicketDeal>0)

            if((ENUM_DEAL_ENTRY)::HistoryDealGetInteger(TicketDeal,DEAL_ENTRY)==DEAL_ENTRY_IN)

              {

               Ticket=TicketDeal;

               break;

              }

        }

     }

   return(Ticket);

  }

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

#endif

string StrCon(string t1=NULL,string t2=NULL,string t3=NULL,string t4=NULL,string t5=NULL,string t6=NULL,string t7=NULL,string t8=NULL,string t9=NULL,string t10=NULL,string t11=NULL)

{

   string str;

   #ifdef __MQL4__ str=StringConcatenate(#endif  

   #ifdef __MQL5__ StringConcatenate(str,#endif t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11);

   return(str);

}

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

string AC;

int OnInit()

{

   AN=(int)AccountInfoInteger(ACCOUNT_LOGIN);

   NameAccount=AccountInfoString(ACCOUNT_NAME);

   AC = " "+AccountInfoString(ACCOUNT_CURRENCY);

   History();

   EventSetTimer(1);

   LANGUAGE=TerminalInfoString(TERMINAL_LANGUAGE)=="Russian";

   ChartSetInteger(0,CHART_COLOR_FOREGROUND,colorfon);//&25B >A59, H:0;K 8 AB@>:8 OHLC

   

   ChartSetInteger(0,CHART_COLOR_BACKGROUND,colorfon);

   ChartSetInteger(0,CHART_FOREGROUND,false);//&5=>2>9 3@0D8: =0 ?5@54=5< ?;0=5

   ChartSetInteger(0,CHART_SHOW_GRID,false);

   

   ChartSetInteger(0,CHART_BRING_TO_TOP,true);

   ChartSetInteger(0,CHART_SHOW_ASK_LINE,false);

   ChartSetInteger(0,CHART_SHOW_BID_LINE,false);

   

   ChartSetInteger(0,CHART_SHOW_OHLC,false);//B>1@065=85 2 ;52>< 25@E=5< C3;C 7=0G5=89 OHLC

   ChartSetInteger(0,CHART_SHOW_LAST_LINE,false);

   ChartSetInteger(0,CHART_SHOW_GRID,false);

   ChartSetInteger(0,CHART_SHOW_VOLUMES,false);

   ChartSetInteger(0,CHART_SHOW_OBJECT_DESCR,false);

   ChartSetInteger(0,CHART_CONTEXT_MENU,false);//:;NG5=85/>B:;NG5=85 4>ABC?0 : :>=B5:AB=><C <5=N ?> =060B8N ?@02>9 :;028H8 <KH:8. 

   ChartSetInteger(0,CHART_CROSSHAIR_TOOL,false);//?5@5:@5AB8

   ChartSetInteger(0,CHART_MOUSE_SCROLL,false);//@>:@CB:0 3@0D8:0 ;52>9 :=>?:>9 <KH:8 ?> 3>@87>=B0;8.

   ChartSetInteger(0,CHART_SHOW_ONE_CLICK,false);



#ifdef __MQL5__

   ChartSetInteger(0,CHART_SHOW,false);//@87=0: >B@8A>2:8 F5=>2>3> 3@0D8:0

   FillingMode=ORDER_FILLING_RETURN;// 0==K9 @568< 8A?>;L7C5BAO 4;O @K=>G=KE

   int FILLING_MODE=(int)SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE);

   if ((SYMBOL_FILLING_IOC & FILLING_MODE)==SYMBOL_FILLING_IOC) FillingMode=ORDER_FILLING_IOC;// A5 8;8 G0AB8G=>

   if ((SYMBOL_FILLING_FOK & FILLING_MODE)==SYMBOL_FILLING_FOK) FillingMode=ORDER_FILLING_FOK;//<>65B 1KBL 8A?>;=5= 8A:;NG8B5;L=> 2 C:070==>< >1J5<5

#endif   

   ChartSetInteger(0,CHART_COLOR_CANDLE_BEAR,colorfon);

   ChartSetInteger(0,CHART_COLOR_CHART_DOWN,colorfon);

   ChartSetInteger(0,CHART_COLOR_CANDLE_BULL,colorfon);

   ChartSetInteger(0,CHART_COLOR_CHART_UP,colorfon);

   ChartSetInteger(0,CHART_COLOR_CHART_LINE,colorfon);

   ChartSetInteger(0,CHART_COLOR_STOP_LEVEL,colorfon);

   ChartSetInteger(0,CHART_COLOR_LAST,colorfon);

   ChartSetInteger(0,CHART_SHOW_TRADE_LEVELS,colorfon);

   ChartSetInteger(0,CHART_DRAG_TRADE_LEVELS,false);

   ChartSetInteger(0,CHART_SHOW_DATE_SCALE,false);

   ChartSetInteger(0,CHART_SHOW_PRICE_SCALE,false);

   ChartSetInteger(0,CHART_COLOR_VOLUME,colorfon);



   ChartSetInteger(0,CHART_HEIGHT_IN_PIXELS,100);

   X=0;Y=0;

   EditCreate(0,"cm _1",0,X,Y,100,20,ver,"ARIAL BLACK",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrWhite,clrBlue);

   X+=105;

   EditCreate(0,"cm _2",0,X,Y,70,20,"Profit","Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrWhite,clrBlue);X+=75;

   EditCreate(0,"cm _b",0,X,Y,30,20,"buy","Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrWhite,clrBlue);X+=29;

   EditCreate(0,"cm _s",0,X,Y,30,20,"sell","Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrWhite,clrBlue);X+=35;

   EditCreate(0,"cm _3",0,X,Y,70,20,"!53>4=O","Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrWhite,clrBlue);X+=75;

   EditCreate(0,"cm _4",0,X,Y,70,20,TimeToString(iTime(NULL,PERIOD_D1,1),TIME_DATE),"Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrWhite,clrBlue);X+=75;

   EditCreate(0,"cm _5",0,X,Y,70,20,TimeToString(iTime(NULL,PERIOD_D1,2),TIME_DATE),"Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrWhite,clrBlue);X+=75;

   EditCreate(0,"cm _6",0,X,Y,70,20,"545;O","Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrWhite,clrBlue);X+=75;

   EditCreate(0,"cm _7",0,X,Y,70,20,"5AOF","Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrWhite,clrBlue);X+=75;

   EditCreate(0,"cm _8",0,X,Y,70,20,"A53>","Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrWhite,clrBlue);

   ChartSetInteger(0,CHART_BRING_TO_TOP,true);



   return(INIT_SUCCEEDED);

}

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

int Slippage = 1000;

#ifdef __MQL4__

bool CloseAll(string Symbol1="ALL")

{

   bool error=true;

   int j,err,nn=0,OT;

   string Symb;

   double Profit=0,OOP;

   while(!IsStopped())

   {

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

      {

         if (OrderSelect(j, SELECT_BY_POS))

         {

            Symb = OrderSymbol();

            if (!MarketOpen(Symb)) continue;

            if (Symb == Symbol1 || Symbol1=="ALL")

            {

               OT = OrderType();

               OOP=OrderOpenPrice();

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

               if (OT>1) 

               {

                  error=OrderDelete(OrderTicket());

               }

               if (OT==OP_BUY) 

               {

                  error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(Symb,MODE_BID),(int)MarketInfo(Symb,MODE_DIGITS)),Slippage,Blue);

               }

               if (OT==OP_SELL) 

               {

                  error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(Symb,MODE_ASK),(int)MarketInfo(Symb,MODE_DIGITS)),Slippage,Red);

               }

               if (!error) 

               {

                  err = GetLastError();

                  if (err<2) continue;

                  if (err==129) 

                  {

                     Sleep(5000);

                     RefreshRates();

                     continue;

                  }

                  if (err==146) 

                  {

                     if (IsTradeContextBusy()) Sleep(2000);

                     continue;

                  }

               }

            }

         }

      }

      int k=0;

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

      {

         if (OrderSelect(j, SELECT_BY_POS))

         {

            Symb = OrderSymbol();

            if (Symb == Symbol1 || Symbol1=="ALL")

            {

               k++;

            }

         }  

      }

      if (k==0) break;

      nn++;

      if (nn>10) {/*ALERT(StringConcatenate(Symb,LANGUAGE?"  5 C40;>AL 70:@KBL 2A5 A45;:8, >AB0;>AL 5I5 ":"Failed to close all transactions, there is still ",k));*/return(false);}

      Sleep(1000);

      RefreshRates();

   }

   ObjectsDeleteAll(0,"cm");

   OnInit();

   return(true);

}

#endif 

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

#ifdef __MQL5__

bool CloseAll(string Symbol1="ALL")

{

   bool error=true;

   int i,err,nn=0;

   long OT;

   string Symb;

   int k=0;

   double Profit=0;

   while(!IsStopped())

   {

      k=0;

      for (i = PositionsTotal()-1; i >= 0; i--)

      {

         Symb=PositionGetSymbol(i);

         if (!MarketOpen(Symb)) continue;

         if (Symb != Symbol1 && Symbol1!="ALL") continue;

         Profit=PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP)+GetPositionCommission()*2;

         

         OT = PositionGetInteger(POSITION_TYPE);



         ZeroMemory(request);

         ZeroMemory(result);

         request.deviation = Slippage;

         request.volume=PositionGetDouble(POSITION_VOLUME);

         request.position  = PositionGetInteger(POSITION_TICKET);

         request.action=TRADE_ACTION_DEAL;

         request.comment="";

         request.type_filling = FillingMode;

         request.symbol = Symb;

         request.magic  = PositionGetInteger(POSITION_MAGIC);





         k++;

         

         if (OT==POSITION_TYPE_BUY) 

         {

            request.price=SymbolInfoDouble(Symb,SYMBOL_BID);

            request.type=ORDER_TYPE_SELL;

         }

         if (OT==POSITION_TYPE_SELL) 

         {

            request.price=SymbolInfoDouble(Symb,SYMBOL_ASK);

            request.type=ORDER_TYPE_BUY;

         }

         if(!OrderSend(request,result))

         {

            err = GetLastError();

            if (err<2) continue;

            Print("H81:0 ",err," 70:@KB8O >@45@0 N ",request.position,"     ",TimeToString(TimeCurrent(),TIME_SECONDS));

         }

      }

      if (k==0) break;

      nn++;

      if (nn>10) return(false);

      Sleep(1000);

   }

   return(true);

}

#endif 

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

void OnChartEvent(const int id, 

                  const long &lparam, 

                  const double &dparam, 

                  const string &name) 

{ 

   int i,j,ret=IDYES;

   long ch,prevChart=0; 

   if(id==CHARTEVENT_OBJECT_CLICK) 

   { 

      string txt,Symb=NULL;

      if (StringFind(name,"cm Insrt")!=-1)

      {

         i=StringFind(name,"Profit");

         if (i==-1)//=060B0 :=>?:0 8<5=8 20;NB=>9 ?0@K

         {

            Symb=ObjectGetString(0,name,OBJPROP_TEXT);

            i=-1;

            while(i<100)// C =0A =025@=O:0 =5 1>;LH5 100 >B:@KBKE 3@0D8:>2 

            { 

               ch=ChartNext(prevChart);

               if (ch==ChartID()) {prevChart=ch;continue;}//B5:CI89 3@0D8: ?@>?CAB8<

               if(ch<0) break;          // 4>AB83;8 :>=F0 A?8A:0 3@0D8:>2 

               prevChart=ch;// 70?><=8< 845=B8D8:0B>@ B5:CI53> 3@0D8:0 4;O ChartNext() 

               if (ChartSymbol(ch)==Symb) 

               {

                  ChartSetInteger(ch,CHART_BRING_TO_TOP,true);

                  if (ChartGetInteger(0,CHART_WIDTH_IN_PIXELS)<ChartGetInteger(ch,CHART_WIDTH_IN_PIXELS)) ChartSetInteger(0 ,CHART_BRING_TO_TOP,true);

                  

                  break;

               }

               i++;

            }

         }

         else

         {

            txt=StringSubstr(name,8,i-8);

            j=(int)StringToInteger(txt);

            Symb=Symbl[j];

            txt=ObjectGetString(0,name,OBJPROP_TEXT);

            if (Symb!=NULL)

            {

               txt=StrCon(LANGUAGE?"70:@KBL 2A5 ?>78F88 ":"close all pozichions ",Symb," ",txt,AC);

               ret=MessageBox(StrCon(LANGUAGE?"K 459AB28B5;L=> E>B8B5 70:@KBL ":"Are you sure you want to close ",Symb," ?"),txt,MB_YESNO|MB_TOPMOST);

               if (ret==IDYES)

               {

                  CloseAll(Symb);

               }

            }

         }

      }

      if (name=="cm ProfitALL")

      {

         txt=StrCon(LANGUAGE?"70:@KBL 2A5 ?>78F88 ?> AG5BC":"close all pozichions ",DoubleToString(AccountInfoDouble(ACCOUNT_PROFIT),2),AC);

         ret=MessageBox((LANGUAGE?"K 459AB28B5;L=> E>B8B5 2A5 70:@KBL?":"Are you sure you want to close everything?"),txt,MB_YESNO|MB_TOPMOST);

         if (ret==IDYES)

         {

            CloseAll();

         }

      }

   }     

} 

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

bool MarketOpen(string Symbol1)

{

#ifdef __MQL5__

   if(SymbolInfoInteger(Symbol1,SYMBOL_TRADE_MODE)!=SYMBOL_TRADE_MODE_FULL)

#endif 

#ifdef __MQL4__

   if(!IsTradeAllowed(Symbol1, TimeCurrent())||MarketInfo(Symbol1, MODE_TRADEALLOWED)==0)

#endif 

   {

      LabelCreate(0,"cm Trading",0,5,10,CORNER_RIGHT_UPPER,LANGUAGE?"">@3>2;O ?> 40==><C 8=AB@C<5=BC 70?@5I5=0":"Trading on this instrument is prohibited","Arial",10,clrRed);

      return(false);

   }

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