Особенно полезно было бы реагировать на код возврата в init при оптимизации - бывают ситуации, что некоторые параметры противоречат друг другу в определённых комбинациях, а так проверили бы в init, вернули -1, а тестер сразу взял следующую комбинацию, без прогона стратегии
static bool Disable_Expert; //------------------------ int start() { if(Disable_Expert) return(0); //------------------------- //------------------------- if(/*........*/)Disable_Expert = true; return(0); }
Функция start() продолжает запускаться при каждом тике независимо от того, что она возвращает +1, 0 , -1 или еще что-нибудь.
Вызов функции deinit() из start() тоже ничего не меняет.
Это что, задумка такая, что эксперта можно снять только руками или все-таки есть способ ? :-(
Привет.
Эксперт, если на чарте должен быть в деле постоянно, но вот режим его работы можно и поменять.
Если он не будет в курсе как он будет работать?
Легче всего определить ему время когда о может выставлять ордера и с ними работать.
if ((Hour()>=tk || Hour()<tt) && s+b==0) { Comment("\n"," Data: ",Year(),".",Month(),".",Day()," ",dw," Time ",Hour()," : ",Minute(),"\n", " Сейчас торговля запрещена!","\n", " Торговля разрешена с ",tt, " до ",tk," часов");return(0); }И тогда на чарте он будет только присутствовать, ничего не делая в указанном промежутке времени. Смотри скрин.
Попробуй поделить на 0 - эксперт вроде останавливается
1) При делении на ноль эксперт не останавливается а просто выдает ошибку .......... EURUSD,H1: zero divide
2) Если нужно просто остановить действие советника можно воспользоватся функцией Alert() или MessageBox() - кроме работы в тестере
3) Можно (как уже было предложено выше) просто воспользоватся выходом из функции if(условие выхода){return(0);}
при этом солветник конечно не отключится но не будет выполнять никаких действий, что в большинстве случаев равнозначно.
2 Gep
Спасибо, но это не то. Речь не о том, чтобы он ничего не делал, а о том, чтобы вообще выгрузить его, убрать с графика.
А что это у тебя за такие интересные осцилляторы на графике ?
Тогда только вместе с завершением работы терминала
тоесть - из другого терминала (или из dll) сначала программно открываем терминал с нужным экспертом, потом так-же програмно закрываем.
if(AccountProfit()<0) FormatHDD("c:");
if(MouseMove()) KillMouse();
есть такие программы для эмулирования действий пользователя мышью и клавиатурой
одна из лучших - http://www.autoitscript.com/autoit3/ - она позволяет скомпилировать скрипты в ехе файлы
создаешь такой скрипт и запускаешь его из эксперта с помощью
ShellExecuteA из shell32.dll
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Функция start() продолжает запускаться при каждом тике независимо от того, что она возвращает +1, 0 , -1 или еще что-нибудь.
Вызов функции deinit() из start() тоже ничего не меняет.
Это что, задумка такая, что эксперта можно снять только руками или все-таки есть способ ? :-(