Подготовка исторических данных 100% качества для тестирования стратегий и советников

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

Как правило, у большинства брокеров качество котировок колеблется в районе от 90 до 96%. Терминал MT4 и так не слишком точный инструмент, поэтому добавлять еще 4-10% лишней неточности — не наш вариант. Наш выбор — котировки 100% качества. Где и каким образом их взять, как обработать и получить гарантированно качественный результат — в нашем сегодняшнем материале.

Типы исторических данных

Основной тип исторических данных, без которого просто не получится провести тестирование – это, естественно, данные по ценам. Исторические ценовые данные могут быть получены для различных периодов и из разных источников. Наиболее распространенные – для дневных, минутных и тиковых графиков. Как правило, глубже всего история именно для дневных графиков – ее можно получить, начиная с 1971 года (более длительную историю не поддерживает терминал MetaTrader). Минутные данные, как правило, идут максимум с 1999 — 1998 года, а тики в основном не ранее, чем с 2004 — 2007 года.

Как правило, для любого периода данные выглядят следующим образом: дата свечи, время, цена открытия, наивысшая цена, наинизшая цена, цена закрытия и тиковый объем. В некоторых источниках котировок тиковый объем может отсутствовать. Также для периодов от D1 и выше часто не указывают время открытия свечи или же не указывают максимальные и минимальные цены. Тиковые котировки отличаются от котировок, сконвертированных в определенный период. В таких котировках вы можете найти дату, время с точностью до секунд, цены Ask и Bid.

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

Вообще же, как правило, поиск необычных данных часто открывает интересные и выгодные возможности, на которых можно построить свою систему торговли и получать прибыль. У нас на форуме есть торговый робот, который анализирует данные из myfxbook об открытых трейдерами позициях и работает против них.

Временные масштабы данных

Данные можно использовать в своих естественных временных рамках, или же пересчитать их в другой временной масштаб. В зависимости от стратегии вам могут потребоваться различные таймфреймы, от М1 или даже тиков, до D1 или MN1. Из данных коротких таймфреймов можно легко сделать данные более длинных, но никак не наоборот. Например, из данных периода М1 мы легко можем получить и М5, и Н1, и D1. Именно поэтому важно иметь качественную базу данных именно М1 котировок.

Но М1 – не самый мелкий масштаб, ведь есть еще и тиковые данные. Тик – это не постоянная единица времени, иногда тики бывают очень частыми, особенно во время выхода новостей, а иногда, например, ночью, имеют большие временные промежутки друг между другом. Тиковая история в основном необходима для тестирования новостных советников, hft стратегий (использование которых вообще невозможно на платформе МТ4 или МТ5), а также для советников, использующих различные расчеты внутри свечей.

Но для таких советников слишком велико влияние брокеров, о чем я писал в этой статье. Если советник не пипсует по полпункта, нет никакой нужды тестировать его на тиковых данных – это очень долго и ресурсозатратно. К тому же бесплатные тиковые данные, которые можно найти в сети, не самого хорошего качества и за не слишком длительный период времени, а платные стоят довольно приличных денег – далеко не факт, что такие вложения вообще у вас окупятся.

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

Сколько нужно данных? Чем больше, тем лучше. Дело в том, что чем больше сделок в тесте, тем меньше риск «подгонки», тем более статистически весомый результат и тем больше вероятность того, что ваша система продолжит работать так же в будущем, как работала в прошлом. Поэтому очень желательно использовать всю доступную историю.

Выбор таймфрейма

Что касается таймфрейма, используемого для работы, то тут дело вкуса. При работе на низких периодах вроде М5 или М15, уходит много времени на тесты, к тому же такие системы очень требовательны к качеству котировок, сильно брокерозависимы и на конечный результат прилично влияют издержки, такие как спред, свопы, проскальзывания, комиссии.

С другой стороны, торговля при помощи подобных систем более динамична, ведь они могут совершать десятки сделок в день. Из-за относительно коротких стопов можно обойтись депозитом всего в 100 долларов. Как следствие, прирост депозита, как правило, более стремительный, чем у долгосрочных систем. Хотя и чаще всего более короткий – чем ниже период работы системы, тем она получается, как правило, менее стабильной.

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

Еще одна проблема – для долгосрочных систем необходимо достаточно большое количество исторических данных. Плюс на тех же дневных графиках стопы даже размером в два ATR получаются порой довольно большими, и чтобы соблюдать правильный мани менеджмент может не хватить и 2 000 долларов. Кроме того, при работе на высоких таймфреймах, как правило, используют портфели систем, чтобы сгладить кривую доходности. Тем не менее, выдерживать психологически десятки открытых сделок, болтающихся то в плюс, то в минус целыми неделями — довольно нелегко.

Выбор таймфрейма – это все же личное дело каждого трейдера. На любом из них есть свои плюсы и минусы, поэтому стоит просто решить, что вас раздражает больше.

Качество исторических данных

Одной из распространенных причин получения недостоверных результатов при тестировании советника в тестере стратегий терминала MetaTrader 4 являются проблемы с целостностью исторических котировок. В силу разных причин в истории цен, имеющейся в наличии в терминале, могут присутствовать «дыры», которые приводят к разрывам в ценовом потоке, не имеющим ничего общего с реальностью. Надо ли говорить, что тестировать советник по таким котировкам не имеет большого смысла?

Плохие данные могут любой анализ системы привести в состояние полного хаоса, дать убыточные заключения стоящим системам или, что еще хуже, дать зеленый свет системам, которые того не стоят. Поэтому к историческим данным стоит подойти со всей ответственностью – это база, на которой в дальнейшем будет строиться вся ваша торговля. Некачественная историческая база может систематически приводить к ошибкам и, как следствие, к потере уймы времени и средств, причем вы так и не будете понимать, в чем же, собственно, проблема и почему ваши системы, зарабатывающие на тестах, не хотят работать на реале.

Ошибки в данных могут принимать несколько различных форм. Довольно часто при торговле попадаются тики с явно ошибочными ценами, просто невозможными. Например, цена на секунду взлетает до небес, а затем, в следующую секунду, возвращается обратно. Это так называемая «шпилька», которыми еще буквально несколько лет назад грешили почти все брокеры. Такая ошибка может привести к сделке с огромной прибылью или убытком. А если таких «шпилек» в данных много, то тест любой системы будет далек от реальности. Особенно это касается тестов различных сеточных стратегий, где «шпилька» — это гарантированный слив депозита, и, как следствие, тест не проходит фильтр.

Более распространены и менее заметны обычные небольшие ошибки в уровнях цен. Например, вместо цены закрытия 1.4378 у нас имеется цена 1,4387. Естественно, такую ошибку заметить сложно, особенно если она на высоком таймфрейме. Благо, чаще всего они не сильно влияют на результаты тестов, хотя бывают и исключения. Поэтому стоит сверять котировки от нескольких разных поставщиков, чтобы получить максимально достоверные цены.

Ну и самая распространенная ошибка — это пропуск данных. Просто по каким-то причинам определенный отрезок времени в базу не записывается, образуя разрывы котировок. Чаще всего такая проблема встречается в праздники, на Новый Год и в ночные периоды. Чем «дырявее» график, тем меньше реальности в тестах. Эта проблема также решается заполнением пробелов из других источников.

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

Какими, на мой взгляд, должны быть качественные исторические данные?

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

Также стоит помнить, что советник просто обязан работать именно на открытии свечи. Для этого, как правило, в код советника прописывают специальную функцию, которая разрешает торговлю только когда открывается новая свеча заданного таймфрейма. Для того, чтобы делать надежные тесты не по закрытию свечи, вам будут нужны качественные тики и специальный софт, позволяющий проводить такие тесты. Если этого у вас нет — терминал будет сам придумывать то, что творилось внутри свечей. Сами понимаете — он может напридумывать все, что угодно.

Такие данные не имеют существенных провалов, то есть так называемых «дыр». Это зависит в первую очередь от поставщика котировок – насколько бесперебойно работало оборудование, сохраняющее исторические данные.

Такие котировки не имеют пропусков единичных или нескольких баров. В идеале нужно иметь стопроцентную полноту котировок (не путать с качеством моделирования). 100% полнота истории минутных котировок, на мой взгляд, необходима потому, что из минутки формируются последующие таймфреймы и отсутствие некоторых минутных баров, в конечном итоге, порождает «кривые» бары более высоких таймфреймов.

Сразу хочу обратить внимание, что мало в каком ДЦ есть собственная длительная история котировок в открытом доступе, особенно это касается котировок маленьких таймфреймов. О том, где можно взять исторические данные, мы говорили в этой статье.

Анализ дыр на истории котировок

Узнать качество графика поможет скрипт history_data_analysis.

Этот код выявляет в данных истории отсутствующие бары («дыры») и разрывы (большие дыры), определяет их размер, длительность и гэп. Работает на всех инструментах и предназначен для внутредневных графиков, поэтому таймфрейм ограничен периодом H4.

При анализе учитываются только выходные дни (суббота и воскресение — 48 часов), остальные моменты код считает дырами или разрывами. Для удобства работы на графике в коде предусмотрен фильтр, где можно задать количество отсутствующих баров на таймфреймах (M1,5,15,30), которые код будет игнорировать как дыры, количество отсутствующих баров (минимальное значение), которое код считал бы разрывом (по умолчанию 20 баров), а также количество отсутствующих пипсов, которые код будет игнорировать как гэп. После запуска скрипта и окончания его работы вы увидите сообщение:

Для примера я провел тестирование качества котировок пары EURUSD Alpari:

Ну и для примера сделаем такой же тест для котировок Dukascopy EURUSD M1:

Как вы можете убедиться, использовать для тестирования лучше всего данные от Dukascopy — общее качество котировок тут находится в районе 99,55%. Всего 0,45% пропусков и разрывов, очень неплохой результат. Тем не менее, у нас по-прежнему 4662 разрыва – не хватает почти двадцать пять тысяч баров и целых 39740 пунктов. А поэтому — для максимально достоверных тестов эту проблему придется устранять.

Доведение качества котировок до 100%

1. Я рекомендую для базовой истории котировок использовать данные от Ducaskopy, в них мало всего дыр и их потом меньше придется «латать». Для этого можно воспользоваться любой вспомогательной программой, которая загружает тики Ducaskopy. Я рекомендую Tickstory Lite.

2. После закачки тиков в программе Tickstory Lite, нажмите правой кнопкой мыши на интересующей вас валютной паре и выберите пункт «Экспорт в файл»:

3. Заполните поля с настройками:

4. Откройте каталог данных:

5. В каталоге данных находим папку history, затем находим нужную папку по названию нашего сервера:

6. Удаляем все hst файлы нужной валютной пары.

7. Экспортируйте скачанные котировки в терминал, нажав F2, выбрав нужную валютную пару, период М1 и нажав кнопку «Импорт»:

8. Откройте график валютной пары периода М1.

9. Проведите тест качества при помощи скрипта history_data_analysis. По полученному в результате тестирования текстовому файлу нужно найти наиболее критичные места. Затем эти критичные места удаляются. Их мы будем позже восполнять котировками из других источников (ставить так называемые «заплатки»).

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

10. Откуда брать сырье для заплаток — мы уже обсуждали в этой статье.  Вам понадобится один, может, два источника — все зависит от конкретного случая.

11. Прежде всего ваши данные для заплаток нужно привести к формату csv, если они у вас в hst формате, и в этом поможет скрипт hst2csv.

12. Затем эти данные из других источников нужно привести к правильному времени, а именно выставить для них тот же GMTOffset, что и у вашего брокера, и у корректируемых котировок. Не стоит упускать из виду, так это информацию о том, какой точно сдвиг относительно GMT у конкретного источника котировок, менялся ли он когда-либо и использовался ли перевод на зимнее/летнее время. Например, котировки Alpari до 2011 года имели GMT+2, а после 2011 – GMT+3.

Чтобы это сделать, вам потребуется отдельный терминал. В него нужно по очереди загружать котировки каждого из источников, изменять время GMT при помощи скрипта GMTconverter, который я написал, когда обнаружил, что по какой-то причине в сети подобных скриптов нет. Скрипт вы сможете найти/скачать в конце статьи. Также вы можете при импорте скачанных котировок в отдельный терминал указать нужный GMT, но иногда это не работает. Для того, чтобы указать нужный GMT при импорте котировок, нужно указать «Сдвиг» в часах. Затем эти котировки нужно экспортировать, нажав кнопку экспорт. Таким образом, котировки сохранятся в нужном формате и с нужным вам GMT.

13. После приведения котировок к нужному виду просто открываем наш файл с нашим тестом качества и источник заплаток, который мы получили. Причем открывать файлы нужно именно в Блокноте, так как Excel может не открыть файл целиком, если истории довольно много.

14. Находим каждый из проблемных отрезков в файле для заплаток и переносим куски в отдельно открытый файл Блокнота:

15. Если в одном из источников не хватает данных, пробуем найти в других источниках.

16. Далее сохраняем подготовленный файл в формате csv. Просто меняем расширение файла с txt на csv.

17. Импортируем в терминал к котировкам Ducascopy. Удаленные участки автоматически восстановятся из подготовленного нами файла.

18. После долгой и кропотливой работы по импорту заплаток нужно закрыть терминал и открыть его снова, чтобы залатанная история подгрузилась. Снова набрасываем скрипт history_data_analysis и смотрим на результат нашей работы.

19. Теперь приходит очередь второго скрипта AllMinutes_Step1. Что он делает? Дело в том, что те минутные бары, в которых ничего не происходило и не было никаких цен, терминал автоматически пропускает. Скрипт осуществляет техническое наполнение пропущенных баров для обеспечения в последующем правильной генерации свечей более высоких таймфреймов. Итак, бросаем его на график и включаем вкладку «Эксперты». Это вкладка нам нужна, чтобы увидеть сообщение о завершении работы этого скрипта и его краткий отчет.

20. Как только появилось сообщение о завершении работы скрипта, нужно открыть автономный график (Файл — Открыть автономно — ALLEURUSD1):

21. Бросаем на открывшийся график первый скрипт history_data_analysis. Получаем отчет, к которому мы вернемся несколько позднее.

22. Далее в работу запускаем третий скрипт — hst2csv. Дело в том, что предыдущий скрипт в процессе своей работы не просто заполнил на графике в автономном режиме все пропущенные бары, но еще и сформировал такую же полную базу котировок в формате hst. Файл образовался в папке истории и имеет название «ALLEURUSD1». Запускаем на автономном графике скрипт history_data_analysis. Теперь нам придется этот файл ALLEURUSD1.hst переформатировать в управляемый (с точки зрения сдвигов времени) формат .csv, что собственно и будет делать скрипт hst2csv.

23. А теперь вернемся к отчету, сделанному по результатам анализа автономного графика. Это необходимо для того, чтобы отследить те минимальные пробелы, которые могут быть не замечены скриптом. Такое случается не всегда, но иногда бывает. Скрипт нашел и заполнил тысячи одиноких баров, но, увы, мог несколько и пропустить. А поэтому этот недочет придется устранять вручную.

В принципе, это несложно — в отчете в таблице указаны конкретные координаты этих пропусков. Поэтому работа очень похожа на ту, что мы делали в пункте 14. В общем, заходим в папку «Файлы». Открываем «ALLEURUSD1.csv» при помощи программы Блокнот. Используя функцию «поиск», оказываемся в нужной дате. Заполняем пропущенные бары последней известной ценой, не забывая изменять время баров.

24. Открываем в терминале архив котировок (F2), удаляем всю хранящуюся в нем историю формата hst, после чего загружаем этот новый сконвертированный файл. Снова закрываем и открываем терминал. Открываем график, в нашем случае EURUSD M1 и делаем контрольный замер скриптом history_data_analysis на случай, если мы что-то упустили.

25. Дело осталось за малым — за скриптом period_converter_ALL. С ним вообще все просто — бросаем на график и смотрим в верхний левый угол — пока там бегут цифры, скрипт еще работает. Как только движение в том углу прекратится, значит работа завершена. И в конце последовательно переключаем все таймфреймы, чтобы они подгрузились.

Заключение

Вот и все — в нашем терминале теперь котировки 100% качества. Можно получить максимально точное тестирование и хорошую гарантию достоверности результатов, если есть вспомогательные таймфреймы периода М1, которые на 100% покрывают исследуемый период.

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

Скачать набор необходимых скриптов

Инструкция по установке скриптов в MT4

Тема на форуме

С уважением, Дмитрий аkа Silentspec
TradeLikeaPro.ru

Софт для трейдинга , , , , ,