Длительность доступной истории в тестере

 

Возмём пример кода, приводимый в справке для функции SeriesInfoInteger()

Print("Количество баров по символу-периоду на данный момент = ",           SeriesInfoInteger(Symbol(),0,SERIES_BARS_COUNT        ));
Print("Самая первая дата по символу-периоду на данный момент = ",(datetime)SeriesInfoInteger(Symbol(),0,SERIES_FIRSTDATE         ));
Print("Самая первая дата в истории по символу на сервере = ",    (datetime)SeriesInfoInteger(Symbol(),0,SERIES_SERVER_FIRSTDATE  ));
Print("Самая первая дата в истории по символу в терминале = ",   (datetime)SeriesInfoInteger(Symbol(),0,SERIES_TERMINAL_FIRSTDATE));
Print("Данные по символу синхронизированы = ",                   (bool)    SeriesInfoInteger(Symbol(),0,SERIES_SYNCHRONIZED      ));

Воткнём в скрипт, откроем график с любым символом (у меня - на IBM) на ДНЕВНОМ таймфрейме. Получим в журнале:

2013.05.25 21:18:05 test (#IBM,D1) Данные по символу синхронизированы = true
2013.05.25 21:18:05 test (#IBM,D1) Самая первая дата в истории по символу в терминале = 2007.06.12 00:00:00
2013.05.25 21:18:05 test (#IBM,D1) Самая первая дата в истории по символу на сервере = 2007.06.12 00:00:00
2013.05.25 21:18:05 test (#IBM,D1) Самая первая дата по символу-периоду на данный момент = 2007.06.12 00:00:00
2013.05.25 21:18:05 test (#IBM,D1) Количество баров по символу-периоду на данный момент = 1431

Воткнём тот-же код в OnInit() советника. Кинем на график. Получим в журнале:

2013.05.25 21:18:21 main (#IBM,D1) Данные по символу синхронизированы = true
2013.05.25 21:18:21 main (#IBM,D1) Самая первая дата в истории по символу в терминале = 2007.06.12 00:00:00
2013.05.25 21:18:21 main (#IBM,D1) Самая первая дата в истории по символу на сервере = 2007.06.12 00:00:00
2013.05.25 21:18:21 main (#IBM,D1) Самая первая дата по символу-периоду на данный момент = 2007.06.12 00:00:00
2013.05.25 21:18:21 main (#IBM,D1) Количество баров по символу-периоду на данный момент = 1431

 

А теперь - десерт! Попробуем прогнать этот-же советник в тестере. Зададим начало периода тестирования на 01.07.2012. Получим в журнале:

2013.05.25 21:18:29 Core 1 EURUSD,Daily: 1 ticks (1 bars) generated within 0 ms (total bars in history 391, total time 250 ms)
2013.05.25 21:18:29 Core 1 OnTick critical error
2013.05.25 21:18:29 Core 1 2012.07.02 00:00:00   array out of range in 'recalc_indicators_lib.mqh' (72,18)
2013.05.25 21:18:29 Core 1 2012.07.02 00:00:00   391
2013.05.25 21:18:29 Core 1 2012.07.01 00:00:00   Данные по символу синхронизированы = true
2013.05.25 21:18:29 Core 1 2012.07.01 00:00:00   Самая первая дата в истории по символу в терминале = 2011.01.03 00:00:00
2013.05.25 21:18:29 Core 1 2012.07.01 00:00:00   Самая первая дата в истории по символу на сервере = 2011.01.03 00:00:00
2013.05.25 21:18:29 Core 1 2012.07.01 00:00:00   Самая первая дата по символу-периоду на данный момент = 2011.01.03 00:00:00
2013.05.25 21:18:29 Core 1 2012.07.01 00:00:00   Количество баров по символу-периоду на данный момент = 390

 

Тестер видит историю максимум до начала предыдущего года!

Советник пытается получить историю днёвок за 1000 дней - отсюда и ошибка Array out of range. 

Как тестировать советник, если нужен доступ к истории днёвок, допустим, длиной 500 дней? 1000 дней?

 
Так вы же сами установили предел с 2012 года?

Если эксперту нужна более глубокая история, то надо указывать соответствующую дату.
 
Renat:
Так вы же сами установили предел с 2012 года?

Если эксперту нужна более глубокая история, то надо указывать соответствующую дату.

Ренат, нет.

Я лишь установил дату начала тестирования в 01.07.2012 г.

В теле советника я пытаюсь получить доступ к последним 1000 дням истории до даты 01.07.2012 г.

CopyOpen(Symbol(),PERIOD_D1,0,1000,price_open);

А получаю только с 01.01.2011 г.

2013.05.25 21:18:29 Core 1 2012.07.01 00:00:00   Самая первая дата в истории по символу в терминале = 2011.01.03 00:00:00
2013.05.25 21:18:29 Core 1 2012.07.01 00:00:00   Самая первая дата в истории по символу на сервере = 2011.01.03 00:00:00 

Тестер считает, что до 03.01.2011 на сервере истории нет. А она есть... 

Попробуйте пройти все три шага, описанные мною в первом посте. 

 

Тестер подгружает с предыдущего года.

Если надо больше ,то указывать дату старта раньше ,

а торговлю запрещать определенный период. 

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
Karlson:

Тестер подгружает с предыдущего года.

Если надо больше ,то указывать дату старта раньше ,

а торговлю запрещать определенный период. 

Вариант. Но хочется "из коробки". Подождём ответа Рената.

 

Я давно уже обратил внимание на эту особенность работы советника.

Лично для себя решил введением даты начала торгов. То есть, советник ждет этой даты, а тестирование - запускаем с той даты, данные за которую надо получить. В результате к началу торгов все данные становятся доступными. 

А... Karlson уже эту возможность упомянул.

 
В тестере действует правило "даем на 100 баров от начала теста, чтобы покрыть потребности начального расчета", что на высших периодах недостаточно.

Надо бы увеличить до 1024 баров и эта проблема отпадет. Если противопоказаний нет, то сделаем.
 
Спасибо, ждем.
 
Кстати, да, меня тоже эта тема давно беспокоит... Если есть такая возможность... Поместите пожалуйста настроечку в "Настройки->Графики->Макс.баров в истории на начало тестирования". Или в тестер "Свойства эксперта->Тестирование-> Макс.баров в истории на начало тестирования ". Что бы каждый мог сам себе настраивать сколько исторических данных ему требуется из доступных на начало тестирования советника. Буду очень благодарен.
 

К сожалению, в статью об основах тестирования не попала информация о глубине закачиваемой истории при тестировании. Мы эту информацию неоднократно озвучивали на форуме, и в ближайшее время обязательно добавим эту информацию (хоть и с большим опозданием, извините) в вышеуказанную статью.

Для всех таймфреймов до D1 включительно тестеру отдаётся история с 1 января предыдущего, относительно даты начала тестирования, года. Если дата начала тестирования будет 2012.11.15, то история будет закачиваться с начала 2011 года.

Для недельного таймфрейма обеспечивается 100 недель перед началом тестирования. Если дата начала тестирования 2012.11.15, то история будет закачиваться  не позднее, чем с 2010.11.01

Для месячного таймфрейма обеспечивается 100 месяцев (если, конечно они есть). То есть, 8 лет.

Вы можете тестировать часовки, но указать в качестве таймфрейма тестирования месяц.

Либо можно самостоятельно обеспечить проверку на количество доступных баров в функции OnTick.