Марковские цепи в трейдинге и прогнозировании цены
Введение
В условиях современного финансового рынка трейдеры постоянно ищут новые инструменты для прогнозирования цен и принятия обоснованных решений, и таких инструментов у трейдеров становится все больше — от SMA до ИИ (видимо, фильм про Терминатора вы не смотрели). В этой статье мы поговорим об одном незаслуженно забытом инструменте — марковских цепях.
Не секрет, что многие подходы и стратегии, которые считаются классическими, не работают в современном трейдинге. И в этом нет ничего удивительного: рынок развивается с каждым днем, и куда приведет это развитие, никому неизвестно. На современном рынке может случиться все, что угодно — шум, цикл, тренд или сразу все вместе. И тут перед любым трейдером встает главный вопрос: чего ждать от рынка хотя бы завтра?
В этой статье мы рассмотрим прогностические возможности цепей Маркова в трейдинге и познакомимся с примерами их практического использования. Согласно утверждениям создателя этих цепей, их использование может снизить неопределенность, возникающую в рыночных условиях, а модели, построенные на их основе, позволяют создавать торговые алгоритмы и принимать решения на основе вероятности наступления определенных событий. Это может послужить толчком к разработке новых стратегий, учитывающих статистически значимые закономерности поведения рынков.
Основы марковских цепей
Цепь Маркова — это математическая модель, которая с успехом применяется в самых разных областях. Она была предложена А. Марковым в 1906 году в статье "О предельном распределении одного класса связанных случайных величин", где он изучал статистическое поведение цепочки взаимосвязанных случайных событий.
Суть модели заключается в том, что она позволяет предсказывать вероятность перехода из одного состояния в другое. Таким образом, на основе марковской цепи можно описывать свойства какого-либо процесса и генерировать новые последовательности, которые будут похожи на этот процесс. С помощью этих цепей можно моделировать и анализировать процессы, происходящие на рынке.
Цепи Маркова основываются на двух ключевых факторах: состоянии и вероятности перехода. Состояния цепи могут описываться как количественными, так и качественными переменными. Например, если значение временного ряда находится в пределах 10-20, то он находится в состоянии 1. Или, если временной ряд растет, то его состояние – "U". Тип состояний зависит от исследуемого процесса, а их количество может быть детерминированным, а иногда устанавливается исследователем.
Еще одно важное свойство цепей — отсутствие памяти. Это означает, что следующее состояние зависит от текущего и никак не связано с предысторией. Благодаря этому свойству цепи Маркова позволяют моделировать нестационарные финансовые временные ряды — их свойства меняются со временем. Это важно при высокой волатильности, когда тренды могут быстро меняться и трудно предсказать, как поведет себя цена.
Теперь давайте посмотрим, как строить цепи Маркова и как их можно применять на практике.
Простая цепь Маркова
Для начала давайте построим простую цепь Маркова. Например, пусть она определяет фазы рынка. Эти фазы мы будем определять так: трендом мы будем считать ситуации, когда цена проходит определенное количество пунктов за заданное число баров. Иначе, рынок находится во флете. Всего у нас будет 3 состояния рынка. Каждому состоянию мы присвоим свой индекс:
- 0 – тренд вниз,
- 1 – флет,
- 2 – тренд вверх.
Сначала нам нужно создать матрицу переходных вероятностей. Ее размер зависит от количества состояний, и в этом случае ее размер будет 3*3. Инициализируем значения этой матрицы нулем и заполним ее на исторических данных. Пусть на данном баре состояние рынка имеет индекс i, а на следующем баре — индекс j. Тогда нам нужно увеличить на 1 значение, находящееся в ячейке с этими индексами.
Нам остается перевести собранную статистику в вероятности. Для этого нам нужно сначала найти сумму всех элементов одной строки, а потом разделить каждый элемент этой строки на найденную сумму. В результате у нас получится матрица вероятностей перехода рынка из одного состояния в другое. Эта матрица может выглядеть так.

Из этой матрицы мы видим, что если рынок находится в состоянии флет, то на следующем шаге он может оказаться в любом другом состоянии с практически равными вероятностями. А вероятности продолжения тренда довольно высоки.
Эту матрицу можно использовать для прогнозирования дальнейших состояний. Добавим матрицу с прогнозами. Изначально она равна матрице переходов и в ней отображены прогнозы на 1 шаг вперед.
![]()
Для того, чтобы найти прогноз на 2 шага вперед, нам нужно найти произведение этих матриц.

Продолжая эти умножения, мы можем найти прогнозы на сколько угодно шагов вперед. Но при этом следует помнить, что с увеличением числа шагов практическая ценность прогноза снижается. Каждый новый шаг приводит к сглаживанию вероятностей, и в конце концов они станут равными друг другу. Говоря иначе, каким бы ни было текущее состояние рынка, через некоторое число шагов он окажется в любом возможном состоянии с равной вероятностью.
Матричное умножение необходимо при изучении свойств получившейся цепи. На практике удобнее поступить следующим образом. Возьмите строку матрицы, которая соответствует текущему состоянию, и преобразуйте ее в вектор-строку. Умножая этот вектор на матрицу, вы будете получать новый вектор с прогнозом на следующий шаг.
Мы с вами рассмотрели цепь Маркова, построенную на качественных переменных. Теперь давайте посмотрим, как можно построить марковскую цепь на количественных данных.
Усложняем цепь
Прогнозирование является одной из самых важных задач, стоящих перед трейдером. Успешный прогноз будущего значения цены может принести значительную прибыль. Давайте посмотрим, как можно строить такой прогноз с помощью цепей Маркова.
Для описания состояния рынка можно использовать самые разные способы, но все они так или иначе связаны с динамикой цены. В данном случае мы будем применять изменение цены за заданное число баров.
![]()
Сначала давайте посмотрим, какие значения могут принимать такие разности. Интуиция подсказывает, что большие, по своим значениям, приращения должны встречаться реже, чем маленькие. Но лучше один раз увидеть.

Теперь нам нужно задать количество состояний и способ их определения. Для примера, я взял 9 состояний, каждое из которых встречается примерно одинаковое количество раз в истории. Далее, мы можем построить цепь и приступать к прогнозу. Последнее состояние нам известно и описывается разностью.
![]()
Зная текущее состояние, мы можем оценить следующее и вероятность того, что оно будет именно таким. Из этих вероятностей мы можем построить прогноз движения цены. Для каждого состояния нам известны его минимум и максимум. В качестве ожидаемого значения возьмем их среднее.
![]()
Теперь мы можем приступить к прогнозированию цены. Сделаем шаг вперед. Тогда мы получим разности такого вида:
![]()
Из этих разностей мы легко можем оценить будущие значения цен и их вероятности. А сам прогноз на графике может выглядеть так.

Теперь давайте обсудим некоторые вопросы применения цепей Маркова на практике. Некоторые процессы могут иметь ограниченное количество состояний. Например, мы бросаем игральный кубик, тогда у нас будет 6 состояний. Для других процессов количество состояний может быть произвольным. В этом случае необходимо сначала изучить процесс, а потом уже делать предположения о количестве возможных состояний и способах их определения.
При построении марковской цепи на разностях цен, для определения состояний мы использовали вероятностную меру. Но можно было бы поступить и по-другому. Например, мы могли бы найти математическое ожидание и стандартное отклонение и задать границы состояний цепи таким образом:
![]()
В этом случае количество состояний заранее неизвестно, а вероятности их появления будут разными.
Некоторые изменения можно ввести и при расчете матрицы переходов. Сначала мы собираем статистику о количестве переходов цепи из одного состояния в другое. Предположим, что одна из строк матрицы выглядит так:
![]()
Первое предположение, которое мы можем сделать, – следующий переход может быть любым из уже наблюденных. Так как таких переходов всего 3, то нам нужно увеличить ненулевые значения на 1/3.
![]()
Следующее наше предположение – некоторые очень редкие переходы могли не попасть в нашу статистику. Разумно предположить, что цепь может перейти в состояния ближайшие к уже наблюденным. Тогда число возможных переходов достигнет 5, и соответствующие значения нам нужно увеличить на 1/5.
![]()
Так мы проявим разумную осторожность и будем готовы к прилету "черного лебедя".
Знание рыночной истории – вещь хорошая, но что ждет рынок в будущем, неизвестно никому. Ситуация, которая сегодня кажется нам невозможной, может случиться завтра. Для того, чтобы предусмотреть и такое развитие событий, мы можем предположить, что сеть может переходить в любое возможное состояние.
![]()
Такая марковская цепь будет готова к прилету стаи "черных лебедей" всех возможных цветов. Но такой подход допустим только при не очень большом количестве состояний.
Прогнозирование цены
Марковская цепь является довольно гибким инструментом, который можно применять самыми разными способами. Давайте попробуем спрогнозировать наиболее вероятное движение цены.
Сначала нам нужно определить, какое движение цены мы будем считать значимым. Например, пусть уровень такого изменения будет равен 20 пунктам. Потом нам нужно найти по истории максимальное и минимальное значения цены. Теперь мы можем рассчитать количество состояний будущей цепи:
![]()
Подготовим матрицу переходов соответствующего размера и начнем ее заполнять. Текущее состояние цены можно рассчитать по формуле:
![]()
Все остальные расчеты остаются прежними. В качестве прогноза мы будем использовать наиболее вероятное состояние цены на каждом шаге. Для того, чтобы рассчитать значение цены, мы можем взять среднее значение этого состояния:
![]()
Индикатор, построенный на такой цепи, на графике выглядит так.

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

Прогнозы можно строить и на основе индикаторов. Например, вы можете вместо цен использовать значения EMA. Этот индикатор сглаживает временной ряд, сохраняя при этом информацию о тренде. Поэтому прогноз, построенный на основе этого индикатора, будет более сглаженным.
Марковские цепи и управление капиталом
Марковские цепи могут применяться не только для прогнозирования рынка. Их можно использовать и в других направлениях, связанных с трейдингом. Давайте посмотрим, как их можно использовать для управления капиталом.
Математическое ожидание выигрыша является одним из самых важных показателей торговой стратегии. С его помощью можно оценить средний выигрыш на 1 трейд. Еще одной характеристикой, которая нас сейчас интересует, является Z-score. С помощью этого показателя трейдер может оценить, является ли последовательность выигрышей и проигрышей случайной.
Эти характеристики позволяют судить о торговой стратегии в целом. Теперь давайте посмотрим, как можно охарактеризовать торговую систему с помощью марковской цепи. У цепи будет всего 2 состояния — проигрыш и выигрыш. Каждый новый трейд уточняет значения матрицы переходов, и, как обычно, с помощью этой матрицы мы можем прогнозировать будущий результат.
Для примера, я смоделировал 100 трейдов. Вероятность выигрыша равна 64%, а математическое ожидание — 21 пункту. Казалось бы, после такого количества трейдов каких-либо сюрпризов ждать не приходится. Однако, это не так.
Если последний трейд в последовательности будет проигрышным, то вероятность выигрыша для будущего трейда возрастает до 68%, а ожидание до 30 пунктов. А вот после выигрышного трейда вероятность и ожидание выигрыша падают до 61% и 14 пунктов. То есть, цепь дает нам совет увеличивать объем позиции после проигрыша и уменьшать после выигрыша.
Но главное достоинство марковской цепи заключается в том, что она обрабатывает информацию в режиме реального времени. Каким будет общий результат торговли еще неизвестно, а решения нужно принимать здесь и сейчас. Ну и конечно же, с помощью цепи мы можем прогнозировать возможные результаты на несколько шагов вперед.
Заключение
В этой статье мы познакомились с некоторыми способами применения марковских цепей в трейдинге и убедились, что эта математическая модель вполне работоспособна. Они не дают ясных и четких ответов, но могут показать возможные варианты будущего, а в условиях рынка такая информация может быть на вес золота.
У марковских цепей есть свои минусы. Например, отсутствие памяти не позволяет учитывать влияние прошлого (этот недостаток можно преодолеть). Однако их достоинства значительно перевешивают все недостатки. Главным достоинством марковских цепей является их способность обрабатывать информацию и обучаться на новых данных. Их применение в трейдинге позволяет снизить неопределенности, связанные с рынком. Это может повысить эффективность торговых стратегий и добиться более стабильных результатов.
При написании статьи были использованы следующие программы:
| название | тип | особенности |
|---|---|---|
| Simple Markov Chain | скрипт | Скрипт строит прогноз на простом тренде. Результаты прогноза выводятся во вкладке "Эксперты".
|
| Price Forecasting | скрипт | Скрипт строит прогноз уровней цены по разностной схеме. Результаты сохраняются в папке Files.
|
| Price Forecast | индикатор | Индикатор строит прогноз по наиболее вероятному движению цены.
|
| Price Level Forecasting | индикатор | Индикатор отображает прогнозируемые уровни цены. |
| Money Management | скрипт | Скрипт рассчитывает вероятность и математическое ожидание выигрыша. Результаты прогноза выводятся во вкладке "Эксперты".
|
Предупреждение: все права на данные материалы принадлежат MetaQuotes Ltd. Полная или частичная перепечатка запрещена.
Данная статья написана пользователем сайта и отражает его личную точку зрения. Компания MetaQuotes Ltd не несет ответственности за достоверность представленной информации, а также за возможные последствия использования описанных решений, стратегий или рекомендаций.
Архитектура коллективных торговых решений ИИ-агентов
Преодоление ограничений машинного обучения (Часть 9): Обучение признаков на основе корреляции в задачах самообучения на финансовых данных
Автоматизация торговых стратегий на MQL5 (Часть 23): Зональное восстановление с трейлинг-стопом и логикой корзин
Возможности Мастера MQL5, которые вам нужно знать (Часть 74): Использование паттернов Ишимоку и ADX-Wilder с обучением с учителем
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования