preview
Нейросети в трейдинге: Агрегация движения по времени (TMA)

Нейросети в трейдинге: Агрегация движения по времени (TMA)

MetaTrader 5Торговые системы |
346 0
Dmitriy Gizlyk
Dmitriy Gizlyk

Введение

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

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

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

На этом параллельном поле и появился фреймворк TMA (Temporal Motion Aggregation), предложенный Haotian Liu и соавторами в работе "TMA: Temporal Motion Aggregation for Event-based Optical Flow". Он был создан для задач извлечения движения из событийных данных, но его принципы оказались универсальными, способными описывать любую динамическую систему, где важна временная последовательность событий. Суть подхода TMA в том, чтобы не рассматривать события как отдельные, не связанные между собой точки, а объединять их в когерентные временные структуры, выявляя закономерности движения, скрытые под поверхностью хаоса. В этом смысле TMA можно рассматривать как своеобразный мост между физикой движения и математикой времени.

Алгоритм фреймворка TMA строится на трёх взаимосвязанных механизмах.

  1. Event Splitting Strategy — разделяет поток событий на временные сегменты, подобно тому как аналитик делит историю торгов на микропериоды активности. Каждый сегмент содержит собственный ритм — короткие импульсы, в которых отражается локальная динамика рынка.
  2. Linear Lookup Strategy — выполняет временное выравнивание, синхронизируя события, происходящие в разные моменты. Это напоминает процедуру нормализации финансовых данных, где сигналы разных активов или бирж приводятся к единой временной шкале, устраняя эффект задержек и смещений.
  3. Motion Pattern Aggregation Module — центральное звено, где все временные фрагменты объединяются в согласованную картину движения. Здесь шум уходит, а закономерности проступают, как очертания течения под поверхностью воды.

Если рассматривать рынок сквозь призму этих идей, становится очевидно, что цена — это не просто величина, а траектория, сформированная множеством микрособытий. Каждое изменение котировки несёт информацию о движении капитала, о перемещении интереса между участниками, о реакциях на новости, о борьбе ликвидности и страха. TMA предлагает инструмент, который позволяет собрать этот разбросанный по времени поток в единую динамическую форму. Разделив события на временные слои, выровняв их по темпам и направлениям. А затем, объединив в когерентное движение, можно получить то, что экономисты называли бы истинным импульсом рынка — структурой, в которой проявляется замысел толпы.

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

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

Именно это делает подход TMA столь перспективным для анализа финансовых временных рядов. Он предлагает не просто новую архитектуру обработки данных, а иной взгляд на само понятие времени. В нём время не пассивно, а активно; не линейно, а многослойно. Каждое событие — это не точка, а волна, и взаимодействие этих волн формирует реальную динамику рынка.

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



Алгоритм TMA

В классических задачах оптического потока цель состоит в том, чтобы определить плотное поле смещений u : ℝ² → ℝ², которое сопоставляет каждой точке (x, y) в момент t₀ её новое положение (x′, y′) в момент t₁. Перенося эту идею в финансовую плоскость, можно сказать, что задача анализа потока данных сводится к определению вектора движения рынка — функции, отображающей состояние цены, объёма или волатильности в новое состояние спустя определённый временной интервал.

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

Фреймворк TMA решает эту проблему иначе. Вместо того чтобы сжимать данные во фреймы и искать совпадения в статичных срезах, он использует временную непрерывность событийного потока. Финансовые данные, подобно событиям в визуальной модели, содержат богатую временную структуру. Каждое изменение котировки связано с множеством микрособытий: появлением ордеров, ростом объёма, изменением спреда. Эта последовательная тонкая структура несёт гораздо больше информации о реальной динамике рынка, чем усреднённые пространственные признаки. Используя эту тонкость временной детализации, TMA восстанавливает непрерывный контекст движения, формируя более точные и выразительные оценки направления и скорости изменений.

Для сохранения временной структуры и упрощения извлечения признаков, поток событий E преобразуется во временное трёхмерное представлениеV(x, y, t). В исходной постановке TMA выполняет дискретизацию вдоль временной оси, разбивая поток на последовательные интервалы и размещая события в многомерное представление. В финансовом контексте это аналог разбиения рыночного потока на микрослои времени, где каждое изменение параметров (цены, объёма или волатильности) фиксируется как элемент многомерного массива.

Каждое событие eₖ = (xₖ, pₖ, tₖ) можно рассматривать как триаду: локализацию (xₖ, yₖ), временную метку tₖ и знак изменения pₖ = ±1, отражающий направление движения (рост или снижение). В отличие от фиксированных таймфреймов, такой формат позволяет работать с асинхронными потоками и не терять последовательность развития рыночных событий.

Для построения объёма V(x, y, t) используется временное масштабирование и билинейная интерполяция, которая помогает сгладить границы между соседними временными слоями. Если обозначить длину временного окна через B, а количество событий через Nₑ, то объём формируется как взвешенная сумма всех событий с учётом их временной и пространственной близости.

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

Фреймворк TMA построен на архитектурных принципах, унаследованных RAFT, однако существенно переработан под задачу обработки событийных потоков. Его архитектура опирается на три ключевых механизма:

  • стратегию разделения событий (event splitting strategy),
  • линейное временное выравнивание (linear lookup strategy)
  • модуль агрегации паттернов движения (motion pattern aggregation module).
В совокупности эти компоненты позволяют раскрыть потенциал временной непрерывности, обеспечивая точное и устойчивое восстановление динамики в рамках обучаемой модели.

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

Первый компонент, Event Splitting Strategy, выполняет роль интеллектуального сегментатора. Вместо того чтобы сжимать поток котировок в усреднённые временные фреймы, он делит его на несколько перекрывающихся временных отрезков, формируя серию промежуточных представлений. Такое разделение позволяет сохранить богатую промежуточную динамику — тонкие детали движения, которые часто теряются при стандартной агрегации. Поток данных E, охватывающий интервал от t₀ до t₁, разбивается на g равных сегментов с шагом Δt, к которым добавляется один дополнительный опорный фрагмент из диапазона (t₀ – Δt, t₀). Таким образом формируется последовательность из g+1 временных срезов, каждый из которых отражает собственный ритм рынка.

Затем каждый из этих срезов проходит через общий Энкодер (аналог анализатора структуры рынка), который извлекает из него векторные представления — Fi ∈ ℝᴴ×ᵂ×ᶜ, где H и W определяют пространственную сетку признаков, а C — глубину их признакового пространства. В финансовом контексте это можно интерпретировать как преобразование микрособытий в многомерное поле рыночных признаков — своеобразную карту активности, отражающую локальные и глобальные колебания интереса участников.

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

где:

  • F₀ — признаки первого временного сегмента (опорного состояния рынка)
  • Fᵢ — признаки соответствующего сегмента в момент времени tᵢ

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

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

Главное отличие TMA от традиционных подходов заключается именно во временной плотности анализа. В то время как классические методы ограничиваются одной фиксированной временной парой (начальным и конечным состоянием), TMA рассматривает целую серию взаимосвязанных временных фрагментов. Это создаёт возможность отслеживать непрерывное развитие движения и учитывать не только направление, но и форму его изменения.

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

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

Следующий этап — линейная стратегия выборки (Linear Lookup Strategy), представляет собой способ привести все динамические процессы, зафиксированные в потоке событий, к общему знаменателю на временной шкале.

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

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

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

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

Модуль агрегации шаблонов движения (Motion Pattern Aggregation Module) — это заключительный и, пожалуй, самый изящный элемент архитектуры TMA. Его задача — объединить полученные ранее временные признаки движения в единое согласованное представление, где каждый временной слой не просто добавляет данные, а вносит осмысленный вклад в общую картину динамики. На первый взгляд, всё просто — объединить признаки и обновить оценку потока. Но в действительности здесь скрывается тонкий баланс — как между разными этапами движения в физике, так и между шумом и сигналом в финансовом анализе.

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

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

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

Технически этот процесс реализуется через серию блоков перекрёстного внимания и последующих нелинейных преобразований (MLP), которые уточняют и нормализуют признаки, не изменяя их размерности. Такая компактность важна — она позволяет наращивать глубину без перегрузки модели, подобно тому как аналитик может последовательно уточнять прогноз, не увеличивая количество исходных показателей. В результате каждый обновлённый признак (MFi) становится не просто очередным срезом временного ряда, а носителем согласованных и подтверждённых закономерностей.

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

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

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

Авторская визуализация фреймворка TMA представлена ниже.


Реализация средствами MQL5

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

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

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

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

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

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

Иными словами, перед нами стоит нетривиальная задача — объединить два мира. Мир RAFT, где информация течёт последовательно, словно река, и мир TMA, где время рассматривается как структурированный объём, подобный кристаллу. Нужно найти способ соединить эти представления так, чтобы рыночный поток не просто фиксировался, но и осмысленно интерпретировался.

Для начала давайте разберёмся, зачем вообще нужны эти сегменты и как они используются в структуре TMA. Авторы фреймворка предлагают делить временной поток не ради удобства обработки. Каждый сегмент здесь — это самостоятельный кадр рыночной динамики, внутри которого можно рассматривать взаимосвязи и закономерности между признаками, формирующими поведение цены.

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

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

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

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

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

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

В рамках практической реализации предложенного подхода мы создаём новый компонент — CNeuronMultScalStackCorrelBySegments, который становится центральным элементом адаптации идей TMA к рекуррентной архитектуре. Его задача — объединить многомасштабную корреляцию с механизмом сегментирования и при этом сохранить непрерывность временного потока. Проще говоря, это узел, где рыночная динамика раскладывается на пересекающиеся временные сегменты и тут же синтезируется обратно — в виде обогащённого представления движения.

class CNeuronMultScalStackCorrelBySegments :  public CNeuronAddToStack
  {
protected:
   CNeuronMultiScaleStackCorrelation cCorrelation;
   //---
   virtual bool      feedForward(CNeuronBaseOCL *NeuronOCL) override;
   virtual bool      calcInputGradients(CNeuronBaseOCL *NeuronOCL) override;

public:
                     CNeuronMultScalStackCorrelBySegments(void) {};
                    ~CNeuronMultScalStackCorrelBySegments(void) {};
   //---
   virtual bool      Init(uint numOutputs, uint myIndex, COpenCLMy *open_cl,
                          uint segments, uint segment_size, uint dimension,
                          uint variables, uint levels,
                          ENUM_OPTIMIZATION optimization_type, uint batch);
   //---
   virtual int       Type(void)   override const   {  return defNeuronMultScalStackCorrelBySegments;   }
   //--- methods for working with files
   virtual bool      Save(int const file_handle) override;
   virtual bool      Load(int const file_handle) override;
   //---
   virtual void      SetOpenCL(COpenCLMy *obj) override;
   //---
   virtual void      SetActivationFunction(ENUM_ACTIVATION value) override;
   virtual bool      Clear(void) override;
   //---
   virtual uint      GetLevels(void) const { return cCorrelation.GetLevels(); }
   virtual uint      SetSegmentSize(void) const { return cCorrelation.GetStackSize(); }
  };

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

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

bool CNeuronMultScalStackCorrelBySegments::Init(uint numOutputs, uint myIndex, COpenCLMy *open_cl,
                                                uint segments, uint segment_size, uint dimension,
                                                uint variables, uint levels,
                                                ENUM_OPTIMIZATION optimization_type, uint batch)
  {
   if(!CNeuronAddToStack::Init(numOutputs, myIndex, open_cl, segments, segment_size * levels,
                                                                    variables, optimization_type, batch))
      return false;
   if(!cCorrelation.Init(0, 0, OpenCL, segment_size, dimension, variables, levels, optimization, iBatch))
      return false;
   SetActivationFunction(None);
//---
   return true;
  }

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

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

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

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

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

bool CNeuronMultScalStackCorrelBySegments::feedForward(CNeuronBaseOCL *NeuronOCL)
  {
   if(!cCorrelation.FeedForward(NeuronOCL))
      return false;
   if(!CNeuronAddToStack::feedForward(cCorrelation.AsObject()))
      return false;
//---
   return true;
  }

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

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

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

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

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

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


Заключение

Мы лишь открыли первую страницу большой работы — адаптации фреймворка TMA к решению задач финансовых рынков средствами MQL5. Сегодня мы познакомились с его теоретическим фундаментом и начали практическое воплощение идей, заложенных авторами. И чем глубже мы погружаемся в архитектуру TMA, тем яснее становится: перед нами не просто очередной вариант обработки временных данных, а целая концепция, которая способна преобразить подход к анализу финансовых рынков.

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

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


Ссылки


Программы, используемые в статье

# Имя Тип Описание
1 Study.mq5 Советник Советник офлайн обучения моделей
2 StudyOnline.mq5 Советник Советник онлайн обучения моделей
3 Test.mq5 Советник Советник для тестирования модели
4 Trajectory.mqh Библиотека класса Структура описания состояния системы и архитектуры моделей
5 NeuroNet.mqh Библиотека класса Библиотека классов для создания нейронной сети
6 NeuroNet.cl Библиотека Библиотека кода OpenCL-программы
Прикрепленные файлы |
MQL5.zip (3280.15 KB)
Выборочные методы MCMC: Алгоритм выборки по уровням (Slice sampling) Выборочные методы MCMC: Алгоритм выборки по уровням (Slice sampling)
В этой статье исследуется метод выборки по уровням (slice sampling) — адаптивный алгоритм MCMC, который самостоятельно регулирует параметры сэмплирования. Его эффективность продемонстрирована на моделях байесовской линейной и логистической регрессии, а результаты сравниваются с классическими частотными методами.
Возможности Мастера MQL5, которые вам нужно знать (Часть 54): Обучение с подкреплением с гибридным SAC и тензорами Возможности Мастера MQL5, которые вам нужно знать (Часть 54): Обучение с подкреплением с гибридным SAC и тензорами
Soft Actor Critic (мягкий актер-критик) — это алгоритм обучения с подкреплением, который мы рассматривали в предыдущей статье, где мы также представили Python и ONNX как эффективные подходы к обучению сетей. В этой статье мы вернемся к алгоритму с целью использования тензоров — вычислительных графов, которые часто используются в Python.
От новичка до эксперта: Раскрываем скрытые уровни коррекции Фибоначчи От новичка до эксперта: Раскрываем скрытые уровни коррекции Фибоначчи
В настоящей статье мы рассмотрим основанный на данных подход к обнаружению и проверке нестандартных уровней коррекции Фибоначчи, которые могут учитываться рынками. Мы представляем полный рабочий процесс, адаптированный для реализации на MQL5, начиная со сбора данных и определения баров или колебаний и заканчивая кластеризацией, проверкой статистических гипотез, бэктестингом и интеграцией в инструмент Фибоначчи на MetaTrader 5. Цель состоит в том, чтобы создать воспроизводимый конвейер, преобразующий отдельные наблюдения в статистически обоснованные торговые сигналы.
Система самообучения с подкреплением для алгоритмической торговли на MQL5 Система самообучения с подкреплением для алгоритмической торговли на MQL5
В статье создаётся многоагентная система машинного обучения для алгоритмической торговли на MetaTrader 5 на основе обучения с подкреплением. Система имеет трёхуровневую архитектуру: нейроны памяти хранят опыт, агенты принимают независимые решения, коллективный разум объединяет их через взвешенное голосование. Система непрерывно совершенствуется через Q-обучение, прунинг неэффективных нейронов и эволюционное снижение исследования.