Нейросети в трейдинге: Спайковая архитектура пространственно-временного анализа рынка (SDformerFlow)
Введение
Финансовый рынок всегда остаётся историей о движении. Не о тех удобных, сглаженных линиях, которые появляются на графиках. А о живых импульсах, резких всплесках ликвидности и коротких задержках между событиями. Именно здесь, на уровне тиковых импульсов, рождается настоящая динамика, пока ещё скрытая от глаз большинства моделей. Проблема в том, что классические нейросети рассматривают рынок через призму фиксированных интервалов и усреднённых значений, вынуждая живой поток подстраиваться под заранее заданный ритм. Такой подход неизбежно сглаживает структуру данных, стирает мелкие, но значимые переходы и оставляет трейдера без важных деталей, которые в реальных условиях определяют развитие движения.
Событийные подходы предлагают иной взгляд. Они реагируют не на время само по себе, а на появление изменений. Для рынка это особенно естественно. Ведь каждый тик — это событие. Каждый всплеск ликвидности — сигнал. Каждая микропауза — часть общей картины. Архитектура SDformerFlow как раз и построена на этом принципе. Она не ждёт очередного ровного кадра, а включается в работу в тот момент, когда рынок действительно меняется. Такая событийная логика делает модель ближе к самой природе рыночных данных, в которых ценность несут не столько значения, сколько моменты их изменения.
Первые идеи такого подхода пришли из области компьютерного зрения, где событийные камеры регистрировали не статичные кадры, а только изменения яркости в каждой точке. Если перенести эту логику в финансы, то становится очевидно, насколько похожи два мира. Тиковые данные — тот же разреженный поток событий. Нам важна сама динамика между соседними значениями, а не только тот факт, что они существуют. Поэтому перенос событийных архитектур в трейдинг выглядит естественным развитием методов анализа.
SDformerFlow обладает рядом особенностей, которые делают его особенно подходящим для работы с рыночной микроструктурой. Спайковая динамика позволяет реагировать на импульсные изменения естественно и экономно, сохраняя внимание модели на наиболее значимых моментах. Структура внимания с оконным механизмом даёт возможность одновременно видеть локальные связи и улавливать глобальную картину движения. Модель не навязывает рынку искусственного ритма, а подстраивается под его дыхание. Это позволяет фиксировать тонкие смещения ликвидности и восстанавливать скрытую скорость изменения цены.
Чем глубже мы опускаемся в ткань рыночного движения, тем очевиднее становится, что классические методы теряют связь с реальностью. Между двумя соседними тиками может существовать целая минисцена борьбы ликвидности: снятие лимитного ордера, его повторное появление, ускорение входящих заявок. На привычном графике всё это исчезает, сводясь к одному единственному значению. Событийная архитектура восполняет этот пробел и позволяет увидеть структуру рынка между строк. Там, где рождаются предпосылки движения, которые ещё не успели попасть в визуальную форму.
SDformerFlow открывает трейдеру возможность наблюдать за рынком так, будто мы смотрим не на снимки, а на поток. Он делает видимыми ранние признаки роста активности. Помогает различать истинное движение среди шума. И позволяет оценивать микроскорость цены в моменты, когда она только начинает формировать импульс. Такой подход особенно ценен в краткосрочных прогнозных моделях, фильтрации шума, анализе потока ордеров и построении индикаторов нового поколения, способных реагировать на структуру движения в реальном времени.
Алгоритм SDformerFlow
Архитектура SDformerFlow строится по принципу, хорошо зарекомендовавшему себя в задачах событийного анализа. Поток данных проходит через связку из энкодера и декодера. Где первый отвечает за последовательное уплотнение и выделение признаков, а второй восстанавливает структуру движения, превращая скрытые представления в итоговую карту потока. Такой подход давно известен в литературе по событийной оптической одометрии и обработке потоков, однако в SDformerFlow он переосмыслен под нужды спайкового подхода и природы рыночных данных.
Для удобства авторы фреймворка сравнивают две версии модели: спайковую SDformerFlow и её аналог на основе классических нейронных сетей — STTFlowNet. Оба варианта концептуально идентичны, отличаются лишь типом обработки данных внутри блоков. В ANN-версии используются стандартные Swin-трансформеры с оконным Self-Attention, а внутренняя логика слоёв соответствует современным реализациям. Каждый блок включает трёхмерный механизм внимания в ограниченных окнах, за которым следует двойной MLP-модуль, объединённый с нормализацией и остаточными соединениями. Важный отличительный момент — использование масштабированного косинусного внимания и логарифмического относительного позиционного смещения, что повышает устойчивость модели при росте размера исходных данных и значительно улучшает способность работать с длинными пространственно-временными последовательностями.
Но основное внимание в работе уделено именно спайковой версии — SDformerFlow, поскольку её свойства наиболее естественно ложатся на динамику финансовых рынков. Поток событий носит импульсный, разреженный характер. Архитектура модели состоит из трёх ключевых компонентов, последовательно формирующих иерархию сигналов. Сначала события поступают в модуль генерации спайковых признаков (Spiking Feature Generator — SFG), который одновременно выполняет роль компактного кодировщика и облегчённого блока выделения патчей. На этом этапе разреженный поток тиков переводится в плотное пространственно-временное представление, пригодное для последующей работы трансформеров. Затем полученные признаки попадают в цепочку STSF-энкодеров (SpatioTemporal swin SpikeFormer) — спайковых Swin-блоков, которые формируют многоуровневые описания движения, постепенно расширяя поле внимания и улавливая не только локальные, но и протяжённые взаимосвязи внутри временного потока.
На заключительном этапе декодер объединяет выходы каждого уровня энкодера с соответствующими масштабами собственной структуры, создавая ровный нисходящий путь от высокоуровневых представлений к конкретному прогнозу карты движения. Такое симметричное объединение уровней позволяет модели сохранять широкий контекст и точность локальных изменений — важное качество для задач анализа микроструктуры цены, где ценность имеют как общие тенденции, так и короткие всплески активности. Между энкодером и декодером дополнительно размещены два остаточных блока, которые стабилизируют обучение и улучшают передачу тонких сигналов.
Ключевой нюанс SDformerFlow скрыт в выборе типа остаточных соединений — вопрос, который для спайковых архитектур далеко не формальный. В ранних версиях SpikeFormer-моделей применялись либо обычные shortcut-ветки, либо так называемые SEW-соединения. Оба подхода имели свои ограничения: классические shortcut-блоки добавляли значения напрямую в мембранный потенциал, что нарушало идентичное отображение и ухудшало устойчивость при глубоком стеке слоёв. Вариант SEW, напротив, вносил остатки уже после генерации спайков, что приводило к избыточному накоплению сигналов и нежелательной интеграции. Авторами SDformerFlow был выбран иной путь — мембранно-потенциальные shortcut-соединения (MS). Они добавляют остаточный сигнал до стадии спайковой активации, сохраняя чистоту событийной природы модели и обеспечивая корректную передачу информации между уровнями. Таким образом удаётся избежать деградации обучения, характерной для предыдущих подходов, и сохранить точный контроль над динамикой мембранных потенциалов.
Первый этап в обработке событийного потока в SDformerFlow — модуль генерации спайковых признаков с применением облегчённого кодирования патчей (Spiking Feature Generator with Shortcut Patch Embedding). Этот блок состоит из двух последовательных стадий. Сначала поток событий проходит через SFG-блок, где формируются пространственно-временные признаки, затем через SPE-блок, который преобразует эти признаки в токен-эмбеддинги, пригодные для дальнейшей обработки в STSF-энкодерах.
В Spiking Feature Generator (SFG) события сначала обрабатываются спайковой свёрткой, после чего следуют два остаточных блока с мембранно-потенциальными остаточным соединением. Такая комбинация позволяет уменьшить пространственное разрешение карты признаков ровно в два раза, сохраняя при этом импульсную природу сигнала и выделяя наиболее значимые изменения в потоке событий.
Если описывать формально, анализируемые события проходят через спайковую свёртку с нормализацией и спайковой активацией. Затем через два последовательных остаточных блока MSRes, которые аккуратно добавляют сигнал в мембранный потенциал, обеспечивая правильное накопление информации между слоями. Такой подход сохраняет идентичность сигнала и предотвращает деградацию, характерную для классических shortcut-веток. В отличие от обычных ANN-решений, где оба блока обрабатываются одинаково в Resblock, спайковый генератор уделяет внимание именно сохранению импульсной динамики, которая критична для анализа потоков с редкими, но значимыми событиями.
На втором этапе Shortcut Patch Embedding (SPE) карта признаков разбивается на пространственные патчи размером P×P, при этом временной поток сохраняется как отдельное измерение. Такой шаг создаёт компактные пространственно-временные токены размером 1×P×P и проецирует пространственно-временные признаки в спайковые эмбеддинги. Для повышения производительности и сохранения целостности информации к патчам добавляется деформированный shortcut: остаточный сигнал проходит через свёртку размером ядра 1×1 с шагом 2, что гарантирует согласование формы выходных эмбеддингов и повышает качество передачи признаков в последующие STSF-энкодеры.
В итоге весь модуль работает, как компактный и эффективный фильтр событийного потока. Сначала он выделяет значимые пространственно-временные характеристики. Затем аккуратно формирует токен-эмбеддинги, которые способны передать всю структуру микроизменений на вход более глубоким слоям модели. Для трейдинга это особенно ценно: такой подход позволяет фиксировать краткосрочные всплески активности, локальные сдвиги ликвидности и скрытые импульсы движения цены, которые в стандартных моделях остаются незамеченными.
Spiking Feature Generator с Shortcut Patch Embedding обеспечивает плавный переход от разреженного, импульсного потока событий к плотным и информативным признакам, которые могут быть эффективно обработаны STSF-энкодерами. Это создаёт основу для дальнейшего построения иерархии признаков, удерживая баланс между точностью локальных деталей и охватом глобального контекста движения.
После того как события были аккуратно сформированы в токены, они поступают на обработку в SpatioTemporal Swin SpikeFormer Encoder (STSF) — ключевой блок модели SDformerFlow. В нем рождается основная пространственно-временная иерархия признаков. Именно здесь разреженный, импульсный поток событий превращается в богатое представление, которое способно улавливать микроскопические всплески активности и глобальные закономерности движения цены.
Архитектура STSF вдохновлена Swin-трансформерами и современными SpikeFormer-решениями. Модель строится из четырёх последовательных уровней, где каждый уровень включает определённое количество блоков STSF (2–2–6–2). После каждого уровня, за исключением последнего, применяется Spiking Patch Merge (SPM), который снижает пространственное разрешение карты признаков в два раза. При этом временная ось остаётся неизменной. Такой подход позволяет постепенно выстраивать многоуровневую иерархию. Сначала фиксируются локальные микродвижения, затем формируются более крупные паттерны, отражающие тенденции всего потока.
Каждый блок STSF сочетает спайковую реализацию Multi-Head Self-Attention с 3D-сдвигом окна (SDSA) и спайковый MLP-блок. Анализируемый поток разбивается на трёхмерные окна — небольшие кубики пространства и времени, внутри которых вычисляется внимание. Для уменьшенной версии разрешения авторами фреймворка используется окно 2×9×9, а для полной карты 2×15×15. Количество голов внимания варьируется от 3 до 24 на разных уровнях, что даёт гибкость модели. На первых слоях внимание фокусируется на мелких деталях, на последних — на глобальных закономерностях.
Сердце блока — SDSA, или спайковый механизм Self-Attention. В своей работе авторы фреймворка представили два варианта. Первый — Spiking Dot Product Attention: Query, Key и Value представлены спайковыми тензорами. В отличие от классических нейронных сетей, здесь не нужен SoftMax, так как внимание естественно неотрицательно. А масштабирование предотвращает исчезновение градиента при использовании LIF-нейронов. Для адаптивных нейронов масштабирование не требуется — их пороговые значения обучаются автоматически.

Второй вариант — Spiking QK Linear Attention, который снижает вычислительную сложность до линейной, оставаясь полностью спайковым. Здесь формируется вектор токенов по пространственно-временной оси, который затем применяется к ключевым тензорам через поэлементное умножение. Такой механизм позволяет модели эффективно выделять наиболее значимые события в каждом окне, сохраняя импульсную структуру сигнала и не теряя редкие, но критически важные движения цены.

После каждого уровня STSF (кроме последнего) используется Spiking Patch Merge (SPM), который снижает пространственное разрешение, не затрагивая временную ось. На практике это означает, что модель сжимает пространство, не теряя ход событий, точно так же, как трейдер фиксирует крупные движения на графике, не теряя деталей отдельных тиков. Комбинация SDSA и SPM создаёт мощный инструмент для построения многоуровневого пространственно-временного представления рынка.
Особенно важно подчеркнуть, что каждый STSF-блок удерживает чистую спайковую динамику. Остаточные соединения и внимание работают до генерации спайков, что позволяет точно передавать импульсную информацию между слоями, без размытия сигналов. Благодаря этому, модель фиксирует мельчайшие движения ликвидности, ранние признаки всплесков активности и скрытые паттерны, которые обычные усреднённые модели просто не замечают.
В итоге STSF выполняет несколько важных функций одновременно: выделяет локальные импульсы, формирует глобальные паттерны движения и сохраняет точную временную структуру событий. Для финансового трейдинга это критически важно. Благодаря такой архитектуре SDformerFlow способен выявлять ранние сигналы движения, прогнозировать краткосрочные колебания цены и создавать основу для построения высокоточных карт потока, пригодных для алгоритмических стратегий и микроструктурного прогнозирования.
После того как STSF-энкодеры сформируют богатые пространственно-временные признаки, на сцену выходит декодер. Его задача — восстановить пространственное разрешение карты движения и объединить локальные и глобальные представления в единую картину потока. В SDformerFlow декодер состоит из трёх последовательных слоёв транспонированной свёртки, каждый из которых увеличивает разрешение в два раза. Это похоже на то, как трейдер постепенно расширяет масштаб графика. Сначала видна общая динамика. Затем проявляются мелкие колебания. И на финальном уровне можно разглядеть всю структуру движения цены.
Ключевой особенностью декодера являются Skip-соединения с соответствующими уровнями STSF-энкодеров. Выход каждого энкодера конкатенируется с прогнозом на том же масштабе в декодере. Это позволяет модели сохранять точные локальные детали, которые могли бы быть потеряны при повышении разрешения. Такая конструкция гарантирует, что каждая карта движения на промежуточном уровне содержит информацию как о глобальных паттернах, так и о локальных импульсах, что особенно важно при анализе микроструктуры финансового потока.
На каждом уровне декодера формируется прогноз потока. Эти промежуточные карты затем конкатенируются и используются для окончательного вывода. Обучение проводится с использованием подходов обучения с учителем. Ошибка рассчитывается как среднее абсолютное отклонение между прогнозным потоком и эталонным значением. Для каждого пикселя потока в пространстве, соответствующего движению цены, вычисляется разница между прогнозными и истинными компонентами по горизонтали и вертикали. Суммирование по всем валидным пикселям даёт финальную величину ошибки, на основе которой обновляются веса модели.
Именно такой подход делает декодер SDformerFlow мощным инструментом анализа потока. Он объединяет локальные всплески активности, выявленные на ранних уровнях, с глобальными паттернами движения, формируемыми STSF-энкодерами. Для финансового рынка это означает возможность одновременно отслеживать краткосрочные импульсы цены и общую динамику рынка, создавая точные карты движения, которые могут служить основой для алгоритмических стратегий, фильтрации шума и микроструктурного прогнозирования.
В совокупности такая конструкция делает архитектуру SDformerFlow устойчивой, чувствительной и одновременно экономной, что особенно ценно для задач, где поток событий может быть неравномерным, импульсным и насыщенным всплесками активности — именно таким, каким мы наблюдаем его на финансовых рынках. Авторская визуализация фреймворка представлена ниже.

Реализация средствами MQL5
После того как мы подробно разобрали теоретические аспекты фреймворка SDformerFlow, настало время перейти к практической части работы. Здесь мы покажем один из возможных вариантов реализации предложенных подходов средствами MQL5, демонстрируя, как концепции, описанные ранее, превращаются в работоспособный инструмент для анализа рыночных потоков. Начнём с базовых компонентов SDformerFlow, постепенно выстраивая архитектуру от генерации признаков до прогнозирования карт движения.
Важно сразу отметить, что через весь фреймворк красной линией проходит мембранно-потенциальное остаточное соединение (MS), предложенное авторами. Его суть предельно проста и одновременно эффективна: данные берутся на входе до спайковой активации и передаются на выход до применения аналогичной активации. На практике это означает отказ от классической схемы, когда нелинейность применяется только после всех операций текущего слоя. Вместо этого на входе каждого слоя выполняется спайковая активация, после чего результат обрабатывается линейными операциями, свёртками или другими преобразованиями. Такой порядок позволяет сохранить импульсную природу сигнала, фиксировать моменты активности и одновременно аккуратно накапливать признаки на протяжении всей модели. Это особенно важно при работе с финансовыми потоками, где редкие, но значимые события легко теряются при традиционной последовательности операций.
В своей работе мы организуем ключевой процесс через новый объект CNeuronSpikeConvBlock, который наследует базовый функционал от слоя пакетной нормализации CNeuronBatchNormOCL и становится строительным блоком для спайковых слоёв SDformerFlow.
class CNeuronSpikeConvBlock : public CNeuronBatchNormOCL { protected: CNeuronSpikeActivation cActivation; CNeuronConvOCL cConv; //--- virtual bool feedForward(CNeuronBaseOCL *NeuronOCL) override; virtual bool updateInputWeights(CNeuronBaseOCL *NeuronOCL) override; virtual bool calcInputGradients(CNeuronBaseOCL *NeuronOCL) override; public: CNeuronSpikeConvBlock(void) {}; ~CNeuronSpikeConvBlock(void) {}; //--- virtual bool Init(uint numOutputs, uint myIndex, COpenCLMy *open_cl, uint window, uint step, uint window_out, uint units_count, uint variables, ENUM_OPTIMIZATION optimization_type, uint batch); //--- virtual int Type(void) override const { return defNeuronSpikeConvBlock; } //--- 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 bool WeightsUpdate(CNeuronBaseOCL *source, float tau) override; virtual uint GetFilters(void) const { return cConv.GetFilters(); } virtual uint GetVariables(void) const { return cConv.GetVariables(); } virtual uint GetUnits(void) const { return cConv.GetUnits(); } //--- virtual void SetActivationFunction(ENUM_ACTIVATION value) override { }; virtual void TrainMode(bool flag) override; virtual bool Clear(void) override; };
Объект содержит два ключевых компонента:
- CNeuronSpikeActivation — отвечает за спайковую активацию входных данных,
- CNeuronConvOCL — реализует свёрточные операции.
Взаимодействие между ними организовано через переопределённые методы feedForward, updateInputWeights и calcInputGradients, что обеспечивает корректное прямое распространение сигналов, обновление весов и вычисление градиентов во время обучения.
Дополнительно, использование нормализации на выходе слоя, выполняемой средствами родительского класса, позволяет поддерживать сопоставимое распределение значений независимо от глубины модели. Это обеспечивает стабильность обучения, предотвращает затухание или взрыв градиентов и сохраняет согласованность признаков при прохождении сигнала через несколько слоёв, что критично для глубоких спайковых архитектур, таких как SDformerFlow.
Метод Init выполняет инициализацию всех ключевых компонентов блока, обеспечивая гибкую настройку для работы с различными масштабами и уровнями модели.
bool CNeuronSpikeConvBlock::Init(uint numOutputs, uint myIndex, COpenCLMy *open_cl, uint window, uint step, uint window_out, uint units_count, uint variables, ENUM_OPTIMIZATION optimization_type, uint batch) { if(!CNeuronBatchNormOCL::Init(numOutputs, myIndex, open_cl, window_out * units_count * variables, batch, optimization_type)) return false; activation = None;
Сначала вызывается инициализация родительского класса CNeuronBatchNormOCL, которая отвечает за подготовку унаследованных объектов и интерфейсов.
Далее инициализируется объект спайковой активации cActivation, который формирует импульсный отклик нейронов до применения свёрточных операций.
if(!cActivation.Init(0, 0, OpenCL, (window - step + step * units_count)*variables, optimization, iBatch)) return false;
После этого настраивается свёрточный слой cConv, выполняющий линейные преобразования и свёртку по пространственно-временным признакам. При этом активация для свёртки отключена. Это подчёркивает, что спайковая активация уже была выполнена на предыдущем этапе, а cConv отвечает исключительно за свёрточные операции.
if(!cConv.Init(0, 1, OpenCL, window, step, window_out, units_count, variables, optimization, iBatch)) return false; cConv.SetActivationFunction(None); //--- return true; }
После того как объект инициализирован, мы переходим к организации процесса прямого прохода. Этот этап в полной мере демонстрирует ключевой принцип работы блока.
bool CNeuronSpikeConvBlock::feedForward(CNeuronBaseOCL *NeuronOCL) { if(!cActivation.FeedForward(NeuronOCL)) return false;
В методе feedForward сначала вызывается спайковая активация через объект cActivation, которая моделирует реакцию нейронов на анализируемые события, фиксируя редкие, но значимые импульсы. Точно так же, как трейдер отмечает внезапные всплески объёмов или резкие движения цены на графике.
Далее активированные данные передаются в свёрточный блок cConv, где выполняются линейные преобразования и свёртки для формирования пространственно-временных признаков.
if(!cConv.FeedForward(cActivation.AsObject())) return false;
И наконец, для поддержания сопоставимого распределения значений, вне зависимости от глубины модели, полученный результат подвергается нормализации, предоставляемой родительским классом.
if(!CNeuronBatchNormOCL::feedForward(cConv.AsObject())) return false; //--- return true; }
Такой подход обеспечивает целостное, последовательное преобразование данных: сначала сохраняется импульсная структура сигнала, затем извлекаются локальные и глобальные признаки, а нормализация стабилизирует значения и предотвращает затухание или взрыв градиентов. В финансовом контексте это позволяет точно фиксировать микродетали движения цены и одновременно строить информативные карты потока для последующего анализа и прогнозирования.
Как можно заметить, алгоритм метода прямого прохода обладает линейным и предсказуемым характером, что значительно упрощает организацию обратного прохода. В связи с этим мы сознательно не углубляемся в детали обратного распространения ошибок, оставляя их для самостоятельного изучения. Полный код класса и всех его методов, включая реализацию обратного прохода, приведён во вложении. Это позволяет читателю полностью ознакомиться с практической реализацией и при желании интегрировать её в собственные проекты.
Таким образом, CNeuronSpikeConvBlock становится ядром построения спайковых слоёв SDformerFlow средствами MQL5, обеспечивая плавный и точный перенос импульсной информации. Но это лишь первый кирпичик в построении спайковой архитектуры. Механизм мембранно-потенциальной остаточной связи мы реализуем в отдельном классе CNeuronMSRes, который наследуется от базового CNeuronBaseOCL.
Объект CNeuronMSRes аккуратно управляет потоком данных, обеспечивая перенос мембранного потенциала до активации слоя, что позволяет сохранить импульсную структуру сигнала без потери информации о редких, но значимых событиях.
class CNeuronMSRes : public CNeuronBaseOCL { protected: CLayer cFlow; //--- //--- virtual bool feedForward(CNeuronBaseOCL *NeuronOCL) override; virtual bool updateInputWeights(CNeuronBaseOCL *NeuronOCL) override; virtual bool calcInputGradients(CNeuronBaseOCL *NeuronOCL) override; public: CNeuronMSRes(void) {}; ~CNeuronMSRes(void) {}; //--- virtual bool Init(uint numOutputs, uint myIndex, COpenCLMy *open_cl, uint units, uint window, uint variables, ENUM_OPTIMIZATION optimization_type, uint batch); //--- virtual int Type(void) override const { return defNeuronMSRes; } //--- 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 bool WeightsUpdate(CNeuronBaseOCL *source, float tau) override; virtual void SetActivationFunction(ENUM_ACTIVATION value) override { }; virtual void TrainMode(bool flag) override; virtual bool Clear(void) override; };
Метод инициализации объекта организует работу всего блока мембранно-потенциального остаточного соединения и демонстрирует последовательность построения спайковой архитектуры на практике.
bool CNeuronMSRes::Init(uint numOutputs, uint myIndex, COpenCLMy *open_cl, uint units, uint window, uint variables, ENUM_OPTIMIZATION optimization_type, uint batch) { if(!CNeuronBaseOCL::Init(numOutputs, myIndex, open_cl, window * units * variables, optimization_type, batch)) return false; activation = None;
Алгоритм метода начинается с вызова инициализации родительского класса, которая обеспечивает базовую настройку нейрона. При этом поле activation устанавливается в значение None, подчёркивая, что спайковая активация будет выполняться в составе вложенных блоков.
Основная работа происходит через объект cFlow, который управляет внутренними компонентами блока. Сначала вызывается его метод Clear для очистки предыдущих данных, а затем настраивается поддержка OpenCL, обеспечивая ускорение вычислений на GPU.
cFlow.Clear(); cFlow.SetOpenCL(OpenCL);
После этого создаются два блока CNeuronSpikeConvBlock, которые и формируют ядро модуля. Первый блок инициализируется с размером окна window и удвоенным количеством выходных каналов. После чего добавляется в cFlow.
CNeuronSpikeConvBlock *block = new CNeuronSpikeConvBlock(); if(!block || !block.Init(0, 0, OpenCL, window, window, 2 * window, units, variables, optimization, iBatch) || !cFlow.Add(block)) { DeleteObj(block) return false; }
Второй блок получает увеличенный размер окна и уменьшенное число выходных каналов, чтобы корректно обрабатывать пространственно-временные признаки, и также добавляется в поток обработки.
block = new CNeuronSpikeConvBlock(); if(!block || !block.Init(0, 1, OpenCL, 2 * window, 2 * window, window, units, variables, optimization, iBatch) || !cFlow.Add(block)) { DeleteObj(block) return false; } //--- return true; }
Алгоритм прямого прохода реализован в методе feedForward и полностью отражает суть мембранно-потенциального остаточного соединения.
bool CNeuronMSRes::feedForward(CNeuronBaseOCL *NeuronOCL) { CNeuronBaseOCL* prev = NeuronOCL; CNeuronBaseOCL* curr = NULL; //--- for(int i = 0; i < cFlow.Total(); i++) { curr = cFlow[i]; if(!curr || !curr.FeedForward(prev)) return false; prev = curr; }
Сначала формируется последовательность обработки входного сигнала через все внутренние блоки, организованные в объекте cFlow. На каждом шаге текущий блок curr получает на вход результат работы предыдущего блока prev, выполняет спайковую активацию и свёрточные операции, а затем передаёт обработанные данные следующему блоку. Такой последовательный проход обеспечивает аккумулирование пространственно-временных признаков и сохранение импульсной структуры сигнала.
После того как все вложенные блоки обработали анализируемые события, результаты суммируются с исходными значениями.
if(!SumAndNormilize(NeuronOCL.getOutput(), prev.getOutput(), Output, 1, false, 0, 0, 0, 1)) return false; //--- return true; }
Это обеспечивает корректное накопление мембранного потенциала и поддерживает стабильное распределение значений вне зависимости от глубины модели.
В итоге метод feedForward демонстрирует гармоничное сочетание спайковой активации, линейных преобразований и нормализации, превращая блок в надежный инструмент анализа финансовых потоков и точного построения пространственно-временных признаков.
Однако прогнозирование потока с использованием случайных параметров, сгенерированных при инициализации модели, дает лишь ограниченную информацию. Для получения точных результатов требуется организация процесса обучения, который начинается с аккуратной работы над ошибками.
Метод calcInputGradients реализует обратное распространение градиентов в рамках блока CNeuronMSRes.
bool CNeuronMSRes::calcInputGradients(CNeuronBaseOCL *NeuronOCL) { CNeuronBaseOCL* next = cFlow[-1]; CNeuronBaseOCL* curr = NULL; if(!next || !DeActivation(next.getOutput(), next.getGradient(), Gradient, next.Activation())) return false;
Сначала вычисляются градиенты для последнего блока во внутреннем потоке cFlow. При этом используется метод DeActivation, чтобы корректно снять активацию и сопоставить её с вычисленными ошибками.
После этого градиенты последовательно распространяются обратно по всем вложенным блокам, каждый из которых корректирует свои внутренние веса и накопленные мембранные потенциалы.
for(int i = cFlow.Total() - 2; i >= 0; i--) { curr = cFlow[i]; if(!curr || !curr.CalcHiddenGradients(next)) return false; next = curr; }
На заключительном этапе происходит объединение градиентов, полученным по двум информационным потокам.
if(!NeuronOCL.CalcHiddenGradients(next)) return false; next = cFlow[-1]; if(!DeActivation(NeuronOCL.getOutput(), next.getPrevOutput(), Gradient, NeuronOCL.Activation())) return false; if(!SumAndNormilize(NeuronOCL.getGradient(), next.getPrevOutput(), NeuronOCL.getGradient(), 1, false, 0, 0, 0, 1)) return false; //--- return true; }
Это обеспечивает стабильное распределение значений и корректное обучение даже в глубоких спайковых сетях.
В результате метод calcInputGradients превращает блок CNeuronMSRes в активного участника обучения, позволяя системе адаптироваться к историческим событиям и постепенно повышать точность прогнозирования движения цены.
Такая организация CNeuronMSRes обеспечивает плавное иерархическое формирование признаков. Сначала фиксируются импульсы и формируются локальные спайковые паттерны. Затем они проходят через последовательность блоков для аккумулирования мембранного потенциала. В результате объект CNeuronMSRes становится фундаментальной единицей, которая сохраняет ключевую информацию о событиях на протяжении нескольких слоёв модели, создавая надёжную основу для точного анализа финансовых потоков и построения карт движения цены.
Заключение
В данной статье мы познакомились с фреймворком SDformerFlow, авторы которого представили ряд новых подходов, представляющих потенциальные преимущества для решения задач прогнозирования временных рядов. Применение мембранно-потенциальных остаточных соединений обеспечивает сохранение ключевой информации о редких, но значимых событиях. Спайковые генераторы признаков и многоуровневые энкодеры формируют иерархическую обработку пространственно-временных данных, создавая информативные карты движения цены. Их реализация средствами MQL5 с поддержкой OpenCL открывает возможности для гибкой интеграции и ускоренной обработки тиковых данных. Кроме того, нормализация и адаптивные блоки свёртки после спайковой активации поддерживают стабильность распределения признаков и упрощают обучение модели. В совокупности эти решения создают прочную основу для дальнейшего развития и применения фреймворка в задачах анализа и прогнозирования финансовых потоков.
Ссылки
- SDformerFlow: Spatiotemporal swin spikeformer for event-based 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 не несет ответственности за достоверность представленной информации, а также за возможные последствия использования описанных решений, стратегий или рекомендаций.
Тенденции и традиции: Использование функций Радемахера в трейдинге
Возможности Мастера MQL5, которые вам нужно знать (Часть 55): SAC с приоритетным воспроизведением опыта
Торгуем опционы без опционов (Часть 4): Более сложные опционные стратегии
Единый мультитаймфреймовый Ренко: Синтез временных измерений рынка
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования