Аналогичная проблема только номер ошибки другой #4202, как я понял эта ошибка сохраняется из последней функции вернувшей ошибку.
Однако ошибка появляется не только после запуска терминала. а так же и в дальнейшем.
Так же функция GlobalVariableGet выдаёт такую же ошибку
12:39:21 EA-v.0.5_beta5 GBPJPY,M1: _PauseBeforeTrade() - GlobalVariableGet ( "LastTradeTime" ) - Error #4202
12:39:21 EA-v.0.5_beta5 GBPJPY,M1: TradeIsBusy() - GlobalVariableSetOnCondition ( "TradeIsBusy", 1.0, 0.0 ) - Error #4202
12:39:21 EA-v.0.5_beta5 GBPJPY,M1: TradeIsBusy() - GlobalVariableSetOnCondition ( "TradeIsBusy", 1.0, 0.0 ) - Error #4202
12:39:21 EA-v.0.5_beta5 GBPJPY,M1: WriteFileIsBusy() - GlobalVariableSetOnCondition ( "WriteFileIsBusy", 1.0, 0.0 ) - Error #4202
12:39:21 EA-v.0.5_beta5 GBPJPY,M1: TradeIsBusy() - GlobalVariableSetOnCondition ( "TradeIsBusy", 1.0, 0.0 ) - Error #4202
12:39:21 EA-v.0.5_beta5 GBPJPY,M1: WriteFileIsBusy() - GlobalVariableSetOnCondition ( "WriteFileIsBusy", 1.0, 0.0 ) - Error #4202
12:39:21 EA-v.0.5_beta5 GBPJPY,M1: TradeIsBusy() - GlobalVariableSetOnCondition ( "TradeIsBusy", 1.0, 0.0 ) - Error #4202
Вы используете библиотеку функций?
Вы используете библиотеку функций?
Нет.
Вы используете библиотеку функций?
Нет.
Обращений к графическим объектам тоже нет?
Обращений к графическим объектам тоже нет.
Сегодня хотел ещё раз проанализировать, но ошибку воспроизвести не смог. Может быть какой-то сбой в моём терминале.
Если ошибка возобновится - напишу. Спасибо за ответы.
Да. Если будут какие-либо детали, пожалуйста, сообщите.
Для того, чтобы исправить ошибку, мы должны её воспроизвести. Тоже пока не можем воспроизвести.
Ошибка возникает, если до этого появилась ошибка при работе с объектами и не была считана через GetLastErrors()
Очевидно, что это и была последняя ошибка, сохранившаяся в функции GetLastErrors() :
в моём примере ( #4202 - объект не найден)
При обнулении переменной в функции GetLastErrors() ошибка с глобальными переменными пропадает
Ошибка возникает, если до этого появилась ошибка при работе с объектами и не была считана через GetLastErrors()
Очевидно, что это и была последняя ошибка, сохранившаяся в функции GetLastErrors() :
в моём примере ( #4202 - объект не найден)
При обнулении переменной в функции GetLastErrors() ошибка с глобальными переменными пропадает
один из методов борьбы это найти место где она возникает!
--
если же хотите что бы ЧИСТАЯ ФУНКЦИЯ НАПИСАННАЯ ЯВНО БЕЗ ОШИБОК
не мучалась с ошибкой которая лежит в буфере
делайте так
функция GelLastError() читает ошибку и обнуляет ее во внутренних буферах
прочитайте ошибку перед вызовом модуля в коттором ГАРАНТИРОВАННО не бывает ошибок ПОДОБНЫХ
//+------------------------------------------------------------------+ // int TradeIsBusy( int MaxWaiting_sec = 30 ) | // Функция меняет значение глобальной переменной TradeIsBusy с 0 | // на 1. | // Если в момент запуска TradeIsBusy = 1, функция ждёт, пока | // TradeIsBusy станет = 0, и только потом меняет. | // Если глобальной переменной TradeIsBusy не существует, функция | // создаёт её. | // Коды возвратов: | // 1 - успешное завершение. Глобальной переменной TradeIsBusy | // присвоено значение 1 | // -1 - в момент запуска функции TradeIsBusy = 1, ожидание было | // прервано пользователем (эксперт удалён с графика, закрыт | // терминал, изменился период и/или символ графика, ... ) | // -2 - в момент запуска функции TradeIsBusy = 1, истекло | // максимальное время ожидания (MaxWaiting_sec) | //+------------------------------------------------------------------+ int TradeIsBusy(int MaxWaiting_sec = 30) { // при тестировании нет смысла в разделении торгового потока - просто // завершаем работу функции int _GetLastError = 0; _GetLastError = GetLastError(); // прочитать ошибку которая может быть в буфере GetLastError = 0; // обнулим ошибку сделануу в другом БЕЗДАРНОМ модуле // что бы модули от профи не мучались с чужими ошибками if(IsTesting()) return(1); int StartWaitingTime = GetTickCount(); //+------------------------------------------------------------------+ //| Проверяем, существует ли гл. переменная и, если нет, создаём её | //+------------------------------------------------------------------+ while(true) { // если эксперт был остановлен пользователем, прекращаем работу if(IsStopped()) { Print("Эксперт был остановлен пользователем!"); return(-1); }
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Использую данную функцию достаточно давно. С момента обновления до 216 билда советники начали выдавать следующую ошибку:
08:11:01 Советник GBPUSD,H1: TradeIsBusy() - GlobalVariableSetOnCondition ( "TradeIsBusy", 1.0, 0.0 ) - Error #4103
Ошибка появляется только в момент попытки открытия различными советниками первого ордера после перезагрузки теримнала. И в дальнейшем не возникает. Причём ни сама функция, ни советники её использующие, ни к каким файлам не обращаются. Я думаю, что здесь кроется какой-то баг, связанный с созданием глобальной переменной.