Обсуждение статьи "Основы программирования на MQL5: Глобальные переменные терминала" - страница 3
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Решаемо через префиксы глобальных переменных.
Хорошие статьи для начинающих.
The GlobalVariableTemp() function creates a temporary global variable (that exists till the terminal is stopped). In a few years that I develop EAs on MQL5, I have never faced the need for such a variable. Moreover, the very concept of a temporary global variable contradicts the basic principle of their application — long-term data storage not affected by the terminal relaunches.
Это не единственное применение глобальных переменных терминала. Они также могут использоваться для обмена информацией между различными советниками или индикаторами. Так что в таком случае это может быть особенностью, чтобы данные были только в памяти и не сохранялись при перезапуске терминала.
Часть про мьютекс очень интересная, у меня есть один вопрос и одно замечание.
Может случиться так, что во время выполнения функции OnTick() какой-нибудь советник удаляется с графика, но функция Mutex_Release() не выполняется.
Как можно удалить советника и не выполнить функцию Mutex_Release()? Если удалить советника с графика обычным способом (закрыть график, удалить советника или закрыть терминал), то это никогда не остановит поток исполнения. Я что-то упускаю?
Итак, мое замечание: единственный способ, при котором функция Mutex_Release() не может быть выполнена - это "жесткая" остановка, отказ питания или оборудования и т.д..., поэтому ваши глобальные переменные mutex - идеальный кандидат для создания временных переменных с помощью GlobalVariableTemp().
Работают ли глобальные переменные во время тестирования стратегий?
Например, если индикатор сохраняет значения в GV, а советник считывает их, будет ли тестер стратегий вовремя получать значения во время симуляции?
Работают ли глобальные переменные во время тестирования стратегии?
Например, если индикатор сохраняет значения в GV, а советник считывает их, будет ли тестер стратегий вовремя получать значения во время симуляции?
Да
"Возможно, глобальные переменные пропадут при резком обесточивании компьютера."У меня глобальные переменные пропали после закрытия терминала мт5 bild 2361. При том на 2-х разных терминалах МТ5. GlobalVariablesFlush() выполняется. Бред. Терминалы запускаются с ключом /portable, может в этом дело?
Попробовал создавать руками, открывал закрывал терминал, вроде сохраняются. У меня результаты авто оптимизации были записаны в глобалки, а это очень долгий процесс. Выходит не такое уж надежное хранилище. Придется дописать процедуру записи глобальных переменных в файл через структуры.
У меня глобальные переменные пропали после закрытия терминала мт5 bild 2361. При том на 2-х разных терминалах МТ5. GlobalVariablesFlush() выполняется. Бред. Терминалы запускаются с ключом /portable, может в этом дело?
Попробовал создавать руками, открывал закрывал терминал, вроде сохраняются. У меня результаты авто оптимизации были записаны в глобалки, а это очень долгий процесс. Выходит не такое уж надежное хранилище. Придется дописать процедуру записи глобальных переменных в файл через структуры.
В терминале или в тестере? В МТ5 есть разница.
В терминале или в тестере? В МТ5 есть разница.
В терминале.
В общем решил проблему так. В классе, который занимается авто оптимизацией для советника, сделал, кроме создания глобальных переменных, еще и запись идентичных данных в файлы по каждой валютной паре (предварительно файлы каждый раз удаляются при старте класса, так как класс вызывается только для пересчета, значит в любом случае данные нужно обновить). Файлы взял обычные текстовые, в названиях файлов кодируется конкретный экземпляр советника. В советнике при инициализации вызывается функция чтения из файлов данных оптимизации и создание или обновление глобальных переменных.
Это еще удобно тем, что файлы можно забекапить, а также использовать при прогоне в тестере стратегий (файлы естественно лежать в общей папке терминалов), так как в тестере создаются свои экземпляры глобальных переменных, а сама авто оптимизация - длительный процесс и загрузка готовых данных из файлов существенно сокращает время тестирования.
Здравствуйте, Дмитрий,
Я понимаю, что вашей статье уже несколько лет, но я подумал, что мог бы поделиться кое-чем и, надеюсь, также задать вопрос!
Вы упомянули, что не нашли применения глобальной переменной Temp. Я как раз разрабатываю то, что требует именно этого. Я ломал голову, пытаясь найти способ реализовать обмен хэндлом порта завершения IO через глобальные переменные, в частности, при падении или обычном перезапуске. Я разрабатываю систему обработки заказов с использованием портов завершения IO Windows. Поскольку мы можем создавать потоки Win32 из MQL5, я не могу создать пул потоков при создании IOCP-сервера, поэтому мой обходной путь с использованием служб заключается в следующем;
В случае перезапуска терминала, аномального или иного, я хочу, чтобы IOCP Handle исчез при запуске терминала, чтобы я мог создать новый IOCP Handle для нового запуска. Это делает реализацию намного чище.
Мне также интересно, насколько быстро работают глобальные переменные и насколько они надежны?
Спасибо за отличную статью, было приятно читать,
Шеп
Новая статья Основы программирования на MQL5: Опубликованы глобальные переменные терминала:
Автор: Дмитрий Федосеев