English 中文 Español Deutsch 日本語 Português
preview
Теория категорий в MQL5 (Часть 11): Графы

Теория категорий в MQL5 (Часть 11): Графы

MetaTrader 5Примеры | 31 августа 2023, 10:07
624 0
Stephen Njuki
Stephen Njuki

Введение

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

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

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


Графы в теории категорий

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

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

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

  1. Выбор таймфрейма
  2. Выбор периода ретроспективного анализа
  3. Выбор применяемой цены
  4. Выбор индикатора
  5. И, наконец, выбор торгового действия

Схематически это можно представить так:


Альтернативные системы тех же шагов также могут быть изображены так:

Вариант 1


Вариант 2


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

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


где исходный и целевой индексы в таблице стрелок являются индексами вершин. Индексный столбец в стрелках служит только для нумерации стрелок.

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


MQL5 и разработка торговой системы

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

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


Изучение возможностей графов в торговых системах MQL5

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

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

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

И это еще не все. Если мы сделаем шаг за пределы нашей "закрытой" торговой системы и попытаемся увидеть, что еще могут указывать различные "пути" графов, мы сможем проанализировать корреляции между типами путей и ценовым действием. Предположим, мы рассматриваем один ценовой бар, который имеет типичные четыре цены - открытия (Open), максимума (High), минимума (Low) и закрытия (Close). Мы могли бы считать это путем, потому что они не всегда находятся в последовательности O-H-L-C. В бычьих барах, хотя и не всегда, порядок может быть O-L-H-C. Это и другие наблюдения могут привести к распознаванию закономерностей путем раннего обнаружения изменений ценового действия на основе типа пути предшествующих внутрибарных движений цен.

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

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

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


Примеры: Реализация графов в MQL5

Пример 1: Графы, основанные на значениях внутриценовых баров:

Как и в предыдущих статьях, мы можем изучить влияние различных траекторий графика отстающих внутренних ценовых баров на возможные максимумы и минимумы последующих ценовых баров. Итак, внутренние ценовые бары учитывают последовательность цен открытия, минимума, максимума и закрытия. Вы всегда начинаете с открытия и заканчиваете закрытием, но порядок максимумов и минимумов не является стандартным, и эта изменчивость позволяет нам изучать любые связи с последующими изменениями максимумов и минимумов. Для достижения этой цели мы, как и прежде, создадим экземпляр класса Expert Trailing и добавим эту пару с другими существующими классами в библиотеку для управления сигналами и капиталом, чтобы сформировать советника. Мы объединим наш класс трейлинга с классом сигналов Awesome Oscillator и классом управления капиталом с фиксированной маржой.

Ниже указаны результаты тестов на паре USDJPY H1 с июня 2022 по июнь 2023 года.

r1

Пример 2: Графы как модификация изначальной торговой системы

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

Если мы проведем тестирование пары USDJPY, как и в примере 1, мы получим результаты, указанные в отчете ниже.

r2


Потенциальные проблемы и особенности

Как можно понять из наших тестовых советников, реализованных в двух приведенных выше тематических исследованиях, использование графов в торговой системе требует длительного обучения, чтобы получить значимые результаты. Если мы рассмотрим первый советник, мы вывели наши пути на основе внутрибарных ценовых шагов открытия, максимума, минимума и закрытия. Эти пути были закодированы как элементарный класс, который даже не включал взвешивание для каждой стрелки — функция, которая полезна, если экземпляр класса графа со временем обновляется новой информацией о стрелках. Вместо этого мы использовали экземпляр класса, который инициализируется на каждом новом баре, теряя при этом изученную память. Реализация последнего варианта в идеале предполагает хранение файла в изолированной IDE этих графов, что само по себе требует много памяти. Добавьте к этому, что вычислительная мощность и время, затрачиваемые на тестирование, возрастут по сравнению с простым классом, который мы использовали в примере. Кроме того, мы решили определить каждую вершину как ценовую точку внутри бара, но мы могли бы использовать более эффективный в вычислительном отношении вариант определения каждой ценовой точки как цены закрытия. Это указывает на необходимость тщательно взвешивать решения и сопоставлять их с ожидаемой точностью вашей системы. Кроме того, существует множество типов ориентированных графов. Это означает, что разработчику необходимо тщательно выбирать элементы, которые лучше всего будет работать с задуманной стратегией. Что еще хуже, данные о ценах брокеров никогда не являются полными и часто содержат пробелы и отсутствующие цены. Добавьте к этому довольно сложную взаимосвязь между стрелками графа и связанными ценовыми точками. На нее влияет множество факторов, включая рыночные условия, настроения инвесторов, экономические события и множество других. Возможно, разработчик системы графов должен добиться, чтобы его система могла получать значимые результаты торговли в долгосрочной перспективе и, учитывая количество представленной здесь двусмысленности, это, безусловно, усложняет процесс. И, наконец, здесь следует учитывать масштабируемость, поскольку по мере того, как каждый день появляются новые данные о ценах, графики, особенно графики обучения с весами (которые мы не рассматривали в наших тематических исследованиях), необходимо будет обновлять. Переобучение графов со временем неизбежно станет более трудоемким, если разработчик не сможет придумать эффективные методы кодирования своих классов, чтобы избежать этого.

Пока нет библиотек, по крайней мере подходящих для реализации теории графов в MQL5. Это означает, что программистам необходимо вкладывать значительное время и ресурсов, чтобы найти работоспособные решения. А поскольку такие решения очень индивидуальны, они неизбежно подвержены ошибкам. Для сравнения в MQL5 IDE доступно множество торговых индикаторов, реализующих множество идей, от индикатора Relative Strength до полос Боллинджера (всего не менее 47), которые можно использовать без необходимости кодировать их с нуля.

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

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

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

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

Чтобы устранить пробел в реализации графов в MQL5, можно рассмотреть несколько подходов. Изучите вклад сообщества MQL5, связанный с разработкой и распространением библиотек, связанных с графами, которые могут значительно повысить доступность готовых решений. Сотрудничество, обмен знаниями и создание проектов с открытым исходным кодом способствуют созданию динамичной экосистемы, которая приносит пользу всем трейдерам, стремящимся внедрить стратегии, основанные на графах. Также можно рассмотреть сторонние библиотеки за пределами экосистемы MQL5. Различные языки программирования, такие как Python или C++, уже имеют обширные библиотеки графов, которые можно интегрировать с MQL5 посредством пользовательских DLL (библиотек динамической компоновки) или API (интерфейсов прикладного программирования). Наконец, можно всячески лоббировать включение стандартизированных библиотек графов в будущие обновления MQL5. Запрос улучшений и отзывы о необходимости и преимуществах таких библиотек могут побудить поставщиков платформы устранить этот пробел.

Кроме того, Open-CL, доступный в IDE, может помочь решить проблемы с производительностью.


Что дальше?

Достижения в области графов теории категорий, которые могут привести к возможному внедрению в торговые системы, происходят ежедневно. Есть несколько сайтов, посвященных этому вопросу, например, этот или этот (на английском). Перспектива интеграции с платформами искусственного интеллекта, такими как ChatGPT 4.0, уже не кажется такой далекой, как, скажем, два года назад. Развитие идет. Потенциал и возможности для дальнейших исследований и разработок будут продолжать расти. Можно ждать все более интересных новостей в этой области.


Заключение

Мы рассмотрели реализацию графов теории категорий в MQL5. Особое внимание было уделено полезности графов для развития торговой системы. Читателю рекомендуется провести дальнейшее исследование и изучение представленных материалов и кодов до их использования в собственных торговых системах.

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

Прикрепленные файлы |
ct_11.mqh (27.33 KB)
Разработка системы репликации - Моделирование рынка (Часть 10): Только реальные данные для репликации Разработка системы репликации - Моделирование рынка (Часть 10): Только реальные данные для репликации
Здесь мы рассмотрим, как более надежные данные (торгуемые тики) можно использовать в системе репликации, не беспокоясь о том, скорректированы они или нет.
Разработка системы репликации - Моделирование рынка (Часть 09): Пользовательские события Разработка системы репликации - Моделирование рынка (Часть 09): Пользовательские события
Здесь мы увидим, как активировать пользовательские события и проработать вопрос о том, как индикатор сообщает о состоянии сервиса репликации/моделирования.
Готовые шаблоны для подключения индикаторов в экспертах (Часть 1): Осцилляторы Готовые шаблоны для подключения индикаторов в экспертах (Часть 1): Осцилляторы
В статье рассмотрим стандартные индикаторы из категории осцилляторов. Создадим готовые к применению шаблоны их использования в советниках — объявление и установка параметров, инициализация, деинициализация индикаторов и получение данных и сигналов из индикаторных буферов в советниках.
Делаем информационную панель для отображения данных в индикаторах и советниках Делаем информационную панель для отображения данных в индикаторах и советниках
В статье рассмотрим создание класса информационной панели для использования её в индикаторах и советниках. Это вводная статья в небольшой серии статей с шаблонами подключения и использования стандартных индикаторов в советниках. Начнем мы с создания панели — аналога окна данных MetaTrader 5.