if(TimeCurrent()==Time[0])
That assumes that a tick arrives in the first second of a new bar. There can be minutes between ticks during the Asian session
For a new bar test, Bars is unreliable (a refresh/reconnect can change number of bars on chart), volume is unreliable (miss ticks), Price is unreliable (duplicate prices and The == operand. - MQL4 programming forum.) Always use time.
MT4: New candle - MQL4 programming forum #3 (2014)
MT5: Accessing variables - MQL4 programming forum #3 (2022)
I disagree with making a new bar function, because it can only be called once per tick (second call returns false). A variable can be tested multiple times.
Running EA once at the start of each bar - MQL4 programming forum (2011)
That assumes that a tick arrives in the first second of a new bar. There can be minutes between ticks during the Asian session
For a new bar test, Bars is unreliable (a refresh/reconnect can change number of bars on chart), volume is unreliable (miss ticks), Price is unreliable (duplicate prices and The == operand. - MQL4 programming forum.) Always use time.
MT4: New candle - MQL4 programming forum #3 (2014)
MT5: Accessing variables - MQL4 programming forum #3 (2022)
I disagree with making a new bar function, because it can only be called once per tick (second call returns false). A variable can be tested multiple times.
Running EA once at the start of each bar - MQL4 programming forum (2011)
I still encounter the same problem, my objects still repaint or vanish. I don't want them to repaint or vanish at all, I want them to remain in the same place.
void OnTick() { static datetime CurTime; datetime PreTime=CurTime; CurTime=Time[0]; bool NewBar=CurTime!=PreTime; if(NewBar) { int s = iLowest(Symbol() ,0 , MODE_LOW , 75 ,1+40); ObjectDelete(0 ,"s"); ObjectCreate(0 ,"s" ,OBJ_RECTANGLE ,0 ,Time[0] ,Close[s] ,0 ,Low[s]); ObjectMove(0 ,"s" ,0 ,Time[0] ,Close[s]); ObjectSetInteger(0 ,"s" ,OBJPROP_COLOR ,Green); int s2 = iLowest(Symbol() ,0 ,MODE_LOW ,150 ,2+20); ObjectDelete(0 ,"s2"); ObjectCreate(0 ,"s2" ,OBJ_RECTANGLE ,0 ,Time[0] ,Close[s2] ,0 ,Low[s2]); ObjectMove(0,"s2",0 ,Time[0] ,Close[s2]); ObjectSetInteger(0,"s2" ,OBJPROP_COLOR ,Green); } }
You are deleting and recreating the objects every time. Don't!
Create them only once, and then update the properties (position on the chart), only when they need to be updated.
Here is an example. It was compiled but not tested ...
// Default de-initialisation event handler void OnDeinit( const int reason ) { ObjectDelete( 0 , "s1" ); ObjectDelete( 0 , "s2" ); }; // Default tick event handler void OnTick() { // Check for new bar (compatible with both MQL4 and MQL5). static datetime dtBarCurrent = WRONG_VALUE; datetime dtBarPrevious = dtBarCurrent; dtBarCurrent = iTime( _Symbol, _Period, 0 ); bool bNewBarEvent = ( dtBarCurrent != dtBarPrevious ); // React to a new bar event and handle it. if( bNewBarEvent ) { int s1 = iLowest( _Symbol, 0, MODE_LOW, 75, 1 + 40 ), s2 = iLowest( _Symbol, 0, MODE_LOW, 150, 2 + 20 ); if( dtBarPrevious == WRONG_VALUE ) { ObjectCreate( 0 ,"s1", OBJ_RECTANGLE, 0, Time[0], Close[s1], 0, Low[s1] ); ObjectCreate( 0 ,"s2", OBJ_RECTANGLE, 0, Time[0], Close[s2], 0, Low[s2] ); ObjectSetInteger( 0 ,"s1", OBJPROP_COLOR, clrGreen ); ObjectSetInteger( 0, "s2", OBJPROP_COLOR, clrGreen ); } else { ObjectMove( 0, "s1", 0, Time[0], Close[s1] ); ObjectMove( 0, "s1", 1, 0, Low[s1] ); ObjectMove( 0, "s2", 0, Time[0], Close[s2] ); ObjectMove( 0, "s2", 1, 0, Low[s2] ); }; }; };
It is not repainting. However, I wish to call your attention to a problem in your own logic about how rectangles are "painted". They have pseudo-transparency and mix colours.
When the rectangles overlap, they will cancel each other out. When both the "s1" and "s2" identify the same lowest point, they will overlap completely and become invisible.
So, use two different colours for each rectangle, for example clrGreen and clrBlue, so that when they overlap you have a 3rd colour.
It is not repainting. However, I wish to call your attention to a problem in your own logic about how rectangles are "painted". They have pseudo-transparency and mix colours.
When the rectangles overlap, they will cancel each other out. When both the "s1" and "s2" identify the same lowest point, they will overlap completely and become invisible.
So, use two different colours for each rectangle, for example clrGreen and clrBlue, so that when they overlap you have a 3rd colour.
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
When I place my EA , my objects repaint or vanish and sometimes appear again after sometime.
What seems to be the problem?