Can any code be run without a tick?

 

Is there any way to have a section of code run prior to a tick so you can see if your EA initialized properly?


Thanks!

Tom

 

Hi Tom


An EA's init() function runs once only when EA applied to a chart. Thereafter start() gets called by Terminal. See below for times when init() gets recalled...

for full info see your MetaEditor HELP: MQL4 Reference - Program Run - Program Run and here, online at https://docs.mql4.com/index and also https://docs.mql4.com/runtime/start


as to "initialized properly?"... If I understand you correctly, in init(), as appropriate, it could load EA global scoped variables to indicate such and when start() entered - could check them...


eg, I use just one EA global variable int gError; such that should it ever be set to say ERR_COMMON_ERROR, the EA start() on entry, will detect this and immediately return to Terminal with return(ERR_COMMON_ERROR);

So here, if init() cannot for instance open the EA's logfile it issues Print() > sets gError > continues to go deeper in init() if followng code has no dependancies (in this case expecting logfile to be open) >... until cannot go further (this way can maybe detect other errors and issue Print()'s)... so finally return(ERR_COMMON_ERROR); to Terminal and that's that... hopefully :)


I only mention above as sometimes practical example/theWayAnotherDoesIt... may be of interest.


Remember, an EA will continue to be called by Terminal each new data tick (unless EA already running) - so you must consider just what you want do when not"initialized properly" or indeed... at some point in time, EA would like to simulate ABORT, yes?


AFAIK, there is not clean method of telling Terminal "ABORT" - do not call me again thanks vMuch - as conventionally understood in say C/C++/...


hth

 
Just set it up to run your check on the first tick prior to "trading".
 
phy:
Just set it up to run your check on the first tick prior to "trading".

If you would please could you expand a bit?, I do not understand above so am in need of more learning

thanks

 

Ok.


int start(){

   static bool verified = false;

   if(verified == false){
      ...
      perform your initialization verification...
      ...
      when you are happy with verification..
      ...
      verified = true;

   }

   continue with original EA processing

   return (0);
}
 

right - a once off at head of start(), yes interesting.. I often use statics in functions for the first time called only stuff and even in start() now and then but never really occurred to me regards this thread. I do all verification in init() so was being too blinkered !

I'll save above - building up html file of snippets etc.

Much appreciated phy

:o)