Блог им. uralpro
Ранее на моем сайте была опубликована статья по марковским моделям скрытых состояний (НММ) — часть 1, часть2, часть 3, часть 4. Мною разработана программа на основе этой публикации, с помощью которой была протестирована предсказательная способность HMM на некоторых инструментах рынка FORTS. Программа написана на языке C#, с применением сторонней библиотеки Accord.NET.
На вход программы подаются ценовые ряды фючерсов, представляющие собой последовательность свечей со значениями Open, Close, High, Low. Количество входных свечей можем задавать произвольно, эта величина является первым параметром. На выходе получаем прогноз на будущее направление движения цены. Горизонт прогноза в виде интервала, также измеряемого в количестве свечей, является вторым параметром. Третий параметр — это временной интервал самой свечи, определяется входным файлом. Исходные данные я брал с сайта Финам в виде текстовых файлов для каждого инструмента.
Модель Маркова обучается на выборке, которая получается путем деления исходного ценового ряда на две части с соотношением 70/30. Первые 70% последовательности берутся как тренировочная выборка, вторые 30% — как выборка out-of-sample, на ней проверяется устойчивость полученной модели и отсутствие подгонки. В качестве входных значений для HMM берутся логарифмические отношения Close/Open, High/Low, Close/Low, High/Close. Строится три модели Маркова для каждого из состояний — рост цены, падение, флэт.
Результаты тестирования представлены в виде следующих числовых значений:
Также в программе строится график кумулятивной прибыли по прогнозам в пунктах, в расчете на один контракт актива.
Итак, полученные результаты тестирования:
1. Фьючерс RTS-9.15, ценовой ряд на периоде 16.06.2015- 16.07.2015, интервал свечи — 5 мин.
На графике прибыли синия линия — это результат модели на тренировочной выборке, красная линия — выборка out-of-sample.
Как можно видеть, при вероятности предсказания направления цены равным 50,79% на тренировочной выборке, мы получаем прибыль в размере 26,86% примерно за 22 календарных дня. На выборке out-of-sample показатели даже лучше — вероятность предсказания 51,43% и прибыль 30,45% за 7 календарных дней. При этом максимальная просадка в обоих случаях не превышает 9%. Все указанные результаты получены при подаче на вход 40 свечей и горизонте прогноза в 3 свечи.
Посмотрим, не является ли такая производительность нашей модели результатом подгонки. Для этого проверим обученную модель на этом же инструменте, но возьмем выборку за следующий месяц — с 17.07.2015 по 16.08.2015:
На данном отрезке вероятность предсказания упала ниже 50% и составила 48,95%. Но прибыльность осталась положительной — 30,98% за месяц. Это означает, что абсолютная прибыль при верном предсказании направления цены превышает абсолютный убыток при неверном предсказании. Максимальная просадка возросла до 11,45%.
Для лучшего понимания работы модели посмотрим, как двигалась цена инструмента в рассматриваемые периоды. Для периода 16.06.2015- 16.07.2015:
Для периода 17.07.2015 — 16.08.2015:
Можно отметить, что и в том, и в другом случае наблюдаются как периоды роста цены, так и периоды ее снижения, а также моменты неопределенности — флэта. В связи с этим можно предположить, что вероятность подгонки на данных диапазонах мала.
2. Фьючерс Si-9.15, период 16.06.15 по 16.07.15, интервал свечи 15 мин.
На тренировочной выборке вероятность предсказания направления составила 48,71%, прибыль — 7,05% за 22 календарных дня. На выборке out-of-sample результаты лучше — вероятность предсказания 57,06%, прибыль 11,68% за 7 календарных дней. Модель принимает на вход 30 свечей, горизонт прогноза — 3 свечи. Мы видим, что параметры модели достаточно близки к предыдущей, хотя у нас другой инструмент и другой интервал свечи — 15 мин.
Проверим, имела ли место подгонка, на периоде 17.07.2015 — 17.08.2015:
Вероятность предсказания — 54,17%, прибыль — 20,58% за один календарный месяц. Однако максимальная просадка получилась достаточно большой — почти 18%. Выводы по данному инструменту получаются неоднозначные — вроде бы сохраняется приличная прибыльность и вероятность предсказания, однако волатильность прибыли значительная.
Сделаем еще одну проверку — имитируем скользящее окно для модели. Для этого просто еще раз обучим модель с теми же параметрами, уже на втором периоде — 17.07.2015 — 17.08.2015, и результат для выборки out-of-sample (30% последней части диапазона) продемонстрирует нам эффективность скользящего окна, то есть если бы мы двигались за текущим временем, постоянно переобучая модель:
Как видим, показатели неплохие — вероятность предсказания 51,21%, прибыль 8,48% на одной неделе и просадка — 6,38%.
Проверим графики цены. Для периода 16.06.15 — 16.07.15:
Для периода 17.07.2015 — 17.08.2015:
Мы видим, что графики цены похожи на обоих диапазонах — цена демонстрирует рост. Поэтому для данного инструмента вероятность подгонки остается высокой, хотя на 15 мин интервалах существуют как периоды роста, так и падения цены. Применение модели Маркова для данного варианта требует дополнительного тестирования.
Выводы. Модель скрытых состояний Маркова вполне применима для предсказания направления будущего движения цены актива, в том числе и на внутридневных интервалах торговли. Для меня была сюрпризом достаточно высокая эффективность модели, при том, что ее параметрами были исторические данные все того же ценового ряда актива. Близкие значения параметров для разных инструментов также добавляют уверенности в устойчивости модели. Однако при тестировании были отмечены и недостатки — диапазон применяемых параметров достаточно узок, и их изменение на 20-30% ( речь идет о количестве входных свечей и горизонта прогноза) может привести к резкому снижению предсказательной способности.
Повысить эффективность и устойчивость модели возможно путем добавления неценовых параметров — объема покупок/продаж, состояния книги заявок и т.п., а также правильного выбора статистического распределения этих параметров (оно используется при составлении модели Маркова, и в рассмотренном случае выбиралось нормальное распределение с нулевым средним и среднеквадратическим отклонением, вычисляемым по выборке).
Другие стратегии и алгоритмы автоматической торговли смотрите на моем сайте — www.quantalgos.ru
я про эти модели читал старую статью, можно погуглить по запросу «модель маркова валюты perl», даже слямзил оттуда несколько хороших идей
Точность предсказания 50% даёт обычное подбрасывание монеты
Совершенно непонятно, отчего бы вместо чрезвычайно усеченных картинок не выложить Out oif Sample при движении окном (пусть месячным) по фьючу за пару лет.
Ведь если отвлечься от магии имени «Марков», подразумевающим что-то очень умное, то это просто гипотеза в ряду других.
Гипотеза_1 = Марков
Гипотеза_2 = Скользящие средние
.
.
Гипотеза_N = МаркетДельта
Проверяются все одинаково: последовательное применение и анализ статистически достоверных результатов Out of Sample
Вот смотрите, Вы говорите, что прогностический интервал = три бара.
Тогда, если целью стратегии является систематическое извлечение прибыли, то я бы сделал так:
1. Выбрал окно анализа, допустим, месяц.
2. с 1 января 2014 года проанализировал 1 месяц, проторговал три пятиминутки.
3. Сдвинул окно на три пятиминутки, повторил анализ и проторговал еще три пятиминутки
4. Повторил эту процедуру N/3 раз, где N=число баров с 1 января 2014 года.
В результате я бы получил Out of sample на промежутке 1 февраля 2014 года — 22 сентября 2015 года
У меня не научный подход. Не вводятся доверительные интервалы, вероятности и проч. Я не умею их считать. Рассуждаю только из соображений здравого смысла.
Добавил в читаемые. За наукой нужно бдить :)))
А так да, интересная тема.