Особенности языка mql5, тонкости и приёмы работы - страница 317
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Такое в других языках тоже работать не будет? Как правильно?
Понимаю так, что в MQL5 сначала идет раскрытие внешнего макроса, а затем только - внутреннего. Какую конструкцию использовать, чтобы можно было делать наоборот?
Приходится гадать, т.к. это не реализовано.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Новая версия платформы MetaTrader 5 build 5320: сервисы в Библиотеке кодов и удобная работа с input в MQL5
fxsaber, 2025.09.25 16:14
Просьба это сообщение об ошибке в ME дополнять именем неопределенного идентификатора.В сложных макросах очень сильно бы помогло выявить причины ошибки. Спасибо.
Подскажите, пожалуйста, где я допускаю фундаментальную ошибку в работе с макросами?
На других языках это тоже не работает? Как правильно поступить?
Решение: использовать макрос второго уровня (для перенаправления).
Это уже обсуждалось здесь и здесь.
Решение: использовать макрос второго уровня (для перенаправления).
Это уже обсуждалось здесь и здесь.
или напрямую:
Использование функции string() во время выполнения (но без оценки во время компиляции, как в первом примере).
Итак, что происходит в Print("Error in ", LOCATION)
Print("Ошибка в ", LOCATION) расширяется до Print("Ошибка в ", __FILE__ " : " STR(__LINE__))
STR(__LINE__) не имеет операции строкообразования, т.е. в ее расширении нет #x, но есть x, поэтому она должна оценить x и ввести значение __LINE__ в ST2 для строкообразования. Он расширяется до ST2(11) , который , в свою очередь, строчит число 11, поскольку использует #x.
Итак, с технической точки зрения:
Итак, что происходит в Print("Error in ", LOCATION)
Print("Ошибка в ", LOCATION) расширяется до Print ("Ошибка в ",__FILE__ " : " STR(__LINE__))
STR(__LINE__) не имеет операции структуризации, т. е. в его расширении нет #x , но есть x , поэтому он должен оценить x и ввести значение __LINE__ в ST2 для структуризации. Он расширяется до ST2 (11), который , в свою очередь, строчит число 11, поскольку использует #x.
Итак, с технической точки зрения:
Форум о трейдинге, автоматизированных торговых системах и тестировании торговых стратегий
Особенности языка mql5, тонкости и хитрости
amrali, 2025.11.04 11:40
Решение: использовать макрос второго уровня (для перенаправления).
Это уже обсуждалось здесь и здесь.
Вывод:
Если во время оптимизации нажать на Стоп, то дескрипторы прерванных проходов остаются открытыми, т.к. выполнение кода жестко прерывается, не давая выполниться логике закрытия дескрипторов - CloseHandle.
Более того, такая ситуация может возникнуть во время дебага, когда во время отладки идет закрытие дебага. В общем, есть сценарии, в которых не закрываются дескрипторы.
Долго искал в интернете способы закрытия дескрипторов. В частности, в случае использования File Mapping.
Нашел только формулировку такой же проблемы без ответа.
Например, если процесс был прерван до CloseHandle, то такая функция всегда будет возвращать true на следующих запусках.
Возможно ли как-то освобождать память/файл в случае, если висят открытые дескрипторы? Сейчас проблема решается только перезагрузкой процесса - Терминала.
Возможно ли как-то освобождать память/файл в случае, если висят открытые дескрипторы? Сейчас проблема решается только перезагрузкой процесса - Терминала.