Если эксперту нужна более глубокая история, то надо указывать соответствующую дату.
Так вы же сами установили предел с 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: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте](/i/community/logo_mql5_small.png)
- www.mql5.com
Тестер подгружает с предыдущего года.
Если надо больше ,то указывать дату старта раньше ,
а торговлю запрещать определенный период.
Вариант. Но хочется "из коробки". Подождём ответа Рената.
Я давно уже обратил внимание на эту особенность работы советника.
Лично для себя решил введением даты начала торгов. То есть, советник ждет этой даты, а тестирование - запускаем с той даты, данные за которую надо получить. В результате к началу торгов все данные становятся доступными.
А... Karlson уже эту возможность упомянул.
Надо бы увеличить до 1024 баров и эта проблема отпадет. Если противопоказаний нет, то сделаем.
К сожалению, в статью об основах тестирования не попала информация о глубине закачиваемой истории при тестировании. Мы эту информацию неоднократно озвучивали на форуме, и в ближайшее время обязательно добавим эту информацию (хоть и с большим опозданием, извините) в вышеуказанную статью.
Для всех таймфреймов до D1 включительно тестеру отдаётся история с 1 января предыдущего, относительно даты начала тестирования, года. Если дата начала тестирования будет 2012.11.15, то история будет закачиваться с начала 2011 года.
Для недельного таймфрейма обеспечивается 100 недель перед началом тестирования. Если дата начала тестирования 2012.11.15, то история будет закачиваться не позднее, чем с 2010.11.01
Для месячного таймфрейма обеспечивается 100 месяцев (если, конечно они есть). То есть, 8 лет.
Вы можете тестировать часовки, но указать в качестве таймфрейма тестирования месяц.
Либо можно самостоятельно обеспечить проверку на количество доступных баров в функции OnTick.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Возмём пример кода, приводимый в справке для функции SeriesInfoInteger().
Воткнём в скрипт, откроем график с любым символом (у меня - на 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 дней?