English 中文 Español Deutsch 日本語 Português
preview
Применение теории игр Нэша с фильтрацией НММ в трейдинге

Применение теории игр Нэша с фильтрацией НММ в трейдинге

MetaTrader 5Торговые системы | 14 марта 2025, 08:43
468 2
Javier Santiago Gaston De Iriarte Cabrera
Javier Santiago Gaston De Iriarte Cabrera

Введение

Применение математических теорий может обеспечить стратегическое преимущество. Одной из таких теорий является Равновесие Нэша, разработанное известным математиком Джоном Форбсом Нэшем-младшим. Работы Нэша, известного своим вкладом в теорию игр, оказали влияние на различные области, включая экономику и другие области. В настоящей статье исследуется, как теория равновесия Нэша может быть эффективно применена к трейдингу. Используя скрипты на Python и передовые статистические модели, мы стремимся использовать принципы теории игр Нэша для оптимизации торговых стратегий и принятия более обоснованных решений на рынке.


Нэш

Джон Форбс Нэш-младший

Кто такой Джон Форбс Нэш-младший?

В Википедии говорится о нём:

Джон Форбс Нэш–младший (13 июня 1928 - 23 мая 2015), который известен как и издавался под именем как Джон Нэш, был американским математиком, внесшим фундаментальный вклад в теорию игр, реальную алгебраическую геометрию, дифференциальную геометрию и дифференциальные уравнения в частных производных. Нэш и его коллеги-теоретики игр Джон Харсаньи (John Harsanyi) и Рейнхард Селтен (Reinhard Selten) были удостоены Нобелевской премии по экономике за 1994 год. В 2015 году он и Луис Ниренберг (Louis Nirenberg) были удостоены Нобелевской премии за вклад в область дифференциальных уравнений в частных производных.

Будучи аспирантом математического факультета Принстонского университета, Нэш представил ряд концепций (включая равновесие Нэша и торговое решение Нэша), которые в настоящее время считаются центральными в теории игр и ее применении в различных науках.

О его жизни снят фильм под названием "Прекрасный разум" ("A Beautiful Mind"). Мы применим его теорию игр к трейдингу с помощью MQL5.

Каким образом мы собираемся внедрить теорию игр Нэша в трейдинг?


Теория равновесия Нэша

Равновесие Нэша - это концепция в теории игр, при которой предполагается, что каждый игрок знает равновесные стратегии других игроков, и ни один игрок не может улучшить свой выигрыш, изменяя только собственную стратегию.

В соответствии с теорией равновесия Нэша стратегия каждого игрока является оптимальной с учетом стратегий всех остальных игроков. В игре может быть несколько равновесий Нэша или их вообще может не быть.

Равновесие Нэша - фундаментальное понятие в теории игр, названное в честь математика Джона Нэша. Она описывает состояние в игре c индивидуальными игроками, в которой каждый игрок выбрал свою стратегию, и ни один игрок не может извлечь выгоду, изменив свою стратегию в одностороннем порядке, в то время как другие игроки сохраняют свою неизменной.

Формальное определение:

Пусть (N, S, u) - является игрой с:

  • игроки N: N = {1, 2, ..., n}
  • Наборы стратегий для каждого игрока: S = (S₁, S₂, ..., Sₙ)
  • Полезные функции для каждого игрока: u = (u₁, u₂, ..., uₙ)

Профиль стратегии s* = (s₁*, s₂*, ..., sₙ*) является равновесием Нэша, если для каждого игрока i и для всех альтернативных стратегий sᵢ ∈ Sᵢ:

uᵢ(s₁*, ..., sᵢ*, ..., sₙ*) ≥ uᵢ(s₁*, ..., sᵢ, ..., sₙ*)

Другими словами, ни один игрок i не может в одностороннем порядке повысить свою ценность, изменив свою равновесную стратегию sᵢ* на любую другую стратегию sᵢ, учитывая, что все остальные игроки придерживаются своих равновесных стратегий.

Для игры с участием двух игроков мы можем выразить это более кратко:

(s₁*, s₂*) является равновесием Нэша, если:

  1. u₁(s₁*, s₂*) ≥ u₁(s₁, s₂*) для всех s₁ ∈ S₁
  2. u₂(s₁*, s₂*) ≥ u₂(s₁*, s₂) для всех s₂ ∈ S₂

Данная формулировка подчеркивает, что стратегия каждого игрока является наилучшим ответом на стратегию другого игрока в равновесии.

Важно отметить, что:

  1. Не во всех играх есть равновесие Нэша в чистых стратегиях.
  2. В некоторых играх может быть несколько равновесий Нэша.
  3. Равновесие Нэша не обязательно является оптимальным по Парето или наиболее желательным результатом для всех игроков в совокупности.

Концепция равновесия Нэша имеет широкое применение в экономике, политологии и других областях, где изучаются стратегические взаимодействия между рациональными агентами.

Хотя в равновесии Нэша никто не может в одностороннем порядке улучшить свое положение без адаптации других, на практике финансовые рынки динамичны и редко находятся в состоянии совершенного равновесия. Возможности заработать деньги возникают из-за временной неэффективности, информационных преимуществ, лучшего управления рисками, а также способности реагировать быстрее других игроков. Кроме того, внешние и непредсказуемые факторы могут нарушить равновесие, создавая новые возможности для тех, кто к этому готов.

Прежде всего, нам нужно выбрать валюты (мы собираемся использовать равновесие Нэша, поэтому нам нужны два символа, мы выберем отрицательно коррелированные символы), для этого будем использовать python. Ниже приведён используемый скрипт:

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

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

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

Коэффициент Пирсона измеряет, насколько линейно связаны две переменные. Если коэффициент близок к +1, это указывает на прямую зависимость: по мере увеличения одной переменной увеличивается и другая. Коэффициент, близкий к -1, означает, что по мере увеличения одного параметра другой уменьшается, что указывает на обратную зависимость. Значение 0 означает отсутствие линейной связи. Например, измерение температуры и количества проданных холодных напитков может помочь понять, как эти факторы связаны, используя коэффициент Пирсона.

Результаты работы скрипта должны выглядеть примерно так (здесь приведены результаты, полученные для начальных условий скрипта):

Получив все результаты, мы выберем эти два символа (отрицательная корреляция означает, что когда один идет вверх, другой идет вниз и наоборот, а положительная корреляция означает, что символы идут один за другим), мы выберем символ USDJPY, потому что, как объясняется в Равновесии Нэша, таким образом, мы могли бы воспользоваться тем, что доллар США является двигателем рынка Форекс, а другие коррелирующие валюты могли бы двигаться вслед за ним:

Я использовал MetaTrader 5 с демо-аккаунтом для получения всех получаемых данных и обратного тестирования советника.


HMM (Скрытая Марковская модель)

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

HMM используется в трейдинге для создания модели, предсказывающей паттерны рынка, используя прошлые данные.

Мы будем использовать скрипт на python для получения модели HMM, мы должны учитывать используемые таймфреймы (они должны быть такими же, как в советнике), скрытые состояния и количество данных для прогнозирования (чем больше, тем лучше).

Скрипт на python выдаст 3 матрицы (в формате .txt), а также три графика, которые мы будем использовать в качестве советника.

Ниже приведён скрипт .py:

Данный скрипт с такими начальными условиями дал такие результаты:

Чтобы использовать его, нам просто нужно изменить используемый символ, из которого мы получаем данные, количество состояний и даты, из которых мы получим данные. Нам также придется настроить в советнике и в обоих скриптах на python использование временного периода (таймфрема) (а также все скрипты и советник).

В этом скрипте будет 10 моделей, и он выполнит усреднение по ним для получения надежной модели (если бы мы создали только две модели, обе группы матриц были бы разными) (Создание матриц займет некоторое время). В конце у вас будут матрицы, три графика (сейчас я объясню, почему они важны), описание скрытых состояний и текстовый файл в формате .txt с матрицами.

Результаты

На первом изображении мы видим результат обратного тестирования с использованием средней модели HMM. Можно увидеть значение цены и стратегию с результатами НММ относительно обратного тестирования за этот период.

Средняя доходность

На втором изображении видны результаты тестирования в течение периода тестирования, а также важное изображение, показывающее где используются скрытые состояния (вы можете видеть, где они показали восходящий тренд или нисходящий тренд, либо его диапазон или нейтральность).

Средняя доходность плюс

На третьем изображении видны выигрыши по каждому скрытому состоянию в виде баров.

Бары

На четвертом изображении показана средняя доходность стратегии за период между последней датой и сегодняшним днем (это то, чего нам следует ожидать от стратегии при тестировании в MetaTrader 5, если мы не скорректируем состояния).

Average Returns Recent

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

Судя по столбцам, мы можем видеть, что скрытые состояния, которые мы хотим использовать, следующие: 2, 3 и 7, что, вероятно, соответствует диапазону, восходящий тренд и нисходящий тренд соответственно могут быть высоким трендом. Теперь мы можем настроить стратегию в советнике, принимая во внимание, что другие скрытые состояния не приносили прибыли (мы можем провести множество тестов на истории, чтобы понять, какое из них подходит лучше всего).

Во всех скриптах python используется Python 3.10.

Мы могли бы добавлять матрицы в советник (компонент за компонентом, потому что в python есть другой способ отображения матриц), но поскольку мы не хотим много работать, воспользуемся следующим скриптом, чтобы изменить матрицу для MQL5 таким образом, чтобы использовать для советника. Это советник, который мы можем использовать для форматирования матрицы:

Мы также можем использовать сокеты (сокеты - хороший способ взаимодействия с mt5 с использованием внешних данных) для импорта матриц. Это можно сделать так, как описано в данной статье: Анализ интенсивности событий в Twitter с помощью сокетов - статьи в MQL5 и даже добавить анализ интенсивности событий (как описано в указанной статье), чтобы лучше ориентироваться в трендах.

Этот скрипт выдаст нам файл .txt, который покажет что-то похожее на нижеуказанное:

Это - формат матрицы, который мы будем использовать в советнике.

Теперь у нас есть два символа, которые отрицательно коррелируют и коинтегрируются. Мы сделали HMM для одного из этих символов (нам нужен только один из них, потому что мы знаем, что оба символа коррелируют), а поскольку они отрицательно коррелируют, когда мы предполагаем, что один из них пойдет вверх (с HMM), мы применяем Нэш, и если все верно, мы продаем другой символ.

Мы могли бы сделать это с большим количеством символов (если они коррелируют в одном направлении - покупать, либо продавать, если они отрицательно коррелируют).

Но сначала я написал скрипт на python, чтобы показать, каковы будут результаты, а также поиграть со скрытыми состояниями. Ниже приведен скрипт:

Взглянем на скрипт. Он открывает текстовый файл с матрицами, загружает данные из MetaTrader 5 для этого символа и использует данные с последней даты, которую мы использовали в других скриптах, до сегодняшнего дня, чтобы продемонстрировать, как работает hmm. Результаты отображаются в формате .png, и мы можем изменять их состояния. Давайте посмотрим, каковы будут результаты при использовании всех состояний, которые нам предлагает использовать второй скрипт:

Из второго скрипта:

Вот что он демонстрирует:

Playground

Как видим, эта стратегия на самом деле не очень хороша. Итак, давайте поиграем со скрытыми состояниями (которые мы выберем с помощью барового графика, исключим седьмое состояние):

Playground  modifiet

Из этого мы извлекли урок, что, если не использовать наихудшие скрытые состояния, у нас может быть более выгодная стратегия.

Ещё раз, применение здесь глубокого обучения может помочь лучше распознать паттерны исходного символа (в данном случае USDJPY). Возможно, мы могли бы поэкспериментировать с этим как-нибудь в другой раз.


Реализация на MQL5

Советник (EA) Нэша - это сложная алгоритмическая торговая система, разработанная для платформы MetaTrader 5. По своей сути, в советнике используется мультистратегический подход, включающий в себя скрытые Марковские модели (HMM), анализ логарифмического правдоподобия, оценку силы тренда и концепции равновесия Нэша для принятия торговых решений на валютном рынке.

Работа советника начинается с инициализации важнейших параметров и индикаторов. Он устанавливает основные скользящие средние (EMA), Индекс относительной силы (RSI), Средний истинный диапазон (ATR) и полосы Боллинджера. Эти технические индикаторы формируют основу для анализа рынка советником. Процесс инициализации также включает в себя настройку параметров скрытой марковской модели, которые являются ключевыми для прогнозных возможностей советника.

Одной из ключевых функций советника является его система определения рыночного режима. В данной системе используются методы HMM и логарифмического правдоподобия, чтобы разделить текущее состояние рынка на три категории: восходящий тренд, нисходящий тренд или отсутствие тренда (нейтральный). Процесс определения режима включает в себя сложные расчеты вероятностей эмиссии и переходов между состояниями, что позволяет получить детальное представление о рыночных условиях.

Советник реализует четыре различные торговые стратегии: на основе HMM, логарифмической вероятности, силы тренда и равновесия Нэша. Каждая стратегия генерирует свой собственный торговый сигнал, который затем взвешивается и объединяется для формирования комплексного торгового решения. Стратегия равновесия Нэша, в частности, направлена на поиск оптимального баланса между другими стратегиями, что потенциально может привести к принятию более обоснованных торговых решений.

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

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

В своем основном операционном цикле советник Нэш обрабатывает рыночные данные по каждому новому ценовому бару. Он пересчитывает рыночные режимы, обновляет сигналы стратегий и принимает торговые решения на основе совокупных результатов всех включенных стратегий. Советник предназначен для открытия позиций в парах, потенциально торгуя как основным инструментом, так и EURCHF одновременно, что может быть частью стратегии хеджирования или корреляции.

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

Теперь рассмотрим некоторые важные функции и равновесия Нэша:

Основными функциями, используемыми для реализации концепции равновесия Нэша в этом советнике (EA), являются:

  1. CalculateStrictNashEquilibrium()

Это основная функция для расчета строгого равновесия по Нэшу. Вот её реализация:

Объяснение:

  • Эта функция вычисляет сигналы на покупку и продажу на основе взвешенных сигналов первых трех стратегий.
  • Она сравнивает сигналы на покупку и продажу, чтобы определить действие равновесия Нэша.
  • Если сигналы совпадают, она принимает решение, основываясь на текущем направлении цены.
  1. SimulateTrading()

Хотя и не исключительно для равновесия Нэша, данная функция реализует торговую логику, включающую равновесие Нэша:

Объяснение:

  • Данная функция имитирует торговлю на основе сигналов от всех стратегий, включая стратегию равновесия Нэша.
  • Она рассчитывает взвешенные сигналы на покупку и продажу для всех включенных стратегий.
  1. OnTick()

При использовании функции OnTick() реализуется логика исполнения сделок, основанных на равновесии Нэша:

Объяснение:

  • Данная функция проверяет, включена ли стратегия равновесия Нэша (которая является третьей стратегией в массиве стратегий), и сгенерировала ли она сигнал.
  • Если есть сигнал на покупку (сигнал > 0), она открывает ордер на покупку.
  • Если есть сигнал на продажу (сигнал < 0), она открывает ордер на продажу.

Таким образом, равновесие Нэша реализовано в качестве одной из торговых стратегий в этом советнике. Функция CalculateStrictNashEquilibrium() определяет сигнал равновесия Нэша на основе сигналов из других стратегий. Затем этот сигнал используется в функции OnTick() для принятия торговых решений. Реализация направлена на то, чтобы найти баланс между различными стратегиями для принятия более обоснованных торговых решений.

Такой подход к реализации равновесия Нэша в торговой стратегии является интересным применением теории игр к финансовым рынкам. Он пытается найти оптимальную стратегию, рассматривая взаимодействие между различными торговыми сигналами, что аналогично нахождению равновесия в многопользовательской игре, где у каждого "игрока" своя торговая стратегия.

Функция DetectMarketRegime: данная функция имеет решающее значение для процесса принятия решений советником Она анализирует текущие рыночные условия, используя технические индикаторы и сложные статистические модели для определения рыночного режима.

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

Функция CalculateStrategySignals: эта функция рассчитывает торговые сигналы для каждой из стратегий советника на основе текущего рыночного режима и технических индикаторов.

Эта функция вычисляет сигналы для каждой включенной стратегии, интегрируя различные аналитические методы для формирования комплексного торгового решения.

Функция SimulateTrading: эта функция имитирует торговлю на основе рассчитанных сигналов и обновляет показатели эффективности каждой стратегии.

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

Функция CalculateHMMLikelihoods: эта функция вычисляет вероятности различных состояний рынка, используя скрытую марковскую модель.

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

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

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


Результаты

С этими настройками

Настройки

и этими вводными данными

Inputs

Результаты по всем стратегиям были следующими:

Graph

Backtesting

По истечении этого периода выигрыши замедлились, а оптимизация должна была проводиться каждые 3 месяца (при соблюдении всех этих стартовых условий). Стратегии просты, и в них используется трейлинг-стоп (который очень прост и фиксирован). Лучшие результаты могут быть получены при большей оптимизации, использовании новых матриц и более совершенных стратегий. Мы также должны рассмотреть возможность добавления в этот советник анализа интенсивности и глубокого обучения, не забывая о том, что было сказано ранее.

Для работы всех стратегий необходим Нэш.


Заключение

Пересечение теории игр и трейдинга открывает захватывающие возможности для совершенствования рыночных стратегий. Применяя теорию равновесия Нэша, трейдеры могут принимать более взвешенные решения, учитывая потенциальные действия других участников рынка. В настоящей статье описано, как реализовать эти концепции с помощью Python и MetaTrader 5, предлагая мощный набор инструментов для тех, кто хочет усовершенствовать свой подход к торговле. Поскольку рынки продолжают развиваться, интеграция математических теорий, таких как равновесие Нэша, может стать ключевым фактором в достижении стабильного успеха в торговле.

Надеемся, что вы с удовольствием прочитали настоящую статью или пересмотрели её, и надеемся, что это будет полезно для вашего собственного советника. Это интересная тема, и надеемся, что она оправдала ваши ожидания и понравилась вам так же, как мне понравилось ее создавать.


Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/15541

Прикрепленные файлы |
Nash_article_v2.zip (28.15 KB)
Последние комментарии | Перейти к обсуждению на форуме трейдеров (2)
Zhuo Kai Chen
Zhuo Kai Chen | 26 дек. 2024 в 17:02

Я потратил целый день, пытаясь разобраться в вашем коде. Инструкции в разделе Python были понятны, и я смог воспроизвести почти те же результаты бэктестов, что и вы. Однако последующая часть статьи была довольно туманной, в ней почти не объяснялась логика статистического арбитража при торговле парами и то, как именно применяется теория игр.

Вот два примера проблем, с которыми я столкнулся при работе с вашим кодом:

  1. Функция isPositiveDefinite() предназначена для проверки того, является ли единичная ковариационная матрица 3×3 положительно определенной. Однако в InitializeHMM вы передаете в isPositiveDefinite() весь массив emissionCovs, а не отдельные матрицы 3×3.

  2. Способ количественной оценки сигнала стратегии также несовершенен. И лог-вероятность стратегии, и тренд стратегии выводят точно такой же сигнал, в то время как сигнал HMM кажется нерелевантным. Отключение сигнала HMM буквально ничего не меняет, однако вся ваша статья сосредоточена вокруг реализации HMM.

Ваша стратегия основана на арбитраже, и размер лота должен быть ее важнейшей частью. У вас есть функция calculateLotSize(), но она не используется в вашей демонстрации. И вы всерьез полагаете, что розничные трейдеры будут торговать почти каждую 4-часовую свечу? Поздний результат бэктеста не был прибыльным, но вы утверждаете, что его нужно оптимизировать каждые пару месяцев. Но что именно должно быть оптимизировано? Период индикатора?

Я читал много ваших статей, и в основном они интересны. Однако эта, на мой взгляд, не очень хорошо построена, и я бы посоветовал читателям не тратить на нее слишком много времени, как это сделал я. Я искренне надеюсь, что вы сохраните качество своих статей в будущем.

wupan123898
wupan123898 | 19 янв. 2025 в 12:11
Zhuo Kai Chen бэктестов, что и вы. Однако последующая часть статьи была довольно туманной, в ней практически не объяснялась логика статистического арбитража при торговле парами и то, как именно применяется теория игр.

Вот два примера проблем, с которыми я столкнулся при работе с вашим кодом:

  1. Функция isPositiveDefinite() предназначена для проверки того, является ли единичная ковариационная матрица 3×3 положительно определенной. Однако в InitializeHMM вы передаете в isPositiveDefinite() весь массив emissionCovs, а не отдельные матрицы 3×3.

  2. Способ количественной оценки сигнала стратегии также несовершенен. И лог-вероятность стратегии, и тренд стратегии выводят точно такой же сигнал, в то время как сигнал HMM кажется нерелевантным. Отключение сигнала HMM буквально ничего не меняет, однако вся ваша статья сосредоточена вокруг реализации HMM.

Ваша стратегия основана на арбитраже, и размер лота должен быть ее важнейшей частью. У вас есть функция calculateLotSize(), но она не используется в вашей демонстрации. И вы всерьез полагаете, что розничные трейдеры будут торговать почти каждую 4-часовую свечу? Поздний результат бэктеста не был прибыльным, но вы утверждаете, что его нужно оптимизировать каждые пару месяцев. Но что именно должно быть оптимизировано? Период индикатора?

Я читал много ваших статей, и в основном они интересны. Однако эта, на мой взгляд, не очень хорошо построена, и я бы посоветовал читателям не тратить на нее слишком много времени, как это сделал я. Я искренне надеюсь, что вы сохраните качество своих статей в будущем.

Я также потратил много времени, этот код не понятен, даже есть ошибки

Нейросети в трейдинге: Двойная кластеризация временных рядов (Окончание) Нейросети в трейдинге: Двойная кластеризация временных рядов (Окончание)
Продолжаем реализацию подходов, предложенных авторами фреймворка DUET, который предлагает инновационный подход к анализу временных рядов, сочетая временную и канальную кластеризацию для выявления скрытых закономерностей в анализируемых данных.
Возможности Мастера MQL5, которые вам нужно знать (Часть 35): Регрессия опорных векторов Возможности Мастера MQL5, которые вам нужно знать (Часть 35): Регрессия опорных векторов
Регрессия опорных векторов — это идеалистический способ поиска функции или "гиперплоскости" (hyper-plane), который наилучшим образом описывает взаимосвязь между двумя наборами данных. Мы попытаемся использовать его при прогнозировании временных рядов в пользовательских классах Мастера MQL5.
Арбитражный трейдинг Forex: Панель оценки взаимосвязей Арбитражный трейдинг Forex: Панель оценки взаимосвязей
Рассмотрим создание арбитражной панели на языке MQl5. Как получать справедливые курсы валют на Forex разными способами? Создадим индикатор для получения отклонений рыночных цен от справедливых курсов, а также для оценки выгоды от арбитражных путей обмена одной валюты на другую (как в треугольном арбитраже).
Создание самооптимизирующихся советников на языках MQL5 и Python Создание самооптимизирующихся советников на языках MQL5 и Python
В этой статье обсудим, как можно создать советник, способный самостоятельно выбирать и менять торговые стратегии в зависимости от преобладающих на рынке условий. Познакомимся с цепями Маркова и с их возможностями с точки зрения пользы для нас, алготрейдеров.