Нейросети в трейдинге: Адаптивное восприятие рыночной динамики (STE-FlowNet)
Введение
В последние годы финансовые рынки переживают стремительную трансформацию под влиянием глубокого обучения. И всё острее встаёт задача создания моделей, способных не просто выявлять закономерности в данных, а формировать устойчивое представление о временных, контекстных и структурных аспектах рыночной динамики. На этом фоне выделяется фреймворк STE-FlowNet, предложенный в работе "Spatio-Temporal Recurrent Networks for Event-Based Optical Flow Estimation", демонстрирующий новый подход к обработке последовательностей событий. В нем каждый шаг не просто отражает текущие данные, а динамически перестраивает внутреннее представление системы, адаптируясь к изменениям в анализируемом потоке информации.
Финансовый рынок — крайне сложная и нелинейная система, подверженная внезапным срывам режима, каскадным реакциям и редким, но значимым паттернам. Классические рекуррентные модели, такие как LSTM и GRU, в этих условиях часто демонстрируют инерционность. Они либо усредняют историю, теряя важные краткосрочные события, либо чрезмерно реагируют на шум. Фреймворк STE-FlowNet решает эту проблему иначе. Он динамически перестраивает внутренние представления, адаптируя фильтры и временную чувствительность под конкретные рыночные сценарии. Такое поведение напоминает опытного трейдера, который интерпретирует события в контексте изменяющихся условий.
Ключевое достоинство STE-FlowNet заключается в работе с эволюцией рыночных состояний. Фреймворк отслеживает динамику скрытых структур, что особенно важно при моделировании смены режимов, всплесков ликвидности и изменении баланса сил участников. Вместо точечного прогнозирования продолжения временного ряда модель учится воспринимать ход событий, адаптируя внутренние представления под новые условия. Такой подход превращает прогнозирование в адаптивное восприятие, что особенно ценно для построения устойчивых торговых стратегий.
Архитектурная философия фокусируется на живом восприятии рынка. Прошлое рассматривается как гибкая карта траекторий, перестраивающаяся под новые события. Это позволяет модели сохранять релевантность при долгосрочных зависимостях и одновременно улавливать краткосрочные критические события. Предложенный способ обработки данных особенно ценен для финансовых рынков, где важно не только фиксировать историю, но и интерпретировать сдвиги её структуры.
Сегодня, когда рыночные закономерности становятся менее предсказуемыми, а периоды относительного равновесия прерываются резкими фазовыми сдвигами, адаптивные модели становятся необходимостью. Классические методы анализа часто дают сбои: либо фиксируют устаревшие признаки, либо реагируют с задержкой, когда структура рынка уже изменилась. Именно здесь рассматриваемый фреймворк проявляет своё преимущество, позволяя адаптироваться к новым правилам игры почти мгновенно.
Модель выстраивает восприятие рынка как динамическую систему. Каждый новый сигнал обновляет состояние и переосмысливает контекст предыдущих наблюдений. Это приближает алгоритм к мышлению профессионального трейдера, активно уточняющего гипотезы о текущем рыночном режиме. В результате появляется инструмент, способный вовремя распознать изменение контекста и адаптировать стратегию, что критически важно для финансовых приложений.
Архитектура фреймворка изначально ориентирована на прикладную адаптивность: она оценивает текущую фазу рынка и корректирует внутреннюю логику восприятия в реальном времени, обеспечивая устойчивость модели при смене рыночного режима. Это делает её особенно ценной для построения стратегий, способных реагировать на изменения контекста, а не только на движение цены.
Алгоритм STE-FlowNet
Фреймворк STE-FlowNet строится вокруг идеи пространственно-временной рекуррентной обработки событий, которая позволяет анализировать сложные последовательности данных с высокой степенью точности. Модель получает поток событий с камер и постепенно формирует внутреннее представление движения, учитывая каждое новое событие и постоянно обновляя внутреннюю память.
Каждый блок модели обрабатывает короткие последовательности событий, тщательно анализируя их с точки зрения пространственных и временных зависимостей. Это позволяет распознавать движение даже при высокой скорости и в динамически сложных сценах, где традиционные методы часто теряют важные детали.
Постепенно формируется устойчивое представление динамики, что обеспечивает возможность прогнозировать дальнейшее развитие событий с высокой точностью. Внутреннее состояние сети содержит локальные и глобальные характеристики движения, что делает модель способной воспринимать сложные структуры и прогнозировать закономерности на различных временных масштабах.
Представление исходных данных в STE-FlowNet основано на особенностях работы событийных камер, которые реагируют на изменения логарифма интенсивности яркости, превышающие заданный порог θ. Каждое событие фиксирует координаты пикселя, время регистрации и полярность изменения (увеличение или уменьшение яркости), что можно записать как e = {x, t, p}. В контексте финансовых рынков можно провести аналогию с совершением сделки, которое приводит к изменению цены или объема. Каждая запись несет критически важную информацию о текущем состоянии системы и может служить сигналом для анализа динамики рынка. Это делает поток событий богатым источником данных, способным выявлять даже малозаметные тенденции и резкие колебания.
Поток событий, однако, может частично теряться из-за ограничений пропускной способности пикселей, особенно в сценах с высокой скоростью и сложной текстурой. В финансовом контексте это похоже на пропуск отдельных сделок или мгновенных колебаний цен на активных рынках. Традиционные методы суммирования или агрегирования данных часто не позволяют отследить быстрые изменения и упускают краткосрочные закономерности. Для решения этой проблемы авторы фреймворка предложили модифицированное представление анализируемых данных, усиливающее сигнал и позволяющее выделять критические события, формирующие последующую динамику системы.
Все события делятся на N равных частей по количеству. Простое суммирование событий для формирования изображения не отражает реальных деталей движения за период. Если события сконцентрированы в короткий временной интервал, это указывает на высокую активность, будь то быстрое движение объектов в сцене, или всплеск торговой активности на рынке. Для учета этих особенностей вводится весовая шкала, основанная на временном распределении событий. События с высокой плотностью получают больший вес, позволяя STE-FlowNet фокусироваться на значимых моментах и игнорировать менее критичные колебания.
Для набора из M событий (xi, yi, ti, pi) i ∈ [1:M] в одном блоке применяется гауссовская модель для аппроксимации их временного распределения. Каждому событию присваивается соответствующий вес.


Здесь kg(a) — ядро сэмплирования по гауссовской модели, µ — среднее значение временных меток, σ — дисперсия, рассчитанная по всем M событиям. λ — нормализующий коэффициент.

Чем более концентрировано распределены события во времени, тем выше их вес. Это позволяет модели выделять периоды интенсивной активности. В финансовом контексте это позволяет фиксировать периоды повышенной волатильности, резкие всплески торгов или аномалии, которые могут предвещать ключевые точки рынка. Все взвешенные значения округляются вверх, чтобы сохранить значимость каждого события и не терять критическую информацию о быстрых изменениях.
Таким образом, модель STE-FlowNet становится способной видеть микродвижения и закономерности, которые традиционно теряются при стандартной агрегации данных, и использовать их для построения более точных прогнозов, оценки рисков и разработки стратегий с высокой адаптивностью.
Общая архитектура STE-FlowNet представляет собой вариант модели типа Encoder-Decoder. Каждое событие-изображение проходит через четыре энкодерных модуля, каждый из которых удваивает количество выходных каналов и уменьшает разрешение данных вдвое. После этого полученные карты признаков от энкодеров проходят через два остаточных блока, что позволяет усилить представление признаков и поддерживать стабильность градиентов.
Кроме того, между каждым уровнем энкодера и соответствующим декодером существует skip-соединение, которое обеспечивает прямой поток информации, сохраняя важные локальные и глобальные признаки. При прохождении через звено декодера данные подвергаются транспонированной свёртке для увеличения разрешения в два раза. После прохождения всех четырёх модулей декодера изображение восстанавливается до исходного размера. Такая структура позволяет модели точно воспроизводить пространственные детали и удерживать критически важные характеристики динамики событий.
STE-FlowNet также генерирует промежуточные карты движения (intermediate flow) на каждом разрешении, которые затем используются как часть исходных данных для следующего декодера. Во время обучения функция потерь применяется ко всем промежуточным картам, что улучшает обучение и повышает точность прогнозирования. Такая архитектура особенно полезна для финансовых потоков, где важно отслеживать краткосрочные и долгосрочные закономерности одновременно: промежуточные потоки помогают фиксировать микродвижения цен, резкие всплески объема и другие значимые события, создавая более надежную и адаптивную модель анализа.
Ключевым компонентом извлечения признаков в STE-FlowNet является ConvGRU, который выполняет центральную роль в обработке пространственно-временной информации. Хотя ConvGRU уже применялся в некоторых исследованиях с кадровыми данными, ранее его функционал ограничивался использованием высокоуровневых карт признаков из верхних слоев ConvNet. При этом теряется большая часть локальной информации, а временные вариации между кадрами нередко нивелируются. Это затрудняет точное выявление мелких движений и быстрых изменений.
В контексте финансовых потоков это сравнимо с потерей информации о краткосрочных колебаниях цен или микротранзакциях, которые могут быть критически важными для принятия торговых решений и оценки рыночных рисков. Для решения этой проблемы авторы фреймворка STE-FlowNet предложили энкодерные модули, которые используют ConvGRU для последовательного извлечения пространственно-временных признаков на разных уровнях разрешения, сохраняя локальные шаблоны движения и детали динамики. Это позволяет отслеживать даже самые тонкие изменения в потоке данных.
Анализируемое событие-изображение проходит через две параллельные архитектуры, напоминающие пирамиду. Первый путь — через ConvNet, который генерирует пространственные карты признаков на разных уровнях разрешения, предоставляя глобальный контекст и захватывая общую структуру события. Второй путь проходит через пространственно-временные энкодеры на каждом уровне. Каждый энкодер включает ConvGRU и страйдированную свёртку. Этот подход обеспечивает модель информацией о быстрых локальных колебаниях и одновременно о более медленных глобальных тенденциях. В финансовой аналитике это можно интерпретировать как одновременное отслеживание мгновенных всплесков торговой активности и долгосрочных трендов рынка, что повышает точность прогноза и позволяет выявлять критические точки для стратегических решений.
На каждом временном шаге t вход ConvGRU включает три ключевых компонента:
- карты признаков Fst,t от нижележащего пространственно-временного энкодера,
- скрытое состояние ht-1 с предыдущего шага,
- выход корреляционного слоя Ct на том же уровне разрешения.
ConvGRU задаётся следующими уравнениями:
![]()
![]()
![]()
![]()
Корреляционный слой вычисляет соответствие между пространственными картами признаков текущего события Fst,t и первого события Fs,1, используя прогнозный поток f* с предыдущей итерации.
![]()
Пошаговое построение прогноза потока, основанное на информации о предыдущих шагах, аналогично аналитической работе трейдера, который оценивает каждую новую сделку в контексте предыдущих событий. Это позволяет более точно моделировать эволюцию рыночных процессов, выявлять потенциальные точки входа и выхода, а также разрабатывать адаптивные стратегии, способные быстро реагировать на изменения рыночной среды.
Кроме того, такая архитектура повышает устойчивость модели к шумовым колебаниям, аномалиям и редким событиям, создавая надежный инструмент для комплексного анализа финансовых потоков и поддержки принятия решений на высококонкурентных рынках.
Для повышения точности и надежности прогнозов в STE-FlowNet применяется схема итеративного уточнения. Каждая итерация создает остаточный поток ∆fk, который аккумулируется с предыдущей оценкой fk-1, формируя обновленный прогноз fk = fk-1 + ∆fk, начиная с f0 = 0.
Повторное использование одного и того же блока с разделяемыми весами обеспечивает согласованность итераций, экономию ресурсов и стабильность обучения. Промежуточные прогнозы служат двум целям. Во-первых, они используются как часть исходных данных для следующей итерации, обеспечивая точную коррекцию на основе предыдущих оценок. Во-вторых, в качестве skip-соединения, добавляющего прогнозный поток к текущему выходу модели, что позволяет уточнять прогноз с высокой детализацией. Эта многоступенчатая стратегия схожа с поэтапным анализом финансовых прогнозов, где каждая новая оценка цены, объема или индикатора уточняется с учетом всех предыдущих данных, создавая адаптивную и точную модель движения рынка.
Итеративный процесс позволяет учитывать не только последовательность событий, но и потенциальные шумы, редкие события и резкие колебания, повышая устойчивость модели к нестабильности финансовых рынков. Это обеспечивает формирование прогнозов с высокой детализацией и надежностью. STE-FlowNet способна обрабатывать большие потоки событий, фиксируя каждое значимое движение, интегрируя его в общую картину и создавая полноценное представление о текущем состоянии рынка.
Рекуррентная и итеративная архитектура STE-FlowNet позволяет обрабатывать события кадр за кадром, учитывая всю последовательность предшествующих изменений. В финансовом приложении это означает способность точно фиксировать мгновенные колебания цен, резкие всплески торговой активности, а также выявлять редкие и аномальные события, одновременно учитывая глобальные тенденции рынка. Итеративное уточнение обеспечивает динамическую адаптацию модели к новым данным, позволяет формировать прогнозы с высокой надежностью, детализированностью и предсказуемостью, что критически важно для комплексного анализа рисков, адаптивного управления капиталом и стратегического планирования на быстро меняющихся и нестабильных рынках, где каждая миллисекунда может существенно влиять на результат принятия решений.
Для обучения STE-FlowNet авторы фреймворка используют синхронизированные потоки событий и изображения в градациях серого, что позволяет внедрить самоконтролируемое обучение. Поток событий между двумя последовательными изображениями (It, It+dt) преобразуется в серию событийных изображений, которые последовательно подаются в сеть. Одновременно предсказанный поток f = (f1, f2) применяется к второму изображению для генерации искажения, что позволяет вычислить ошибку и обучать модель без явных аннотаций. Такой подход позволяет STE-FlowNet научиться точно оценивать движение событий даже в условиях сложной динамики.
Функция потерь включает два ключевых компонента: фотометрическую реконструкцию Lphoto и гладкость потока Lsmooth, и выражается как:
![]()
где λ регулирует вес гладкости по отношению к фотометрической точности. Фотометрическая потеря оценивает расхождение между первым изображением и преобразованным вторым изображением, учитывая предсказанный поток:

где ρ — Charbonnier Lossρ(x) = (x2 + η2)r с r = 0.45 и η = 1e-3. Чем точнее поток, тем меньше расхождение, что позволяет модели фиксировать мельчайшие изменения и детали, критически важные для анализа быстрых событий.
Гладкость потока Lsmooth минимизирует различия между соседними пикселями, усиливая пространственную согласованность потока и снижая ошибки локального характера. В финансовом контексте это аналогично сглаживанию случайных шумов и всплесков торговых объемов, при сохранении значимых краткосрочных изменений цен и активности. Такой механизм позволяет модели одновременно отслеживать локальные аномалии — резкие изменения котировок, всплески торговой активности, и глобальные тренды.
Применение фотометрической и гладкой потерь создает сбалансированную стратегию обучения. Модель фиксирует мгновенные движения и тренды, избегая переобучения на шумовые или редкие события. В финансовых потоках это позволяет формировать прогнозы, способные точно реагировать на рыночные колебания, выявлять аномалии и обеспечивать поддержку принятия решений в реальном времени, обеспечивая надежность и адаптивность торговых стратегий на динамичных рынках. Благодаря такой интеграции пространственно-временного анализа и самоконтролируемого обучения, STE-FlowNet становится инструментом, который может выявлять закономерности на уровне микросекунд, а также учитывать долгосрочные тенденции, что делает его ценным для стратегического планирования и риск-менеджмента.
Авторская визуализация фреймворка STE-FlowNet представлена ниже.

Реализация средствами MQL5
После детального рассмотрения теоретических аспектов фреймворка STE-FlowNet, мы переходим к практической части нашей работы, где сосредоточимся на одном из вариантов реализации предложенных подходов средствами MQL5. Следует подчеркнуть, что наша реализация не является точной копией авторской версии фреймворка. Мы адаптируем основные идеи и ключевые принципы модели для работы с рыночными данными. В частности, мы переносим концепцию пространственно-временной обработки и итеративного уточнения потоков в структуру анализа цен, объемов и других торговых индикаторов.
Такой подход позволяет использовать преимущества STE-FlowNet в контексте анализа финансовых рынков: фиксировать краткосрочные всплески торговой активности, аномальные колебания цен и резкие изменения объема, одновременно учитывая долгосрочные тренды. Реализация средствами MQL5 обеспечивает возможность интеграции модели непосредственно в торговые стратегии и алгоритмические системы, что делает возможным как офлайн-тестирование на исторических данных, так и адаптивное прогнозирование в реальном времени. Кроме того, использование MQL5 позволяет оптимизировать вычислительные процессы, обеспечивая эффективную обработку больших потоков рыночных данных и последовательное применение пространственно-временных фильтров, что критично для высокочастотного трейдинга и анализа рисков.
Таким образом, наша практическая работа не просто переносит архитектуру STE-FlowNet на финансовые данные, но и расширяет её функциональные возможности, создавая гибкий инструмент для анализа динамики рынка, прогнозирования краткосрочных и долгосрочных изменений и построения надежных торговых стратегий с учетом реальных рыночных условий.
Однако следует отметить, что архитектура фреймворка STE-FlowNet достаточно сложна. Авторы используют множество различных модулей, распределённых между несколькими информационными потоками, что позволяет модели обрабатывать данные на разных уровнях абстракции и учитывать как локальные, так и глобальные изменения. Естественно, что к полной реализации этой архитектуры мы будем подходить постепенно, шаг за шагом, адаптируя ключевые элементы под анализ финансовых данных. Такой поэтапный подход позволит нам изучать особенности отдельных компонентов, корректировать алгоритмы под специфику рынка и обеспечивать стабильность работы модели при интеграции в торговые стратегии.
И начнем мы свою работу с построения одного из базовых модулей фреймворка — ConvGRU. Для упрощения мы предполагаем, что на вход модуля подается уже конкатенированный тензор признаков и корреляций. Это позволит сосредоточиться на извлечении пространственно-временных зависимостей и обработке информации о динамике рыночных событий, прежде чем интегрировать более сложные многопоточеные структуры. Кроме того, такой подход позволяет нам построить более универсальный объект, не привязанный к конкретному архитектурному решению.
Алгоритм модуля реализован в новом классе CNeuronSpikeConvGR, который наследует базовый функционал от объекта CNeuronSpikeActivation. Данный объект родительского класса говорит нам о спайковой природе создаваемого объекта.
class CNeuronSpikeConvGRU : public CNeuronSpikeActivation { protected: CNeuronBaseOCL cConcatenated[2]; CNeuronConvOCL cZR; CNeuronBaseOCL cZ; CNeuronBaseOCL cR; CNeuronConvOCL cHt; CNeuronBaseOCL cH; CNeuronBatchNormOCL cNorm; //--- virtual bool feedForward(CNeuronBaseOCL *NeuronOCL) override; virtual bool updateInputWeights(CNeuronBaseOCL *NeuronOCL) override; virtual bool calcInputGradients(CNeuronBaseOCL *NeuronOCL) override; public: CNeuronSpikeConvGRU(void) {}; ~CNeuronSpikeConvGRU(void) {}; //--- virtual bool Init(uint numOutputs, uint myIndex, COpenCLMy *open_cl, uint units, uint chanels_in, uint chanels_out, ENUM_OPTIMIZATION optimization_type, uint batch); //--- virtual int Type(void) override const { return defNeuronSTFS; } //--- methods for working with files virtual bool Save(int const file_handle) override; virtual bool Load(int const file_handle) override; //--- virtual void SetOpenCL(COpenCLMy *obj) override; virtual void SetActivationFunction(ENUM_ACTIVATION value) override; //--- virtual bool WeightsUpdate(CNeuronBaseOCL *source, float tau) override; };
В представленной структуре нового класса мы видим целый ряд внутренних объектов:
- cConcatenated — хранит конкатенированный тензор анализируемых данных, включающий карты признаков и корреляции, и скрытого состояния;
- cZR — модуль свёртки, отвечающий за вычисление гейтов Z (обновление) и R (сброс), которые управляют состоянием скрытого слоя;
- cZ и cR — отдельные структуры для хранения значений обновляющего и сбросного гейтов на текущем шаге;
- cHt — хранит промежуточное скрытое состояние после применения гейтов и свёрток;
- cH — скрытое состояние нейрона, которое обновляется на каждом шаге и используется в следующих итерациях;
- cNorm — модуль пакетной нормализации для стабилизации и ускорения обучения; подготавливает данные перед проведением спайковой активации средствами родительского класса.
Все внутренние компоненты объекта объявлены статично, что позволяет оставить пустыми конструктор и деструктор класса. А инициализация объекта осуществляется в методе Init, который собирает все внутренние подмодули в рабочую цепочку. Это важно. Ведь ConvGRU у нас — не отдельный черный ящик, а часть общей пространственно-временной обработки STE-FlowNet. Соответственно каждый шаг инициализации продуман с точки зрения потока данных и вычислительной эффективности.
bool CNeuronSpikeConvGRU::Init(uint numOutputs,uint myIndex,COpenCLMy *open_cl, uint units,uint chanels_in,uint chanels_out, ENUM_OPTIMIZATION optimization_type,uint batch) { if(!CNeuronSpikeActivation::Init(numOutputs,myIndex,open_cl,units*chanels_out,optimization_type,batch)) return false;
Первая строка кода внутри метода осуществляет базовую инициализацию объекта родительского класса. Здесь мы резервируем память, связывает объект с OpenCL-контекстом, фиксирует размер тензора результатов.
Дальше идёт инициализация внутренних компонентов. Первый — cConcatenated. Его задача собрать воедино исходные данные со скрытым состоянием.
uint index = 0; for(uint i = 0; i < cConcatenated.Size(); i++) { if(!cConcatenated[i].Init(0, index, OpenCL, units * (chanels_in + chanels_out), optimization, iBatch)) return false; cConcatenated[i].SetActivationFunction(None); index++; }
Для данного объекта мы явно отключаем функция активации. И это логично. Ведь перед нами просто буфер, объединяющий тензоры двух потоков информации, которые могли пройти разные нелинейные преобразования.
Следующий cZR — модуль свёртки для вычисления Z и R.
if(!cZR.Init(0,index,OpenCL,chanels_in+chanels_out,chanels_in+chanels_out, 2*chanels_out,units,1,optimization, iBatch)) return false; cZR.SetActivationFunction(SIGMOID);
Здесь мы создаём сверточный блок, который выдает одновременно значения для двух гейтов: Z управляет обновлением памяти, R — масштабом сброса предыдущего состояния. То есть за один проход получаем два набора карт, по одному на каждый гейт. Функция активации SIGMOID — это стандарт для гейтов: выход в диапазоне (0,1).
Для удобства вычислений мы разделяем сводный тензор гейтов на 2 составляющие.
index++; if(!cZ.Init(0,index,OpenCL,cZR.Neurons()/2,optimization,iBatch)) return false; cZ.SetActivationFunction((ENUM_ACTIVATION)cZR.Activation()); index++; if(!cR.Init(0,index,OpenCL,cZR.Neurons()/2,optimization,iBatch)) return false; cR.SetActivationFunction((ENUM_ACTIVATION)cZR.Activation());
С архитектурной точки зрения это даёт гибкость: в будущих вариантах можно заменить cZR на более сложный модуль, а cZ и cR останутся интерфейсами.
Долее инициализируем cHt — модуль для вычисления кандидата скрытого состояния.
index++; if(!cHt.Init(0,index,OpenCL,chanels_in+chanels_out,chanels_in+chanels_out, chanels_out,units,1,optimization, iBatch)) return false; cHt.SetActivationFunction(TANH);
Здесь используем отдельный сверточный блок. Входы такие же — комбинация признаков и предыдущего состояния (в нашем конкатенированном представлении). Выход — размерность признаков на выходе модуля. Активация TANH — стандарт для кандидата скрытого состояния: центрирует сигнал, даёт диапазон (−1,1). В торговом контексте это помогает держать отклик в разумных пределах и не допускать взрывов значений.
И собственно скрытое состояние cH.
index++; if(!cH.Init(0,index,OpenCL,Neurons(),optimization,iBatch)) return false;
Этот объект хранит итоговое скрытое состояние h. Важно отметить, что мы разделяем вычислительную часть cHt и хранение состояния cH. Такой дизайн облегчает контроль версий состояний при итеративном уточнении.
Завершает работу метода инициализация объекта пакетной нормализации cNorm.
index++; if(!cNorm.Init(0,index,OpenCL,Neurons(),iBatch,optimization)) return false; cNorm.SetActivationFunction(None); //--- return true; }
BatchNorm корректирует распределение предактивационных ответов.
Метод feedForward реализует полный прямой проход через модуль ConvGRU, последовательно обновляя скрытое состояние на основе текущего входа и сохранённой памяти.
bool CNeuronSpikeConvGRU::feedForward(CNeuronBaseOCL *NeuronOCL) { if(!NeuronOCL) return false; //--- uint units = cHt.GetUnits(); uint hidden = cHt.GetFilters(); uint inputs = cHt.GetWindow() - hidden;
Вначале мы вычисляем ключевые параметры модуля:
- units отражает пространственное разбиение входа,
- hidden определяет число выходных каналов состояния,
- inputs — количество входных каналов исходного тензора признаков.
Далее происходит метод SwapOutputs, который подготавливает буфер cH к обновлению, сохраняя предыдущее состояние для вычисления рекуррентного компонента.
if(!cH.SwapOutputs()) return false;
Затем анализируемые входные признаки конкатенируются с предыдущим скрытым состоянием, формируя первый вход для вычисления гейтов Z и R.
if(!Concat(NeuronOCL.getOutput(), cH.getPrevOutput(), cConcatenated[0].getOutput(), inputs, hidden, units)) return false;
Блок cZR выполняет сверточный прямой проход, генерируя объединённые карты гейтов, которые затем раздельно распределяются в cZ и cR.
if(!cZR.FeedForward(cConcatenated[0].AsObject())) return false; if(!DeConcat(cZ.getOutput(), cR.getOutput(), cZR.getOutput(), hidden, hidden, units)) return false;
После этого гейт R маскирует предыдущее состояние через поэлементное умножение, что реализует механизм частичного сброса памяти.
if(!ElementMult(cR.getOutput(), cH.getPrevOutput(), cR.getPrevOutput())) return false;
Конкатенация текущих входов с модифицированным состоянием подаётся во второй сверточный блок cHt, который вычисляет кандидатное скрытое состояние.
if(!Concat(NeuronOCL.getOutput(), cR.getPrevOutput(), cConcatenated[1].getOutput(), inputs, hidden, units)) return false; if(!cHt.FeedForward(cConcatenated[1].AsObject())) return false;
Далее функция GateElementMult комбинирует старое и новое состояние через гейт Z, плавно регулируя степень обновления памяти.
if(!GateElementMult(cHt.getOutput(), cH.getPrevOutput(), cZ.getOutput(), cH.getOutput())) return false;
Полученный результат проходит через слой нормализации cNorm, после чего активируется родительским классом, завершая фазу прямого прохода.
if(!cNorm.FeedForward(cH.AsObject())) return false; if(!CNeuronSpikeActivation::feedForward(cNorm.AsObject())) return false; //--- return true; }
Такой поэтапный механизм позволяет модулю точно балансировать между сохранением долгосрочного контекста и мгновенной реакцией на новые рыночные сигналы.
Таким образом, CNeuronSpikeConvGRU реализует полную логику работы ConvGRU модуля, позволяя постепенно интегрировать его в анализ рыночных событий, фиксировать краткосрочные колебания и обучаться на исторических данных для построения адаптивных торговых стратегий.
Мы сегодня хорошо поработали, и самое время сделать небольшую паузу. Пусть мысли спокойно улягутся и выстроятся в систему, а уже в следующей статье мы вернёмся к разработке с новыми силами и продолжим движение вперёд.
Заключение
В данной статье мы познакомились с фреймворком STE-FlowNet, который предлагает принципиально иной взгляд на обработку динамичных данных благодаря событийной модели восприятия. Его архитектура демонстрирует, как можно извлекать пространственно-временные зависимости не по жёстким временным интервалам, а по фактическим изменениям структуры сигнала. Именно то, чего так недостаёт классическим подходам на финансовых рынках. Он умеет извлекать локальные и временные зависимости без потери деталей, удерживая микроизменения структуры потока там, где классические модели их просто усредняют. Такой подход сохраняет динамику, не привязывается к фиксированным таймфреймам и позволяет шаг за шагом уточнять прогноз, словно наблюдая эволюцию рыночного импульса в режиме реального времени.
Ссылки
Программы, используемые в статье
| # | Имя | Тип | Описание |
|---|---|---|---|
| 1 | Study.mq5 | Советник | Советник офлайн обучения моделей |
| 2 | StudyOnline.mq5 | Советник | Советник онлайн обучения моделей |
| 3 | Test.mq5 | Советник | Советник для тестирования модели |
| 4 | Trajectory.mqh | Библиотека класса | Структура описания состояния системы и архитектуры моделей |
| 5 | NeuroNet.mqh | Библиотека класса | Библиотека классов для создания нейронной сети |
| 6 | NeuroNet.cl | Библиотека | Библиотека кода OpenCL-программы |
Предупреждение: все права на данные материалы принадлежат MetaQuotes Ltd. Полная или частичная перепечатка запрещена.
Данная статья написана пользователем сайта и отражает его личную точку зрения. Компания MetaQuotes Ltd не несет ответственности за достоверность представленной информации, а также за возможные последствия использования описанных решений, стратегий или рекомендаций.
Автоматизация торговых стратегий на MQL5 (Часть 16): Пробой полуночного диапазона посредством ценового действия Прорыв структуры (BoS)
От начального до среднего уровня: Struct (VI)
Анализ влияния солнечных и лунных циклов на цены валют
Автоматизация торговых стратегий на MQL5 (Часть 15): Гармонический паттерн «Шифр» (Cypher) ценового действия с визуализацией
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования