Я недавно пишу на MQL4, может я вообще неверных подход выбрал, храня данные окружения в библиотеках в глобальных переменных? Но я не знаю, как сделать иначе в MQL4. Мне нужно передавать иметь в библиотеках доступ ко всем входным переменным, а также к нескольким константам, определенным в скрипте советника, подключающего эти библиотеки. Подскажите более корректное решение по обмену данными между скриптами, пожалуйста!
Нашел ответ в другом топике "don't use multiple libraries with cross dependencies. cross calling works but errorhandling will be cumbersome. example: eaA calls libB, libB calls libC, later eaA directly calls libC. now there are 2 instances of libC in memory with different state of local and global scopes. they don't know nothing about each other." https://www.mql5.com/en/forum/143213
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Коллеги, прошу объяснить, как такое может происходить.
Мой советник (XAUUSD_5-5_Unicorn) использует функции двух библиотек (AH_Common, AH_XAUUSD_Common). В init() и start() он передает в эти библиотеки текущие значения входных параметров, констант и пары переменных, чтобы все скрипты работали с одинаковыми данными. Обе библиотеки хранят полученные данные в глобальных переменных, которые имеют дефолтные значения. И всё прекрасно работает при ручной проверке (через Print()). Но в некоторых ситуациях (и в тестере, и на демо) библиотека перезатирает полученные от скрипта советника данные и её глобальные переменные внезапно имеют дефолтные значения, будто бы библиотека была переинициализированна (о чем не пишется в логе).
Пример текста из лога, отражающего корректную передачу значений через start() и последующие некорректные значения в библиотеке:
Как видно по последней строке, значения всех переменных обнулились, хотя значение orderMagic всегда устанавливается по константе, которая не равна нулю.
Прошу прокомментировать, как такое возможно тех, кто сталкивался! И подскажите, есть ли способ перехватить загрузку скрипта, но не через init()? То есть в тот момент, когда в логе появляются сообщения вида:
AH_Common XAUUSD,M1: loaded successfully XAUUSD_5-5_Unicorn XAUUSD,M1: loaded successfully