Библиотеки: Pause

 

Pause:

Библиотека эмуляции нажатия кнопки пауза в тестере стратегий, в любое указанное время поставит тестер стратегий на паузу.

Автор: Aliaksandr Kryvanos

 

Остановка в одном заданном месте:

Глобальные переменные:

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,  НЕ ЗАРАБОТАЛО!!!
Это печально. А в сервисдеск может обратиться для конкретного рассмотрения вопроса?
 
-Aleks-:
Это печально. А в сервисдеск может обратиться для конкретного рассмотрения вопроса?

Такие методы (каким сделано)  вообще не обязаны работать.

При необходимости задача решается элементарно. Если надо встать на паузу, создаем графический объект и входим в бесконечный цикл. В цикле проверяем, существует ли объект. Если объекта нет, выходим из цикла. 

 
Dmitry Fedoseev:

Такие методы (каким сделано)  вообще не обязаны работать.

При необходимости задача решается элементарно. Если надо встать на паузу, создаем графический объект и входим в бесконечный цикл. В цикле проверяем, существует ли объект. Если объекта нет, выходим из цикла. 

Это разве не приведет к необоснованной загрузке ядра? Я то вообще за то, что б было предусмотрено сочетание клавиш в интерфейсе терминала, позволяющих ставить на паузу визуализацию.
Причина обращения: