preview
Марковские цепи в трейдинге и прогнозировании цены

Марковские цепи в трейдинге и прогнозировании цены

MetaTrader 5Примеры |
46 0
Aleksej Poljakov
Aleksej Poljakov

Введение

В условиях современного финансового рынка трейдеры постоянно ищут новые инструменты для прогнозирования цен и принятия обоснованных решений, и таких инструментов у трейдеров становится все больше — от 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скрипт

Скрипт строит прогноз на простом тренде. Результаты прогноза выводятся во вкладке "Эксперты".

  • iPeriod - период тренда.
  • Level - уровень тренда
  • Forecast - количество шагов для прогноза.
Price Forecastingскрипт

Скрипт строит прогноз уровней цены по разностной схеме. Результаты сохраняются в папке Files.

  • iPeriod - период тренда.
  • State - количество состояний цепи.
  • FontSize - размер шрифта.
Price Forecastиндикатор

Индикатор строит прогноз по наиболее вероятному движению цены.

  • Step - шаг изменения цены.
  • Forecast - количество шагов для прогноза.
Price Level Forecastingиндикатор
Индикатор отображает прогнозируемые уровни цены.
Money Managementскрипт

Скрипт рассчитывает вероятность и математическое ожидание выигрыша. Результаты прогноза выводятся во вкладке "Эксперты".

  • Probability - вероятность выигрыша для моделируемых трейдов.
  • Trades - количество моделируемых трейдов.
  • Forward - количество шагов для прогноза.
  • SLTP - стоп-уровни, используемые для расчета ожидания.
Прикрепленные файлы |
Price_Forecast.mq5 (4.52 KB)
Архитектура коллективных торговых решений ИИ-агентов Архитектура коллективных торговых решений ИИ-агентов
Статья описывает архитектуру мультиагентной торговой системы на базе языковой модели grok-4-fast, где вместо одного системного промпта работают четыре независимых аналитика с принципиально разными ролями: бык, медведь, риск-менеджер и арбитр. Три аналитика запускаются параллельно через ThreadPoolExecutor и за 3–5 секунд формируют аргументированные позиции по одним и тем же рыночным данным, после чего детерминированный судья выносит финальный вердикт по жёстким правилам.
Преодоление ограничений машинного обучения (Часть 9): Обучение признаков на основе корреляции в задачах самообучения на финансовых данных Преодоление ограничений машинного обучения (Часть 9): Обучение признаков на основе корреляции в задачах самообучения на финансовых данных
Самоконтролируемое обучение (Self-supervised learning) - это мощная парадигма статистического обучения, которая заключается в поиске обучающих сигналов, генерируемых в результате самих наблюдений. Такой подход превращает сложные задачи обучения без наблюдения в более привычные задачи обучения под наблюдением. Эта технология не нашла применения для достижения нашей цели как сообщества алгоритмических трейдеров. Таким образом, наше обсуждение направлено на то, чтобы предоставить читателю доступный мостик к открытой исследовательской области самоконтролируемого обучения, и предлагает практические виды применения, которые позволяют создавать стабильные и надежные статистические модели финансовых рынков без переобучения небольшими наборами данных.
Автоматизация торговых стратегий на MQL5 (Часть 23): Зональное восстановление с трейлинг-стопом и логикой корзин Автоматизация торговых стратегий на MQL5 (Часть 23): Зональное восстановление с трейлинг-стопом и логикой корзин
В этой статье мы усовершенствуем нашу систему зонального восстановления (Zone Recovery System), внедрив трейлинг-стопы и возможности торговли несколькими корзинами. Мы исследуем, как усовершенствованная архитектура использует динамические трейлинг-стопы для фиксации прибыли и систему управления корзинами для эффективной обработки множества торговых сигналов. В ходе реализации и тестирования на истории мы продемонстрируем более надежную торговую систему, приспособленную к адаптивным рыночным условиям.
Возможности Мастера MQL5, которые вам нужно знать (Часть 74): Использование паттернов Ишимоку и ADX-Wilder с обучением с учителем Возможности Мастера MQL5, которые вам нужно знать (Часть 74): Использование паттернов Ишимоку и ADX-Wilder с обучением с учителем
В продолжение нашей предыдущей статьи, где мы представили пару индикаторов Ишимоку и ADX, рассмотрим, как эту пару можно улучшить с помощью обучения с учителем. Ишимоку и ADX представляют собой взаимодополняющую пару уровней поддержки/сопротивления и тренда. Наш подход обучения с учителем использует нейронную сеть, которая задействует ядро глубокого спектрального смешения (Deep Spectral Mixture Kernel) для точной настройки прогнозов этой пары индикаторов. Как обычно, это делается в пользовательском файле класса сигналов (signal class), который взаимодействует с Мастером MQL5 для сборки советника.