Download MetaTrader 5
To add comments, please log in or register
Develop trading robots to order. Make profit with Freelance service!
Mimi
499
Mimi 2015.10.28 03:19 

I have the following loop code:

for ( i = 0; i <= 59; i++)
{ 

 M = H + i;
  
     if(M == FS)
     { 
       Ready = StringConcatenate( IntegerToString(CH),":", IntegerToString(i));
       TL = StringToTime(Ready) ;
      //---------- Drawing time line--------------//
 
      Obj_Name="Tk";              // Name of the object
      ObjectCreate(Obj_Name,OBJ_VLINE,0,TL,0);// Create object..
      ObjectSet(Obj_Name,OBJPROP_COLOR, DarkOrange);       // ..and its color,..
      ObjectSet(Obj_Name,OBJPROP_STYLE, STYLE_DOT);       // ..and style..
     
     }   
     
 }     
    

When I run this program. For loop is working for first instance. For example when i = 6, M== FS condition satisfies, it draws the time line & then its gone out of the loop & again starting the loop from i = 0. 

I don't want that, I want it to start the loop now from i+1 after the first instance i.e in above example. Now loop should start after 6, i.e from 7.

How to do that?

Any help will be appreciated.

Thank you. 

qjol
3243
qjol 2015.10.28 04:45  
string Obj_Name="Tk" + i;              // Name of the object
Keith Watford
Moderator
7873
Keith Watford 2015.10.28 04:52  

I'm not sure what you are trying to achieve

if you want to increment the starting point each time a for loop is called

   static int counter=0;
   for(i=counter; i<=59; i++)
     {
      //Your Code
     }
   counter++;
   if(counter>59)
      counter=0;

 that will do it, the last 2 lines set counter back to 0 when the maximum is reached

 In your code, you create an object called "Tk"

Once an object has been created, you cannot create another object with the same name. So if you want multiple lines, give a new name each time. If you just want a single line in a new position, use ObjectMove 

Mimi
499
Mimi 2015.10.28 09:03  
qjol:

GumRai:

I'm not sure what you are trying to achieve

if you want to increment the starting point each time a for loop is called

 that will do it, the last 2 lines set counter back to 0 when the maximum is reached

 In your code, you create an object called "Tk"

Once an object has been created, you cannot create another object with the same name. So if you want multiple lines, give a new name each time. If you just want a single line in a new position, use ObjectMove 

Thank you both for pointing out the problem. 

Thank you qjol , your code worked!

I updated the code.

 Obj_Name= IntegerToString(i) + "Tk" ; 

But when i tried to delete the those object at deinit() with the following code. Objects are not getting deleted.

for(int k=ObjectsTotal()-1;k>=0;k--)
   if(StringFind(ObjectName(k),"_Tk",0)>0)
      ObjectDelete(ObjectName(k));

How to delete those object when i remove the indicator?

Thank you. 

qjol
3243
qjol 2015.10.28 09:15  
if(StringFind(ObjectName(k),"Tk",0)>0)
Mimi
499
Mimi 2015.10.28 10:35  
qjol:

Hi

Thank you for such a quick reply.

Previously I added "_" before as Object was naming like 4Tk etc etc. 

I understood my mistake.

Now its working perfectly.

/
To add comments, please log in or register