Marco vd Heijden:
and where is the rest of the code ?
this piece only checks bar 1 candle time.
Marco vd Heijden:
well the fact that
Has received a new bar does not mean that all the others have received new bars also.
So that is not going to work.
It can easily take 30 seconds for a new tick to come in so you have to check all instruments for a new bar if you are going to do that.
thank you very much
do you have any suggestion to check all new bars?
yes
//+------------------------------------------------------------------+ //| New Bars.mq4 | //| Copyright 2018, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2018, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //--- declare bar times array datetime bar_time[]; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- create timer EventSetMillisecondTimer(500); //--- resize time array ArrayResize(bar_time,SymbolsTotal(1),0); //--- initialize time array for(int symbol=0;symbol<SymbolsTotal(1);symbol++) { bar_time[symbol]=iTime(SymbolName(symbol,1),PERIOD_CURRENT,0); } //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- destroy timer EventKillTimer(); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- // we do not use OnTick because it is realted only to the chart instrument... } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { //--- compare bar times bool newbars=1; // this flag is set to true assuming all bars are new //--- check to see if it holds true... for(int symbol=0;symbol<SymbolsTotal(1);symbol++) { if(iTime(SymbolName(symbol,1),PERIOD_CURRENT,0)==bar_time[symbol]) { // however, if there is one or more bars that still have the old bar time, flag newbars is set to false... newbars=false; } } //--- the outcome: if(newbars==1) { // all bars have been renewed at this point... // Do something... for(int symbol=0;symbol<SymbolsTotal(1);symbol++) { // overwrite the old bar times with the new bar times.. bar_time[symbol]=iTime(SymbolName(symbol,1),PERIOD_CURRENT,0); } } //--- otherwise, else if(newbars==0) { // There are still some bars waiting for a new tick... // Do something else... } } //+------------------------------------------------------------------+
Marco vd Heijden:
yes
the code was really useful.
thank you so much.
bool isNewbars=true; // this flag is set to true assuming all bars are new : newbars=false; : if(newbars==1) : else if(newbars==0)Bool is true and false not ones and zeros; don't use ints when you mean bool. You should be able to read your code out loud and have it make sense. You would never write if( (2+2 == 4) == true) would you? if(2+2 == 4) is sufficient. So don't write if(bool == true), just use if(bool) or if(!bool). Code becomes self documenting when you use meaningful variable names, like bool isLongEnabled where as Long_Entry sounds like a trigger price or a ticket number and "if long entry" is an incomplete sentence. Write it correctly with good names
bool allNewbars=true; // this flag is set to true assuming all bars are new : allNewbars=false; break; : if(allNewbars) : else // It can only be one or the other if(!allNewbars)
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
i'm trying to write an EA and i have little problem,
the EA calculate some bar's data at the end of every bar
i used code below:
if (candle1!=iTime(Symbol(),PERIOD_M1,1)) {candle1=iTime(Symbol(),PERIOD_M1,1); ....}
this code works perfectly every minutes;
when i run the EA for first time, EA results are completely correct, but after a minute it trying to calculate new data and at this time results are not correct,
so when i removed the EA and attach it again it works great;
i checkout all of variables and reset all value of them per while but it doesn't work yet,
actually i'm looking for a way to restart ea automatically.
i'm really sorry because ican't speak english carefully. :(
any help will much appricated.