Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Roman Zamozhnyy
2200
Roman Zamozhnyy  

Возмём пример кода, приводимый в справке для функции 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 дней?

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

Если эксперту нужна более глубокая история, то надо указывать соответствующую дату.
Roman Zamozhnyy
2200
Roman Zamozhnyy  
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 на сервере истории нет. А она есть... 

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

Olegs Kucerenko
12062
Olegs Kucerenko  

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

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

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

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

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

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

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

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

George Merts
3747
George Merts  

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

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

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

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

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

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

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

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

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

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

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий