uralpro
uralpro личный блог
22 сентября 2015, 08:58

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

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

33 Комментария
  • П М
    22 сентября 2015, 09:33
    интересно. но честно говоря интуитивно не верится что на большой выборке, вне рамок обучения, точность угадывания будет сильно выше 50%
    я про эти модели читал старую статью, можно погуглить по запросу «модель маркова валюты perl», даже слямзил оттуда несколько хороших идей
  • Сергей Иконников
    22 сентября 2015, 09:35
    Некоторые теории утверждают, что встретить динозавра на улице можно примерно с той же вероятностью — 50%.
    Точность предсказания 50% даёт обычное подбрасывание монеты
    • П М
      22 сентября 2015, 09:38
      Сергей Иконников, вот-вот
  • Marco
    22 сентября 2015, 09:37
    О, круто. Я сам пробовал HMM, но хорошего результата не получил. Похоже, стоит перепробовать. :)
  • Marco
    22 сентября 2015, 09:39
    P.S.: Почему не пишете, куда завтра пойдет доллар/нефть/fRTS? :)
  • gluhov
    22 сентября 2015, 09:56
    ребята тестирующие что то на интревале 1 месяц. не делайте так и тем более не говорите что у вас модель что то предсказывает на столь маленькой выборке
      • uralpro, стоимость робота не изменилась? 10 тысяч по прежнему?
      • ves2010
        22 сентября 2015, 16:39
        uralpro, важно не количество свечей, а количество сделок
  • SAI
    22 сентября 2015, 10:29
    Проскальзывание и комиссию учитывали?
  • cerenc
    22 сентября 2015, 10:42
    Будете в Москве, хотелось бы пообщаться
  • bocha
    22 сентября 2015, 11:10
    Рассуждения интересные, но абсолютно недостаточные даже для тех выводов, которые делает автор. Тем более для продажи робота/алгоритма.

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

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

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

        У меня не научный подход. Не вводятся доверительные интервалы, вероятности и проч. Я не умею их считать. Рассуждаю только из соображений здравого смысла.
          • bocha
            22 сентября 2015, 12:06
            uralpro, если в ходе научной дискуссии участники сумели выяснить хотя бы стартовые позиции сторон, они большие молодцы :)))
            Добавил в читаемые. За наукой нужно бдить :)))
        • SergeyJu
          22 сентября 2015, 13:10
          bocha, имхо, правильный подход. Но, если число степеней свободы в оптимизируемом методе небольшое, можно проводить поисковый анализ вообще без аутофсемпл. Просто потому, что вероятность оверфиттинга невелика.
  • SergeyJu
    22 сентября 2015, 13:08
    Как Вы считаете проценты доходности, относительно чего. И хорошо бы понять, как доход на сделку соотносится с типичным транзакционными издержками на сделку.
    А так да, интересная тема.
      • SergeyJu
        22 сентября 2015, 14:03
        uralpro, про средний доход на сделку не ответили.
          • SergeyJu
            22 сентября 2015, 15:01
            uralpro, вообще-то маловато. При сколько-нибудь существенном объеме проскальзывание на РИ или Си превзойдет комиссы в 2-3 раза как минимум.
  • Дед Нечипор
    23 сентября 2015, 08:35
    uralpro, спасибо за блог, читаю с большим интересом. Не подскажете, какое практическое влияние на вероятность верного предсказания оказывает наличие среди входных данных достаточно сильно коррелированых?
  • Vasiliy
    08 декабря 2015, 21:24
    А не пробовали использовать логарифмы Close / (High+Low) / 2?

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн