Нужно, чтобы советник1 записал в файл признак окончания своей оптимизации. Для этого используйте событие OnTesterDeinit. Советник2 в итоге должен с некоторой периодичностью считывать создаваемый файл в поисках признака окончания оптимизации.
Также можно придумать другие способы общения между советниками в разных терминалах, если используется не только MQL.
Нужно, чтобы советник1 записал в файл признак окончания своей оптимизации. Для этого используйте событие OnTesterDeinit. Советник2 в итоге должен с некоторой периодичностью считывать создаваемый файл в поисках признака окончания оптимизации.
Также можно придумать другие способы общения между советниками в разных терминалах, если используется не только MQL.
Я использую mql4, там нет такой функции.
Думаю, можно во втором советнике постоянно пытаться читать этот файл и проверять на номер ошибки доступа. Как только удастся прочитать файл, так можно продолжать дальше.
Еще можно по окончании оптимизации первого советника в нем предусмотреть создание какого нибудь файла-флага, т.е., если этот файл есть, значит - продолжаем работу вторым советником, им же и удаляем этот файл. Можно, конечно, в этот файл и что-то осмысленное писать и потом считывать второй совой.
Думаю, можно во втором советнике постоянно пытаться читать этот файл и проверять на номер ошибки доступа. Как только удастся прочитать файл, так можно продолжать дальше.
Еще можно по окончании оптимизации первого советника в нем предусмотреть создание какого нибудь файла-флага, т.е., если этот файл есть, значит - продолжаем работу вторым советником, им же и удаляем этот файл. Можно, конечно, в этот файл и что-то осмысленное писать и потом считывать второй совой.
При оптимизации советник открывает файл, записывает, закрывает, и так при каждом проходе. То есть не все время файл не доступен.
Как создавать флаг? Я не знаю таких функций, которые бы срабатывали именно 1 раз при последнем проходе оптимизации.
Я использую mql4, там нет такой функции.
Да, действительно. В MQL4 это событие еще не появилось. Возможно, скоро появится. Кстати, можно попытаться узнать у разработчиков, планируется ли вообще появление OnTesterDeinit в MQL4, и, если да, то как скоро?
Каким-то другим способом эта задача вряд ли решается красиво. Сразу оговорюсь, что не рассматриваю в качестве хороших решений способы слежения за статусом элементов управления оптимизатора при помощи WinAPI.
Да, действительно. В MQL4 это событие еще не появилось. Возможно, скоро появится. Кстати, можно попытаться узнать у разработчиков, планируется ли вообще появление OnTesterDeinit в MQL4, и, если да, то как скоро?
Каким-то другим способом эта задача вряд ли решается красиво. Сразу оговорюсь, что не рассматриваю в качестве хороших решений способы слежения за статусом элементов управления оптимизатора при помощи WinAPI.
У меня уже в советнике2 используется несколько функций из dll shell32 и kernel32, так что тоже вариант, просто с++ я лично не знаю, вот и спрашиваю тут как лучше сделать.
Как я уже говорил, возможно на си можно сравнивать размер файла, например каждые 100мс, или сравинвать также но дату последнего изменения.
У меня уже в советнике2 используется несколько функций из dll shell32 и kernel32, так что тоже вариант, просто с++ я лично не знаю, вот и спрашиваю тут как лучше сделать.
Как я уже говорил, возможно на си можно сравнивать размер файла, например каждые 100мс, или сравинвать также но дату последнего изменения.
"сравинвать также но дату последнего изменения" - в MQL это возможно.
"Как создавать флаг?" - в простейшем случае просто функцией FileWrite.
"сравинвать также но дату последнего изменения" - в MQL это возможно.
"Как создавать флаг?" - в простейшем случае просто функцией FileWrite.
Каким образом можно оповестить советник2 с помощью MQL если он находится в другом терминале, то есть другой директории?
Как функция FileWrite узнает что сейчас последний проход оптимизации и нужно поставить флаг?
Каким образом можно оповестить советник2 с помощью MQL если он находится в другом терминале, то есть другой директории?
Как функция FileWrite узнает что сейчас последний проход оптимизации и нужно поставить флаг?
[in] комбинация флагов, определяющая режим работы с файлом. Флаги определены следующим образом:
FILE_COMMON расположение файла в общей папке всех клиентских терминалов \Terminal\Common\Files
2. пока не могу сказать, но надо думать, все возможно.
1. например, этим флагом FILE_COMMON функций FileOpen, FileWrite и тп
[in] комбинация флагов, определяющая режим работы с файлом. Флаги определены следующим образом:
FILE_COMMON расположение файла в общей папке всех клиентских терминалов \Terminal\Common\Files
2. пока не могу сказать, но надо думать, все возможно.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Суть заключается в следующем: один из советников в одном терминале, назовем его советник1, при оптимизации создает файл, и другой советник, в другом терминале советник2, должен узнать когда закончится перезапись файла, то есть оптимизация советника1. Далее советник2 работает с созданным файлом, но это не важно.
Проблема в том, что советник2 ждет пока соптимизируется советник1 фиксированное кол-во секунд функцией sleep, и иногда советник1 оптмизируется слишком быстро, и получается в итоге советник2 простаивает время зря, либо, может быть обратная ситуация, советник1 все еще оптимизируется и следственно записан не до конца, а советник 2 его уже скопировал и обрабатывает.
Так вот, нужно решение которое бы решило эти проблемы, мне кажется советник2 должен с помощью какой-то dll из windows то и дело проверять, меняется ли размер файла, либо смотреть на дату изменения...