Русский
preview
Robô de trading baseado em redes neurais com arquitetura Mamba e SSM seletivo

Robô de trading baseado em redes neurais com arquitetura Mamba e SSM seletivo

MetaTrader 5Sistemas de negociação |
43 3
Yevgeniy Koshtenko
Yevgeniy Koshtenko

O trading algorítmico moderno enfrenta um problema fundamental. As arquiteturas clássicas de redes neurais baseadas no mecanismo de atenção (attention) apresentam complexidade computacional quadrática O(N²). Isso significa que dobrar o comprimento da série temporal quadruplica o tempo de processamento. Para um trader que analisa milhares de barras de dados históricos, essa ineficiência se torna uma limitação crítica.

Imagine a seguinte situação: seu sistema de trading precisa analisar as últimas 2048 barras de preços para decidir se entra em uma posição. Uma arquitetura Transformer exigiria cerca de 4 milhões de operações de atenção para isso, e o processamento levaria alguns segundos. No trading de alta frequência, em que milissegundos determinam o resultado da operação, esse atraso equivale ao fracasso da estratégia.

Além disso, os mercados modernos apresentam complexidade e interconexão cada vez maiores. Uma previsão bem-sucedida exige a análise de períodos históricos cada vez mais longos, considerando correlações entre diferentes ativos e escalas temporais. As arquiteturas tradicionais não conseguem lidar com esse desafio, limitando os traders a janelas de contexto de 512 a 1024 pontos de dados.


Tendências de 2024-2025 na previsão de séries temporais: Mamba

Em dezembro de 2023, pesquisadores da Universidade Carnegie Mellon apresentaram a Mamba, uma nova arquitetura para processamento de dados sequenciais. Ela se baseia em modelos de espaço de estado seletivos (SSM) e combina alta acurácia com complexidade computacional linear O(N), o que lhe dá uma vantagem clara em relação aos modelos Transformer.

Em 2024-2025, a previsão de séries temporais passa por uma transição das arquiteturas baseadas em attention para modelos de espaço de estado. O motivo é a necessidade de analisar sequências cada vez mais longas e complexas, especialmente em finanças, onde ciclos plurianuais e inter-relações entre mercados são importantes.

A Mamba surgiu como resultado da evolução das arquiteturas recorrentes. Partindo das RNN simples, passando por LSTM e GRU, depois pela revolução dos Transformers e dos mecanismos de attention, a comunidade de pesquisa concluiu que era necessária uma abordagem realmente nova. Os modelos de espaço de estado, que formam a base da Mamba, combinam as melhores propriedades de todas as arquiteturas anteriores: a eficiência das RNN, a memória de longo prazo das LSTM e a capacidade de paralelização dos Transformers.

Essa evolução é impulsionada pela necessidade crescente de analisar ciclos macroeconômicos e padrões de mercado de longo prazo. Os modelos tradicionais, limitados a janelas de contexto com algumas centenas de pontos temporais, mostraram-se incapazes de capturar efeitos sazonais, ciclos plurianuais e correlações entre mercados. A Mamba, com uma janela de contexto teoricamente ilimitada, abre caminho para a análise de períodos históricos de dez anos sem perder eficiência computacional.

A ideia central é a "memória seletiva". O modelo consegue identificar eventos relevantes, como relatórios econômicos, crises e avanços tecnológicos, e ignorar ruído. Isso é especialmente valioso na análise de dados financeiros, em que períodos de estabilidade se alternam com mudanças bruscas. Assim, em vez do mecanismo de atenção, a Mamba usa um estado oculto compacto, atualizado apenas quando surge informação importante. Essa abordagem permite que os modelos sejam mais rápidos e mais precisos em séries temporais longas.

// Фундаментальные уравнения State Space Model
h(t+1) = A·h(t) + B·x(t)    // Обновление состояния
y(t) = C·h(t) + D·x(t)      // Выходной сигнал

Aqui, h(t) representa o estado oculto do sistema no instante t, x(t) é o sinal de entrada, como o preço de um ativo, e as matrizes A, B, C e D definem a dinâmica do sistema.

Uma diferença importante da Mamba em relação às arquiteturas anteriores é que essas matrizes não são estáticas: elas se adaptam aos dados de entrada, conferindo seletividade ao processamento de informações.


Seletividade: a chave da eficiência

A principal inovação da Mamba é a seletividade. Diferentemente dos modelos de espaço de estado tradicionais, que processavam todos os dados de entrada da mesma forma, a Mamba consegue separar o que é importante do que é secundário. Isso ajuda a evitar o "esquecimento" de eventos essenciais e impede o acúmulo de ruído no estado oculto.

No mecanismo de seletividade, os parâmetros do sistema B e C tornam-se funções dos dados de entrada:

void ApplySelectiveSSM(Matrix &input_data, Matrix &output) {
    // Динамическая адаптация параметров
    for(int i = 0; i < input_data.cols; i++) {
        double input_val = input_data.Get(0, i);
        double selection_weight = Sigmoid(input_val);
        
        // Селективное обновление параметров
        adaptive_B.Set(i, j, B.Get(i, j) * selection_weight);
        adaptive_C.Set(j, i, C.Get(j, i) * selection_weight);
    }
}

Essa abordagem permite que o modelo "esqueça" informações pouco relevantes, como pequenas oscilações de preço em períodos de baixa volatilidade, e "retenha" eventos críticos, como movimentos bruscos de preço ou picos de volume negociado.


Implementação prática: da teoria ao código

A implementação da arquitetura Mamba em MQL5 exige um projeto cuidadoso das estruturas de dados básicas. O elemento central é a estrutura Matrix, que permite a manipulação segura de arrays multidimensionais:

struct Matrix {
    double data[];
    int rows, cols;
    
    Matrix() {
        rows = 0; cols = 0;
        ArrayResize(data, 0);
    }
    
    double Get(int r, int c) { 
        if(r < 0 || r >= rows || c < 0 || c >= cols) return 0.0;
        return data[r * cols + c]; 
    }
    
    void Set(int r, int c, double val) { 
        if(r < 0 || r >= rows || c < 0 || c >= cols) return;
        data[r * cols + c] = val; 
    }
};

A arquitetura do bloco Mamba combina vários componentes: convolução local para capturar dependências de curto prazo, um SSM seletivo para memória de longo prazo e um mecanismo de portas para controlar o fluxo de informação:

struct MambaBlock {
    Matrix A, B, C, D;           // SSM параметры
    Matrix conv_weights;         // 1D свертка
    Matrix gate_weights;         // Гейтирование
    Matrix state;               // Скрытое состояние
    
    void Forward(Matrix &input_data, Matrix &output) {
        output.Init(input_data.rows, input_data.cols);
        
        for(int t = 0; t < input_data.rows; t++) {
            // Локальная обработка через свертку
            Matrix conv_out;
            conv_out.Init(1, input_data.cols);
            ApplyConvolution(input_data, t, conv_out);
            
            // Селективная обработка через SSM
            Matrix gated;
            gated.Init(1, input_data.cols);
            ApplySelectiveSSM(conv_out, gated);
            
            // Residual connection для стабильности обучения
            for(int j = 0; j < input_data.cols; j++) {
                double residual = input_data.Get(t, j);
                double processed = gated.Get(0, j);
                output.Set(t, j, residual + processed * 0.5);
            }
        }
    }
};

A inicialização da matriz A exige atenção especial. Pesquisas mostram que o uso da inicialização HiPPO (High-order Polynomial Projection Operators) proporciona propriedades ideais de memória ao sistema:

void InitializeHiPPOMatrix() {
    for(int i = 0; i < SSM_STATE_SIZE; i++) {
        for(int j = 0; j < SSM_STATE_SIZE; j++) {
            if(i == j) {
                A.Set(i, j, -1.0);  // Диагональная стабилизация
            } else if(j < i) {
                A.Set(i, j, 0.1 / (i - j + 1));  // HiPPO веса
            }
        }
    }
}

Uma das principais inovações no processamento de séries temporais foi o conceito de patching, isto é, a divisão de uma sequência longa em segmentos curtos, chamados patches, processados como tokens individuais. Essa ideia, emprestada da visão computacional e adaptada às séries temporais nos trabalhos sobre PatchTST, reduz drasticamente a carga computacional.

struct PatchEmbedding {
    Matrix patch_weights;
    Matrix position_embedding;
    
    void Forward(double &time_series[], Matrix &patches) {
        int num_patches = (ArraySize(time_series) / 2) / PATCH_SIZE;
        patches.Init(num_patches, HIDDEN_SIZE);
        
        for(int p = 0; p < num_patches; p++) {
            for(int h = 0; h < HIDDEN_SIZE; h++) {
                double sum = 0.0;
                
                // Обработка патча размером PATCH_SIZE
                for(int i = 0; i < PATCH_SIZE; i++) {
                    int price_idx = (p * PATCH_SIZE + i) * 2;
                    int vol_idx = price_idx + 1;
                    
                    if(price_idx < ArraySize(time_series)) {
                        sum += time_series[price_idx] * patch_weights.Get(i * 2, h);
                        sum += time_series[vol_idx] * patch_weights.Get(i * 2 + 1, h);
                    }
                }
                
                // Позиционное кодирование для сохранения временной информации
                sum += position_embedding.Get(p, h);
                patches.Set(p, h, sum);
            }
        }
    }
};

A aplicação de patching no contexto de séries temporais financeiras é especialmente eficiente. Um patch de 16 pontos temporais pode representar um período de 4 horas em um gráfico de 15 minutos ou um período diário em um gráfico de 1 hora. Isso permite que o modelo opere com unidades de tempo semanticamente significativas, em vez de pontos de preço isolados.

O treinamento da arquitetura Mamba exige o uso de algoritmos modernos de otimização. O AdamW (Adam with Weight Decay) é uma versão aprimorada do Adam clássico que corrige o problema da regularização inadequada:

void UpdateWeightsAdamW(double grad_scale) {
    step_count++;
    double effective_lr = learning_rate * adaptive_lr_factor;
    double weight_decay = 0.01;
    
    for(int i = 0; i < output_projection.rows; i++) {
        for(int j = 0; j < output_projection.cols; j++) {
            double grad = grad_scale * 0.01;
            double weight = output_projection.Get(i, j);
            
            // Обновление моментов
            double m = beta1 * output_m.Get(i, j) + (1 - beta1) * grad;
            double v = beta2 * output_v.Get(i, j) + (1 - beta2) * grad * grad;
            
            output_m.Set(i, j, m);
            output_v.Set(i, j, v);
            
            // Коррекция смещения
            double m_hat = m / (1 - MathPow(beta1, step_count));
            double v_hat = v / (1 - MathPow(beta2, step_count));
            
            // Обновление с weight decay
            double update = effective_lr * (m_hat / (MathSqrt(v_hat) + epsilon) + weight_decay * weight);
            output_projection.Set(i, j, weight - update);
        }
    }
}


Inovações arquitetônicas em detalhe

Compreender a Mamba em profundidade exige examinar as operações matemáticas subjacentes aos seus componentes arquitetônicos. O mecanismo de seletividade representa uma diferença fundamental em relação às abordagens tradicionais. Nos modelos de espaço de estado clássicos, os parâmetros B e C permanecem constantes ao longo do tempo, o que impede o modelo de se adaptar às características variáveis do fluxo de entrada.

Na Mamba, o mecanismo seletivo é implementado por meio de funções de projeção que transformam o sinal de entrada em parâmetros do sistema:

Matrix ComputeSelectiveParameters(Matrix &input_sequence) {
    Matrix selective_B, selective_C;
    selective_B.Init(input_sequence.rows, SSM_STATE_SIZE);
    selective_C.Init(SSM_STATE_SIZE, input_sequence.rows);
    
    for(int t = 0; t < input_sequence.rows; t++) {
        // Проекция входного сигнала в пространство параметров
        double input_norm = 0.0;
        for(int f = 0; f < input_sequence.cols; f++) {
            input_norm += input_sequence.Get(t, f) * input_sequence.Get(t, f);
        }
        input_norm = MathSqrt(input_norm);
        
        // Адаптивное масштабирование параметров
        double adaptation_factor = Tanh(input_norm * 0.1);
        
        for(int s = 0; s < SSM_STATE_SIZE; s++) {
            selective_B.Set(t, s, base_B.Get(t, s) * adaptation_factor);
            selective_C.Set(s, t, base_C.Get(s, t) * adaptation_factor);
        }
    }
    
    return selective_parameters;
}

Essa abordagem permite que o modelo ajuste dinamicamente sua sensibilidade a diferentes tipos de informação de entrada. No contexto dos mercados financeiros, isso significa a capacidade de aumentar a sensibilidade a períodos de alta volatilidade e reduzi-la durante fases de consolidação.


Otimizações orientadas ao hardware

Um dos fatores críticos para o sucesso da Mamba é sua otimização para arquiteturas computacionais modernas. Os SSM tradicionais exigem processamento sequencial dos passos temporais, o que os torna pouco adequados para cálculos paralelos. A Mamba resolve esse problema por meio do algoritmo de varredura paralela, que permite usar arquiteturas de GPU de maneira eficiente.

void ParallelScanSSM(Matrix &input_sequence, Matrix &output_sequence) {
    int sequence_length = input_sequence.rows;
    Matrix cumulative_states;
    cumulative_states.Init(sequence_length, SSM_STATE_SIZE);
    
    // Фаза 1: Восходящее сканирование
    for(int level = 0; level < (int)MathLog2(sequence_length); level++) {
        int step_size = 1 << level;
        
        for(int i = step_size; i < sequence_length; i += step_size * 2) {
            // Комбинирование состояний с использованием ассоциативной операции
            CombineStates(cumulative_states, i - step_size, i);
        }
    }
    
    // Фаза 2: Нисходящее распространение
    for(int level = (int)MathLog2(sequence_length) - 1; level >= 0; level--) {
        int step_size = 1 << level;
        
        for(int i = step_size * 3; i < sequence_length; i += step_size * 2) {
            // Распространение накопленных состояний
            PropagateStates(cumulative_states, i - step_size, i);
        }
    }
    
    // Генерация выходной последовательности
    GenerateOutput(cumulative_states, output_sequence);
}

Essa implementação permite alcançar complexidade temporal O(log N) para processar uma sequência de comprimento N ao usar N processadores, melhorando drasticamente a escalabilidade em comparação com o algoritmo sequencial O(N).


Técnicas avançadas de inicialização

A inicialização dos parâmetros do SSM desempenha um papel crítico na estabilidade do treinamento e na qualidade da memória de longo prazo. Pesquisas mostram que o uso da inicialização HiPPO (High-order Polynomial Projection Operators) proporciona propriedades ideais de aproximação para funções contínuas:

void InitializeHiPPOAdvanced() {
    // Вычисление оптимальных коэффициентов HiPPO
    Matrix legendre_matrix;
    legendre_matrix.Init(SSM_STATE_SIZE, SSM_STATE_SIZE);
    
    for(int n = 0; n < SSM_STATE_SIZE; n++) {
        for(int k = 0; k < SSM_STATE_SIZE; k++) {
            if(n > k) {
                // Коэффициенты полиномов Лежандра
                double coeff = MathSqrt((2*n + 1) * (2*k + 1));
                if((n - k) % 2 == 1) coeff *= -1;
                legendre_matrix.Set(n, k, coeff);
            } else if(n == k) {
                legendre_matrix.Set(n, k, -(2*n + 1));
            }
        }
    }
    
    // Дискретизация для цифровой обработки
    double time_scale = 1.0;
    Matrix discrete_A;
    discrete_A.Init(SSM_STATE_SIZE, SSM_STATE_SIZE);
    
    for(int i = 0; i < SSM_STATE_SIZE; i++) {
        for(int j = 0; j < SSM_STATE_SIZE; j++) {
            double continuous_val = legendre_matrix.Get(i, j);
            // Преобразование Тастина для дискретизации
            double discrete_val = (2.0/time_scale - continuous_val) / (2.0/time_scale + continuous_val);
            discrete_A.Set(i, j, discrete_val);
        }
    }
    
    A = discrete_A;
}

Essa inicialização confere ao modelo a capacidade de aproximar, com eficiência, funções com dependências de longo prazo, o que é crítico para a análise de séries temporais financeiras, que têm componentes periódicos complexos e componentes de tendência.


Integração com análise multiescala

Os mercados financeiros apresentam estruturas em diferentes escalas temporais. Tendências diárias podem contradizer ciclos semanais, que, por sua vez, se encaixam em padrões mensais e trimestrais. A arquitetura Mamba permite resolver esse problema com processamento multiescala:

struct MultiScaleMambaProcessor {
    MambaBlock scales[4];  // M5, M15, H1, H4
    Matrix fusion_weights;
    
    void Init() {
        // Различные параметры для разных масштабов
        for(int i = 0; i < 4; i++) {
            scales[i].Init();
            // Адаптация размера состояния под временной масштаб
            int scale_state_size = SSM_STATE_SIZE * (i + 1);
            scales[i].ResizeState(scale_state_size);
        }
        
        fusion_weights.Init(4, HIDDEN_SIZE);
        fusion_weights.Random(0.1);
    }
    
    Matrix ProcessMultiScale(double &price_data[], int timeframes[]) {
        Matrix scale_outputs[4];
        
        for(int scale = 0; scale < 4; scale++) {
            // Ресемплинг данных под соответствующий таймфрейм
            double resampled_data[];
            ResampleData(price_data, timeframes[scale], resampled_data);
            
            // Обработка через соответствующий Mamba блок
            Matrix scale_input;
            PrepareScaleInput(resampled_data, scale_input);
            scales[scale].Forward(scale_input, scale_outputs[scale]);
        }
        
        // Слияние информации с разных масштабов
        Matrix fused_output;
        FuseMultiScaleOutputs(scale_outputs, fused_output);
        
        return fused_output;
    }
    
private:
    void FuseMultiScaleOutputs(Matrix scale_outputs[], Matrix &fused) {
        fused.Init(scale_outputs[0].rows, HIDDEN_SIZE);
        
        for(int t = 0; t < fused.rows; t++) {
            for(int h = 0; h < HIDDEN_SIZE; h++) {
                double weighted_sum = 0.0;
                double total_weight = 0.0;
                
                for(int scale = 0; scale < 4; scale++) {
                    if(t < scale_outputs[scale].rows && h < scale_outputs[scale].cols) {
                        double weight = fusion_weights.Get(scale, h);
                        weighted_sum += scale_outputs[scale].Get(t, h) * weight;
                        total_weight += weight;
                    }
                }
                
                fused.Set(t, h, total_weight > 0 ? weighted_sum / total_weight : 0.0);
            }
        }
    }
};

O treinamento de modelos Mamba exige abordagens especializadas, adaptadas às características da arquitetura SSM. Um dos principais problemas é a estabilização dos gradientes nas computações recorrentes:

void StabilizedTraining(double &training_data[], double targets[]) {
    double gradient_norm_threshold = 1.0;
    double stability_factor = 0.99;
    
    for(int epoch = 0; epoch < training_epochs; epoch++) {
        double epoch_loss = 0.0;
        int batch_count = 0;
        
        for(int batch = 0; batch < num_batches; batch++) {
            // Forward pass с отслеживанием градиентов
            Matrix intermediate_states[NUM_LAYERS];
            double prediction = ForwardWithGradientTracing(training_data, intermediate_states);
            
            double loss = ComputeLoss(prediction, targets[batch]);
            epoch_loss += loss;
            
            // Вычисление градиентов с регуляризацией
            Matrix gradients[NUM_LAYERS];
            ComputeRegularizedGradients(loss, intermediate_states, gradients);
            
            // Проверка устойчивости градиентов
            double grad_norm = ComputeGradientNorm(gradients);
            if(grad_norm > gradient_norm_threshold) {
                // Масштабирование градиентов для предотвращения взрыва
                ScaleGradients(gradients, gradient_norm_threshold / grad_norm);
            }
            
            // Обновление параметров с экспоненциальным сглаживанием
            UpdateParametersSmoothed(gradients, stability_factor);
            batch_count++;
        }
        
        double avg_loss = epoch_loss / batch_count;
        
        // Адаптивная коррекция скорости обучения
        if(epoch > 0 && avg_loss > previous_loss * 1.1) {
            learning_rate *= 0.8;  // Снижение при нестабильности
        } else if(avg_loss < previous_loss * 0.95) {
            learning_rate *= 1.05; // Увеличение при стабильном улучшении
        }
        
        previous_loss = avg_loss;
        
        Print("Epoch ", epoch, " | Loss: ", DoubleToString(avg_loss, 6), 
              " | LR: ", DoubleToString(learning_rate, 6));
    }
}

A implantação da arquitetura Mamba em um sistema de trading em produção exige considerar diversos fatores práticos. O sistema de monitoramento de desempenho deve acompanhar não apenas a acurácia das previsões, mas também a estabilidade dos estados internos do modelo:

struct MambaMonitoringSystem {
    double state_stability_threshold;
    double prediction_variance_limit;
    int monitoring_window;
    
    bool MonitorSystemHealth() {
        // Проверка стабильности внутренних состояний
        double state_variance = ComputeStateVariance();
        if(state_variance > state_stability_threshold) {
            Print("WARNING: High state variance detected: ", state_variance);
            return false;
        }
        
        // Анализ консистентности предсказаний
        double prediction_variance = ComputePredictionVariance();
        if(prediction_variance > prediction_variance_limit) {
            Print("WARNING: Prediction instability: ", prediction_variance);
            return false;
        }
        
        // Проверка градиентов на наличие аномалий
        if(DetectGradientAnomalies()) {
            Print("WARNING: Gradient anomalies detected");
            TriggerModelReinitialization();
            return false;
        }
        
        return true;
    }
    
private:
    double ComputeStateVariance() {
        double variance_sum = 0.0;
        for(int layer = 0; layer < NUM_LAYERS; layer++) {
            Matrix layer_state = mamba_layers[layer].GetCurrentState();
            double layer_variance = 0.0;
            double layer_mean = 0.0;
            
            // Вычисление среднего
            for(int i = 0; i < layer_state.rows * layer_state.cols; i++) {
                layer_mean += layer_state.data[i];
            }
            layer_mean /= (layer_state.rows * layer_state.cols);
            
            // Вычисление дисперсии
            for(int i = 0; i < layer_state.rows * layer_state.cols; i++) {
                double diff = layer_state.data[i] - layer_mean;
                layer_variance += diff * diff;
            }
            layer_variance /= (layer_state.rows * layer_state.cols);
            
            variance_sum += layer_variance;
        }
        
        return variance_sum / NUM_LAYERS;
    }
};


Linhas futuras de pesquisa

A evolução da arquitetura Mamba abre várias direções para pesquisas futuras. A integração com algoritmos de aprendizado por reforço promete viabilizar a criação de agentes de trading adaptativos, capazes de aprender de forma autônoma sob condições de mercado em constante mudança.

Pesquisas em aprendizado com poucos exemplos baseadas na Mamba podem levar à criação de modelos capazes de se adaptar rapidamente a novos instrumentos financeiros com uma quantidade mínima de dados de treinamento. Isso é especialmente relevante para mercados emergentes e novas criptomoedas.

A combinação da Mamba com técnicas de meta-learning abre caminho para a criação de sistemas de trading universais, capazes de se adaptar automaticamente a diferentes regimes de mercado sem a necessidade de ajuste manual dos parâmetros.


Recomendações práticas de implantação

Para verificar o funcionamento da Mamba em condições reais de trading, foi desenvolvido o EA ModernAI_Expert.mq5. Trata-se de uma implementação completa do modelo de espaço de estado seletivo no ecossistema MetaTrader 5. Seu objetivo é demonstrar a aplicação prática de abordagens modernas de machine learning no trading algorítmico.

O EA se baseia nos princípios de uma abordagem puramente de IA, em que todas as decisões de trading são tomadas exclusivamente com base em previsões da rede neural. Diferentemente dos sistemas híbridos, o ModernAI_Expert depende integralmente da capacidade da arquitetura Mamba de identificar padrões ocultos nos dados de mercado sem usar indicadores técnicos tradicionais. A implementação básica dos modelos de espaço de estado seletivo suporta até 200 barras de entrada com profundidade de análise ajustável, retreinamento automático do modelo a cada 24 horas e filtragem inteligente de sinais com limiares de confiança configuráveis.


O ModernAI_Expert implementa um sistema avançado de normalização dos dados de entrada, crucial para o funcionamento estável da rede neural. O sistema processa variações de preço normalizadas e volume escalado logaritmicamente, ajudando a estabilizar o treinamento e impedindo que um tipo de dado domine o outro. Essa abordagem é especialmente crítica para séries temporais financeiras, com sua alta variabilidade e picos imprevisíveis de atividade.


A principal característica do ModernAI_Expert é a gestão dinâmica da posição. O tamanho da operação depende não apenas das regras padrão de gestão de risco, mas também do nível de confiança do modelo de IA. Cada operação vem acompanhada de um comentário com esse nível, permitindo que o trader avalie a qualidade das decisões em tempo real.

Outra função essencial é a geração de sinais inteligentes de saída. As posições são encerradas não apenas por stop-loss ou take-profit, mas também quando o sentimento do modelo muda. Posições compradas são encerradas se a confiança cair abaixo de 40%, enquanto posições vendidas são encerradas se a confiança subir acima de 60%. Isso ajuda a reagir a mudanças nas condições de mercado antes que os stops tradicionais sejam acionados.


Conclusão

A arquitetura Mamba representa um avanço revolucionário no trading algorítmico ao resolver o problema fundamental da complexidade quadrática dos modelos Transformer. A transição para a complexidade linear O(N) e o mecanismo de memória seletiva abrem caminho para a análise de séries temporais muito longas sem perder eficiência computacional.

A implementação prática na forma de ModernAI_Expert.mq5 mostra que a tecnologia está pronta para uso e apresenta uma abordagem puramente de IA, sem indicadores técnicos tradicionais.


Principais conclusões

O principal ganho da arquitetura Mamba foi o salto computacional: a transição da complexidade quadrática para a linear, que permite analisar milhares de barras sem perda de desempenho. O mecanismo de memória seletiva proporciona filtragem adaptativa de informações, concentrando-se em eventos relevantes e ignorando o ruído de mercado. A escalabilidade do sistema abre caminho para a análise de dados históricos plurianuais, permitindo identificar ciclos macroeconômicos.

A prontidão da tecnologia para uso prático é confirmada pela integração bem-sucedida com o MetaTrader 5, com gestão dinâmica da posição baseada na confiança do modelo. Isso representa uma mudança de paradigma: a passagem de sistemas híbridos para uma abordagem puramente de IA na tomada de decisões de trading.

A Mamba inaugura uma nova era no trading algorítmico, em que a eficiência no processamento de sequências longas se combina com a adaptabilidade a condições de mercado em constante mudança.


Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/19047

Arquivos anexados |
Últimos Comentários | Ir para discussão (3)
Борис Ворона
Борис Ворона | 27 ago. 2025 em 06:26
Ao compilar o arquivo ModernTimeSeriesNet.mqh, ocorrem os seguintes erros:- undeclear
Yevgeniy Koshtenko
Yevgeniy Koshtenko | 27 ago. 2025 em 07:17
Борис Ворона #:
Ao compilar o arquivo ModernTimeSeriesNet.mqh, recebo os seguintes erros:- undeclear

Olá! Anexei a versão atual na nova versão do artigo. Na versão anterior, o EA foi compilado como estava, apenas o problema era que as variáveis foram definidas no EA e não no mqh necessário).

Борис Ворона
Борис Ворона | 28 ago. 2025 em 13:33
Yevgeniy Koshtenko #:

Olá! Anexei a versão atual na nova versão do artigo. Na versão anterior, o EA compilava como estava, mas o problema era que as variáveis eram definidas no EA e não no m

Obrigado, tudo funcionou.

Implementação do circuito quântico de Quantum Reservoir Computing (QRC) Implementação do circuito quântico de Quantum Reservoir Computing (QRC)
Trata-se de uma abordagem revolucionária do aprendizado de máquina aplicado ao trading por meio da computação quântica. O artigo descreve a aplicação prática de um sistema QRC adaptativo com ajuste contínuo incremental para prever movimentos do mercado em tempo real.
Redes neurais em trading: decomposição em vez de aumento de escala (SSCNN) Redes neurais em trading: decomposição em vez de aumento de escala (SSCNN)
Neste artigo, iniciamos o estudo do framework SSCNN, uma solução arquitetural moderna para análise de séries temporais que combina precisão, estrutura bem definida e alta eficiência computacional. Examinaremos seus aspectos teóricos de forma sequencial, destacaremos as principais diferenças em relação a seus predecessores e iniciaremos a implementação prática dos componentes básicos no ambiente MQL5.
Redes neurais em trading: decomposição em vez de escalonamento: construção dos módulos Redes neurais em trading: decomposição em vez de escalonamento: construção dos módulos
Neste artigo, continuamos nossa apresentação prática da SSCNN, uma solução arquitetural de nova geração capaz de trabalhar com séries temporais fragmentadas. Em vez de escalonamento cego, adotamos modularidade inteligente, atenção aos detalhes e normalização seletiva. Passo a passo, criamos blocos computacionais no ambiente MQL5 e estabelecemos a base para uma análise preditiva confiável.
Gerenciador de riscos para robôs de trading (Parte I): include para controle de riscos em EAs Gerenciador de riscos para robôs de trading (Parte I): include para controle de riscos em EAs
O trading impõe altas exigências à disciplina de gestão de risco. Este artigo analisa as principais causas do insucesso dos traders e propõe uma solução técnica na forma da classe CEnhancedRiskManager para a plataforma MQL5. Inclui também testes práticos em um EA de grade agressivo.