Нейросети в трейдинге: Пространственно-управляемая агрегация рыночных событий (STFlow)
Введение
Финансовый рынок традиционно воспринимается как последовательность ценовых наблюдений, упорядоченных во времени. Классические модели строятся именно на этом представлении: рынок как дискретный временной ряд, где каждое новое значение цены дополняет предыдущее. Такой взгляд удобен, проверен временем и по-своему элегантен. Однако с ростом вычислительных возможностей и переходом к алгоритмической торговле стало очевидно, что подобная модель отражает лишь внешнюю оболочку рыночной динамики, оставляя за кадром её внутреннюю структуру.
Современный рынок, особенно на малых таймфреймах, живёт не барами и свечами, а событиями. Изменение котировки, появление ликвидности, агрессивное поглощение объёма, резкий сдвиг спрэда — всё это происходит асинхронно, неравномерно и зачастую быстрее, чем формируется очередной бар. В этом смысле традиционная свечная агрегация является не столько моделью рынка, сколько компромиссом между удобством анализа и потерей информации. Чем выше частота торгов, тем выше цена этого компромисса.
Именно здесь возникает ключевая методологическая проблема: как описывать и анализировать рынок, если его первичная динамика носит событийный, а не кадровый характер?
Большинство нейросетевых моделей, применяемых в трейдинге, унаследовали архитектурные принципы из обработки временных рядов и изображений. Рекуррентные сети, одномерные свёртки, трансформеры — все они, так или иначе, предполагают наличие регулярной временной сетки. Даже когда используется высокочастотные данные, рынок всё равно приводится к фиксированному шагу времени. Это упрощает вычисления, но искажает саму природу данных.
Событийный рынок устроен иначе. Информация возникает не по расписанию, а в моменты, когда что-то действительно происходит: в спокойные периоды данных мало, в моменты импульса — поток резко уплотняется. Таким образом, плотность информации сама по себе становится сигналом. Игнорировать это — значит терять один из ключевых источников рыночного смысла.
Однако чисто событийное представление тоже имеет ограничения. Поток событий богат во времени, но беден в пространственной структуре. Отдельное событие почти ничего не говорит о контексте — без понимания того, где именно в ценовой структуре оно произошло, его значение трудно интерпретировать. Возникает знакомая дилемма: временная точность против структурной устойчивости.
Практически все торговые модели так или иначе сталкиваются с задачей агрегации, когда нужно объединить разрозненные сигналы в целостное представление, пригодное для принятия решений. Классические подходы решают эту задачу грубо: усреднение, суммирование, фиксированные окна. Более продвинутые — через механизмы внимания или адаптивные фильтры. Но фундаментальная проблема остаётся: агрегация чаще всего не управляется структурой рынка, а навязывается моделью извне.
В результате модель либо теряет локальные импульсы, сглаживая их, либо переобучается на шум, усиливая случайные флуктуации. Для финансовых рынков это особенно критично. Ошибка в агрегации — это не просто потеря точности, а прямой путь к нестабильности торговой системы.
Фреймворк STFlow, представленный в работе "Spatially-guided Temporal Aggregation for Robust Event-RGB Optical Flow Estimation", предлагает иной взгляд на эту проблему. В его основе лежит простая, но принципиально важная идея: агрегация событий должна быть пространственно-управляемой.
В STFlow анализируемые данные рассматривается не как плоский временной ряд, а как пространственно-временной поток, в котором события формируют временную динамику, а ценовая структура задаёт пространство, где эта динамика разворачивается. Иными словами, STFlow не усредняет события вслепую, он агрегирует их в контексте текущей рыночной структуры. Пространственные ориентиры — уровни, диапазоны, локальные конфигурации цены — выступают направляющим каркасом, внутри которого временной поток событий приобретает осмысленную форму.
Такой подход концептуально близок к тому, как опытный трейдер воспринимает рынок. Он не реагирует на каждый тик, а смотрит, где именно этот тик произошёл: у уровня — это одно, в пустоте — совсем другое. STFlow формализует этот принцип на архитектурном уровне.
Первое и ключевое преимущество STFlow — устойчивость. Пространственно-управляемая агрегация снижает чувствительность модели к случайному шуму и неравномерности событийного потока. В спокойных фазах рынок не перегревается из-за редких событий, в импульсных — информация не теряется из-за жёстких временных окон.
Второе преимущество — адаптивность к масштабу. STFlow естественным образом работает с разной плотностью данных. Ему не требуется жёсткая нормализация по времени. Это особенно важно для реальных рынков, где режимы могут меняться в течение одной торговой сессии.
Третье — структурная интерпретируемость. Пространственные направляющие позволяют лучше понимать, какие именно участки рынка формируют итоговый сигнал. Это не чёрный ящик, полностью оторванный от цены, а модель, тесно связанная с её геометрией.
Четвёртое преимущество — универсальность. STFlow не привязан к конкретному рынку или таймфрейму. Он одинаково применим к фьючерсам, валютам, криптовалютам и акциям, а также масштабируется от тикового уровня до более агрегированных представлений.
Наконец, важным практическим аспектом является совместимость с современными нейросетевыми архитектурами. STFlow не противопоставляется механизмам внимания или свёрточным блокам, напротив, он задаёт для них более осмысленный вход, повышая эффективность последующей обработки.
Архитектура STFlow
Архитектура фреймворка STFlow построена вокруг центрального принципа: временная агрегация рыночных событий должна подчиняться пространственной структуре цены, а не наоборот. Это определяет как общую компоновку фреймворка, так и назначение каждого его компонента. В отличие от традиционных нейросетевых решений, где агрегация часто выступает побочным эффектом архитектуры, в STFlow она является осознанным, управляемым процессом.
В общем виде STFlow можно рассматривать как многоуровневую систему, преобразующую разреженный поток событий в устойчивое пространственно-временное представление рынка. При этом каждый уровень не просто обрабатывает данные, а уточняет контекст, в котором эти данные интерпретируются.
Для согласованной работы различных модальностей при анализе данных, авторы фреймворка STFlow предлагают использовать принцип пространственного управления временной агрегацией событий. Временной поток рыночных событий сам по себе богат и информативен, однако без устойчивого контекста он остаётся фрагментарным и плохо интерпретируемым. Поэтому в основе архитектуры лежит идея опоры на пространственно-устойчивые признаки, которые задают рамку для последующей агрегации событийных сигналов.
Архитектура STFlow изначально разделяет обработку данных на два взаимодополняющих направления. С одной стороны формируется пространственный контекст, фиксирующий структуру ценового движения. С другой — обрабатывается плотный во времени поток событий, отражающий мгновенную реакцию рынка. Эти два потока не конкурируют между собой и не смешиваются механически. Напротив, один из них играет роль направляющего каркаса, а другой — источника динамики.
Ключевая сложность событийного представления рынка заключается в его разреженности и шумовой природе. Отдельные события возникают неравномерно. Их плотность резко меняется в зависимости от рыночного режима, а сами по себе они почти не несут информации о контексте. Чтобы избежать агрегации вслепую, в STFlow вводится пространственно-устойчивая направляющая, формируемая на основе ценовых данных, усиленных событиями.
Ценовые срезы, несмотря на их привычность, уязвимы к искажениям. Изменения ликвидности, локальные всплески волатильности и микроструктурный шум могут временно разрушать их информативность. Событийные данные, напротив, сохраняют чувствительность к активности даже в неблагоприятных условиях. Объединение этих двух источников позволяет стабилизировать пространственный контекст без усложнения архитектуры. Для этого используется упрощённое событийно-ценовое представление, в котором оба источника данных аккуратно связаны в едином пространстве.
Перед объединением ценовые и событийные данные нормализуются, чтобы их вклад был сопоставимым. Ценовое представление приводится к симметричному диапазону, а событийный поток масштабируется относительно своей максимальной активности в пределах текущего наблюдения. Такой подход позволяет избежать доминирования одной модальности над другой и сохраняет баланс между структурой и динамикой.
После нормализации формируется совместное представление, в котором ценовой срез текущего момента дополняется событийным потоком за ограниченное временное окно. Выбор этого окна принципиален. Слишком короткий интервал лишает модель необходимого контекста, слишком длинный — размывает пространственные границы. В STFlow длина окна согласуется с временным масштабом целевых событий, что обеспечивает согласованность дальнейшей агрегации и одновременно снижает вычислительную нагрузку.
Полученное представление отражает комплементарность цены и событий. В периоды, когда ценовая структура теряет устойчивость, события продолжают сигнализировать о реальной активности рынка, а в спокойных и ликвидных условиях, напротив, именно геометрия цены задаёт основной контекст, а события лишь уточняют локальную динамику. Благодаря этому, пространственные признаки, извлекаемые из совместного представления, сохраняют устойчивость в широком спектре рыночных режимов.
На следующем этапе из последовательных совместных представлений извлекаются признаки и строится корреляционный объем, фиксирующий соответствия между состояниями рынка в разные моменты времени. Этот корреляционный объём отражает не только совокупное движение цены, но и устойчивые пространственные связи, сформированные за счёт событийно-ценового контекста. В архитектуре STFlow он выполняет роль направляющей структуры, относительно которой интерпретируются все последующие временные сигналы.
Важно подчеркнуть, что на этом этапе речь уже не идёт о простом сопоставлении состояний. Корреляционный объем охватывает всю область наблюдения и задаёт глобальную картину рыночного движения. Именно оно позволяет отличать значимые структурные сдвиги от локального шума и служит основой для управляемой агрегации событийного потока.
Высокая временная разрешающая способность событийных данных давно рассматривается как ключ к компенсации их разреженности и шумовой природы. Этот тезис подтверждён рядом недавних работ, где вместо единственного корреляционного представления используются временно плотные корреляционные объёмы. Такой подход опирается на важное наблюдение: структурные паттерны движения обладают временной согласованностью, тогда как шум, особенно в неблагоприятных условиях, как правило, носит случайный и некоррелированный характер. Агрегируя корреляционную информацию сразу по нескольким временным срезам, можно усилить устойчивые сигналы и подавить кратковременные искажения.
В контексте финансовых рынков эта идея выглядит особенно естественно. Реальное рыночное движение не возникает мгновенно. Импульсы развиваются, затухают, трансформируются, сохраняя при этом определённую временную целостность. Шум же — случайные сделки, одиночные выбросы, микроразрывы ликвидности — редко демонстрирует такую согласованность. Следовательно, временная плотность становится не источником хаоса, а инструментом фильтрации.
Исходя из этого, в STFlow временной поток событий не рассматривается как однородная масса, он разрезается на последовательность промежуточных состояний, каждое из которых фиксирует движение рынка в своём локальном временном масштабе. Событийный поток разбивается на опорное представление и серию целевых фрагментов, равномерно покрывающих анализируемый интервал. Начальный фрагмент синхронизируется с первым ценовым срезом, конечный — со следующим, что обеспечивает согласованность между событийной и ценовой компонентами.
Принципиально важно, что все эти фрагменты обрабатываются одним и тем же энкодером признаков. Это решение исключает дрейф представлений и гарантирует, что различия между временными срезами отражают динамику рынка, а не особенности кодирования. Таким образом, модель сравнивает сопоставимые состояния, а не набор разнородных проекций.
Для каждого промежуточного событийного фрагмента строится корреляционное представление относительно опорного состояния. В результате формируется набор временно плотных корреляционных объёмов, каждый из которых содержит информацию о локальном движении рынка на своём временном участке. Эти объёмы обладают высокой временной чувствительностью и позволяют фиксировать даже короткоживущие импульсы.
Однако у такого представления есть и обратная сторона. Несмотря на богатство временной информации, временно плотные корреляции остаются пространственно-разреженными и нестабильными. Они отражают динамику, но плохо удерживают структуру. В финансовом смысле это похоже на поток тиков без понимания того, где именно в ценовом диапазоне они произошли. Отдельно взятые, такие признаки не дают целостной картины движения.
После формирования пространственно-устойчивой направляющей и временно плотных корреляционных представлений возникает следующий принципиальный вопрос: каким образом объединить эти источники информации так, чтобы они не просто сосуществовали, а действительно усиливали друг друга. Для этого авторы STFlow вводят понятие пространственно-временного контекста, который служит связующим звеном между структурой рынка и его динамикой.
Контекст в данном случае не сводится к набору вспомогательных признаков. Он отражает обобщённое состояние рынка на анализируемом интервале. Пространственный контекст, извлекаемый из ценового представления, фиксирует геометрию и локальные структурные детали текущего состояния рынка. Временной контекст, формируемый на основе событийного потока, охватывает динамику изменений между двумя последовательными состояниями. Каждый из этих компонентов по отдельности способен улучшать качество оценки движения. Однако их совместное использование долгое время оставалось недооценённым.
Авторы STFlow исходят из того, что рынок не разделяет пространство и время: структура и динамика существуют одновременно и постоянно взаимодействуют. Поэтому вместо использования одномодальных контекстных признаков, вводится единый пространственно-временной контекст, который объединяет оба аспекта в согласованное представление. Такой контекст оказывается более информативным и устойчивым, чем любая из компонент по отдельности, что подтверждается экспериментальными результатами.
Для формирования этого представления используется специализированный контекстный энкодер со смешанной агрегацией. Пространственные контекстные признаки извлекаются из текущего ценового среза, временные — из событийного вокселя, охватывающего интервал между двумя последовательными состояниями рынка. Эти признаки строятся в одном и том же признаковом пространстве и имеют одинаковую размерность, что позволяет объединять их без искажений.
После первичного извлечения оба набора признаков конкатенируются и поступают в блок смешанной агрегации. Его задача — не просто склеить данные, а выполнить локальное и покомпонентное взаимодействие, позволяя модели самой определить, какие аспекты структуры и динамики важны в каждой точке пространства. Использование для обработки лёгкого многослойного перцептрона в сочетании с локальной свёрткой обеспечивает распространение информации в ближайшем окружении, не разрушая при этом пространственную целостность. На выходе формируется пространственно-временной контекст, сохраняющий размерность одномодальных признаков, но обладающий существенно большей выразительной силой.
Этот контекст становится ключевым элементом последующего этапа — управляемой агрегации временно плотных событийных признаков. К этому моменту в архитектуре уже присутствуют два принципиально разных источника информации о движении рынка. С одной стороны — пространственно-устойчивые корреляционные представления, сформированные на основе событийно-ценового каркаса. С другой — временно плотные корреляции, отражающие детальную динамику событий. Задача заключается в том, чтобы объединить их в едином процессе уточнения движения.
В обновляющей ветви STFlow пространственные корреляционные признаки выполняют роль направляющего сигнала. Они определяют, какие смещения являются структурно согласованными, и тем самым задают траекторию агрегации временных сигналов. Временно плотные событийные корреляции, в свою очередь, обеспечивают высокую чувствительность к краткосрочным изменениям и позволяют точно локализовать моменты усиления или ослабления движения.
Процесс агрегации начинается с выборки локальных корреляционных карт, соответствующих текущей оценке движения. Для пространственной модальности эта операция сводится к выборке из устойчивого корреляционного объёма в соответствии с текущей оценкой смещения. Для событийной модальности ситуация сложнее: каждый временной фрагмент охватывает свой интервал, поэтому используется согласованная линейная стратегия выборки, позволяющая корректно сопоставлять временные масштабы.
Полученные корреляционные карты преобразуются в признаки движения. Пространственная компонента кодирует устойчивую структуру и общую направленность движения. Событийные признаки формируют последовательность временных сигналов, детализирующих динамику на отдельных участках интервала. По отдельности эти признаки неполны, но вместе они образуют богатое описание рыночного движения.
Ключевой момент заключается в том, что агрегация событийных признаков выполняется под управлением пространственной модальности. Для этого используется лёгкий трансформерный механизм перекрёстного внимания. Временно плотные событийные признаки выступают в роли запросов, а пространственные признаки — в роли ключей и значений. Таким образом, именно пространственная структура определяет, какие временные сигналы усиливаются, а какие подавляются.
На уровне архитектуры это реализует интуитивно понятный принцип. События не диктуют структуру движения, а лишь уточняют её. Пространственный контекст задаёт форму и направление, а временные сигналы наполняют эту форму деталями. Механизм перекрёстного внимания обеспечивает это взаимодействие на уровне отдельных элементов представления, позволяя гибко адаптироваться к различным рыночным режимам.
Агрегированные признаки объединяются в единое представление движения и поступают в рекуррентный модуль уточнения, где оценка движения последовательно корректируется. Этот итеративный процесс позволяет постепенно согласовывать структуру и динамику, устраняя локальные ошибки и усиливая устойчивые паттерны.
В результате, STFlow формирует представление рыночного движения, в котором высокая временная чувствительность событий сочетается с устойчивостью и интерпретируемостью пространственного контекста. Это завершает архитектурную цепочку фреймворка: от разреженных событий — через управляемую агрегацию — к целостному и устойчивому описанию рыночной динамики.
Авторская визуализация фреймворка STFlow представлена ниже.

Обучение STFlow выстроено в русле классических корреляционных подходов, где контроль качества осуществляется напрямую по выходу модели. В качестве функции потерь используется L1-расстояние между прогнозным движением и эталонным значением. При этом принципиально важно, что контроль применяется ко всем итеративным выходам рекуррентного обновляющего блока. Каждая итерация ConvGRU вносит вклад в итоговую ошибку, но с убывающим весом. Такой подход дисциплинирует модель. Она вынуждена формировать корректную оценку движения уже на ранних этапах уточнения, а не дотягивать результат лишь в конце. Экспоненциальный коэффициент затухания аккуратно смещает фокус к более поздним итерациям, не обесценивая при этом промежуточные.
Реализация средствами MQL5
После обстоятельного разбора теоретических основ STFlow самое время опуститься с высоты концепций на более приземлённый, но не менее интересный уровень — практику. Далее мы переходим к прикладной части работы, где рассмотрим один из возможных вариантов реализации ключевых идей фреймворка средствами MQL5. Речь пойдёт не о буквальном воспроизведении авторской архитектуры, а о вдумчивой адаптации её принципов под специфику финансовых данных.
Важно сразу обозначить границы. Мы не пытаемся механически перенести решения из компьютерного зрения в трейдинг, словно меняя изображение на график цены. Такой путь обычно заканчивается разочарованием. Вместо этого, нас интересует проекция идей: пространственная устойчивость, временная плотность сигналов, управляемая агрегация и кросс-модальное взаимодействие — всё то, что составляет интеллектуальное ядро STFlow. В контексте рынка эти понятия обретают иной, но вполне осязаемый смысл: структура цены, микродинамика потока сделок, асинхронные события и их согласование во времени.
Как уже отмечалось ранее, фреймворк STFlow разумно воспринимать как многоуровневую систему обработки сигналов, где каждый уровень решает строго свою задачу и подготавливает данные для следующего этапа. В этом и заключается его сила — и одновременно практическая сложность. Попытка реализовать всю систему целиком, в одном шаге и без предварительной декомпозиции, неизбежно приведёт либо к избыточной сложности, либо к потере смысловых связей между компонентами.
Именно поэтому дальнейшая работа будет выстроена так же последовательно и иерархично, как и сам фреймворк. Мы будем двигаться от простого к сложному, аккуратно выделяя отдельные уровни обработки. Такой подход не только снижает инженерные риски, но и позволяет лучше понять вклад каждого компонента в итоговый результат.
С практической точки зрения, это особенно важно в контексте финансовых рынков. Здесь ценится предсказуемость, контролируемость и возможность точечной оптимизации. Многоуровневая, пошаговая реализация даёт нам возможность адаптировать идеи STFlow под реальные ограничения торговой среды, не жертвуя при этом логикой исходного подхода. В итоге мы получаем не абстрактную модель в целом, а осмысленную систему, собранную слой за слоем — как хороший механический хронометр, где каждая шестерёнка на своём месте и работает на общий результат.
Свою работу мы начнём с модуля ICE (Image-Event Connection) — именно он закладывает фундамент всей системы и задаёт устойчивый пространственный каркас для последующей обработки. В контексте финансовых рынков ICE выполняет роль карты состояния. Он связывает структурное представление цены с потоками событий — резкими всплесками объёма, аномальными сделками и другими микроимпульсами, происходящими асинхронно.
Модуль аккуратно нормализует оба источника информации, приводя их к сопоставимому масштабу, и формирует единое представление, в котором каждый элемент цены соотносится с соответствующими событиями. Это позволяет выявлять устойчивые закономерности даже в условиях высокой волатильности или разреженности данных. В результате ICE становится управляющей структурой, которая задаёт направление всей дальнейшей агрегации событий и формирования признаков движения рынка.
Мы воплотили этот модуль в виде объекта CNeuronCreateICEFlow, который наследует базовую функциональность объекта генерации потока событий и при этом расширяет её для специфики ICE. Внутри этого объекта происходит объединение нормализованных ценовых данных и событийного потока, формируя единое представление, где каждый элемент цены соотносится с соответствующими микроимпульсами рынка.
class CNeuronCreateICEFlow : public CNeuronCreateFlow { protected: CNeuronBaseOCL cConcat; //--- virtual bool feedForward(CNeuronBaseOCL *NeuronOCL) override; virtual bool updateInputWeights(CNeuronBaseOCL *NeuronOCL) override; virtual bool calcInputGradients(CNeuronBaseOCL *NeuronOCL) override; public: CNeuronCreateICEFlow(void) {}; ~CNeuronCreateICEFlow(void) {}; //--- virtual bool Init(uint numOutputs, uint myIndex, COpenCLMy *open_cl, uint stack_size, uint dimension, uint patch_dimension, uint variables, ENUM_OPTIMIZATION optimization_type, uint batch); //--- virtual int Type(void) override const { return defNeuronCreateICEFlow; } //--- methods for working with files virtual bool Load(int const file_handle) override; //--- virtual void SetOpenCL(COpenCLMy *obj) override; //--- virtual bool Clear(void) override; };
Инициализация объекта в нашем модуле ICE реализована так, чтобы учесть все ключевые параметры, влияющие на стабильность и эффективность работы.
bool CNeuronCreateICEFlow::Init(uint numOutputs, uint myIndex, COpenCLMy *open_cl, uint stack_size, uint dimension, uint patch_dimension, uint variables, ENUM_OPTIMIZATION optimization_type, uint batch) { if(!CNeuronSpikePatchStak::Init(numOutputs, myIndex, open_cl, stack_size, 2 * dimension, patch_dimension, variables, optimization_type, batch)) return false;
В методе Init задаются размерность выходных данных, размеры патчей и объемы данных, а также подключается OpenCL для ускоренных вычислений.
Сначала вызывается инициализация базового стека эмбеддингов состояний с удвоенной размерностью, чтобы обеспечить достаточную пропускную способность для обработки как ценовых, так и событийных данных.
Затем поочерёдно создаются внутренние компоненты. Объект cState предназначен для хранения данных предыдущего рыночного состояния и текущих событий, определяемых как разность между двумя последующими рыночными состояниями.
uint index=0; if(!cState.Init(0, index, OpenCL, dimension * variables, optimization, iBatch)) return false; cState.SetActivationFunction(None);
Блок конкатенации cConcat объединяет представления двух модальностей.
index++; if(!cConcat.Init(0, index, OpenCL, 2 * dimension * variables, optimization, iBatch)) return false; cConcat.SetActivationFunction(None); //--- if(!Clear()) return false; //--- return true; }
Причём для обоих объектов отключается функция активации, чтобы обеспечить прямую передачу сигналов без искажений. В конце выполняется очистка объекта, гарантирующая, что модуль стартует в чистом и предсказуемом состоянии. Такой подход обеспечивает корректную работу даже при высокой плотности событийных потоков и позволяет безопасно масштабировать обработку на большие объёмы рыночных данных.
Прямой проход — это сердце всей обработки, где данные рыночного состояния и событийного потока объединяются в согласованное пространственно-событийное представление. Метод feedForward аккуратно строит этот процесс по шагам.
bool CNeuronCreateICEFlow::feedForward(CNeuronBaseOCL *NeuronOCL) { if(!CalcFlow(NeuronOCL)) return false;
Сначала вызывается вспомогательный метод CalcFlow, который формирует первичное движение сигналов. В контексте финансовых данных это можно понимать как извлечение первичных паттернов рынка. Коротких всплесков объёма, резких изменений цены и других микроимпульсов, которые сами по себе ещё не объединены в цельное представление. Если на этом этапе что-то идёт не так, метод прерывает выполнение и возвращает false.
Далее вычисляются ключевые параметры: размерность окна и длина последовательности. Эти величины определяют, как глубоко и широко будут агрегироваться события и рыночные данные, обеспечивая баланс между детализацией и стабильностью представления.
uint dimension = cBlock.GetWindow() / 2; uint units = cBlock.GetUnits() * cBlock.GetVariables();
Следующий шаг — вызов метода конкатенации, который объединяет текущие данные описания состояния рынка и определенные на предыдущем шаге события в одно связное представление. Ценовые данные соединяются с событиями, выстраивая пространственно-согласованную структуру, которая готова к нормализации.
if(!Concat(NeuronOCL.getOutput(), cState.getOutput(), cConcat.getOutput(), dimension, dimension, units)) return false; if(!Normilize(cConcat.getOutput(), dimension)) return false;
Нормализация (Normilize) устраняет масштабные различия между потоками, приводя все значения к сопоставимому диапазону. Это критично для финансовых данных. Резкий всплеск объёма или внезапный скачок цены не должен разрушать общую структуру.
Особенно важно отметить, что при нормализации мы используем одинарную размерность. Это ключевой момент. Он позволяет раздельно привести к сопоставимому виду данные рыночного состояния и событий, сохранив их внутреннюю структуру и соотношения. При этом объединение этих потоков в единый тензор даёт возможность выполнить нормализацию одновременно для обоих представлений на уровне OpenCL-контекста. Такой подход не только экономит вычислительные ресурсы и обеспечивает согласованность масштабов, что критично для последующей агрегации и построения устойчивого ICE-представления.
Иными словами, мы одновременно сохраняем различие между потоками и создаём единый фундамент для их совместной обработки. Это делает всю систему более стабильной и адаптивной к резким рыночным всплескам.
Результат передаётся в одноименный метод прародительского класса, что обеспечивает создание согласованных эмбеддингов и дальнейшее распространение сигнала по стеку.
return CNeuronSpikePatchStak::feedForward(cConcat.AsObject());
}
В итоге каждый шаг метода прямого прохода логично вытекает из предыдущего: сначала выделяем первичные движения, затем объединяем их с текущим состоянием, нормализуем и передаём дальше. Так формируется устойчивое, пространственно-согласованное совместное представление, которое становится основой для временной агрегации и кросс-модальной интеграции.
Алгоритм распределения градиента ошибки построен так, чтобы корректно передавать сигнал обучения через совместное представление рыночных данных, объединяющее текущее состояние и динамику последних событий.
bool CNeuronCreateICEFlow::calcInputGradients(CNeuronBaseOCL *NeuronOCL) { if(!NeuronOCL) return false;
Метод calcInputGradients начинается с проверки актуальности объекта NeuronOCL. Если он отсутствует, дальнейшие вычисления невозможны, и функция сразу возвращает false.
Затем вызывается одноименный метод родительского класса, который распространяет градиенты на уровне стека нейронов, обеспечивая корректное взаимодействие модуля с остальной архитектурой STFlow.
if(!CNeuronSpikePatchStak::calcInputGradients(cConcat.AsObject())) return false;
Далее вычисляются размер окна и длина последовательности.
uint dimension = cBlock.GetWindow() / 2; uint units = cBlock.GetUnits() * cBlock.GetVariables(); if(!DeConcat(NeuronOCL.getGradient(), cState.getGradient(), cConcat.getGradient(), dimension, dimension, units)) return false;
Метод обратной конкатенации разворачивает градиенты из объединённого тензора обратно на отдельные потоки: текущее рыночное состояние, находящееся в NeuronOCL, и динамику последних событий, сосредоточенную в cState. Важно отметить, что динамика формируется как разность между текущим и предыдущим состоянием рынка. Соответственно, градиент, полученный на поток динамики, полностью передаётся на объект описания текущего состояния, суммируясь с ранее накопленными градиентами.
if(!SumAndNormilize(NeuronOCL.getGradient(), cState.getGradient(), NeuronOCL.getGradient(), dimension, false, 0, 0, 0, 1)) return false; Deactivation(NeuronOCL) //--- return false; }
Это обеспечивает, чтобы сигнал обучения учитывал и стабильную структуру рынка, и влияние недавних событий.
Наконец, метод Deactivation завершает обработку, отключая временные функции активации и подготавливая аккумулированные градиенты к следующему шагу обновления весов.
В итоге весь процесс распределения ошибки обеспечивает точное и согласованное обучение, где модуль остаётся одновременно устойчивым к шуму и чувствительным к динамике рынка.
Таким образом, CNeuronCreateICEFlow становится фундаментом адаптированной STFlow-системы для финансовых рынков. Он создаёт устойчивое, нормализованное и пространственно-согласованное представление, которое затем используется на следующих уровнях временной агрегации и кросс-модальной интеграции, обеспечивая прочный каркас для всей последовательной многоуровневой архитектуры.
Заключение
Мы только сделали первые шаги. Познакомились с теоретическими аспектами фреймворка STFlow и начали адаптацию его подходов к финансовым рынкам. Уже на этом этапе можно выделить ключевые сильные стороны системы. Она способна формировать устойчивое совместное представление текущего состояния рынка и динамики последних событий, при этом оставаясь чувствительной к микроимпульсам и одновременно обеспечивая стабильность обработки данных.
В рамках практической работы была реализована базовая структура ICE-модуля, которая аккумулирует эти два потока и создаёт прочный фундамент для дальнейшей агрегации и анализа.
В следующей статье мы продолжим реализацию фреймворка, выстраивая алгоритмы временной агрегации и кросс-модальной интеграции. Это позволит полноценно реализовать многоуровневый анализ рыночных потоков.
Ссылки
- Spatially-guided Temporal Aggregation for Robust Event-RGB Optical Flow Estimation
- Другие статьи серии
Программы, используемые в статье
| # | Имя | Тип | Описание |
|---|---|---|---|
| 1 | Study.mq5 | Советник | Советник офлайн обучения моделей |
| 2 | StudyOnline.mq5 | Советник | Советник онлайн обучения моделей |
| 3 | Test.mq5 | Советник | Советник для тестирования модели |
| 4 | Trajectory.mqh | Библиотека класса | Структура описания состояния системы и архитектуры моделей |
| 5 | NeuroNet.mqh | Библиотека класса | Библиотека классов для создания нейронной сети |
| 6 | NeuroNet.cl | Библиотека | Библиотека кода OpenCL-программы |
Предупреждение: все права на данные материалы принадлежат MetaQuotes Ltd. Полная или частичная перепечатка запрещена.
Данная статья написана пользователем сайта и отражает его личную точку зрения. Компания MetaQuotes Ltd не несет ответственности за достоверность представленной информации, а также за возможные последствия использования описанных решений, стратегий или рекомендаций.
Функции Уолша в современном трейдинге
Машинное обучение и Data Science (Часть 34): Разложение временных рядов, раскрываем саму суть фондового рынка
Знакомство с языком MQL5 (Часть 24): Создание советника для торговли по графическим объектам
Знакомство с языком MQL5 (Часть 23): Автоматизация торговли на пробое диапазона открытия рынка
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования