Остановка в одном заданном месте:
datetime DatePause=D'2014.08.06 23:25'; bool DoFlag=true;В OnTick()
if(TimeCurrent()>=DatePause && DoFlag) { DoPauseTest(); DoFlag=false; }
Если никто не возражает :) , добавлю такой вот вариант:
//+------------------------------------------------------------------+ //| Test_Pause.mq4 | //| Copyright 2014, GoldenMoney | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2014, GoldenMoney" #property link "http://www.mql5.com" #property version "1.00" #property strict ////+------------------------------------------------------------------+ ////| Expert tick function | ////| | ////| - вариант_1 "Aliaksandr Kryvanos" | ////+------------------------------------------------------------------+ //#include <pause.mqh> //datetime DatePauseArray[3]={D'2014.01.02 00:45',D'2014.01.03 10:00',D'2014.01.03 13:45'}; ////--------------------------------------------------------------------+ //void OnTick() // { ////--- // int static inc=0; // if(inc<3 && TimeCurrent()>=DatePauseArray[inc]) // { // inc++; // DoPauseTest(); // } // } ////+------------------------------------------------------------------+ ////+------------------------------------------------------------------+ ////| Expert tick function | ////| | ////| - вариант_2 "GoldnMoney" | ////+------------------------------------------------------------------+ //#include <pause.mqh> //extern datetime DatePause=D'2014.08.06 23:25'; //extern bool DoFlag=true; ////--------------------------------------------------------------------+ //void OnTick() // { ////--- // if(TimeCurrent()>=DatePause && DoFlag) // { // inc++; // DoPauseTest(); // } // } ////+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Expert initialization function | //| | //| - вариант_3 "sky_boy" | //+------------------------------------------------------------------+ #include <pause.mqh> extern datetime DatePause=D'2015.04.20 00:44'; //--------------------------------------------------------------------+ int OnInit() { //--- if(IsTesting()) v_line_("t_Pause",DatePause,clrWhite,0); // при переинициализации создадим вертикальную линию, где будет наша ПАУЗА в Тестере_стратегий, // в дальнейшем её можно будет подвинуть вручную для последующего останова(следующей ПАУЗЫ) //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if(IsDllsAllowed()==false) {Print(__LINE__," стр.__",__FILE__+" ======> ВНИМАНИЕ!!! необходимо разрешить использование (DLL) ====> Сервис/Настройки/Советники/... ."); return;} if( TimeCurrent() >= (datetime)ObjectGet("t_Pause",OBJPROP_TIME1) ) // если достигли времени постановки на ПАУЗУ { DoPauseTest(); // - обращение к функции ПАУЗА } } //+------------------------------------------------------------------+ //=================================================================================================== // ****************************** ПОЛЬЗОВАТЕЛЬСКИЕ ФУНКЦИИ *************************************** //=================================================================================================== //+------------------------------------------------------------------+ //| Функция создает обьект вертикальная линия | //+------------------------------------------------------------------+ datetime v_line_(string name,datetime t1=0,color col=clrYellow, int Win=0) { string txt = " -= ПАУЗА =- "; if(ObjectFind(0,txt)==-1) { ObjectCreate(name, OBJ_VLINE, Win, t1, 0); // --- создаём объект с координатами ObjectSet(name, OBJPROP_STYLE, 0); // --- стиль линии ObjectSet(name, OBJPROP_BACK, 0); // 0 - рисовать ; 1 - рисовать как фон ObjectSet(name, OBJPROP_COLOR, col); // --- зададим цвет ObjectSetText(name, txt, 12,"Courier New", 0); // --- описание (примечание) } ObjectSet(name,OBJPROP_TIME1, t1); // --- при последующих обращениях меняем время t1 объекта OBJ_VLINE //----- WindowRedraw(); return((datetime)ObjectGet(name,OBJPROP_TIME1)); // --- при выходе из функции вернём время местоположения объекта(куда установлен или перемещён объект) } //+------------------------------------------------------------------+в итоге получилось так :
Автоматический трейдинг и тестирование торговых стратегий
- www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
Прошу прощения за видеоролик выше :) .
Может есть идеи, как ставить на паузу тестирование в полноэкранном режиме с помощью клавиатуры?
-Aleks-:
Может есть идеи, как ставить на паузу тестирование в полноэкранном режиме с помощью клавиатуры?
Попытку реализации через "клаву" делал, но пока чё то не прокатило "разбор полётов", почему не пошло, оставил на потом.Может есть идеи, как ставить на паузу тестирование в полноэкранном режиме с помощью клавиатуры?
Если функцию OnChartEvent(...) то вариант работоспособности есть, если функция при этом реализована в индикаторе, а тот в свою очередь помещён в окне Терминала в момент тестирования, то так срабатывает! Если функция реализована в "сове..." и та(тот) Тестится то эффекта реакции нажатой клавиши, для запуска ПАУЗЫ, нет :( .
Может метаквоты что то прояснят по этому поводу, дав какие то комментарии или советы! А мы бы их послушали.
И еже ли чаВо то и заодно бы к ползунку скорости "упровлялку" "привинтить", как вариант нам, предоставили программным способом реализовать, а мы бы к ним с поклоном :) .
Может кому и интересно то поиграйтесь с этим, может кому и повезёт :
//+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ #define LEFT_SHIFT 16 //------------------------------------- void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- ResetLastError(); //--- сбросим значение ошибки //--- нажатие кнопки на клавиатуре if(id==CHARTEVENT_KEYDOWN) //--- проверка события нажатия на кнопку клавиатуры {Alert(__LINE__," стр.__",__FILE__," -------> произошло некое событие (нажатие кнопки клавиатуры) -------> id = ",lparam,"_",dparam,"_",sparam); switch(int(lparam)) { case LEFT_SHIFT : {Print("Нажата LEFT_SHIFT = ",lparam); DoPauseTest(); break;} } } return; }
sky_boy:
Может кому и интересно то поиграйтесь с этим, может кому и повезёт :
Этот код надо в советник встраивать? Для четверки он же будет работать?
Может кому и интересно то поиграйтесь с этим, может кому и повезёт :
-Aleks-:
Этот код надо в советник встраивать? Для четверки он же будет работать?
А по моемому я так выше и изложил: Этот код надо в советник встраивать? Для четверки он же будет работать?
"Если функция реализована в "сове..." и та(тот) ..........", а речь тут как раз о СОВЕТНИКЕ и к тому же дополню, что в MQL4, НЕ ЗАРАБОТАЛО!!!
Поэтому оставил всем право побаловаться, может я чего то не догоняю, в этих особенностях РЕАЛ и ТЕСТИНГ.
Суть в чём!?
OnChartEvent(...) сопротивляется работе именно в ТЕСТИНГЕ, а так всё нормуль, в других местах она продуктивна(работает)!
OnChartEvent(...) не возвращает значения реакций мыши и нажатий клавиш, при проведении тестирования.
В чём причина, вопрос в "студию"?!
sky_boy:
в MQL4, НЕ ЗАРАБОТАЛО!!!
Это печально. А в сервисдеск может обратиться для конкретного рассмотрения вопроса?
в MQL4, НЕ ЗАРАБОТАЛО!!!
-Aleks-:
Это печально. А в сервисдеск может обратиться для конкретного рассмотрения вопроса?
Это печально. А в сервисдеск может обратиться для конкретного рассмотрения вопроса?
Такие методы (каким сделано) вообще не обязаны работать.
При необходимости задача решается элементарно. Если надо встать на паузу, создаем графический объект и входим в бесконечный цикл. В цикле проверяем, существует ли объект. Если объекта нет, выходим из цикла.
Dmitry Fedoseev:
Это разве не приведет к необоснованной загрузке ядра? Я то вообще за то, что б было предусмотрено сочетание клавиш в интерфейсе терминала, позволяющих ставить на паузу визуализацию.
Такие методы (каким сделано) вообще не обязаны работать.
При необходимости задача решается элементарно. Если надо встать на паузу, создаем графический объект и входим в бесконечный цикл. В цикле проверяем, существует ли объект. Если объекта нет, выходим из цикла.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Pause:
Автор: Aliaksandr Kryvanos