cm BASKET mql

Author: Copyright 2020, cmillion@narod.ru
Profit factor:
0.00
1 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 

   }

   

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

   //                                                                                  //

   //                           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);

      }

   }



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

   //                                                                                  //

   //                             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();

}

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

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;

      Ticket = OrderTicket();

      Symb  = OrderSymbol();

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

      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 (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 (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();

         }

      }

   }     

} 

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

Comments