вот такой код будет работать и при переключении ТФ и будет контролировать выбор пользователем настройки "Перезапустить эксперта"
enum ENUM_NEWRUN{RUN1/*Перезапуск1*/,RUN2/*Перезапуск2*/}; input ENUM_NEWRUN NewRUN=RUN1; // Перезапустить эксперта static ENUM_NEWRUN CheckNewRUN; static bool FirstRun=true; static bool TradeIsDisable=false; //+------------------------------------------------------------------+ int OnInit() { if(FirstRun) // Первый запуск эксперта { FirstRun=false; TradeIsDisable=false; CheckNewRUN=NewRUN; Print("Первый запуск эксперта"); } else // Второй и последующие запуски эксперта { if(CheckNewRUN!=NewRUN){CheckNewRUN=NewRUN; Print("Пользователь выбрал перезапуск!");} else Print("Нет перезапуска !!!"); } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ void OnTick() { if(TradeIsDisable)Comment("Торговля остановлена по достижении прибыли/убытка !!!"); ......... if(условие подсчета прибыли) { TradeIsDisable=true; return; } }но не нравится меню настроек эксперта, будут выпадающие списки Перезапуск1 / Перезапуск2
constant cannot be modified - обычно как-то так правлю:
extern bool NewRUN = true; //дописываю пару строк: input bool InpNewRUN = true; bool NewRUN=true; int OnInit() { NewRUN=InpNewRUN; //...
по логике всё остаётся как было, поправить быстро.
constant cannot be modified - обычно как-то так правлю:
по логике всё остаётся как было, поправить быстро.
спасибо, завтра подумаю, но вроде насколько я понял логику, то extern-переменную сохраняем в переменную (копию ) и потом эту переменную (копию ) контролируем на предмет того, что extern- переменная изменилась
спасибо, завтра подумаю, но вроде насколько я понял логику, то extern-переменную сохраняем в переменную (копию ) и потом эту переменную (копию ) контролируем на предмет того, что extern- переменная изменилась
input - константа, а extern - переменная, но не это главное. Главное - то, что значения переменных глобальной секции не инициализируются при повторной инициализации программы. Остается мусор.
Версия терминала 1147
Знаю, что раньше в справке по MQL4 было написано, что не рекомендуется изменять программно настройки советника (extern переменные) , но во многих MQL4 программах были конструкции вида:
и такие конструкции работали, т.е. при переключении ТФ переменная NewRUN = false, в последнем билде МТ4 если написать код так:
будет ошибка 'NewRUN' - constant cannot be modified , что в принципе логично и правильно
Первый пример кода компилятор пропускает, но если выполнить такой пример:
то при переключении ТФ будет писать в лог: 2018.11.26 21:57:56.906 tst GBPUSD,Daily: Перезапуск....
т.е. получается, что после повторной инициализации эксперта будут применены настройки которые были прописаны при первом запуске
Проблема: эксперт после достижения прибыли или убытка прекращает торговлю, я выполнил так:
как сделать так, чтобы пользователь мог перезапустить эксперта не удаляя его с графика после остановки торговли?
, но сохранив возможность пользователю переключать ТФВ деините есть реазон почему он был вызван, отлавливай смену тф и не перезапуска все. Изи
спс, я в курсе, задача была как в первом сообщении писал - юзер хочет перезапускать советника выбрав в меню настроек Перезапуск = true, вот и возник у меня вопрос, раньше много кто писал советников путем переприсваивания extern переменным своего значения (т..е видел неправильные коды, где extern double Lot = 0.1, а потом в процессе работы эта переменная изменялась Lot=Lot *2)
т.е. проблема, что если я напишу в коде эксперта Перезапуск = false, потом юзер изменит Перезапуск = true, а вот в следующий раз у юзера будет Перезапуск = true и он не сможет в один клик изменить эту переменную
я решил этот вопрос как во втором сообщении привел пример кода
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Версия терминала 1147
Знаю, что раньше в справке по MQL4 было написано, что не рекомендуется изменять программно настройки советника (extern переменные) , но во многих MQL4 программах были конструкции вида:
и такие конструкции работали, т.е. при переключении ТФ переменная NewRUN = false, в последнем билде МТ4 если написать код так:
будет ошибка 'NewRUN' - constant cannot be modified , что в принципе логично и правильно
Первый пример кода компилятор пропускает, но если выполнить такой пример:
то при переключении ТФ будет писать в лог: 2018.11.26 21:57:56.906 tst GBPUSD,Daily: Перезапуск....
т.е. получается, что после повторной инициализации эксперта будут применены настройки которые были прописаны при первом запуске
Проблема: эксперт после достижения прибыли или убытка прекращает торговлю, я выполнил так:
как сделать так, чтобы пользователь мог перезапустить эксперта не удаляя его с графика после остановки торговли?
, но сохранив возможность пользователю переключать ТФ