1. И видим, что нет перехода к ф-и OnDeinit. Т.е. мы не выходим из OnTick, а значит не продолжаем идти по цепи: OnTick->OnDeinit->OnInit->OnTick
2. Так вот, чтобы изменения применялись, должен выполниться OnInit, но OnInit не будет выполняться до тех пор, пока вычисления в OnTick(или в любой другой) не прекратятся.
На сколько я знаю, есть лишь проверка на остановку программы через _StopFlag (флаг остановки mql5-программы), но это только для полного выхода.
3.А вот как определить, что входные настройки изменились во время выполнения, чтобы остановить тяжелые вычисления я не знаю.
Может кто из гуру сталкивался с такой ситуацией и смог решить ее?
Может у здешних джедаев есть какой-нибудь супер секретный хак? :)
1. Сразу на событии прихода тика Ваша программа входит в бесконечную спячку. Пока она спит, она не прекратит свою работу и не перейдет к функции DeInit().
2. Функция OnInit() всегда выполняется в первую очередь.
3. Сохраняйте посление настройки в файле, чтобы иметь возможность сравнить текущие настройки с последними.1. Сразу на событии прихода тика Ваша программа входит в бесконечную спячку. Пока она спит, она не прекратит свою работу и не перейдет к функции DeInit().
2. Функция OnInit() всегда выполняется в первую очередь.
3. Сохраняйте посление настройки в файле, чтобы иметь возможность сравнить текущие настройки с последними.
1. Само собой :) Мне это не нужно объяснять, т.к. я сделал это для простого примера эмуляции долгого вычисления, это всего лишь простейший пример для демонстрации...
2. Само собой :)
3. Какой смысл сохранять в файл настройки если мы можем инфу хранить в переменных глобальной области? Да и в любом случае, чем это может помочь нам: открыть *set файл настроек эксперта, распарсить его и сравнить его со старыми настройками? Так это не проканает, т.к. мы не сможем выйти за границы файловой песочницы.
в МТ4 всё работает...
МТ5 - опять отличился)
1. Само собой :) Мне это не нужно объяснять, т.к. я сделал это для простого примера эмуляции долгого вычисления, это всего лишь простейший пример для демонстрации...
2. Само собой :)
3. Какой смысл сохранять в файл настройки если мы можем инфу хранить в переменных глобальной области? Да и в любом случае, чем это может помочь нам: открыть *set файл настроек эксперта, распарсить его и сравнить его со старыми настройками? Так это не проканает, т.к. мы не сможем выйти за границы файловой песочницы.
Одно дело долгие вычисления, другое дело - бесконечный цикл. У Вас второй вариант. Зайдя в него, выйти Вы уже не можете. Только снять программу с графика.
Цепочка которую Вы описали не может работать. Сначала онинит, потом онтик. Деинит только при критической ошибке или снятии программы с графика. Ну или несистемный вызов еще.
Честно говоря, не понимаю в чем сложность. Неподходящие входные настройки фильтруйте в условиях и все.
Возможно, Вы имеете ввиду, что пользователь меняет входные параметры в процессе исполнения долгих вычислений (например на граф. панели советника)? Если вычисления такие долгие, что их стоит отменять при изменении настроек, то внутри цикла этих вычислений нужно постоянно проверять флаг события изменения настроек и если событие произошло, -выходить из цикла вычислений.
Сейчас входные параметры изменяются только после выхода из On-функции.
А разве изменение входных параметров не перезапускает советник? Я думал что программа перезагружается и все вычисления сами останавливаются.
Сейчас входные параметры изменяются только после выхода из On-функции.
выход по стоп-флагу не работает (в мт5)
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Прошу помощи у джедаев! :)
Я не нашел способа для того, чтобы прервать в эксперте выполнение тяжелой функции при изменении входных параметров эксперта.
Чтобы предельно точно понять суть того о чем я толкую:
1) Запускаем на чарте такой вот код эксперта:
2) Открываем окно настроек и меняем параметр "Setting_" на 1.
3) И применяем изменения (нажимаем ОК).
4) И видим, что нет перехода к ф-и OnDeinit. Т.е. мы не выходим из OnTick, а значит не продолжаем идти по цепи: OnTick->OnDeinit->OnInit->OnTick
Так вот, чтобы изменения применялись, должен выполниться OnInit, но OnInit не будет выполняться до тех пор, пока вычисления в OnTick(или в любой другой) не прекратятся.
На сколько я знаю, есть лишь проверка на остановку программы через _StopFlag (флаг остановки mql5-программы при ПОЛНОМ выходе), но это только для полного выхода. А вот как определить, что входные настройки изменились во время выполнения, чтобы остановить тяжелые вычисления и перейти к деиниту я не знаю.
Может кто из гуру сталкивался с такой ситуацией и смог решить ее?
Может у здешних джедаев есть какой-нибудь супер секретный хак? :)