Блог им. uralpro

Проверка эффективности модели Маркова на фьючерсах FORTS

    • 22 сентября 2015, 08:58
    • |
    • uralpro
  • Еще

RTS-9.15_1

Ранее на моем сайте была опубликована статья по марковским моделям скрытых состояний (НММ) — часть 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. Строится три модели Маркова для каждого из состояний — рост цены, падение, флэт.

Результаты тестирования представлены в виде следующих числовых значений:

  • Probability — вероятность верного предсказания направления движения цены на горизонте прогнозирования (в процентах);
  • Profit — прибыль, полученная при следовании предсказаниям модели ( в процентах от начальной цены актива);
  • MaxDD — максимальная просадка по тестируемой выборке (в процентах).

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

Итак, полученные результаты тестирования:

1. Фьючерс RTS-9.15, ценовой ряд на периоде 16.06.2015- 16.07.2015, интервал свечи — 5 мин.

RTS-9.15_1

На графике прибыли синия линия — это результат модели на тренировочной выборке, красная линия — выборка 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:

RTS-9.15_2

На данном отрезке вероятность предсказания упала ниже 50% и составила 48,95%. Но прибыльность осталась положительной — 30,98% за месяц. Это означает, что абсолютная прибыль при верном предсказании направления цены превышает абсолютный убыток при неверном предсказании. Максимальная просадка возросла до 11,45%.

Для лучшего понимания работы модели посмотрим, как двигалась цена инструмента в рассматриваемые периоды. Для периода 16.06.2015- 16.07.2015:

RTS-9.15_price_1

Для периода 17.07.2015 — 16.08.2015:

RTS-9.15_price_2

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

2. Фьючерс Si-9.15, период 16.06.15 по 16.07.15, интервал свечи 15 мин.

Si-9.15_1

На тренировочной выборке вероятность предсказания направления составила 48,71%, прибыль — 7,05% за 22 календарных дня. На выборке out-of-sample результаты лучше — вероятность предсказания 57,06%, прибыль 11,68% за 7 календарных дней. Модель принимает на вход 30 свечей, горизонт прогноза — 3 свечи. Мы видим, что параметры модели достаточно близки к предыдущей, хотя у нас другой инструмент и другой интервал свечи — 15 мин.

Проверим, имела ли место подгонка, на периоде 17.07.2015 — 17.08.2015:

Si-9.15_2

Вероятность предсказания — 54,17%, прибыль — 20,58% за один календарный месяц. Однако максимальная просадка получилась достаточно большой — почти 18%. Выводы по данному инструменту получаются неоднозначные — вроде бы сохраняется приличная прибыльность и вероятность предсказания, однако волатильность прибыли значительная.

Сделаем еще одну проверку — имитируем скользящее окно для модели. Для этого просто еще раз обучим модель с теми же параметрами, уже на втором периоде — 17.07.2015 — 17.08.2015, и результат для выборки out-of-sample (30% последней части диапазона) продемонстрирует нам эффективность скользящего окна, то есть если бы мы  двигались за текущим временем, постоянно переобучая модель:

Si-9.15_3

Как видим, показатели неплохие — вероятность предсказания 51,21%, прибыль 8,48% на одной неделе и просадка — 6,38%.

Проверим графики цены. Для периода 16.06.15 — 16.07.15:

Si-9.15_price_1

Для периода 17.07.2015 — 17.08.2015:

Si-9.15_price_2

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

Выводы. Модель скрытых состояний Маркова вполне применима для предсказания направления будущего движения цены актива, в том числе и на внутридневных интервалах торговли. Для меня была сюрпризом достаточно высокая эффективность модели, при том, что ее параметрами были исторические данные все того же ценового ряда актива. Близкие значения параметров для разных инструментов также добавляют уверенности в устойчивости модели. Однако при тестировании были отмечены и недостатки — диапазон применяемых параметров достаточно узок, и их изменение на 20-30% ( речь идет о количестве входных свечей и горизонта прогноза) может привести к резкому снижению предсказательной способности.

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

Другие стратегии и алгоритмы автоматической торговли смотрите на моем сайте — www.quantalgos.ru

★26
33 комментария
интересно. но честно говоря интуитивно не верится что на большой выборке, вне рамок обучения, точность угадывания будет сильно выше 50%
я про эти модели читал старую статью, можно погуглить по запросу «модель маркова валюты perl», даже слямзил оттуда несколько хороших идей
avatar
ПBМ, результаты на выборках out-of-sample и есть вне рамок обучения. Они получены уже на обученной модели
avatar
Некоторые теории утверждают, что встретить динозавра на улице можно примерно с той же вероятностью — 50%.
Точность предсказания 50% даёт обычное подбрасывание монеты
Сергей Иконников, вот-вот
avatar
О, круто. Я сам пробовал HMM, но хорошего результата не получил. Похоже, стоит перепробовать. :)
avatar
P.S.: Почему не пишете, куда завтра пойдет доллар/нефть/fRTS? :)
avatar
ребята тестирующие что то на интревале 1 месяц. не делайте так и тем более не говорите что у вас модель что то предсказывает на столь маленькой выборке
avatar
gluhov, на 1 месяце 3700 5 минутных свечей. Система-то внутридневная. Вы считаете это недостаточным для тестирования? Возможно. Могу сказать, что я еще тестировал на 3-месячных интервалах ( 5 и 15 минутные свечи). Результаты получил похожие
avatar
uralpro, стоимость робота не изменилась? 10 тысяч по прежнему?
uralpro, важно не количество свечей, а количество сделок
avatar
ves2010, для обучения модели Маркова и проверки ее предсказательной способности количество сделок не важно. Для реальной системы — да
avatar
Проскальзывание и комиссию учитывали?
avatar
Алексей С, нет, это без учета. Комиссии не сильно повлияют на результат (особенно на 15 минутных свечах), а проскальзывание да, может ухудшить итог
avatar
Будете в Москве, хотелось бы пообщаться
avatar
cerenc, пообщаемся, когда выберусь :)
avatar
Рассуждения интересные, но абсолютно недостаточные даже для тех выводов, которые делает автор. Тем более для продажи робота/алгоритма.

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

Ведь если отвлечься от магии имени «Марков», подразумевающим что-то очень умное, то это просто гипотеза в ряду других.
Гипотеза_1 = Марков
Гипотеза_2 = Скользящие средние
.
.
Гипотеза_N = МаркетДельта

Проверяются все одинаково: последовательное применение и анализ статистически достоверных результатов Out of Sample
avatar
bocha, никто ничего не продает, это просто проверка теории. Самые интересные публикации с моего сайта будут проверяться подобным образом. И непонятно, зачем выборка в пару лет для пятиминутных интервалов? Цель данной статьи просто демонстрация работы модели, а остальное — скользящие окна, сравнение стратегий и т.д. это уже для тех, кто будет доводить ее до реального применения.
avatar
uralpro, стратегии, разрабатываемые на пятиминутных барах, как правило, так же проверяют на длительных интервалах, как и любые другие стратегии.
Вот смотрите, Вы говорите, что прогностический интервал = три бара.
Тогда, если целью стратегии является систематическое извлечение прибыли, то я бы сделал так:
1. Выбрал окно анализа, допустим, месяц.
2. с 1 января 2014 года проанализировал 1 месяц, проторговал три пятиминутки.
3. Сдвинул окно на три пятиминутки, повторил анализ и проторговал еще три пятиминутки
4. Повторил эту процедуру N/3 раз, где N=число баров с 1 января 2014 года.
В результате я бы получил Out of sample на промежутке 1 февраля 2014 года — 22 сентября 2015 года

У меня не научный подход. Не вводятся доверительные интервалы, вероятности и проч. Я не умею их считать. Рассуждаю только из соображений здравого смысла.
avatar
bocha, я понимаю, о чем вы, но вы не совсем поняли мои цели. Такой тщательный анализ, несомненно, нужен, и если я решу торговать по этой модели, я его сделаю. Но для обзорной статьи вполне достаточно и проведенного анализа. Для тех, кто захочет двинуться дальше — это стартовая точка.
avatar
uralpro, если в ходе научной дискуссии участники сумели выяснить хотя бы стартовые позиции сторон, они большие молодцы :)))
Добавил в читаемые. За наукой нужно бдить :)))
avatar
bocha, спасибо, что читаете :)
avatar
bocha, имхо, правильный подход. Но, если число степеней свободы в оптимизируемом методе небольшое, можно проводить поисковый анализ вообще без аутофсемпл. Просто потому, что вероятность оверфиттинга невелика.
avatar
Как Вы считаете проценты доходности, относительно чего. И хорошо бы понять, как доход на сделку соотносится с типичным транзакционными издержками на сделку.
А так да, интересная тема.
avatar
SergeyJu, проценты считаются относительно начальной цены выборки в пунктах
avatar
uralpro, про средний доход на сделку не ответили.
avatar
SergeyJu, если считать комиссию, то она невелика. Оценочно, для RI на 5 минутных интервалах соотношение дохода к сделке будет около 10 к 1. Проскальзывание не оценивал, это нужно прогонять на боевых тестах
avatar
uralpro, вообще-то маловато. При сколько-нибудь существенном объеме проскальзывание на РИ или Си превзойдет комиссы в 2-3 раза как минимум.
avatar
SergeyJu, возможно для такой вероятности и маловато. Нужно прогнать на своем боевом тесте, там будут практически точные результаты. Но это как руки дойдут
avatar
uralpro, спасибо за блог, читаю с большим интересом. Не подскажете, какое практическое влияние на вероятность верного предсказания оказывает наличие среди входных данных достаточно сильно коррелированых?
avatar
Agent Smith, несомненно, это ухудшает предсказательную способность. Но в рассмотренном примере входные данные тоже сильно коррелированные, однако удалось получить положительный результат
avatar
А не пробовали использовать логарифмы Close / (High+Low) / 2?
avatar

теги блога uralpro

....все тэги



UPDONW
Новый дизайн