Display orders

Author: KasQad
Orders Execution
It Closes Orders by itself Checks for the total of open orders
0 Views
0 Downloads
0 Favorites
Display orders
ÿþ//+------------------------------------------------------------------+

//|                                               display orders.mq4 |

//|                                                           KasQad |

//|                                                   KasQad@mail.ru |

//|                                            https://vk.com/kasqad |

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

#property copyright "KasQad"

#property link      "https://vk.com/kasqad"

#property version   "1.00"

#property description "-:A?5@B 4;O >B>1@>65=8O >B:@KBKE A45;>: =0 3@0D8:5, A 2>7<>6=>ABLN 8E 70:@KB8O\n"

#property description "KasQad@mail.ru"

#property description "\n>A;54=85 87<5=5=8O: 06.10.2017"



#property strict



extern bool   timebarclose =  true;          //K2>48BL ;8 2@5<O 4> 70:@KB8O 10@0

extern bool   val          =  true;          //>:07K20BL 7=0: 20;NBK    

extern int    time         =  300;           //=B5@20; 2K7>20 B09<5@0 2 <A

extern int    giSlippage   =  0;             //@>A:0;L7K20=85 (0 - 02B>) 

extern string font_name    =  "Tahoma";      //(@8DB

extern int    font_s1      =  10;            // 07<5@ H@8DB0 703>;>2:0

extern int    font_s2      =  10;            // 07<5@ H@8DB0 >1I53> 10;0=A0

extern int    font_s3      =  10;            // 07<5@ H@8DB0 A?8A:0 ?>78F89

extern int    labs_space   =  12;            //=B5@20; Y <564C <5B:0<8

extern int    labs_corner  =  1;             //#3>; ?@82O7:8 B5:AB>2KE <5B>:

extern int    labs_xdist   =  5;             // 0AAB>O=85 X >B 3@0=8FK >:=0

extern int    labs_ydist   =  12;            // 0AAB>O=85 Y >B 3@0=8FK >:=0

extern int    labs_max     =  25;            //0:A8<0;L=>5 :>;8G5AB2> <5B>:

extern color  color_profit =  DarkBlue;      //&25B ?@>D8B=KE ?>78F89

extern color  color_loss   =  FireBrick;     //&25B C1KB>G=KE ?>78F89



int labn=4;                      //A :0:>9 AB@>:8 =0G8NBAO <5B:8 >@45@>2, >BAG5B 2545BAO >B 0

string buttonID="Button";        //8<O :=>?:8

string labelID="lab";            //8<O <5B:8

int butname[50];                 //<0AA82 A 8<5=0<8 :=>?>:

string valuta;                   //?5@5<5==0O 4;O A8<2>;0 20;NBK

double Price[2];                 //<0AA82 4;O GetMarketInfo()







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

//| Expert initialization function                                   |

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

void init()

  {

   EventSetMillisecondTimer(time);   //8=B5@20; 2K7>20 B09<5@0//EventSetTimer(1);

   delall();   //C40;5=85 2A5E <5B>: 8 :=>?>: A 3@0D8:0

  }

  

  

  

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

//| Expert deinitialization function                                 |

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

void deinit()

  {

   delall();   //C40;5=85 2A5E <5B>: 8 :=>?>: A 3@0D8:0

  }

  

  

  

//--- # !% "     $ -----------------------------------------------------

void delall()

  {

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

     {

      ObjectDelete(labelID+IntegerToString(i,0));        //C40;5=85 <5B>: A 8=D>@<0F859 >1 >@45@0E

      ObjectDelete(0,buttonID+IntegerToString(i,0));   //C40;5=85 :=>?>: 70:@KB8O >@45@>2

     }



   ObjectDelete(0,buttonID+"99999");  //C40;5=85 :=>?:8 C40;5=8O 2A5E >@45@>2



                                      //4>102;5=85 A8<2>;0 20;NBK 45?>78B0

   if(val)

     {

      valuta=AccountCurrency();

      if(valuta=="RUR") valuta=" @C1";

      if(valuta=="USD") valuta="$";

        } else {valuta="";

     }

  }

//--- END -----------------------------------------------------------------------------------------







//--- #' +%     /  +"/ ------------------------------------------------------

bool GetMarketInfo()

  {

   RefreshRates();

   Price[0]=MarketInfo(OrderSymbol(),MODE_ASK);

   Price[1]=MarketInfo(OrderSymbol(),MODE_BID);

   double dPoint=MarketInfo(OrderSymbol(),MODE_POINT);

   if(dPoint==0) return(false);

   giSlippage=int((Price[0]-Price[1])/dPoint);

   return(Price[0]>0.0 && Price[1]>0.0);

  }

//--- END -----------------------------------------------------------------------------------------







//---  " "/  # -----------------------------------------------------------------

void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)

  {

   if(id==CHARTEVENT_OBJECT_CLICK) //?@>25@8< A>1KB85 =0 =060B85 :=>?:8 <KH:8 

     {

      for(int y=0; y<labs_max; y++) //2 F8:;5 ?5@518@05< 8<5=0 :=>?>:, 5A;8 =060B0 =C6=0O B> C40;O5< A>>B25BAB2CNI89 >@45@      

         if(sparam==buttonID+IntegerToString(y,0)) //5A;8 >1J5:B 8<55B 8<O buttonID+y, B>..

           {

            Print(OrderSelect(butname[y],SELECT_BY_POS,MODE_TRADES));                     //2K18@05< =C6=K9 >@45@

            GetMarketInfo();                                                              //?>;CG05< 8=D>@<0F8N ?> >@45@C

            Print(OrderClose(OrderTicket(),OrderLots(),Price[1-OrderType()],10));         //C40;O5< >@45@

           }



      if(sparam==buttonID+"99999") //5A;8 =060B0 :=>?:0 C40;5=8O 2A5E >@45@>2 =0 3@0D8:5, B>..

         for(int i=OrdersTotal()-1; i>=0; i--) //?5@518@05< 2A5 >@45@0, 8 C40;O5< >B:@KBK5 =0 3@0D8:5

            if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && GetMarketInfo() && OrderSymbol()==Symbol() && 

               !OrderClose(OrderTicket(),OrderLots(),Price[1-OrderType()],giSlippage)) Print("error close all orders on chart");

     }

  }

//--- END -----------------------------------------------------------------------------------------







//--- $#&/  / '!    /+ | 10000000.00->10 000 000.00 ----------------------------

//des(G8A;>,:>;8G5AB2> 7=0:>2 4;O @0745;5=8O,"@0745;8B5;L")

string des(double number,int razr,string razd)

  {

   string w,s,n;

   double f=MathAbs(MathFloor(number));

   string sNumber=DoubleToString(number,2);                       //>B1@0AK205< 4@>1=CN G0ABL 8 >B@8F0B5;L=K9 7=0: 5A;8 >= 5ABL

   if(StringLen(DoubleToStr(f,0))<=razr) return(sNumber);         //5A;8 :>;8G5AB2> 7=0:>2 2 7040==>< G8A;5 <5=LH5 8;8 @02=> @07@O4C B> 4>A@>G=> 7025@H05< DC=:F8N, 8=0G5..

//--- =0E>48< 4@>1=CN G0ABL >B 8AE>4=>3> G8A;0, B8? double ----------------------------------------

   int d=StringFind(sNumber,".",0);                                              //d ?@8A208205< =><5@ A8<2>;0-@0745;8B5;O F5;>9 8 4@>1=>9 G0AB8

   if(d!=-1) n="."+StringSubstr(sNumber,d+1,StringLen(sNumber)-d);               //-1 2 A;CG05 5A;8 =5B A8<2>;0 @0745;8B5;O 8 2KG8A;O5< 4@>1=CN G0ABL G8A;0

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

   while(StringLen(DoubleToStr(f,0))>razr) //?>:0 :>;8G5AB2> 7=0:>2 2 7040==>< G8A;5 1>;LH5 @07@O40 2K?>;=O5< F8:;

     {

      s=StringSubstr(DoubleToStr(f,0),StringLen(DoubleToStr(f,0))-razr,razr);    //:>?8@C5< ?>A;54=85 z F8D@ C G8A;0

      w=razd+s+w;                                                                //D>@<8@C5< =>2>5 G8A;> A @07@O40<8

      f=MathFloor(f/MathPow(10,razr));                                           //45;8< f =0 AB5?5=L :>;8G5AB20 7=0:>2 2 @07@O45

     }

   if(number<0) w="-"+DoubleToString(f,0)+w+n; else w=DoubleToString(f,0)+w+n;   //2>72@0I05< 8AE>4=><C G8A;C <8=CA 5A;8 >= 1K; ?@8 2K7>25 DC=:F88, 8 4>102;O5< 4@>1=CN G0ABL

   return(w);

  }

//--- END -----------------------------------------------------------------------------------------







//--- !  " ------------------------------------------------------------------------

void newlab(int i,string s,color col,int z)

  {

   int sm=20;                                   //>BABC? >B :@0O, GB> 1K ?><5AB8;8AL :=>?:8 70:@KB8O

   if(i==0) sm=0;                              //5A;8 AB@>:0 A 10;0=A>< B> =5 A<5I05< 5Q. 4;O :@0A>BK

   string labname=labelID+IntegerToString(i,0);

   ObjectCreate(labname,OBJ_LABEL,0,0,0);

   ObjectSet(labname,OBJPROP_CORNER,labs_corner);

   ObjectSet(labname,OBJPROP_XDISTANCE,labs_xdist+sm);

   ObjectSet(labname,OBJPROP_YDISTANCE,i*labs_space+labs_ydist);

   ObjectSet(labname,OBJPROP_HIDDEN,1);         //70?@5B =0 ?>:07 2 A?8A:5 >1J5:B>2, 1-70?@5I5=>

   ObjectSet(labname,OBJPROP_SELECTABLE,0);     //2>7<>6=>ABL 2K45;8BL <KHLN, 0-=5B

   ObjectSetText(labname,s,z,font_name,col);

  }

//--- END -----------------------------------------------------------------------------------------







//--- !   -----------------------------------------------------------------------

void newbut(int id,int x,int y)

  {

//--- 2K@02=820=85 <5B>: 2 7028A8<>AB8 >B ?>;>65=8O =0 M:@0=5 ------------------------

   long xdis=0, ydis=0;

   double ys=MathFloor(font_s3*0.35);                                                                 //=51>;LH0O :>@@5:B8@>2:0

   if(labs_corner==1) {xdis=labs_xdist+15;  ydis=labs_space*labn;}                                   //ydis=labs_space*labn - A<5I5=85 4> <5B>: >@45@>2

   if(labs_corner==2) {xdis=labs_xdist;     ydis=labs_space*labn; ys=MathFloor(font_s3*1.4);}

   if(labs_corner==3) {xdis=labs_xdist+15;  ydis=labs_space*labn; ys=MathFloor(font_s3*1.35);}

   if(labs_corner==4) {xdis=labs_xdist;     ydis=labs_space*labn; ys=MathFloor(font_s3*0.3);}

   long q=long(ydis+y*labs_space+labs_ydist+ys);

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



   string butID=buttonID+IntegerToString(id,0);



   ObjectCreate(0,butID,OBJ_BUTTON,0,0,0);                     //A>740BL >1J5:B :=>?:0

   ObjectSetInteger(0,butID,OBJPROP_COLOR,White);              //F25B B5:AB0

   ObjectSetInteger(0,butID,OBJPROP_BGCOLOR,Gray);             //F25B D>=0

   ObjectSetInteger(0,butID,OBJPROP_XDISTANCE,xdis);           //?>;>65=85 ?> >A8 x

   ObjectSetInteger(0,butID,OBJPROP_YDISTANCE,q);              //?>;>65=85 ?> >A8 y

   ObjectSetInteger(0,butID,OBJPROP_XSIZE,font_s3+3);          //H8@8=0

   ObjectSetInteger(0,butID,OBJPROP_YSIZE,font_s3+3);          //2KA>B0

   ObjectSetString(0,butID,OBJPROP_FONT,"Arial");              //H@8DB

   ObjectSetString(0,butID,OBJPROP_TEXT,"-");                  //B5:AB :=>?:8

   ObjectSetInteger(0,butID,OBJPROP_FONTSIZE,font_s3);         //@07<5@ H@8DB0

   ObjectSetInteger(0,butID,OBJPROP_CORNER,labs_corner);       //?>;>65=85 2 C3;C 3@0D8:0

   ObjectSetInteger(0,butID,OBJPROP_HIDDEN,1);                 //70?@5B >B>1@065=8O 2 A?8A:5 >1J5:B>2, 1-70?@5I5=>

   ObjectSetInteger(0,butID,OBJPROP_SELECTABLE,0);             //2>7<>6=>ABL 2K45;8BL <KHLN, 0-=5B

                                                               //ObjectSetInteger(0,butID,OBJPROP_BORDER_TYPE,BORDER_FLAT);  

//ObjectSetInteger(0,butID,OBJPROP_BORDER_COLOR,Gray);        //F25B 3@0=8FK :=>?:8

  }

//--- END -----------------------------------------------------------------------------------------







//--- $#&/  )" #+ &", !   ,(  ,( 0 ------------------------------

color setcol(double p,color plus,color minus) { if(p>0) return(plus); else return(minus); }

//--- END -----------------------------------------------------------------------------------------



//--- $#&/  /" ",+ '!  +,  "   " #"  !" # --------------- 

string znum(double n,int r){if(n>0) return("+"+DoubleToStr(n,r)); else return(DoubleToStr(n,r));}

//--- END -----------------------------------------------------------------------------------------



//--- $#&/  /" !"   + ! " #!  "!" ------------------------------------ 

string zstr(string s){if(StringFind(s,"-",0)==-1) return("+"+s); else return(s);}

//--- END -----------------------------------------------------------------------------------------  







//--- + !   $ ---------------------------------------------------------------------

void balace()

  {

   if(OrdersTotal()>0)

     {

      double s1=AccountProfit();                         //4>E>4 >B >B:@KBKE >@45@>2

      double s2=s1/AccountBalance()*100;                 //4>E>E 2 ?@>F5=B0E >B 45?>78B0

      double s3=AccountBalance()+AccountProfit();        //A@54AB20 5A;8 >@45@0 1C4CB 70:@KBK 



      newlab(0,"",Green,font_s1);                        //A>7405BAO =>20O <5B:0 4;O <5B:8 A >1I8< 10;0=A><



      string s0=des(s3,3," ")+valuta+" | "+znum(s2,2)+"% | "+zstr(des(s1,3," "))+valuta;   //D>@<8@C5< <5B:C ?5@54 2K2>4><

      ObjectSetText("lab0",s0,font_s1,font_name,setcol(s1,Green,Red));     //2K2>48BAO <5B:0, F25B 2 7028A8<>AB8 >B ?@81K;L=>AB8 8;8 C1KB>G=>AB8  

     }

  }

//--- END -----------------------------------------------------------------------------------------







//--- !'" +%  + "   #/   $ ------------------------------------

void indicate_orders()

  {

   int i,l=0;

   string res;

   double order_profit=0;        //AC<<0 ?@81K;8 2A5E >@45@>2 =0 3@0D8:5

   double order_lot = 0.0;       //AC<<0 ;>B>2 2A5E >@45@>2 =0 3@0D8:5

   double order_pip = 0;         //AC<<0 ?C=:B>2 2A5E >@45@>2 =0 3@0D8:5

   double order_list[30][4];     //<0AA82 345 E@0=OBAO 40==K5 >1 >B:@KBKE A45;:0E



                                 //?>4AG5B 2A5E >B:@KBKE ?>78F89 =0 40==K9 <><5=B ?> B5:CI5< 3@0D8:5

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

     {

      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;                             //2K18@05< =C6=K9 >@45@

      if(OrderSymbol()!=Symbol()) {continue;}                                                //5A;8 >@45@ =5 A MB>3> 3@0D8:0, B> ?@>?CA:05< 53> i++



      order_list[i][0]=OrderTicket();                                                        //=><5@ >@45@0

      order_list[i][1]=OrderProfit()+OrderCommission();                                      //?@>D8B 2 20;NB5 45?>78B0 70 2KG5B>< :><8AA88 

                                                                                             //?>4AG5B @07<5@0 ;>B0 B>;L:> C >B:@KBKE >@45@>2, >B;>65==8:8 =5 AG8B0NBAO, 8=0G5 0

      if(OrderType()==OP_BUY || OrderType()==OP_SELL) order_list[i][2]=NormalizeDouble(OrderLots(),2);

      else order_list[i][2]=0;

      order_list[i][3]=OrderProfit()/OrderLots()/MarketInfo(OrderSymbol(),MODE_TICKVALUE);   //?@>D8B 2 ?C=:B0E 70 2KG5B>< :><8AA88



      order_profit+=order_list[i][1];           //?>AG8BK205< ?@>D8B ;>B>2 2A5E >@45@>2 =0 3@0D8:5

      order_lot += order_list[i][2];            //?>4AG8BK205< >1J5< ;>B>2 2A5E >@45@>2 =0 3@0D8:5

      order_pip += order_list[i][3];            //?>AG8BK205< :>;8G5AB2> ?C=:B>2 ;>B>2 2A5E >@45@>2 =0 3@0D8:5



      if((OrderType()==OP_BUY || OrderType()==OP_SELL) && l<labs_max) //5A;8 >@45@0 =5 >B;>65==K5, B>..

        {

         //2K2>4 <5B>: A 40==K<8 >1 >@45@0E

         int k=labn+l;  //A<5I5=85 <5B>: GB> 1K >@45@0 1K;8 A=87C 10;0=A0 8 AC<<K



         if(OrderType()==OP_BUY) res="BUY ";    //5A;8 ;>B =0 ?>:C?:C, B> 4>102;O5< 2=0G0;5 AB@>:8 BUY

         if(OrderType()==OP_SELL) res="SELL ";  //5A;8 ;>B =0 ?@>406C, B> 4>102;O5< 2=0G0;5 AB@>:8 SELL



         res=res+DoubleToStr(order_list[i][2],2)+" | "+znum(round(order_list[i][3]),0)+"? | "+zstr(des(order_list[i][1],3," "))+valuta;    //D>@<8@C5< B5:AB <5B:8

         newlab(k,res,setcol(order_list[i][1],color_profit,color_loss),font_s3); //A>7405< =>2CN <5B:C



         butname[l]=i;                                        //2 <0AA825 :=>?>: A>45@68BAO =><5@ >@45@0, ?> :>B>@><C >= ?>B>< C40;O5BAO

         newbut(l,20,k-labn);                                 //A>7405< :=>?:C C40;5=8O >@45@0, A<5I5=85 ?> >A8 Y A CG5B>< H@8DB0 8 @0AAB>O=8O <564C <5B:0<8



         l++;

        }



      //5A;8 =0 3@0D8:5 5ABL >B:@KBK5 >@45@0 B>, 2K2>48< AC<<0@=CN <5B:C 8 :=>?:C 70:@KB8O 2A5E >@45@>2

      if((l>0) && (OrderSymbol()==Symbol()))

        {

         res="ALL | "+DoubleToString(order_lot,2)+" | "+zstr(des(order_profit,3," "))+valuta;   //D>@<8@C5< AC<<0@=CN 8=D>@<0F8N >1 >B:@KBKE >@45@0E =0 3@0D8:5

         newlab(2,res,setcol(order_profit,color_profit,color_loss),font_s2);                    //A>7405< <5B:C A AC<<0@=>9 8=D>@<0F859

         newlab(3,"              ",setcol(order_profit,color_profit,color_loss),font_s2);       //A>7405< <5B:C @0745;8B5;L



         newbut(99999,20,-2);    //2K2>4 :=>?:8 C40;5=8O 2A5E >@45@>2 =0 3@0D8:5 A C=8:0;L=K< 8<5=5<

        }

     }



  }

//--- END -----------------------------------------------------------------------------------------







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

//| Timer function                                                   |

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

void OnTimer()

  {

   delall();            //C40;5=85 2A5E <5B>: 8 :=>?>: A 3@0D8:0

   indicate_orders();   //>1=>K2;5=85 <5B>: A >@45@0<8

   balace();            //>1=>2;5=85 10;0=A0 =0 3@0D8:0E   



   if(timebarclose) Comment(TimeToString(Time[0]+Period()*60-TimeCurrent(),TIME_SECONDS));   //2@5<O 4> 70:@KB8O A25G8

  }



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

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