English Русский
preview
Rede neural quântica em MQL5 (Parte III): Processador quântico virtual com qubits

Rede neural quântica em MQL5 (Parte III): Processador quântico virtual com qubits

MetaTrader 5Experts |
246 4
Yevgeniy Koshtenko
Yevgeniy Koshtenko

Na segunda parte do estudo, foi desenvolvido um sistema que usava análogos matemáticos de efeitos quânticos: ressonância (cosseno), interferência (seno) e decoerência (exponencial). No entanto, isso ainda era apenas uma imitação: formalmente elegante, mas essencialmente não quântico

Com o tempo, ficou claro: o modelo era elegante, mas não refletia a essência do processamento quântico, ou seja, superposição, emaranhamento e irreversibilidade das medições. Operávamos com funções, não com princípios.

As abordagens clássicas continuam limitadas:

  • LSTM atinge até 58% de precisão
  • Transformers são vulneráveis ao ruído
  • ARIMA perdeu relevância
  • Os modelos são instáveis devido ao sobreajuste

O principal avanço é a transição para qubits virtuais

Nessa segunda versão, em vez de análogos, foi adotado um processador quântico completo: 3 qubits, espaço de estados de 8 dimensões, portas e medições. A arquitetura foi revista: agora cada operação obedece às leis da mecânica quântica, como unitariedade, normalização e comportamento durante as medições.


Arquitetura do processador quântico

Cada qubit é representado como um vetor complexo em um espaço de Hilbert bidimensional.

struct ComplexVector {
    double real[STATE_DIM];
    double imag[STATE_DIM]; 
    int size;
    
    void Initialize(int dim) {
        size = dim;
        for(int i = 0; i < dim; i++) {
            real[i] = (i == 0) ? 1.0 : 0.0;  // Initial state |000⟩
            imag[i] = 0.0;
        }
    }
    
    double GetProbability(int index) {
        return real[index] * real[index] + imag[index] * imag[index];
    }
    
    void Normalize() {
        double norm = 0.0;
        for(int i = 0; i < size; i++) {
            norm += real[i] * real[i] + imag[i] * imag[i];
        }
        
        norm = MathSqrt(norm);
        if(norm > MATRIX_EPSILON) {
            for(int i = 0; i < size; i++) {
                real[i] /= norm;
                imag[i] /= norm;
            }
        }
    }
};

Este código implementa a estrutura básica para armazenar o estado quântico. Diferentemente dos bits clássicos, os estados quânticos têm amplitudes complexas que podem interferir entre si. A função GetProbability calcula a probabilidade de medir o sistema em um determinado estado de acordo com a regra de Born.

A particularidade da implementação é que trabalhamos não com qubits isolados, mas com o estado quântico completo de todo o sistema. Isso é essencial para modelar corretamente o emaranhamento e as correlações quânticas. Cada estado em nosso espaço de 8 dimensões corresponde a uma determinada combinação dos três qubits: |000⟩, |001⟩, |010⟩, |011⟩, |100⟩, |101⟩, |110⟩, |111⟩.


Portas quânticas: da teoria à prática

As portas de rotação implementam transformações unitárias, permitindo girar suavemente o estado do qubit na esfera de Bloch:

static void CreateRotationGate(int qubit, double angle, ComplexMatrix &gate) {
    gate.Initialize(STATE_DIM);
    double cos_half = MathCos(angle / 2.0);
    double sin_half = MathSin(angle / 2.0);
    
    for(int i = 0; i < STATE_DIM; i++) {
        for(int j = 0; j < STATE_DIM; j++) {
            gate.real[i][j] = 0.0;
            gate.imag[i][j] = 0.0;
            
            int bit_i = (i >> qubit) & 1;
            int bit_j = (j >> qubit) & 1;
            int other_bits_i = i & ~(1 << qubit);
            int other_bits_j = j & ~(1 << qubit);
            
            if(other_bits_i == other_bits_j) {
                if(bit_i == 0 && bit_j == 0) gate.real[i][j] = cos_half;
                else if(bit_i == 0 && bit_j == 1) gate.imag[i][j] = -sin_half;
                else if(bit_i == 1 && bit_j == 0) gate.imag[i][j] = -sin_half;
                else if(bit_i == 1 && bit_j == 1) gate.real[i][j] = cos_half;
            }
        }
    }
}

Este código constrói a matriz da porta de rotação que atua sobre um qubit específico. O ângulo de rotação está diretamente ligado aos dados de mercado: quanto mais forte o movimento do preço, maior o ângulo de rotação. Isso cria uma conexão direta entre a dinâmica de mercado e o estado quântico do sistema.

O algoritmo usa operações bit a bit para determinar quais elementos da matriz devem ser definidos. Para cada par de estados |i⟩ e |j⟩, verificamos se a rotação de um qubit específico afeta a transição entre eles. Se todos os outros qubits estiverem no mesmo estado, a rotação atua apenas sobre o qubit-alvo.

As portas de fase controlada criam emaranhamento quântico entre os qubits:

static void CreateCPhaseGate(int control_qubit, int target_qubit, double phase, ComplexMatrix &gate) {
    gate.Initialize(STATE_DIM);
    
    for(int i = 0; i < STATE_DIM; i++) {
        int control_bit = (i >> control_qubit) & 1;
        int target_bit = (i >> target_qubit) & 1;
        
        if(control_bit == 1 && target_bit == 1) {
            gate.real[i][i] = MathCos(phase);
            gate.imag[i][i] = MathSin(phase);
        }
    }
}

A fase φ depende das correlações entre os atributos de mercado. Quando dois fatores de mercado estão fortemente correlacionados, por exemplo, preço e volume, os qubits correspondentes ficam emaranhados. Isso permite que o sistema leve em conta relações complexas nos dados.

A porta de fase controlada funciona somente quando ambos os qubits estão no estado |1⟩. Nesse caso, ela adiciona o multiplicador de fase e^(iφ) à amplitude do estado correspondente. Isso não altera as probabilidades de medição dos qubits individuais, mas cria correlações quânticas entre eles.

As portas de Hadamard colocam os qubits em estados de superposição:

static void CreateHadamardGate(int qubit, ComplexMatrix &gate) {
    gate.Initialize(STATE_DIM);
    double inv_sqrt2 = 1.0 / MathSqrt(2.0);
    
    for(int i = 0; i < STATE_DIM; i++) {
        for(int j = 0; j < STATE_DIM; j++) {
            // ... Hadamard matrix construction code
            if(bit_i == 0 && bit_j == 0) gate.real[i][j] = inv_sqrt2;
            else if(bit_i == 0 && bit_j == 1) gate.real[i][j] = inv_sqrt2;
            else if(bit_i == 1 && bit_j == 0) gate.real[i][j] = inv_sqrt2;
            else if(bit_i == 1 && bit_j == 1) gate.real[i][j] = -inv_sqrt2;
        }
    }
}

A porta de Hadamard cria uma superposição uniforme dos estados |0⟩ e |1⟩. No contexto de negociação, isso significa que o sistema pode considerar simultaneamente cenários de alta e de queda do mercado até o momento da "medição" final, isto é, a tomada da decisão de negociação.


Construção dinâmica de circuitos quânticos

A principal inovação é a construção dinâmica do circuito quântico com base nos dados de mercado recebidos. Cada atributo de mercado influencia os parâmetros das portas quânticas, definindo um processamento quântico próprio para cada situação de mercado.

void BuildQuantumCircuit(const vector &features) {
    num_gates = 0;
    quantum_state.Initialize(STATE_DIM);
    
    // Rotation gates based on market features
    for(int qubit = 0; qubit < NUM_QUBITS && num_gates < MAX_GATES; qubit++) {
        if(qubit < features.Size()) {
            double angle = features[qubit] * M_PI / 2.0;
            CMatrixOps::CreateRotationGate(qubit, angle, circuit_gates[num_gates]);
            num_gates++;
        }
    }
    
    // Entangling gates between pairs of qubits
    for(int i = 0; i < NUM_QUBITS - 1 && num_gates < MAX_GATES; i++) {
        for(int j = i + 1; j < NUM_QUBITS && num_gates < MAX_GATES; j++) {
            double correlation = CalculateFeatureCorrelation(features[i], features[j]);
            double phase = correlation * features[i] * features[j] * M_PI * entanglement_factor;
            
            if(MathAbs(phase) > MIN_PHASE_THRESHOLD) {
                CMatrixOps::CreateCPhaseGate(i, j, phase, circuit_gates[num_gates]);
                num_gates++;
            }
        }
    }
    
    // Adaptive superposition gates
    double market_uncertainty = CalculateMarketUncertainty(features);
    for(int qubit = 0; qubit < NUM_QUBITS && num_gates < MAX_GATES; qubit++) {
        double superposition_probability = coherence * market_uncertainty;
        if(GetRandomDouble() < superposition_probability) {
            CMatrixOps::CreateHadamardGate(qubit, circuit_gates[num_gates]);
            num_gates++;
        }
    }
}

Este algoritmo mostra como os dados de mercado determinam diretamente a arquitetura do circuito quântico. Diferentemente das redes neurais estáticas, nosso sistema adapta sua estrutura interna a cada situação de mercado. Uma correlação elevada entre os atributos gera mais estados emaranhados, enquanto a incerteza do mercado aumenta a probabilidade de operações de superposição.

A particularidade da nossa abordagem é que não aplicamos simplesmente uma sequência fixa de portas. Em vez disso, o circuito é construído de modo adaptativo: se a correlação entre os atributos for fraca, as portas de emaranhamento correspondentes não são criadas. Se a incerteza do mercado for baixa, as portas de superposição serão aplicadas raramente. Isso permite ao sistema economizar recursos computacionais e se concentrar nos efeitos quânticos mais relevantes.


Evolução quântica e decoerência

Após a construção do circuito, o sistema passa para a evolução quântica, isto é, a aplicação sequencial de operadores unitários ao estado inicial |000⟩:

void ExecuteQuantumCircuit() {
    // Initialize the state
    double state[STATE_DIM];
    ArrayInitialize(state, 0.0);
    state[0] = 1.0;  // Initial state |000⟩
    
    // Apply each gate in the circuit
    for(int gate_idx = 0; gate_idx < num_gates; gate_idx++) {
        ApplyGateToState(state, gate_idx);
    }
    
    // Normalize the state
    double norm = 0.0;
    for(int i = 0; i < STATE_DIM; i++) {
        norm += state[i] * state[i];
    }
    
    norm = MathSqrt(norm);
    if(norm > MATRIX_EPSILON) {
        for(int i = 0; i < STATE_DIM; i++) {
            quantum_state.real[i] = state[i] / norm;
            quantum_state.imag[i] = 0.0;
        }
    }
}

É fundamental que a ordem de aplicação dos operadores seja relevante, pois as portas quânticas não comutam. Isso significa que a sequência de eventos de mercado influencia o estado final do sistema, assim como acontece nos mercados reais, em que a ordem de chegada das informações influencia os preços.


Modelagem da decoerência de mercado

Em sistemas financeiros reais, os efeitos quânticos existem em um ambiente com ruído. O fluxo constante de notícias, as reações emocionais dos participantes e os eventos macroeconômicos geram decoerência:

void ApplyEnvironmentalDecoherence(ComplexVector &state, int evolution_step) {
    // Adaptive assessment of market noise
    double market_volatility = CalculateRecentVolatility();
    double information_flow = CalculateInformationIntensity();
    double decoherence_strength = base_decoherence_rate * 
                                 (1.0 + 0.5 * market_volatility + 0.3 * information_flow);
    
    // Phase decoherence (loss of quantum interference)
    for(int i = 0; i < STATE_DIM; i++) {
        if(state.GetProbability(i) > DECOHERENCE_THRESHOLD) {
            double phase_noise = GenerateGaussianNoise(0.0, decoherence_strength);
            
            // Rotation in the complex plane
            double cos_phase = MathCos(phase_noise);
            double sin_phase = MathSin(phase_noise);
            
            double new_real = state.real[i] * cos_phase - state.imag[i] * sin_phase;
            double new_imag = state.real[i] * sin_phase + state.imag[i] * cos_phase;
            
            state.real[i] = new_real;
            state.imag[i] = new_imag;
        }
    }
    
    state.Normalize();
}

Este código modela uma decoerência realista, cuja intensidade depende das condições de mercado. Em períodos tranquilos, os efeitos quânticos são preservados por mais tempo, enquanto, durante turbulências de mercado, o sistema passa rapidamente para um comportamento clássico.

A decoerência não é apenas um artefato técnico, mas um componente importante do modelo. Ela reflete o fato de que os mercados financeiros não conseguem manter a coerência quântica indefinidamente. Novas informações, decisões dos traders e mudanças de sentimento fazem o papel de "medições" que destroem as superposições quânticas.


Medições quânticas e extração de informações

A extração de informações do estado quântico exige protocolos especializados de medição:

vector MeasureQuantumState() {
    vector measurements = vector::Zeros(NUM_QUBITS);
    
    // Compute the probability of measuring each qubit
    for(int qubit = 0; qubit < NUM_QUBITS; qubit++) {
        double prob_1 = 0.0;
        
        for(int i = 0; i < STATE_DIM; i++) {
            if((i >> qubit) & 1) {  // If the qubit is in state |1⟩
                prob_1 += quantum_state.GetProbability(i);
            }
        }
        
        measurements[qubit] = prob_1;  // Probability to measure |1⟩
    }
    
    return measurements;
}

As medições Z representam sinais clássicos de negociação, isto é, a probabilidade de alta ou queda do preço. As medições X revelam efeitos de superposição, indicando momentos de máxima incerteza de mercado. As correlações de dois qubits expõem interdependências ocultas entre diferentes fatores de mercado.

Uma característica importante da nossa implementação é que realizamos medições não destrutivas. Diferentemente dos sistemas quânticos reais, nos quais a medição colapsa a função de onda, extraímos informações estatísticas sem perturbar o estado quântico. Isso permite realizar múltiplas medições e obter um conjunto rico de informações sobre o sistema.


Arquitetura híbrida: o melhor dos dois mundos

A principal conquista é a integração elegante do processamento quântico com métodos clássicos. O processador quântico complementa e reforça a análise tradicional:

double Predict(const vector &input_features, double &confidence, bool is_training = false) {
    // Apply the quantum processor to the input data
    matrix input_matrix(1, input_features.Size());
    input_matrix.Row(input_features, 0);
    
    // Create a base context for the quantum processor
    matrix basic_context = matrix::Zeros(1, input_features.Size());
    for(ulong i = 0; i < input_features.Size(); i++) {
        basic_context[0][i] = MathSin(input_features[i] * M_PI / 4.0);
    }
    
    // Apply quantum effects
    matrix quantum_enhanced_input = input_quantum_proc.ApplyQuantumEffects(input_matrix, basic_context);
    vector quantum_features = quantum_enhanced_input.Row(0);
    
    // Market state classification with quantum-enhanced data
    double price_change = quantum_features[0];
    double volatility = quantum_features[1];
    double volume_ratio = quantum_features[2];
    int state = markov_chain.ClassifyMarketState(price_change, volatility, volume_ratio);

    // Get state embedding
    matrix state_embedding = markov_chain.Forward(state);
    
    // Further processing via classical components...
    matrix ssm_output = ssm.ProcessSequence(quantum_input_matrix);
    matrix contextualized = context_analyzer.ProcessWithContext(combined);
    
    // Transformer layers with quantum attention
    matrix hidden = contextualized;
    for(int i = 0; i < TRANSFORMER_LAYERS; i++) {
        hidden = transformer_layers[i].Forward(hidden, is_training);
    }
    
    // Final forecast
    double prediction = Sigmoid(output_result[0][0] + output_bias[0]);
    confidence = meta_model.Forward(quantum_features, prediction, error_metrics);
    
    return prediction;
}

Este código mostra como o processamento quântico é integrado ao pipeline do sistema. Primeiro, os dados originais passam pelo processador quântico, que identifica correlações ocultas e cria uma representação enriquecida. Em seguida, os dados aprimorados quanticamente são processados pelos componentes clássicos do sistema.

Um detalhe importante da arquitetura é que não substituímos os métodos clássicos por métodos quânticos, mas criamos uma simbiose. O processador quântico funciona como um "pré-processador", enriquecendo os dados de entrada com informações adicionais sobre correlações ocultas e dependências não lineares. Depois, os componentes clássicos usam essas informações enriquecidas para tomar decisões mais precisas.

A integração dos efeitos quânticos aos mecanismos de atenção dos transformers merece atenção especial:

matrix Forward(const matrix &input_data, bool is_training) {
    last_input_data = input_data;
    matrix Q = input_data.MatMul(W_q);
    matrix K = input_data.MatMul(W_k);
    matrix V = input_data.MatMul(W_v);
    
    // Apply dropout in training mode
    if (is_training) {
        Q = ApplyDropoutMask(Q, dropout_mask_q, 1.0 / (1.0 - DROPOUT_RATE));
        K = ApplyDropoutMask(K, dropout_mask_k, 1.0 / (1.0 - DROPOUT_RATE));
        V = ApplyDropoutMask(V, dropout_mask_v, 1.0 / (1.0 - DROPOUT_RATE));
    }
    
    // KEY INNOVATION: Quantum processing of Query and Key
    Q = quantum_proc.ApplyQuantumEffects(Q, input_data);
    K = quantum_proc.ApplyQuantumEffects(K, input_data);
    
    // Calculate attention scores with quantum correlations
    matrix scores = Q.MatMul(K.Transpose()) / MathSqrt((double)d_model);
    
    // Use softmax to obtain attention weights
    matrix scores_softmax = matrix::Zeros(scores.Rows(), scores.Cols());
    for(ulong i = 0; i < scores.Rows(); i++) {
        vector row = scores.Row(i);
        double max_val = row.Max();
        for(ulong j = 0; j < row.Size(); j++)
            row[j] = MathExp(row[j] - max_val);
        double sum = row.Sum();
        if (sum == 0.0) sum = 1e-9;
        row = row / sum;
        scores_softmax.Row(row, i);
    }
    
    matrix attention_output = scores_softmax.MatMul(V);
    return attention_output.MatMul(W_o);
}

O processamento quântico das matrizes Query e Key permite que o mecanismo de atenção leve em conta não apenas relações lineares entre atributos, mas também suas correlações quânticas. Isso é especialmente eficaz para identificar sinais fracos em dados financeiros com ruído.

Todo o sistema foi implementado como um EA para MetaTrader 5, totalmente escrito em MQL5 e sem dependências externas. A arquitetura inclui os seguintes componentes principais:

struct QuantumContextAnalyzer {
    matrix short_memory, medium_memory, long_memory, episodic_memory, pattern_memory;
    
    matrix ProcessWithContext(const matrix &input_data) {
        // Adaptive weighting of memory types
        double input_volatility = CalculateVolatility(input_data);
        double short_weight = 0.4 + 0.4 * input_volatility;
        double medium_weight = 0.3 + 0.2 * (1.0 - input_volatility);
        double long_weight = 0.2 + 0.3 * (1.0 - input_volatility);
        
        // Apply quantum effects to contextual information
        matrix quantum_result = quantum_proc.ApplyQuantumEffects(input_matrix, context_matrix);
        
        return quantum_result;
    }
};

O sistema seleciona dinamicamente o tipo de memória mais relevante de acordo com as condições de mercado. Em períodos de alta volatilidade, a memória de curto prazo recebe peso maior; em períodos tranquilos, a memória de longo prazo.

double Forward(const vector &original_features, double prediction, const vector &error_metrics) {
    vector meta_input = vector::Zeros(original_features.Size() + 1 + error_metrics.Size());
    
    // Combine the original features, forecast, and error metrics
    for(ulong i = 0; i < original_features.Size(); i++)
        meta_input[i] = original_features[i];
    meta_input[original_features.Size()] = prediction;
    for(ulong i = 0; i < error_metrics.Size(); i++)
        meta_input[original_features.Size() + 1 + i] = error_metrics[i];
    
    // Confidence prediction via a two-layer network
    matrix hidden = input_matrix.MatMul(meta_weights);
    for(ulong i = 0; i < hidden.Cols(); i++) 
        hidden[0][i] = Tanh(hidden[0][i] + meta_bias[i]);
    
    matrix output_result = hidden.MatMul(output_weights);
    return Sigmoid(output_result[0][0] + output_bias_meta[0]);
}

O metamodelo analisa não apenas a previsão atual, mas também o histórico de erros do sistema, avaliando de forma adaptativa a confiança em cada caso específico.

Foi dada atenção especial à integração com o sistema de gestão de riscos para atuação em prop firms. As prop firms modernas impõem requisitos rígidos de drawdown máximo, limites diários de perdas e metas de lucro.


Resultados da negociação real: a teoria se confronta com a realidade

O teste mais importante de qualquer sistema de negociação está nos resultados em condições reais de mercado. Ao longo de 2024-2025, o sistema quântico apresentou:

Resultados financeiros:

  • Rentabilidade anual: +13,3%
  • Drawdown máximo: 2,39%
  • Win rate: 87%
  • Índice de Sharpe: 2,48
  • Tempo médio de permanência na posição: 4,2 horas

Adaptabilidade do sistema: o mais importante é que o sistema demonstrou resultados estáveis em diferentes condições de mercado. Durante períodos de alta volatilidade, ele reduzia automaticamente o tamanho das posições e se tornava mais conservador. Em períodos tranquilos, ao contrário, aumentava a agressividade nas operações, usando efeitos quânticos para buscar sinais fracos, mas estáveis.

Apesar dos resultados impressionantes, o sistema ainda não atingiu todas as metas estabelecidas:

Limitações atuais:

  • O índice de Sharpe de 2,48 ainda está abaixo da meta de 3,5+
  • A complexidade computacional do simulador quântico exige recursos significativos
  • O ajuste dos hiperparâmetros continua sendo uma tarefa complexa
  • O sistema exige uma calibração cuidadosa para cada instrumento de negociação



Conclusão

O futuro quântico abre novas possibilidades na negociação algorítmica. A transição para qubits virtuais proporcionou uma vantagem significativa em relação aos métodos clássicos, melhorando as previsões e os resultados. Nosso sistema, baseado nos princípios da mecânica quântica, lida naturalmente com a incerteza do mercado e com correlações complexas, algo que continua sendo uma tarefa difícil para os modelos clássicos. A criação do primeiro simulador quântico completo, a arquitetura adaptativa e a integração de métodos quânticos e clássicos em um sistema híbrido evidenciam nossos avanços.

No futuro, vamos nos concentrar na otimização do sistema e em atingir a meta de um índice de Sharpe acima de 3,5, desenvolvendo o ecossistema de negociação quântica. A implementação completa está disponível como EA para MetaTrader 5, pronta para uso em tempo real.

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

Últimos Comentários | Ir para discussão (4)
Anatoli Kazharski
Anatoli Kazharski | 1 ago. 2025 em 11:11

@Yevgeniy Koshtenko

Há uma duplicata do PropRiskManagerLoss.mqh no arquivo:

O arquivo HybridQuantumNeuralV3.mqh parece estar faltando para que o QuantumProp_EA_Lite.mq5 seja compilado sem erros.

Yevgeniy Koshtenko
Yevgeniy Koshtenko | 1 ago. 2025 em 12:05
Anatoli Kazharski #:

@Yevgeniy Koshtenko

Há uma duplicata do PropRiskManagerLoss.mqh no arquivo:

O arquivo HybridQuantumNeuralV3.mqh parece estar faltando para que o QuantumProp_EA_Lite.mq5 seja compilado sem erros.

Muito obrigado! Acabei de ver isso e o enviei para verificação com o arquivo real)

Sergei Goncharov
Sergei Goncharov | 2 ago. 2025 em 09:20

Eugene, esse parece ser um bom produto profissional. Nós o testaremos e daremos feedback. Você pode me dizer se não há como fazer com que esse modelo de treinamento use GPU para treinamento, como, por exemplo, no caso do modelo LSTM em Python? Talvez você já tenha estudado essa questão, portanto, não precisa perder seu tempo. Caso contrário, podemos pensar nisso juntos, pois o desempenho do hardware nesse modelo é importante, e com razão. Um modelo de boa qualidade com análises profundas deve exigir muito do hardware

sindicato
sindicato | 11 set. 2025 em 14:31

Bom dia.

Não consegui repetir o teste descrito no artigo, nem mesmo plotar um gráfico semelhante.

Você pode nos informar os parâmetros e o símbolo?

Obrigado.

Componentes View e Controller para tabelas no paradigma MVC em MQL5: dimensões ajustáveis dos elementos Componentes View e Controller para tabelas no paradigma MVC em MQL5: dimensões ajustáveis dos elementos
No artigo, adicionaremos a funcionalidade de redimensionamento dos elementos de controle por meio do arrasto das bordas e dos cantos do elemento com o mouse.
Redes neurais em trading: Desvendando os componentes estruturais (Encoder) Redes neurais em trading: Desvendando os componentes estruturais (Encoder)
Propomos dar continuação à implementação do framework SCNN, que combina flexibilidade e interpretabilidade, permitindo isolar com precisão os componentes estruturais da série temporal. O artigo detalha os mecanismos de normalização adaptativa e de atenção, o que confere ao modelo maior robustez diante de condições de mercado em constante mudança.
Redes neurais em trading: Desvendando os componentes estruturais (Final) Redes neurais em trading: Desvendando os componentes estruturais (Final)
O artigo apresenta em detalhes a arquitetura SCNN e uma das opções de implementação com recursos do MQL5. Mostraremos como a decomposição de séries temporais se combina com métodos de redes neurais e mecanismos de atenção.
Construindo Expert Advisors Autootimizáveis em MQL5 (Parte 6): Regras de Trading Autoajustáveis (II) Construindo Expert Advisors Autootimizáveis em MQL5 (Parte 6): Regras de Trading Autoajustáveis (II)
Este artigo explora a otimização dos níveis e períodos do RSI para obter melhores sinais de trading. Introduzimos métodos para estimar valores ótimos do RSI e automatizar a seleção de períodos usando busca em grade e modelos estatísticos. Por fim, implementamos a solução em MQL5 enquanto utilizamos Python para análise. Nossa abordagem busca ser pragmática e direta para ajudá-lo a resolver problemas potencialmente complicados, com simplicidade.