preview
Нейросети в трейдинге: Модели многократного уточнения прогнозов (RAFT)

Нейросети в трейдинге: Модели многократного уточнения прогнозов (RAFT)

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

Введение

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

Подход RAFT (Recurrent All-pairs Field Transforms), появившийся в компьютерном зрении для реконструкции оптического потока, основан не на грубом одношаговом выводе, а на итеративном уточнении состояния. Модель не пытается угадать будущее сразу, она строит первичную оценку и многократно улучшает её, обращаясь к полному полю взаимосвязей между исходными данными. Такой принцип резко отличается от традиционных архитектур, где прогноз считается однократным, а все недочёты устраняются только в ходе обучения. Сама структура модели в фреймворке RAFT предполагает уточнение внутри одного шага вывода. И именно это делает его особенно интересным для финансовой области.

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

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

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

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

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

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

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

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

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

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


Алгоритм RAFT

Правильное адаптирование подходов моделей многократного уточнения прогнозов (RAFT) к финансовым временным рядам прежде всего требует внимательного изучения структуры алгоритма. В оригинальной задаче RAFT, применяемой к изображениям, рассматривается пара последовательных RGB-кадров I1 и I2, и требуется оценить плотное поле смещений (f1, f2), которое отображает каждый пиксель второго кадра на соответствующую позицию в первом. Для финансовых данных аналогичное поле можно воспринимать как карту соответствий между последовательными временными окнами, где каждое значение инструмента связывается с его будущим состоянием и влиянием на другие инструменты.

Алгоритм RAFT разделён на три этапа:

  • извлечение признаков,
  • вычисление взаимного соответствия,
  • итеративное уточнение прогноза.

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

Модуль Энкодера признаков gθ преобразует анализируемые данные в плотные карты признаков с пониженным разрешением. В оригинале это разрешение 1/8 от исходного, а размерность признаков D равна 256. Энкодер состоит из шести блоков с остаточными связями, по два сверточных слоя на каждом уровне. В контексте финансовых временных рядов это позволяет выявлять паттерны на разных временных масштабах: краткосрочные всплески, среднесрочные тренды и долгосрочные тенденции. Такая многоуровневая обработка даёт модели возможность видеть рынок целиком, а не только отдельные события.

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

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

На следующем этапе алгоритма RAFT осуществляется вычисление соответствий между признаками, что в исходной задаче называется визуальной схожестью. Для финансовых данных этот этап можно интерпретировать как оценку степени согласованности между временными окнами и различными инструментами. В исходной архитектуре строится полное поле корреляций между всеми парами элементов двух изображений: C(gθ(I1), gθ(I2)) ∈ RH×W×H×W, где каждая ячейка корреляции представляет собой скалярное произведение векторов признаков. В финансовой интерпретации это можно понимать, как вычисление полной матрицы взаимного влияния между всеми точками временных рядов, позволяя выявлять, какие элементы прошлого окна оказывают наибольшее воздействие на прогнозируемые значения.

Для повышения эффективности и учёта различных масштабов изменений, строится четырёхуровневая пирамида корреляций {C1, C2, C3, C4}, где на каждом уровне выполняется понижающее объединение (pooling) по последним двум измерениям с различными ядрами и шагом. Такой подход обеспечивает одновременно высокое разрешение локальных взаимодействий и возможность учитывать крупные смещения в данных. В финансовой среде это аналогично оценке краткосрочных импульсов и долгосрочных трендов с сохранением информации о малых, быстрых движениях цены, которые часто оказываются критическими для точного прогноза.

Для выборки информации из пирамиды используется оператор Lookup LC. Он формирует карту признаков, индексируя значения корреляций на основе текущей оценки смещений (f1, f2). Для каждой точки в первом окне данных определяется соответствие в следующем окне, после чего вокруг предполагаемой позиции создается локальная сетка с радиусом r. Значения из корреляционного объёма берутся из этой сетки с использованием билинейной интерполяции. Такая методика позволяет модели гибко корректировать прогноз, опираясь на ближайший контекст и учитывая как точечные, так и более широкие зависимости. В финансовых данных это соответствует взвешенной оценке влияния соседних точек временного ряда и связанных инструментов на текущую итерацию прогноза, обеспечивая устойчивость к шуму и мелким аномалиям.

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

Особое внимание авторы фреймворка RAFT уделяют эффективности вычислений при работе с данными высокой размерности. Полное поле корреляций имеет квадратичную сложность O(N²), где N — число элементов анализируемого окна. Однако оно вычисляется лишь один раз и не зависит от количества итераций уточнения прогноза. Более того, существует альтернативная реализация с линейной сложностью O(NM), которая использует линейность скалярного произведения и предварительное усреднение признаков. Вместо предварительного вычисления полного объёма корреляций, формируются пирамидальные представления признаков с понижающим пуллингом, и нужные значения корреляции вычисляются на лету, только в момент обращения.

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

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

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

Архитектурно процесс реализуется через рекуррентный блок, функционально подобный GRU, но адаптированный для обработки пространственно-временного поля признаков. Он принимает на вход текущие признаки корреляции, оценки смещения и предыдущее скрытое состояние, формируя обновление ∆f и обновлённое внутреннее состояние. Такой модуль связывает аналитическую часть (интерпретация связи между признаками, выявление паттернов) с инженерной (свёрточные операции, bounded activations, tied weights), обеспечивая стабильную сходимость к фиксированной точке, аналогичной оптимизационной траектории. Использование сверточных GRU вместо классических, полностью связанных слоёв, расширяет локальный контекст, позволяя модели одновременно учитывать пространственные корреляции на нескольких масштабах без избыточного роста числа параметров.

После каждого шага скрытое состояние проходит через свёрточные слои, формируя обновление потока ∆f, которое аккуратно добавляется к текущему прогнозу. На промежуточной стадии поток прогнозируется с пониженным разрешением 1/8. Финализирующий шаг RAFT — восстановление потока до полного масштаба и уточнение маски для каждого пикселя. В финансовом контексте это напоминает слияние микро- и макроиндикаторов в единую стратегическую оценку рынка. После генерации обновления на пониженном разрешении сеть применяет обучаемую маску, которая взвешенно объединяет соседние значения в 3×3 сетке, исправляя локальные ошибки и повышая согласованность прогноза. Два свёрточных слоя формируют маску размером H/8×W/8×(8×8×9), после чего применяется SoftMax, что позволяет каждому пикселю учитывать вклад соседей. В результате, прогноз потока становится плавным, стабильным и предельно точным.

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

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

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

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


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

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

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

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

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

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

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

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

Теперь про саму логику обновления. В основе лежит GRU‑подобный механизм: update‑gate управляет тем, насколько модель сохраняет предыдущую позицию (position inertia), а reset‑gate отвечает за готовность сбросить старую гипотезу при сильном конфликте признаков (regime switch). Нелинейная трансформация скрытого состояния формирует новую гипотезу, а затем отдельный head переводит её в конкретное приращение ожиданий ∆f. Ограниченные активации и tied‑weights выполняют роль контролера. Они препятствуют экспоненциальному росту коррекции при шуме и способствуют сходимости к фиксированной точке, что экономически интерпретируется как достижение консенсусного прогноза.

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

При детальном рассмотрении практической стороны подходов, предложенных авторами фреймворка RAFT, можно заметить определённое сходство с ранее рассмотренным фреймворком STE-FlowNet. И это неудивительно. Оба фреймворка изначально разрабатывались для оценки визуального потока и опираются на идею итеративного уточнения прогноза. В обоих случаях используется корреляция состояний и свёрточный блок GRU, что позволяет аккуратно аккумулировать информацию о движении и контексте. Это сходство открывает очевидное преимущество: мы можем воспользоваться уже существующими наработками по реализации архитектуры, оптимизации вычислений и организации hidden-state, адаптируя их к финансовым временным рядам и особенностям работы в MQL5. Такой подход снижает сложность внедрения, ускоряет прототипирование и делает интеграцию RAFT более безопасной и предсказуемой с инженерной и экономической точки зрения.

Однако нельзя не заметить и различие подходов. STE-FlowNet применяет U-образную архитектуру Энкодер-Декодер, где информация последовательно сжимается и затем восстанавливается для прогнозирования потока. Это даёт возможность комбинировать локальные и глобальные признаки через skip-соединения. В отличие от этого, RAFT работает преимущественно на высоком разрешении и использует агрегирование карт корреляции, создавая пирамиду, которая сохраняет детальную информацию о каждом пикселе (или признаке), при этом позволяя учитывать как крупные, так и мелкие смещения. Такой подход делает RAFT более подходящим для итеративного уточнения прогноза, особенно когда требуется высокая точность и сохранение локальной структуры данных, что критично для финансовых временных рядов, где каждая единица информации несёт отдельный экономический смысл.

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

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

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

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

и постепенно включая всё более глубокую историю из стека.

__kernel void AggregationByTime(__global const float* inputs,
                                __global const float* stack,
                                __global float* outputs,
                                const int stack_size,
                                const int levels
                               )
  {
   const size_t id = get_global_id(0);
   const size_t var = get_global_id(1);
   const size_t dimension = get_global_size(0);
   const size_t variables = get_global_size(1);

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

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

   const float val = IsNaNOrInf(inputs[RCtoFlat(var, id, variables, dimension, 0)], 0);
   outputs[RCtoFlat(var, id, variables, dimension, 0)] = val;

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

   for(int l = 1; l < levels; l++)
     {
      int total = pow(2, l);
      int start = total - 1;
      val /= 2;

Для уровня l вычисляем размер блока как 2 в степени l и индекс смещения от начала стека, с которого начинается выборка текущего блока истории. Вложенный цикл перебирает элементы блока, но перед каждой итерацией мы проверяем, не выходим ли за пределы stack_size. Это особенно важно в начале работы, когда глубина стека ещё может быть недостаточной.

      for(int s = 0; s < total; s++)
        {
         if(s + start >= stack_size)
            continue;
         val += IsNaNOrInf(stack[RCtoFlat(var, id, variables * levels,
                                          dimension, start + s)] / total, 0);
        }
      outputs[RCtoFlat(var, id, variables, dimension, l)] = IsNaNOrInf(val, 0);
     }
  }

Каждое историческое значение также проходит через IsNaNOrInf, затем усредняется путём деления на размер блока, и добавляется к уже ослабленному val.

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

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

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


Заключение

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


Ссылки


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

# Имя Тип Описание
1 Study.mq5 Советник Советник офлайн обучения моделей
2 StudyOnline.mq5 Советник Советник онлайн обучения моделей
3 Test.mq5 Советник Советник для тестирования модели
4 Trajectory.mqh Библиотека класса Структура описания состояния системы и архитектуры моделей
5 NeuroNet.mqh Библиотека класса Библиотека классов для создания нейронной сети
6 NeuroNet.cl Библиотека Библиотека кода OpenCL-программы
Прикрепленные файлы |
MQL5.zip (3251.71 KB)
Алгоритм кристаллической структуры — Crystal Structure Algorithm (CryStAl) Алгоритм кристаллической структуры — Crystal Structure Algorithm (CryStAl)
В статье представлены две версии Алгоритма кристаллической структуры, оригинальная и модифицированная. Алгоритм Crystal Structure Algorithm (CryStAl), опубликованный в 2021 году и вдохновленный физикой кристаллических структур, позиционировался как parameter-free метаэвристика для глобальной оптимизации. Однако тестирование выявило критическую проблему алгоритма. Представлена также модифицированная версия CryStAlm, которая исправляет ключевые недостатки оригинала.
От новичка до эксперта: Анимированный советник News Headline с использованием MQL5 (XI) - Корреляция при торговле на новостях От новичка до эксперта: Анимированный советник News Headline с использованием MQL5 (XI) - Корреляция при торговле на новостях
В настоящем обсуждении рассмотрим, как концепция финансовой корреляции может быть применена для повышения эффективности принятия решений при торговле несколькими инструментами во время анонсов крупных экономических событий. Основное внимание уделяется решению проблемы повышенной подверженности риску, вызванной повышенной волатильностью во время выпуска новостей.
Особенности написания экспертов Особенности написания экспертов
Написание и тестирование экспертов в торговой системе MetaTrader 4.
Таблицы в парадигме MVC на MQL5: настраиваемые и сортируемые столбцы таблицы Таблицы в парадигме MVC на MQL5: настраиваемые и сортируемые столбцы таблицы
В статье сделаем изменяемую ширину столбцов таблицы при помощи курсора мышки, сортировку таблицы по данным столбцов, и добавим новый класс для упрощенного создания таблиц на основании любых наборов данных.