Тестер стратегий

 

ПОМОГИТЕ

Перестал работать тестер стратегий. Гонял много раз на 5 мин.. На других таймфреймах еще работает. В сообщениях- см. скрин. Кто может помогите разобраться.

Файлы:
1.png  20 kb
 
прогрузи историю заново (F2) после перезапуска терминала.
 

   Функция работы в заданном временном диапазоне не работает, что я делаю не так? Прилагаю скрипт:

 

 При запуске в журнале если hr>HourEnd функция показывает true, почему?

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
kuva:

   Функция работы в заданном временном диапазоне не работает, что я делаю не так? Прилагаю скрипт:

 ...

При запуске в журнале если hr>HourEnd функция показывает true, почему?

Правильно вставляем код на форуме

При объявлении переменной, желательно сразу её инициализировать - то есть присваивать какое-то значение. Например так:

input int    HourStart =   10; // Час начала торговли
input int    HourEnd   =   16; // Час окончания торговли
//---

bool       TradeInTimeRange=true;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
 

 После того как я инициализировал TradeInTimeRange=true в этом скрипте, после запуска в журнале вообще перестал появляться Print, а появилась надпись:

 2015.02.14 10:35:00.995 Test9 (Si-3.15,M1) Stack overflow in 'D:\Program Files\MQL5\Scripts\Test9.ex5' а эксперт с этой функцией вообще перестал открывать сделки?


 
kuva:

 После того как я инициализировал TradeInTimeRange=true в этом скрипте, после запуска в журнале вообще перестал появляться Print, а появилась надпись:

 2015.02.14 10:35:00.995 Test9 (Si-3.15,M1) Stack overflow in 'D:\Program Files\MQL5\Scripts\Test9.ex5' а эксперт с этой функцией вообще перестал открывать сделки?


Исправьте, пожалуйста своё первое сообщение. Правильно вставляем код на форуме.

При TradeInTimeRange=true прекрасно появляются во вкладке "Эксперты" принты вроде этого:

2015.02.14 13:10:34.208 test_script (EURUSD,D1) lat_date.hour = 13 HourEnd = 16IsInTradeTimeRange()= true


И ещё - это скрипт, а не эксперт. Этот скрипт не имеет в своём коде торговых функций.  

 
Что то не получается у меня вставить код, все делаю как в инструкции по ссылке, и когда вставляю все показывается как надо, а когда нажимаю "обновить" на странице никакого кода не появляется. И в скрипте, попробуйте поставить HourEnd меньше чем текущий час,  у меня все равно в Print'е показывет IsInTradeTimeRange()=true.
 
kuva:
Что то не получается у меня вставить код, все делаю как в инструкции по ссылке, и когда вставляю все показывается как надо, а когда нажимаю "обновить" на странице никакого кода не появляется. И в скрипте, попробуйте поставить HourEnd меньше чем текущий час,  у меня все равно в Print'е показывет IsInTradeTimeRange()=true.

В функции IsInTradeTimeRange() Вы делали зацикливание. Именно поэтому и происходило переполнение стека.

Вот Ваш код, с исправлением:

//+------------------------------------------------------------------+
//|                                                        Test9.mq5 |
//|                                                          Ale Bor |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Ale Bor"
#property link      "http://www.mql5.com"
#property version   "1.00"


input int    HourStart =   10; // Час начала торговли
input int    HourEnd   =   16; // Час окончания торговли
//---

bool       TradeInTimeRange=true;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   IsInTradeTimeRange();
   MqlDateTime lat_date;
//--- Получим последние данные даты и времени
   TimeTradeServer(lat_date);
   Print("lat_date.hour = ",lat_date.hour," HourEnd = ",HourEnd,"IsInTradeTimeRange()= ",IsInTradeTimeRange());
  }
//+------------------------------------------------------------------+
bool IsInTradeTimeRange()
  {
//--- Если включена торговля во временном диапазоне
   if(TradeInTimeRange)
     {
      //--- Структура даты и времени
      MqlDateTime str_LastDate;
      //--- Переменная для хранения времени
      datetime current;
      //--- Получим последние данные даты и времени
      current=TimeCurrent();
      //--- Конвертация из значения типа datetime (количество секунд с 01.01.1970) в переменную типа структуры MqlDateTime
      TimeToStruct(current,str_LastDate);
      int hr=str_LastDate.hour;
      //--- Вне разрешенного временного диапазона
      if(hr>HourEnd)
        {
         Print("last_date.hour = ",str_LastDate.hour," HourEnd = ",HourEnd);
         return(false);
        }
     }
//--- В разрешенном временном диапазоне
   return(true);
  }
//+------------------------------------------------------------------+
 

 Да у меня тоже получилось когда я убрал вообще переменную TradeInTimeRange и вместо TimeTradeServer() поставил TimeCurrent() , но почему произошло зацикливание я так и не понял. И еще, не подскажите как еще добавить чтобы и минуты можно было указывать. Я в эту функцию вставил такой код:

 if((last_date.hour<HourStart && last_date.min<5) || last_date.hour>=HourEnd) , но она минуты просто не заметила и работает только по часам?

 
kuva:

 Да у меня тоже получилось когда я убрал вообще переменную TradeInTimeRange и вместо TimeTradeServer() поставил TimeCurrent() , но почему произошло зацикливание я так и не понял. И еще, не подскажите как еще добавить чтобы и минуты можно было указывать. Я в эту функцию вставил такой код:

 if((last_date.hour<HourStart && last_date.min<5) || last_date.hour>=HourEnd) , но она минуты просто не заметила и работает только по часам?

Почему произошло? Потому что Вы так написали код. Сравните свой первоначальный код и мой. Вы даже не использовали мой изменённый код. Разберитесь, потом задавайте вопросы.
 

Да спасибо, все понял. Правда дело в том, что эту функцию я взял из эксперта multisymbolpendingorders.zip из статьи https://www.mql5.com/ru/articles/648 . Так все таки не подскажите, как сделать чтобы еще и минуты можно было указывать при работе во временном диапазоне? После исправления кода по вашему совету минуты все равно не работают.

 MqlDateTime str_LastDate;
      //--- Переменная для хранения времени
      datetime current;
      //--- Получим последние данные даты и времени
      current=TimeCurrent();
      //--- Конвертация из значения типа datetime (количество секунд с 01.01.1970) в переменную типа структуры MqlDateTime
      TimeToStruct(current,str_LastDate);
      int hr=str_LastDate.hour; int mn=str_LastDate.min;
      //--- Вне разрешенного временного диапазона
      if((hr<HourStart && mn<MinStart) || hr>=HourEnd)
        {
         Print("last_date.hour = ",str_LastDate.hour," HourEnd = ",HourEnd);
         return(false);
        }

 

  


Рецепты MQL5 - Мультивалютный эксперт: пример простой, точной и быстрой схемы
Рецепты MQL5 - Мультивалютный эксперт: пример простой, точной и быстрой схемы
  • 2013.06.11
  • Anatoli Kazharski
  • www.mql5.com
В этой статье мы рассмотрим реализацию простой схемы для мультивалютного эксперта. В данном случае имеется в виду, что эксперт можно будет настроить на тестирование/торговлю по одинаковым условиям, но с разными параметрами для каждого символа. В качестве примера создадим схему для двух символов, но сделаем это так, чтобы при необходимости можно было добавлять дополнительные символы, внося небольшие изменения в код.