preview
Нейросети в трейдинге: Оценка риска по несогласованности представлений (ReGEN-TAD)

Нейросети в трейдинге: Оценка риска по несогласованности представлений (ReGEN-TAD)

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

Введение

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

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

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

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

В качестве базового подхода предлагаем рассмотреть фреймворк ReGEN-TAD, представленный в статье "An Interpretable Generative Framework for Anomaly Detection in High-Dimensional Financial Time Series". Данный фреймворк объединяет генеративное моделирование, параллельное кодирование и диагностику расхождений между различными уровнями описания временного ряда. Сильная сторона ReGEN-TAD заключается в том, что он не сводит рыночный сигнал к одному каналу интерпретации. Напротив, архитектура строится так, чтобы сравнивать несколько внутренних представлений одного и того же процесса.

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

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

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



Алгоритм ReGEN-TAD

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

Именно эта идея лежит в основе ReGEN-TAD. Фреймворк изначально проектируется как система с несколькими параллельными каналами интерпретации, объединёнными в общее латентное пространство. С одной стороны, модель должна улавливать глобальную структуру и межрыночные зависимости. С другой — сохранять чувствительность к последовательной динамике и локальной инерции временных рядов. Дополнительно требуется механизм генеративной проверки, который позволяет оценить, насколько полученное представление согласуется как с текущими данными, так и с ожидаемым будущим.

Такой набор требований формирует архитектуру, в которой ключевую роль играют:

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

ReGEN-TAD рассматривает задачу обнаружения аномалий в многомерных временных рядах как задачу восстановления внутренней согласованности данных, а не как простой поиск выбросов. Для финансовых рынков это особенно важно, поскольку здесь аномалия редко выглядит как одиночный резкий всплеск. Чаще она проявляется тоньше: в смене характера колебаний, в нарушении привычных зависимостей между активами, в ослаблении или, наоборот, в неожиданном усилении связей между отдельными компонентами рынка.

Рассмотрим многомерный временной ряд {xt}t=1T, где — состояние системы в момент времени t, а p — число признаков. В финансовом контексте это может быть набор доходностей, цен, волатильностей, факторных переменных или производных характеристик, описывающих движение группы активов. Каждый такой вектор представляет собой мгновенный срез рыночной структуры, в котором уже заключены локальная динамика, кросс-секционные связи и скрытые режимные особенности. Для каждошо момента времени t формируется скользящее окно длины LXt = (xt-L+1, …, xt) ∈ RL×p. Оно содержит последние наблюдения и задаёт текущий контекст, из которого должна быть восстановлена логика поведения рынка. Также задаётся будущий блок длины H: t = (xt+1, …, xt+H) ∈ RH×p. Он отражает траекторию после наблюдаемого окна. В такой постановке важно, насколько предсказуемо и последовательно это состояние переходит в следующий фрагмент ряда.

Именно здесь проявляется ключевая идея ReGEN-TAD. Модель обучается в режиме самообучения, без использования меток аномалий, что делает её особенно пригодной для финансовых рынков, где разметка либо отсутствует, либо крайне субъективна. На вход подаётся окно Xt, после чего модель одновременно решает две задачи: восстанавливает сам входной фрагмент и прогнозирует будущий блок Ft. Это двустороннее обучение важно как способ заставить модель изучать форму данных и их внутреннюю динамику. Если рынок стабилен, то структура текущего окна должна быть достаточно информативной, чтобы по ней можно было воспроизвести исходный участок ряда и его ближайшее продолжение.

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

Обработка начинается с того, что каждое окно Xt нормализуется и пропускается через временные сверточные слои. На этом этапе модель действует почти классически: она скользит фильтрами вдоль временной оси, одновременно учитывая все p признаков. В результате из исходного пространства формируется новая последовательность признаков, где каждый вектор агрегирует локальный контекст вокруг момента t. Важно, что здесь происходит не просто сглаживание, а извлечение устойчивых короткосрочных зависимостей и нелинейных кросс-секционных взаимодействий. Свёртка выступает в роли первичного фильтра, который выделяет микроструктуру рынка.

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

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

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

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

Далее запускается генеративная часть. На основе zt строится первичный прогноз будущего блока Ft,1. Это первый тест: насколько текущая структура способна объяснить ближайшее будущее. Но на этом модель не останавливается. Разница между реальным будущим Ft и этим прогнозом формирует остаток, который затем возвращается в систему. Этот остаток объединяется с латентным представлением и проходит через дополнительную сеть уточнения, формируя скорректированный прогноз Ft,2. Такая двухшаговая схема позволяет не просто фиксировать ошибку, а моделировать её структуру. Это особенно важно в условиях смены режима, когда первичный прогноз систематически недооценивает или переоценивает движение, а уточняющий блок способен уловить закономерности в этих отклонениях.

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

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

Следующий шаг в логике ReGEN-TAD выглядит почти парадоксально, но для финансовых данных он принципиален. Модель, которая должна выявлять аномалии, изначально обучается на данных, где эти аномалии уже присутствуют. Более того, в реальном рынке невозможно заранее гарантировать, что обучающая выборка состоит только из нормальных режимов. В ней неизбежно смешаны спокойные периоды, стрессовые фазы, локальные выбросы и структурные сдвиги. Если использовать такие окна напрямую, модель начинает частично усваивать искажённую динамику как допустимую норму. В результате граница между нормальным и аномальным размывается, а сама система теряет чувствительность к действительно значимым отклонениям.

Именно поэтому в ReGEN-TAD вводится этап предварительной очистки данных. Формально рассматривается множество всех скользящих окон Xt, построенных из исходного ряда. На этом этапе задача намеренно упрощается: из полной архитектуры временно убираются прогнозирование и уточняющий блок. Модель обучается только на реконструкции входных окон. Иначе говоря, она учится воспроизводить наблюдаемые фрагменты ряда. Это позволяет получить первичную оценку того, какие участки данных укладываются в выученную норму.

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

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

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

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

Для каждого момента времени t рассматривается набор диагностик St = {st(m)}m=1M, полученных из генеративной магистрали. В авторской реализации используется 6 метрик, которые отвечают за отдельное измерение аномальности:

  • ошибка уточнённого прогноза,
  • масштаб реконструктивного остатка,
  • плотность латентного представления k ближайших соседей,
  • отклонение динамики латентных остатков,
  • расстояние от базового латентного распределения,
  • разброс Forecast Residuals.

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

Формально каждый компонент можно записать как st(m). Но сами по себе эти значения ещё нельзя напрямую складывать, потому что они могут находиться в разных шкалах и иметь разную чувствительность к выбросам. Чтобы привести их к сопоставимому виду, применяется робастная стандартизация — для каждого компонента вычисляется нормированная величина. Использование медианы и межквартильного размаха делает процедуру устойчивой к тяжёлым хвостам и редким экстремальным значениям.

После приведения всех сигналов к единой шкале итоговый Anomaly Score строится как средневзвешенное значение. Важна не только сама формула, но и её смысл. ReGEN-TAD не пытается объявить один из сигналов главным и единственно верным. Напротив, он оставляет за моделью право на коллективное решение, где разные диагностические каналы подтверждают или ослабляют друг друга.

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

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

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

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

Авторская визуализация фреймворка ReGEN-TAD




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

После разбора теоретических аспектов фреймворка ReGEN-TAD логично перейти к практике — туда, где модель перестаёт быть абстракцией и начинает работать с реальными рыночными данными. В практической части нашей работы сосредоточимся на прикладной реализации ключевых идей фреймворка средствами MQL5.

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

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

Реализация такого подхода средствами MQL5 требует определённых компромиссов. Поэтому акцент будет сделан на переносе ключевых принципов. В результате получим адаптированную версию ReGEN-TAD, ориентированную на практическое применение в торговой среде. Основная цель такой реализации — научиться выявлять моменты дисбаланса рынка, когда привычные зависимости перестают работать, а риск принятия решения возрастает. Именно эти участки и представляют наибольший интерес, поскольку позволяют избежать систематических ошибок.

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

Класс CNeuronSequenceTokenizer хорошо ложится на роль такого блока. Он выполняет функцию Convolutional Front-End в ReGEN-TAD: извлекает локальную структуру и переводит её в компактное пространство признаков.

class CNeuronSequenceTokenizer :  public CNeuronBaseOCL
  {
protected:
   CNeuronBatchNormOCL        cNorm;
   CNeuronSpikeConvBlock      cProj[2];
   //---
   virtual bool      feedForward(CNeuronBaseOCL *NeuronOCL) override;
   virtual bool      updateInputWeights(CNeuronBaseOCL *NeuronOCL) override;
   virtual bool      calcInputGradients(CNeuronBaseOCL *NeuronOCL) override;

public:
                     CNeuronSequenceTokenizer(void) {};
                    ~CNeuronSequenceTokenizer(void) {};
   //---
   virtual bool      Init(uint numOutputs, uint myIndex, COpenCLMy *open_cl,
                          uint dimension, uint units,  uint embed_size,
                          ENUM_OPTIMIZATION optimization_type, uint batch);
   //---
   virtual bool      Save(const int file_handle) override;
   virtual bool      Load(const int file_handle) override;
   //---
   virtual int       Type(void) override const  {  return defNeuronSequenceTokenizer; }
   virtual void      SetOpenCL(COpenCLMy *obj) override;
   virtual void      TrainMode(bool flag) override;
   //---
   virtual bool      WeightsUpdate(CNeuronBaseOCL *source, float tau) override;
  };

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

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

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

bool CNeuronSequenceTokenizer::Init(uint numOutputs, uint myIndex, COpenCLMy *open_cl,
                                    uint dimension, uint units, uint embed_size,
                                    ENUM_OPTIMIZATION optimization_type, uint batch)
  {
   if(!CNeuronBaseOCL::Init(numOutputs, myIndex, open_cl, embed_size, optimization_type, batch))
      ReturnFalse;

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

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

   uint index = 0;
   if(!cNorm.Init(0, index, OpenCL, dimension * units, iBatch, optimization))
      ReturnFalse;
   cNorm.SetActivationFunction(None);

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

   index++;
   uint units_out = MathMax(dimension - 1, 1);
   uint win_out = (embed_size / 2 + units_out - 1) / units_out;

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

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

   if(!cProj[0].Init(0, index, OpenCL, MathMin(3, dimension), 1, win_out, units_out,
                                                       units, optimization, iBatch))
      ReturnFalse;
   cProj[0].SetActivationFunction(SIGMOID);

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

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

Второй свёрточный блок собирает распределённое представление в компактный эмбеддинг.

   index++;
   if(!cProj[1].Init(embed_size, index, OpenCL, 2 * win_out * units_out, win_out * units_out,
                                         embed_size / 2, units - 1, 1, optimization, iBatch))
      ReturnFalse;
   cProj[1].SetActivationFunction(SIGMOID);
//---
   return true;
  }

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

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

Метод прямого прохода на первый взгляд выглядит лаконично, почти аскетично, но за этой компактностью скрывается вполне чётко выстроенная логика прохождения сигнала.

bool CNeuronSequenceTokenizer::feedForward(CNeuronBaseOCL *NeuronOCL)
  {
   if(!cNorm.FeedForward(NeuronOCL))
      ReturnFalse;

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

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

   CNeuronBaseOCL* prev = cNorm.AsObject();
   for(uint i = 0; i < cProj.Size(); i++)
     {
      if(!cProj[i].FeedForward(prev))
         ReturnFalse;
      prev = cProj[i].AsObject();
     }

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

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

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

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

   if(!CNeuronBaseOCL::feedForward(prev))
      ReturnFalse;
//---
   return true;
  }

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

Если взглянуть на весь процесс целиком, становится очевидно, что CNeuronSequenceTokenizer реализует последовательную трансформацию данных с чёткой логикой: выравнивание → извлечение локальной структуры → интеграция → фиксация в компактной форме.

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

Аккуратная реализация токенизатора — это фундамент всей системы. Именно здесь решается, будет ли модель видеть структуру рынка или утонет в шуме.



Заключение

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

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

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

В следующей статье перейдём к следующим уровням модели: агрегации представлений и формированию диагностических сигналов на основе эмбеддинга. Это продолжит адаптацию ReGEN-TAD к задачам алгоритмического трейдинга.


Ссылки


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

#ИмяТипОписание
1Study.mq5СоветникСоветник офлайн-обучения моделей
2StudyOnline.mq5 Советник Советник онлайн-обучения моделей
3Test.mq5СоветникСоветник для тестирования модели
4Trajectory.mqhБиблиотека классаСтруктура описания состояния системы и архитектуры моделей
5NeuroNet.mqhБиблиотека классаБиблиотека классов для создания нейронной сети
6NeuroNet.clБиблиотекаБиблиотека кода OpenCL-программы

Проект представлен на forge.mql5.io/dng.

Прикрепленные файлы |
MQL5.zip (3738.51 KB)
Особенности написания Пользовательских Индикаторов Особенности написания Пользовательских Индикаторов
Написание пользовательских индикаторов в торговой системе MetaTrader 4
От CPU к GPU в MQL5: практическая схема OpenCL для ускорения исследований, оптимизаций и паттернов От CPU к GPU в MQL5: практическая схема OpenCL для ускорения исследований, оптимизаций и паттернов
Узнайте, как выстроить практическую схему перехода от CPU к GPU в MQL5 с использованием OpenCL. Подробно рассматриваются инициализация контекста, организация буферов, крупные батчи, запуск kernel и минимизация обменов данными. Приведены типовые ошибки и способы их устранения. Пример со свечными паттернами иллюстрирует практическую пользу подхода.
Особенности написания экспертов Особенности написания экспертов
Написание и тестирование экспертов в торговой системе MetaTrader 4.
Как внедрить метапромптинг торговых сигналов в советнике MQL5 Как внедрить метапромптинг торговых сигналов в советнике MQL5
Метапромптинг — подход, при котором LLM сама оптимизирует торговые инструкции на основе реального P&L и метрик качества сигналов. В статье показана практическая реализация на Python и MQL5: реестр версий промптов, исполнительный агент, оценщик по directional accuracy и profit factor и мета-LLM, которая в цикле генерирует улучшения. Решение встраивается в советник без остановки торговли.