I assume it's an indicator - not an EA and not a script.
If you e.g. place an endless loop in an indicator the terminal realizes that this indicator is 'not responding' and terminates it - I guess this (not responding) is the reason.
The reason for this 'not responding' is part the code - but without code ... (you know what I mean).
No, if the terminal is stopping, then start will not be called.
You must find your infinite loop and fix it. If any of your loops/sleeps/web requests take any longer then 3 seconds your code will be terminated.
This problem is coming from the EA not an Indicator. I've traced the called indicators running time and there are OK. It's a big program that I manage I cannot ask decently someone to solve that problem for me, it will take him too much time. I understand the problem of a loop that is still running, what I would like to find is a system to locate it by for example knowing the line number of the current instruction when the stop occurs. Is it possible? a idea?
Do you think that doing the following would work? :
put the code of my Start() function into a procedure that I call using
while( !IsStopped() and TimeRun = 0 )
(in the procedure I set TimeRun = 1 to run the code only once as in the Start function now.
Then just after the while I code the
if (IsStopped())
{Print("EA STOPPED: __FUNCTION__ = ",__FUNCTION__," __LINE__ = ",__LINE__," (compilation time: ",__DATE__," ",__DATETIME__,")");
}
It's a bit tricky, too much in fact, that's why I prefer asking before trying this and I am not sure it will work, there not a lot info on to trap that event.
Will it work? Another idea ?
No it will not. You must find your infinite loop and fix.
Place a print at the start and exit of every function and track it down to a function. then print the variables inside every loop and a exit message from every loop. and track it down.
Stop being lazy and looking for a quick fix. There isn't any.
Yes I arrived to the same conclusion.
Thank you all
That was in those instructions:
long currChart = ChartFirst();
while(currChart>0)
{if (ChartSymbol(currChart) == OOrderSymbol[curOrder])
{chartOpen = true;
break;
}
currChart=ChartNext(currChart);
}
I solved this problem easily but I don't see why this instructions are creating a never ending loop that is finished when I close the terminal with a timeout.
And why, if it is looping without going out of the while, the timeout is not occurring before I stop the terminal? I thought the start() is stopped by the system when it last too long.
Apparently there is something I don't get.
jacques366: I thought the start() is stopped by the system when it last too long.
|
|
I am writing in a trace file just before and just after the while and when there is a timeout the second write is not done. I've got many cases and all are ending the same way. Pretty sure this comes from that loop...... but I will make sure again.
I trace more info I now I know this is occurring only when I stop the terminal and not if I let the EA running without changing anything (without changing the timeframe I mean). This is occurring at the time I stop the terminal. (I first thought the loop was running and was stopped by my intervention but it's not the case).
So now the question is why is it occurring at that special moment? Stopping the terminal may change something that is causing this While loop not to end correctly ?
I still on that case ...
I am writing in a trace file just before and just after the while and when there is a timeout the second write is not done. I've got many cases and all are ending the same way. Pretty sure this comes from that loop...... but I will make sure again.
I trace more info I now I know this is occurring only when I stop the terminal and not if I let the EA running without changing anything (without changing the timeframe I mean). This is occurring at the time I stop the terminal. (I first thought the loop was running and was stopped by my intervention but it's not the case).
So now the question is why is it occurring at that special moment? Stopping the terminal may change something that is causing this While loop not to end correctly ?
I still on that case ...
It's difficult to answer without knowing the context where this code is used. In which event handler ? Is it nested deeply in other functions call ?
At first I can't see a reason. Can you provide a test code which we could use to reproduce the issue ?
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hi,
How can I know which part of the code is causing this Abnormal termination/timeout message?
1 07:01:23.244 EA EURUSD.lmx,M1: Abnormal termination
0 07:01:23.244 EA EURUSD.lmx,M1: uninit reason 9
It seems a task was aborted when I've shut down the terminal. It's not very often but I recently have this kind of termination, I supposed it's caused by one of the latest modifications.
I would like to code something like the following lines:
{Print("EA STOPPED: __FUNCTION__ = ",__FUNCTION__," __LINE__ = ",__LINE__," (compilation time: ",__DATE__," ",__DATETIME__,")");
}
But I'm not sure where it must be coded, the deinit() function is apparently not called when aborting. Is it enough to code it as the first instruction of the start() function for it to be executed when the _StopFlag will be set to true?
Is there a function to trap that event and get this lines to be executed?