Whats wrong with this code for detecting new bar please

To add comments, please log in or register
Jimparker
16
Jimparker  
NewCandle = FALSE;
datetime StartBar = iTime("EURUSD",PERIOD_M5,0);
datetime NewBar = StartBar;
while(! NewCandle)
{
NewBar = iTime("EURUSD",PERIOD_M5,0);
if(NewBar != StartBar)
{
NewCandle = TRUE;
StartBar = NewBar;
}
Brian Rumbles
971
Brian Rumbles  

Im not sure about your specific code but I use something simple like:


Declare variable double Bar1;

Oninit() {Bar1= iClose(Symbol(),0,1);} // initialize Bar1 value to Previous bar from current bar


Ontick() {

if(iClose(Symbol(),0,1) != Bar1){  // It is a new bar


//run code


Bar1= iClose(Symbol(),0,1);} /give Bar1 the new value of the current bar at position 1 i.e the previous bar

}

William Roeder
20233
William Roeder  
  1. Don't double post! You already had this thread open.
              General rules and best pratices of the Forum. - General - MQL5 programming forum

  2. Please edit your (original) post and use the CODE button (Alt-S)! (For large amounts of code, attach it.)
              General rules and best pratices of the Forum. - General - MQL5 programming forum
              Messages Editor

  3. You are using all CPU doing nothing - it's your electric bill.

  4. Once you exit the loop, your Predefined Variables are wrong.

  5. Your code fails if M5 history needs to be updated. Unless the current chart is that specific pair/TF referenced, you must handle 4066/4073 errors before accessing candle/indicator values.
              Download history in MQL4 EA - Forex Calendar - MQL4 programming forum - Page 3 #26 № 4

    The function linked to, opens a hidden chart for the symbol/TF in question (if not already open,) thus updating history, and temporarily placing the symbol on Market Watch (if not already there,) so SymbolInfoDouble(symbol, SYMBOL_BID) or MarketInfo(symbol, MODE_BID) don't also return zero on the first call.

  6. Your code fails if there are broker declarations.
    Broker's use a variety of naming patterns: EURUSD, EURUSDc, EURUSDct, EURUSDi, EURUSDm, EURUSDecn, EURUSDpro, "EUR.USD", "EUR/USD", "EURUSD#", "EURUSD.", "EURUSD..", "EURUSD.c", "EURUSD.G", "EURUSD.SBe", "EURUSD.stp", "EURUSD+", "EURUSD-sb", etc.
    Don't hard code things; just use the predefined _Symbol, or add the adornments to predefined _Symbol via Input Variables, or calculate the adornments:
              SymbolName/Symbol. OrderSend - Symbols - MQL4 programming forum

  7. Code can be simplified to two lines.
    I disagree with making a new bar function, because it can only be called once per tick. A variable can be tested multiple times.
              New candle - MQL4 programming forum

Keith Watford
Moderator
20526
Keith Watford  
Jimparker:

Do not double post.

I have deleted your duplicate post.

Jimparker
16
Jimparker  
Brian Rumbles:

Im not sure about your specific code but I use something simple like:


Declare variable double Bar1;

Oninit() {Bar1= iClose(Symbol(),0,1);} // initialize Bar1 value to Previous bar from current bar


Ontick() {

if(iClose(Symbol(),0,1) != Bar1){  // It is a new bar


//run code


Bar1= iClose(Symbol(),0,1);} /give Bar1 the new value of the current bar at position 1 i.e the previous bar

}

Jimparker
16
Jimparker  
Jimparker:

Thanks Brian.

Does onint() go in the early code before init()

and

does ontick() go after start()

Thanks

Andrey Barinov
50319
Andrey Barinov  
Jimparker:

Thanks Brian.

Does onint() go in the early code before init()

and

does ontick() go after start()

Thanks

It is not before or after.

OnInit goes instead of init and OnTick goes instead of start

William Roeder
20233
William Roeder  
Start using the new Event Handling Functions.
          Event Handling Functions - Functions - Language Basics - MQL4 Reference
Jimparker
16
Jimparker  
Thanks Andrey
To add comments, please log in or register