Download MetaTrader 5

I need an help with this monitor

To add comments, please log in or register
Alberto Tortella
586
Alberto Tortella  

Hi all, could you indicate the mistakes in this indicator monitor?

I'm trying to write this indicator to monitor the global variables in my expert, but I don't find the errors...

Thank you!


#property indicator_chart_window

extern int mCorn = 0, mTextSize = 10;
extern color mTextCol = White ;
extern int shift = 20 ;

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

int start()
 {

 }

//-----------------------------------------------+
void CreateLabels()
 { 

int total = OrdersTotal();

 for(int cnt=0;cnt<=total;cnt++)
     {
     OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) ; 
     
     int ticket = OrderTicket() ; 
     int magic  = OrderMagicNumber() ;         
                    
       int a = 1 + cnt ;
       int z = 40 + cnt * shift ;      
       ObjectCreate("a", OBJ_LABEL, 0, 0, 0, 0);
       ObjectSet("a", OBJPROP_CORNER, mCorn);
       ObjectSet("a", OBJPROP_XDISTANCE, 10);
       ObjectSet("a", OBJPROP_YDISTANCE, z );        
       ObjectSetInteger("a",ticket,mTextSize, "Verdana", mTextCol );
       
       int b = 2 + cnt ;      
       ObjectCreate("b", OBJ_LABEL, 0, 0, 0, 0);
       ObjectSet("b", OBJPROP_CORNER, mCorn);
       ObjectSet("b", OBJPROP_XDISTANCE, 30);
       ObjectSet("b", OBJPROP_YDISTANCE, z );        
       ObjectSetText("b",OrderSymbol(), mTextSize, "Verdana", mTextCol );
       
       int c = 3 + cnt ;       
       ObjectCreate(c, OBJ_LABEL, 0, 0, 0, 0);
       ObjectSet(c, OBJPROP_CORNER, mCorn);
       ObjectSet(c, OBJPROP_XDISTANCE, 50);
       ObjectSet(c, OBJPROP_YDISTANCE, z );        
       ObjectSetInteger(c,magic,"Verdana", mTextCol );
       
       int d = 4 + cnt ;      
       ObjectCreate(d, OBJ_LABEL, 0, 0, 0, 0);
       ObjectSet(d, OBJPROP_CORNER, mCorn);
       ObjectSet(d, OBJPROP_XDISTANCE, 70);
       ObjectSet(d, OBJPROP_YDISTANCE, 40 );        
       ObjectSetInteger(d,Bars,mTextSize, "Verdana", mTextCol );
       
       int e = 5 + cnt ;      
       ObjectCreate(e, OBJ_LABEL, 0, 0, 0, 0);
       ObjectSet(e, OBJPROP_CORNER, mCorn);
       ObjectSet(e, OBJPROP_XDISTANCE, 90);
       ObjectSet(e, OBJPROP_YDISTANCE, z ); 
       
       if(OrderType()==OP_BUY && OrderMagicNumber()==1)
         {       
         ObjectSetText(e,GlobalVariableGet(StringConcatenate("Barre_Long_1_",OrderTicket(),1)), mTextSize, "Verdana", mTextCol );
         }  
       if(OrderType()==OP_BUY && OrderMagicNumber()==2)
         {       
         ObjectSetText(e,GlobalVariableGet(StringConcatenate("Barre_Long_2_",OrderTicket(),2)), mTextSize, "Verdana", mTextCol );
         } 
       if(OrderType()==OP_SELL && OrderMagicNumber()==1)
         {       
         ObjectSetText(e,GlobalVariableGet(StringConcatenate("Barre_Short_1_",OrderTicket(),1)), mTextSize, "Verdana", mTextCol );
         } 
       if(OrderType()==OP_SELL && OrderMagicNumber()==2)
         {       
         ObjectSetText(e,GlobalVariableGet(StringConcatenate("Barre_Short_2_",OrderTicket(),2)), mTextSize, "Verdana", mTextCol );
         } 
             
       int f = 6 + cnt ;           
       ObjectCreate(f, OBJ_LABEL, 0, 0, 0, 0);
       ObjectSet(f, OBJPROP_CORNER, mCorn);
       ObjectSet(f, OBJPROP_XDISTANCE, 110);
       ObjectSet(f, OBJPROP_YDISTANCE, z ); 
       if(OrderType()==OP_BUY || OrderType()==OP_BUYSTOP) 
         {       
         ObjectSetDouble(f,GlobalVariableGet(StringConcatenate("Take_Profit_Long_1_",OrderTicket() )) , mTextSize, "Verdana", mTextCol  );
         }         
       if(OrderType()==OP_SELL || OrderType()==OP_SELLSTOP) 
         {       
         ObjectSetDouble(f,GlobalVariableGet(StringConcatenate("Take_Profit_Short_1_",OrderTicket() )) , mTextSize, "Verdana", mTextCol );
         }     

       int g = 7 + cnt ;      
       ObjectCreate(g, OBJ_LABEL, 0, 0, 0, 0);
       ObjectSet(g, OBJPROP_CORNER, mCorn);
       ObjectSet(g, OBJPROP_XDISTANCE, 130);
       ObjectSet(g, OBJPROP_YDISTANCE, z );        
       if(OrderType()==OP_BUY || OrderType()==OP_BUYSTOP) 
         {       
         ObjectSetText(g,GlobalVariableGet(StringConcatenate("Take_Profit_Long_2_",OrderTicket() )) , mTextSize, "Verdana", mTextCol  );
         }         
       if(OrderType()==OP_SELL || OrderType()==OP_SELLSTOP) 
         {       
         ObjectSetText(g,GlobalVariableGet(StringConcatenate("Take_Profit_Short_2_",OrderTicket() )) , mTextSize, "Verdana", mTextCol );
         }        
     
     }
 
 }
Biantoro Kunarto
12555
Biantoro Kunarto  

Your code didn't call any function :

int start()
 {

 }

You should write this code inside start() function :

int start()
 {
  CreateLabels();
 }
Alberto Tortella
586
Alberto Tortella  
Biantoro Kunarto:

Your code didn't call any function :

You should write this code inside start() function :


Thank you!

Biantoro Kunarto
12555
Biantoro Kunarto  
Alberto Tortella:

Thank you!

You're welcome 
whroeder1
17097
whroeder1  
Biantoro Kunarto: You should write this code inside start() function :
Start using the new Event Handling Functions.
          Event Handling Functions - Functions - Language Basics - MQL4 Reference
Alberto Tortella
586
Alberto Tortella  

Ok now my monitor works better.

I wrote the following code to delete the objects related to the closed orders, but it does not work well. Could you help me? Thank you!

void DeleteLabels()
 { 
 int obj_total=ObjectsTotal();
     
     for(int ww=obj_total-1;ww>(OrdersTotal()+1)*9;ww--)
     {
     string name=ObjectName(ww);
     ObjectDelete(name);
     }
 }

In the first rows I see the market ticket and it's ok.

Then I see the closed orders, but I don't want to see them.

Files:
whroeder1
17097
whroeder1  
int total = OrdersTotal();

 for(int cnt=0;cnt<=total;cnt++){
     OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) ;
                    
       int a = 1 + cnt ;
       ObjectCreate("a", OBJ_LABEL, 0, 0, 0, 0);
  1. If there are total orders, their positions are zero to total orders minus one. Your last select always fails but since you don't check everything after that is BOGUS. Check your return codes for errors and report them.
              What are Function return values ? How do I use them ? - MQL4 and MetaTrader 4 - MQL4 programming forum
              Common Errors in MQL4 Programs and How to Avoid Them - MQL4 Articles

  2. You are creating object using position as a name. As older orders get closed, position indexes change. You can't create new objects with the same old names. Don't use non-unique names (position,) use ticket.
To add comments, please log in or register