cm partial closing position

Author: Copyright © 2021, Vladimir Hlystov
Orders Execution
Checks for the total of open ordersIt can change open orders parameters, due to possible stepping strategyIt Closes Orders by itself It automatically opens orders when conditions are reached
0 Views
0 Downloads
0 Favorites
cm partial closing position
ÿþ#property copyright "Copyright © 2021, Vladimir Hlystov"

#property link      "cmillion@narod.ru"

#property version   "1.0"

#property strict

#property description "1.A>25B=8: >BA;568205B >B:@KBK5 ?>78F88 ?> 2A5< 8;8 7040==><C 8=AB@C<5=BC."

#property description "2 ?@8 4>AB865=88 C:070==>9 ?@81K;8 70:@K205B G0ABL ?>78F88"

#property description "3 ?@8 ?5@2>< G0AB8G=>< 70:@KB88 ?5@52>48B ?>78F8N 2 157C1KB>: + NoLoss ?C=:B>2 ?@81K;8"

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

//|                                                                  |

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

enum tt 

{

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

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

   tr2=0, //for the current currency

   tr1=1, //for all currency

};



input tt       Symb>l       = 1;

//K1>@ ?> 2A5< 20;NB0< @01>B0BL 8;8 B>;L:> ?> B>9, =0 :>B>@>9 CAB0=>2;5= A>25B=8:

extern int     MagicNumber             =  -1;

// 038: >@45@>2 A :>B>@K<8 @01>B05B M:A?5@B. -1 - 2A5 <038:8.

extern int  CloseLevel1              =  50;

extern int  CloseLevel2              =  100;

extern int  CloseLevel3              =  150;

extern int  CloseLevel4              =  250;

// #@>2=8 70:@KB8O. 0?@8<5@, ?@8 ?0@0<5B@0E 50/100/150/250 ?5@2>5 70:@KB85 2K?>;=O5BAO ?@8 4>AB865=88 >@45@>< ?@81K;8 2 50 ?C=:B>2, 70B5< 5I5 G5@57 100 ?C=:B>2 8 5I5 G5@57 150 ?C=:B>2.

extern int  Percents1                =  50;

extern int  Percents2                =  30;

extern int  Percents3                =  10;

extern int  Percents4                =  10;

// @>F5=B 70:@KB8O (G5@57 @0745;8B5;L "/") 4;O A>>B25BAB2CNI53> C@>2=O. 45AL >BAG5B 845B >B ;>B0 ?5@2>3> >@45@0. A;8 8AE>4=K9 >@45@ >B:@KB A ;>B>< 1.0 ;>B, 70:@K205BAO 50% - 0.5, 70B5< 30% >B 1.0 - 0.3 ... 0,1 8 =0:>=5F 0.1

extern int  MinProfitNoLoss          =  0;

// 5@52>4 2 157C1KB>: ?@8 ?5@2>< G0AB8G=>< 70:@KB88

extern int     Slippage              =  3;

// >?CAB8<>5 >B:;>=5=85 >B 70?@>H5==>9 F5=K

sinput double  scale        = 1.2;  

input bool    ScreenShot = true;   

   

input color Color1=clrWhite;

input color Color2=clrAqua;

input color Color3=clrMagenta;

input color Color4=clrDarkOrange;

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

//|                                                                  |

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

string AC,GVp;

int NoLoss,Magic,LevelClose[4];

int PercentClose[4];

bool ShowOrder=true,SymbolAll=false,LANGUAGE;

color ColorN[4];

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

//|                                                                  |

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

int OnInit()

{

   Comment("");

   AC=AccountCurrency();

   GVp="cm partial closing position ";

   if(IsTesting()) GVp=GVp+" Testing";

   if(IsDemo())    GVp=GVp+" Demo";



   if(IsTesting()) GlobalVariablesDeleteAll(GVp);



   ColorN[0]=Color1;

   ColorN[1]=Color2;

   ColorN[2]=Color3;

   ColorN[3]=Color4;



   LevelClose[0]=CloseLevel1;

   LevelClose[1]=CloseLevel2;

   LevelClose[2]=CloseLevel3;

   LevelClose[3]=CloseLevel4;



   PercentClose[0]=Percents1;

   PercentClose[1]=Percents2;

   PercentClose[2]=Percents3;

   PercentClose[3]=Percents4;



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

   int Y=20;

   SymbolAll=Symb>l==1;

   Magic=MagicNumber;

   NoLoss=MinProfitNoLoss;

   ButtonCreate(0,"cm PCP Symb>l"   ,0,205,Y,200,20,CORNER_RIGHT_UPPER,SymbolAll?"All Symbol":Symbol(),"Arial",12,clrBlack,clrLightGray,clrNONE,SymbolAll,false,false,true,0,LANGUAGE?"K1>@ ?> 2A5< 20;NB0< @01>B0BL 8;8 B>;L:> ?> B>9, =0 :>B>@>9 CAB0=>2;5= A>25B=8:":"The choice to work for all currencies or only for the one on which the Expert Advisor is installed");Y+=19;

   EditCreate(0,"cm PCP Magic_"      ,0,205,Y,101,20,"Magic"      ,"Arial",12,ALIGN_CENTER,true,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"Magic (@8 CAB0=>2:5 7=0G5=8O -1 A>25B=8: 2848B 2A5 <038:8)":"Magic  (When setting the value -1, the Expert Advisor sees all the magics)");Y+=19;

   EditCreate(0,"cm PCP CloseLevel_" ,0,205,Y,101,20,"Close Level"              ,"Arial",12,ALIGN_CENTER,true,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"#@>2=8 70:@KB8O":"Closing Levels");Y+=19;

   EditCreate(0,"cm PCP Percents_"   ,0,205,Y,101,20,"% close"                  ,"Arial",12,ALIGN_CENTER,true,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"@>F5=B 70:@KB8O":"Closing percentage");Y+=19;

   EditCreate(0,"cm PCP NoLoss_"     ,0,205,Y,101,20,"Min profit no loss"       ,"Arial",12,ALIGN_CENTER,true,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"<8=8<0;L=0O ?@81K;L ?@8 ?5@52>45 2 157C1KB>:":"minimum profit when transferring to breakeven");Y=39;



   EditCreate(0,"cm PCP Magic"      ,0,105,Y,100,20,IntegerToString(Magic),"Arial",12,ALIGN_CENTER,false,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"Magic (@8 CAB0=>2:5 7=0G5=8O -1 A>25B=8: 2848B 2A5 <038:8)":"Magic  (When setting the value -1, the Expert Advisor sees all the magics)");Y+=19;

   EditCreate(0,"cm PCP CloseLevel1",0,105,Y,26,20,IntegerToString(CloseLevel1),"Arial",11,ALIGN_CENTER,false,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"#@>2=8 70:@KB8O. =>A8< =5A:>;L:> C@>2=59 G5@57 @0745;8B5;L /":"Closing Levels. Adding several levels through the separator /");

   EditCreate(0,"cm PCP CloseLevel2",0, 80,Y,26,20,IntegerToString(CloseLevel2),"Arial",11,ALIGN_CENTER,false,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"#@>2=8 70:@KB8O. =>A8< =5A:>;L:> C@>2=59 G5@57 @0745;8B5;L /":"Closing Levels. Adding several levels through the separator /");

   EditCreate(0,"cm PCP CloseLevel3",0, 55,Y,26,20,IntegerToString(CloseLevel3),"Arial",11,ALIGN_CENTER,false,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"#@>2=8 70:@KB8O. =>A8< =5A:>;L:> C@>2=59 G5@57 @0745;8B5;L /":"Closing Levels. Adding several levels through the separator /");

   EditCreate(0,"cm PCP CloseLevel4",0, 30,Y,25,20,IntegerToString(CloseLevel4),"Arial",11,ALIGN_CENTER,false,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"#@>2=8 70:@KB8O. =>A8< =5A:>;L:> C@>2=59 G5@57 @0745;8B5;L /":"Closing Levels. Adding several levels through the separator /");Y+=19;

   EditCreate(0,"cm PCP Percents1"  ,0,105,Y,26,20,IntegerToString(Percents1),"Arial",11,ALIGN_CENTER,false,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"@>F5=B 70:@KB8O. =>A8< =5A:>;L:> C@>2=59 G5@57 @0745;8B5;L /":"Closing percentage. Adding several levels through the separator /");

   EditCreate(0,"cm PCP Percents2"  ,0, 80,Y,26,20,IntegerToString(Percents2),"Arial",11,ALIGN_CENTER,false,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"@>F5=B 70:@KB8O. =>A8< =5A:>;L:> C@>2=59 G5@57 @0745;8B5;L /":"Closing percentage. Adding several levels through the separator /");

   EditCreate(0,"cm PCP Percents3"  ,0, 55,Y,26,20,IntegerToString(Percents3),"Arial",11,ALIGN_CENTER,false,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"@>F5=B 70:@KB8O. =>A8< =5A:>;L:> C@>2=59 G5@57 @0745;8B5;L /":"Closing percentage. Adding several levels through the separator /");

   EditCreate(0,"cm PCP Percents4"  ,0, 30,Y,25,20,IntegerToString(Percents4),"Arial",11,ALIGN_CENTER,false,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"@>F5=B 70:@KB8O. =>A8< =5A:>;L:> C@>2=59 G5@57 @0745;8B5;L /":"Closing percentage. Adding several levels through the separator /");Y+=19;

   EditCreate(0,"cm PCP NoLoss"     ,0,105,Y,100,20,IntegerToString(NoLoss)     ,"Arial",12,ALIGN_CENTER,false,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"<8=8<0;L=0O ?@81K;L ?@8 ?5@52>45 2 157C1KB>:":"minimum profit when transferring to breakeven");Y+=19;

   ButtonCreate(0,"cm PCP ShowOrder",0,205,Y,200,20,CORNER_RIGHT_UPPER,"ShowOrder","Arial",12,clrBlack,clrLightGray,clrNONE,SymbolAll,false,false,true,0,LANGUAGE?">:070BL/A:@KBL B01;8FC >@45@>2":"Show/hide the order tabled");

   OnTick();

   return(0);

}

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

//|                                                                  |

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

void OnDeinit(const int r)

{

   if(IsTesting()) GlobalVariablesDeleteAll(GVp);

   ObjectsDeleteAll(0,"cm PCP");



   return;

}

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

//|                                                                  |

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

string Orders[100][10];

string txt=NULL;

int N=0;

void OnTick()

{

   if (NoLoss!=(int)StringToInteger(ObjectGetString(0,"cm PCP NoLoss",OBJPROP_TEXT)))

   {

      NoLoss=(int)StringToInteger(ObjectGetString(0,"cm PCP NoLoss",OBJPROP_TEXT));

      txt=StringConcatenate(txt,LANGUAGE?"7<5=5=":"Changed"," NoLoss = ",NoLoss,"\n");

   }

   if (Magic!=(int)StringToInteger(ObjectGetString(0,"cm PCP Magic",OBJPROP_TEXT)))

   {

      Magic=(int)StringToInteger(ObjectGetString(0,"cm PCP Magic",OBJPROP_TEXT));

      txt=StringConcatenate(txt,LANGUAGE?"7<5=5=":"Changed"," Magic = ",Magic,"\n");

   }

   if (LevelClose[0]!=(int)StringToInteger(ObjectGetString(0,"cm PCP CloseLevel1",OBJPROP_TEXT)))

   {

      LevelClose[0]=(int)StringToInteger(ObjectGetString(0,"cm PCP CloseLevel1",OBJPROP_TEXT));

      txt=StringConcatenate(txt,LANGUAGE?"7<5=5=":"Changed"," LevelClose 1 = ",LevelClose[0],"pips\n");

   }

   if (LevelClose[1]!=(int)StringToInteger(ObjectGetString(0,"cm PCP CloseLevel2",OBJPROP_TEXT)))

   {

      LevelClose[1]=(int)StringToInteger(ObjectGetString(0,"cm PCP CloseLevel2",OBJPROP_TEXT));

      txt=StringConcatenate(txt,LANGUAGE?"7<5=5=":"Changed"," LevelClose 2 = ",LevelClose[1],"pips\n");

   }

   if (LevelClose[2]!=(int)StringToInteger(ObjectGetString(0,"cm PCP CloseLevel3",OBJPROP_TEXT)))

   {

      LevelClose[2]=(int)StringToInteger(ObjectGetString(0,"cm PCP CloseLevel3",OBJPROP_TEXT));

      txt=StringConcatenate(txt,LANGUAGE?"7<5=5=":"Changed"," LevelClose 3 = ",LevelClose[2],"pips\n");

   }

   if (LevelClose[3]!=(int)StringToInteger(ObjectGetString(0,"cm PCP CloseLevel4",OBJPROP_TEXT)))

   {

      LevelClose[3]=(int)StringToInteger(ObjectGetString(0,"cm PCP CloseLevel4",OBJPROP_TEXT));

      txt=StringConcatenate(txt,LANGUAGE?"7<5=5=":"Changed"," PercentClose 4 = ",PercentClose[3],"pips\n");

   }

   //---

   if (PercentClose[0]!=(int)StringToInteger(ObjectGetString(0,"cm PCP Percents1",OBJPROP_TEXT)))

   {

      PercentClose[0]=(int)StringToInteger(ObjectGetString(0,"cm PCP Percents1",OBJPROP_TEXT));

      txt=StringConcatenate(txt,LANGUAGE?"7<5=5=":"Changed"," PercentClose 1 = ",PercentClose[0],"%\n");

   }

   if (PercentClose[1]!=(int)StringToInteger(ObjectGetString(0,"cm PCP Percents2",OBJPROP_TEXT)))

   {

      PercentClose[1]=(int)StringToInteger(ObjectGetString(0,"cm PCP Percents2",OBJPROP_TEXT));

      txt=StringConcatenate(txt,LANGUAGE?"7<5=5=":"Changed"," PercentClose 2 = ",PercentClose[1],"%\n");

   }

   if (PercentClose[2]!=(int)StringToInteger(ObjectGetString(0,"cm PCP Percents3",OBJPROP_TEXT)))

   {

      PercentClose[2]=(int)StringToInteger(ObjectGetString(0,"cm PCP Percents3",OBJPROP_TEXT));

      txt=StringConcatenate(txt,LANGUAGE?"7<5=5=":"Changed"," PercentClose 3 = ",PercentClose[2],"%\n");

   }

   if (PercentClose[3]!=(int)StringToInteger(ObjectGetString(0,"cm PCP Percents4",OBJPROP_TEXT)))

   {

      PercentClose[3]=(int)StringToInteger(ObjectGetString(0,"cm PCP Percents4",OBJPROP_TEXT));

      txt=StringConcatenate(txt,LANGUAGE?"7<5=5=":"Changed"," PercentClose 4 = ",PercentClose[3],"%\n");

   }

   //---

   if (ShowOrder != ObjectGetInteger(0,"cm PCP ShowOrder",OBJPROP_STATE))

   {

      ShowOrder = ObjectGetInteger(0,"cm PCP ShowOrder",OBJPROP_STATE);

      if(!ShowOrder) ObjectsDeleteAll(0,"cm PCP srt");

   }

   if (SymbolAll != ObjectGetInteger(0,"cm PCP Symb>l",OBJPROP_STATE))

   {

      SymbolAll = ObjectGetInteger(0,"cm PCP Symb>l",OBJPROP_STATE);

      ObjectSetString(0,"cm PCP Symb>l",OBJPROP_TEXT,SymbolAll?"All Symbol":Symbol());

   }

   double POINT,BID,ASK,Profit,OOP,OSL,SL,LotsClose;

   int i,DIGITS,ParentTicket=0;

   int NO=0;

   double OL;

   bool SS=false;

   int n=0;

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

   {

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

      {

         if(OrderMagicNumber()==Magic || Magic==-1)

         {

            string OrdSym=OrderSymbol();

            if(OrdSym==Symbol() || SymbolAll)

            {

               double TekLot=OrderLots();

               OL=TekLot;

               double STOPLEVEL=MarketInfo(OrdSym,MODE_STOPLEVEL);

               DIGITS=(int)MarketInfo(OrdSym,MODE_DIGITS);

               POINT=MarketInfo(OrdSym,MODE_POINT);

               BID=NormalizeDouble(MarketInfo(OrdSym,MODE_BID),DIGITS);

               ASK=NormalizeDouble(MarketInfo(OrdSym,MODE_ASK),DIGITS);

               OOP = NormalizeDouble(OrderOpenPrice(),DIGITS);

               OSL = NormalizeDouble(OrderStopLoss(),DIGITS);

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

               int Ticket=OrderTicket();

               ParentTicket=LastPositionTicket(OrderComment());

               NO=0;

               if(ParentTicket!=0)

               {

                  if(GlobalVariableCheck(StringConcatenate(GVp,ParentTicket,OrdSym," Num")))

                  {

                     NO=((int)GlobalVariableGet(StringConcatenate(GVp,ParentTicket,OrdSym," Num")))+1;

                  }

                  if(GlobalVariableCheck(StringConcatenate(GVp,ParentTicket,OrdSym," Lots")))

                  {

                     OL=GlobalVariableGet(StringConcatenate(GVp,ParentTicket,OrdSym," Lots"));

                  }

               }

               GlobalVariableSet(StringConcatenate(GVp,Ticket,OrdSym," Num"),NO);

               GlobalVariableSet(StringConcatenate(GVp,Ticket,OrdSym," Lots"),OL);

               if(NO<0) NO=0;

               if(NO>=ArraySize(LevelClose)) NO=ArraySize(LevelClose)-1;

               RefreshRates();

               if(OrderType()<2)

               {

                  Orders[n][0]=IntegerToString(Ticket);

                  Orders[n][1]=OrdSym;

                  Orders[n][3]=StringConcatenate(DoubleToString(OL,2)," / ",DoubleToString(TekLot,2));

                  if (OL!=TekLot) Orders[n][8]=IntegerToString(NO); else Orders[n][8]="";

                  Orders[n][6]=StringConcatenate(DoubleToString(Profit,2),AC);

                  Orders[n][7]=OrderComment();

                  Orders[n][9]=IntegerToString(OrderMagicNumber());

               }

               if(OrderType()==OP_BUY)

               {

                  Orders[n][2]="BUY";

                  if (OSL>=OOP) Orders[n][2]=Orders[n][2]+" nl";

                  Orders[n][4]=StringConcatenate(NO," - ",DoubleToString(PercentClose[NO],0),"%");

                  Orders[n][5]=StringConcatenate(DoubleToString((BID-OOP)/POINT,0)," pips (",IntegerToString(LevelClose[NO]),")");

                  n++;

                  if(NormalizeDouble(BID-OOP,DIGITS)>=NormalizeDouble(POINT*LevelClose[0],DIGITS))

                  {

                     SL=NormalizeDouble(OOP+NoLoss*POINT,DIGITS);

                     if (OSL!=SL && BID>SL+STOPLEVEL*POINT)

                     {

                        if (!OrderModify(Ticket,OOP,SL,OrderTakeProfit(),0,clrNONE)) Print("Error Order Modify ",(GetLastError()));

                        else txt=StringConcatenate(txt,"NoLoss ",Ticket," ",OrdSym," B ",DoubleToString(OSL,DIGITS)," -> ",DoubleToString(SL,DIGITS),"\n");

                     }

                  }

                  if(NormalizeDouble(BID-OOP,DIGITS)>=NormalizeDouble(POINT*LevelClose[NO],DIGITS))

                  {

                     LotsClose=CheckVolumeValue(PercentClose[NO]/100.0*OL,OrdSym);

                     if(LotsClose>0)

                     {

                        LotsClose=MathMin(LotsClose,TekLot);

                        if(!OrderClose(Ticket,LotsClose,NormalizeDouble(BID,DIGITS),Slippage,CLR_NONE))

                        {

                           Print("Close error ",GetLastError());

                        }

                        else 

                        {

                           SS=true;

                           txt=StringConcatenate(txt,"close ",Ticket," ",OrdSym," B ",DoubleToString(LotsClose,2)," (",DoubleToString(OL,2),") ",NO," Level=",IntegerToString(LevelClose[NO]),"\n");

                        }

                     }

                  }

               }

               if(OrderType()==OP_SELL)

               {

                  Orders[n][2]="SELL";

                  if (OSL!=0 && OSL<=OOP) Orders[n][2]=Orders[n][2]+" nl";

                  Orders[n][4]=StringConcatenate(NO," - ",DoubleToString(PercentClose[NO],0),"%");

                  Orders[n][5]=StringConcatenate(DoubleToString((OOP-ASK)/POINT,0)," pips (",IntegerToString(LevelClose[NO]),")");

                  n++;

                  if(NormalizeDouble(OOP-ASK,DIGITS)>=NormalizeDouble(POINT*LevelClose[0],DIGITS))

                  {

                     SL=NormalizeDouble(OOP-NoLoss*POINT,DIGITS);

                     if (OSL!=SL && ASK<SL-STOPLEVEL*POINT)

                     {

                        if (!OrderModify(Ticket,OOP,SL,OrderTakeProfit(),0,clrNONE)) Print("Error Order Modify ",(GetLastError()));

                        else txt=StringConcatenate(txt,"NoLoss ",Ticket," ",OrdSym," S ",DoubleToString(OSL,DIGITS)," -> ",DoubleToString(SL,DIGITS),"\n");

                     }

                  }

                  if(NormalizeDouble(OOP-ASK,DIGITS)>=NormalizeDouble(POINT*LevelClose[NO],DIGITS))

                  {

                     LotsClose=CheckVolumeValue(PercentClose[NO]/100.0*OL,OrdSym);

                     if(LotsClose>0)

                     {

                        LotsClose=MathMin(LotsClose,TekLot);

                        if(!OrderClose(Ticket,LotsClose,NormalizeDouble(ASK,DIGITS),Slippage,CLR_NONE))

                        {

                           Print("Close error ",GetLastError());

                        }

                        else 

                        {

                           SS=true;

                           txt=StringConcatenate(txt,"close ",Ticket," ",OrdSym," S ",DoubleToString(LotsClose,2)," (",DoubleToString(OL,2),") ",NO," Level=",IntegerToString(LevelClose[NO]),"\n");

                        }

                     }

                  }

               }

            }

         }

      }

   }

   if(IsTesting() && n==0)

   {

      double Lot=CheckVolumeValue(1.0);

      if (CheckMoneyForTrade(Symbol(),Lot, 1))

         if (OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),0,0,0,NULL,0,0)==-1) Print("Error ",GetLastError());

      if (CheckMoneyForTrade(Symbol(),Lot,-1))

         if (OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),0,0,0,NULL,0,0)==-1) Print("Error ",GetLastError());

   }

   if (ShowOrder)

   {

      int X=0,Y=20;

      for(i=0; i<MathMax(n,N); i++)

      {

         X=200;

         for(int j=0; j<7; j++) 

         {

            if (i>=n)

            {

               ObjectDelete(0,StringConcatenate("cm PCP srt",i," ",j));

            }

            else

            {

               int y=100;

               color colort=clrWhite;

               switch(j) 

               { 

                  case 0: y=100;break; 

                  case 1: y=80;break; 

                  case 2: y=50; if (StringFind(Orders[i][2],"nl")!=-1) colort=clrLime; break; 

                  case 3: y=100; if (Orders[i][8]!="") colort=ColorN[StrToInteger(Orders[i][8])]; break; 

                  case 4: y=50;break; 

                  case 5: y=100; if (StringFind(Orders[i][5],"-")==-1)colort=clrLime; break;

                  case 6: y=100; if (StringFind(Orders[i][6],"-")==-1)colort=clrLime; break; 

                  case 7: y=120;break; 

                  case 8: y=25;break; 

                  case 9: y=25;break; 

               } 

               EditCreate(0,StringConcatenate("cm PCP srt",i," ",j),0,X,Y,y,15,Orders[i][j],"Arial",10,ALIGN_CENTER,true,CORNER_LEFT_UPPER,

               clrBlack,colort,clrGray,false,false,true,0);

               X+=y-1;

            }

         }

         Y+=14;

      }

      N=n;

      Comment(txt);

   }

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

   //|                                                                  |

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

   

   if (ScreenShot && SS) 

   {

      #ifdef __MQL4__

      int TekHour = Hour();

      int Minute  = Minute();

      int Seconds = Seconds();

      

      #endif

   

      #ifdef __MQL5__

      MqlDateTime tm;

      TimeCurrent(tm);

      int TekHour = tm.hour;

      int Minute  = tm.min;

      int Seconds = tm.sec;

      #endif

      string ScreenShotName=StringConcatenate("cm PCP","//",TimeToString(TimeCurrent(),TIME_DATE)," ");

      ScreenShotName=StringConcatenate(ScreenShotName,TekHour<10?"0":"",IntegerToString(TekHour),"-",Minute<10?"0":"",IntegerToString(Minute),"-",Seconds<10?"0":"",IntegerToString(Seconds),".gif");

      int WIDTH=1500;

      int HEIGHT=500;

      ChartScreenShot(0,ScreenShotName,WIDTH,HEIGHT,ALIGN_RIGHT);

   }

}

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

//|                                                                  |

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

int LastPositionTicket(string aComment)

{

   int tPos1=StringFind(aComment,"from");

   if(tPos1>=0)

   {

      int tPos2=StringFind(aComment,"#");

      if(tPos2>tPos1)

      {

         return(StrToInteger(StringSubstr(aComment,tPos2+1,StringLen(aComment)-tPos2-1)));

      }

   }

   return(0);

}

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

//|                                                                  |

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

double CheckVolumeValue(double volume, string Sim=NULL)

{

   double min_volume=SymbolInfoDouble(Sim,SYMBOL_VOLUME_MIN);

   if(volume<min_volume) return(min_volume);

   double max_volume=SymbolInfoDouble(Sim,SYMBOL_VOLUME_MAX);

   if(volume>max_volume) return(max_volume);

   double volume_step=SymbolInfoDouble(Sim,SYMBOL_VOLUME_STEP);

   int ratio=(int)MathRound(volume/volume_step);

   if(MathAbs(ratio*volume_step-volume)>0.0000001) return(ratio*volume_step);

   return(volume);

}

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

//|                                                                  |

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

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=10,             // @07<5@ H@8DB0 

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

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

                const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // 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 

                const string           podskazka="")                

  { 

   if(ObjectFind(chart_ID,name)==0)

   {

      ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);

      ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 

      ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr); 

   }

   else

   {

      if(!ObjectCreate(chart_ID,name,OBJ_EDIT,sub_window,0,0)) return(false); 

      ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,(int)(x*scale)); 

      ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,(int)(y*scale)); 

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

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

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

      ObjectSetString(chart_ID,name,OBJPROP_TOOLTIP,podskazka);

   }

   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 int               x=0,                      // :>>@48=0B0 ?> >A8 X 

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

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

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

                  const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // C3>; 3@0D8:0 4;O ?@82O7: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=clrBlack,             // F25B B5:AB0 

                  const color             back_clr=C'236,233,216',  // F25B D>=0 

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

                  const bool              state=false,              // =060B0/>B60B0 

                  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 

                const string           podskazka="")                // 

  { 



   if(!ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0)) return(false); 

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,(int)(x*scale)); 

   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,(int)(y*scale)); 

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

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

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

   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_STATE,state); 

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

      ObjectSetString(chart_ID,name,OBJPROP_TOOLTIP,podskazka);

   return(true); 

  } 

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

bool CheckMoneyForTrade(string symb,double lots, int OT)

  {

   ENUM_ORDER_TYPE type;

   if (OT==1) type=ORDER_TYPE_BUY;

   else type=ORDER_TYPE_SELL;

   double free_margin=AccountFreeMarginCheck(symb,type,lots);

   if(free_margin<0)

     {

      string oper=(type==OP_BUY)? "Buy":"Sell";

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