English Русский 中文 Español Português
preview
Entwicklung eines neuronalen Trading-Roboters auf Basis von Mamba und Selective State Space Models

Entwicklung eines neuronalen Trading-Roboters auf Basis von Mamba und Selective State Space Models

MetaTrader 5Handelssysteme |
36 3
Yevgeniy Koshtenko
Yevgeniy Koshtenko

Der moderne algorithmische Handel steht vor einem grundlegenden Problem. Klassische neuronale Netzwerkarchitekturen, die auf dem Attention-Mechanismus basieren, weisen eine quadratische Rechenkomplexität O(N²) auf. Dies bedeutet, dass eine Verdoppelung der Länge der Zeitreihe zu einer Vervierfachung der Verarbeitungszeit führt. Für einen Trader, der Tausende Kursbalken (Bars) mit historischen Daten analysiert, wird diese Ineffizienz zu einer kritischen Einschränkung.

Stellen Sie sich folgende Situation vor: Ihr Handelssystem muss die letzten 2048 Bars analysieren, um zu entscheiden, ob eine Position eröffnet werden soll. Die Transformer-Architektur würde dafür etwa 4 Millionen Attention-Operationen erfordern, und die Verarbeitung nähme mehrere Sekunden in Anspruch. Im Hochfrequenzhandel, wo Millisekunden über den Ausgang eines Handels entscheiden, kommt eine solche Verzögerung einem Strategieversagen gleich.

Darüber hinaus sind moderne Märkte durch zunehmende Komplexität und Vernetzung gekennzeichnet. Eine erfolgreiche Prognose erfordert die Analyse immer längerer historischer Zeiträume unter Berücksichtigung von Korrelationen zwischen verschiedenen Vermögenswerten und Zeitskalen. Herkömmliche Architekturen werden dieser Herausforderung nicht gerecht und beschränken Trader auf Kontextfenster von 512-1024 Datenpunkten.


Trends bei der Zeitreihenprognose 2024-2025: Mamba

Im Dezember 2023 stellten Forscher der Carnegie Mellon University Mamba vor – eine neue Architektur zur Verarbeitung sequenzieller Daten. Sie basiert auf Selective State Space Models (SSM) und kombiniert hohe Genauigkeit mit linearer Rechenkomplexität O(N), was sie von Transformer-Modellen unterscheidet.

Im Zeitraum 2024–2025 verlagert sich die Zeitreihenprognose von Attention-basierten Architekturen hin zu Zustandsraummodellen. Der Grund dafür ist die Notwendigkeit, immer längere und komplexere Sequenzen zu analysieren, insbesondere im Finanzwesen, wo mehrjährige Zyklen und Marktbeziehungen wichtig sind.

Mamba ist das Ergebnis von Entwicklungen im Bereich der rekurrenten Architekturen. Ausgehend von einfachen RNNs, über LSTMs und GRUs bis hin zur Transformer-Revolution und Attention-Mechanismen kam die Forschungsgemeinschaft zu der Erkenntnis, dass ein grundlegend neuer Ansatz erforderlich war. Die Zustandsraummodelle, die Mamba zugrunde liegen, kombinieren die besten Eigenschaften aller bisherigen Architekturen: die Effizienz von RNNs, das Langzeitgedächtnis von LSTMs und die Parallelisierbarkeit von Transformern.

Diese Entwicklung wird durch den wachsenden Bedarf angetrieben, makroökonomische Zyklen und langfristige Marktmuster zu analysieren. Herkömmliche Modelle, die auf Kontextfenster von einigen Hundert Zeitpunkten begrenzt sind, haben sich als unfähig erwiesen, saisonale Effekte, mehrjährige Zyklen und Intermarkt-Korrelationen zu erfassen. Mamba eröffnet mit seiner theoretisch unbegrenzten Kontextlänge die Möglichkeit, zehnjährige historische Zeiträume zu analysieren und dabei die Recheneffizienz beizubehalten.

Die zentrale Idee ist das „selektive Gedächtnis“. Das Modell ist in der Lage, bedeutende Ereignisse (Konjunkturdaten, Krisen, technologische Durchbrüche) hervorzuheben und Rauschen zu ignorieren. Dies ist besonders wertvoll für die Analyse von Finanzdaten, bei denen sich Phasen der Ruhe mit plötzlichen Veränderungen abwechseln. Anstelle des Attention-Mechanismus verwendet Mamba einen kompakten verdeckten Zustand, der nur aktualisiert wird, wenn wichtige Informationen eintreffen. Dieser Ansatz macht Modelle bei langen Zeitreihen schneller und präziser.

// State Space Model fundamental equations
h(t+1) = A·h(t) + B·x(t)    // Update state
y(t) = C·h(t) + D·x(t)      // Output signal

Hier repräsentiert h(t) den verdeckten Zustand des Systems zum Zeitpunkt t, x(t) ist das Eingangssignal (z. B. der Kurs eines Finanzinstruments) und die Matrizen A, B, C, D definieren die Dynamik des Systems.

Ein wichtiger Unterschied zwischen Mamba und seinen Vorgängern besteht darin, dass diese Matrizen nicht statisch sind – sie passen sich je nach Eingabedaten an und gewährleisten so die Selektivität der Informationsverarbeitung.


Selektivität: der Schlüssel zur Effizienz

Die wichtigste Neuerung von Mamba ist die Selektivität. Im Gegensatz zu herkömmlichen Zustandsraummodellen, die alle Eingabedaten gleich behandelten, kann Mamba Wichtiges von Unwichtigem trennen. Dies hilft dabei, das „Vergessen“ wichtiger Ereignisse zu vermeiden, und verhindert, dass sich Rauschen in einem verdeckten Zustand ansammelt.

Im Selektivitätsmechanismus werden die Systemparameter B und C zu Funktionen der Eingabedaten:

void ApplySelectiveSSM(Matrix &input_data, Matrix &output) {
    // Dynamic adaptation of parameters
    for(int i = 0; i < input_data.cols; i++) {
        double input_val = input_data.Get(0, i);
        double selection_weight = Sigmoid(input_val);
        
        // Selective updating of parameters
        adaptive_B.Set(i, j, B.Get(i, j) * selection_weight);
        adaptive_C.Set(j, i, C.Get(j, i) * selection_weight);
    }
}

Dieser Ansatz ermöglicht es dem Modell, „unwichtige“ Informationen (zum Beispiel kleine Kursschwankungen in Phasen geringer Volatilität) zu „vergessen“ und sich an kritische Ereignisse (zum Beispiel starke Kursbewegungen oder Volumenanstiege) zu „erinnern“.


Praktische Umsetzung: Von der Theorie zum Code

Die Implementierung der Mamba-Architektur in MQL5 erfordert eine sorgfältige Gestaltung der zugrunde liegenden Datenstrukturen. Das zentrale Element ist die Matrix-Struktur, die einen sicheren Umgang mit mehrdimensionalen Arrays ermöglicht.

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; 
    }
};

Die Architektur des Mamba-Blocks besteht aus mehreren Komponenten: einer lokalen Faltung zur Erfassung kurzfristiger Abhängigkeiten, einem selektiven SSM für das Langzeitgedächtnis und einem Gating-Mechanismus zur Steuerung des Informationsflusses:

struct MambaBlock {
    Matrix A, B, C, D;           // SSM parameters
    Matrix conv_weights;         // 1D convolution
    Matrix gate_weights;         // Gating
    Matrix state;               // Hidden 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++) {
            // Local processing via convolution
            Matrix conv_out;
            conv_out.Init(1, input_data.cols);
            ApplyConvolution(input_data, t, conv_out);
            
            // Selective processing via SSM
            Matrix gated;
            gated.Init(1, input_data.cols);
            ApplySelectiveSSM(conv_out, gated);
            
            // Residual connection for learning stability
            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);
            }
        }
    }
};

Die Initialisierung der A-Matrix erfordert besondere Aufmerksamkeit. Die Forschung zeigt, dass die Verwendung der HiPPO-Initialisierung (High-order Polynomial Projection Operators) optimale Eigenschaften für das Speicherverhalten des Systems bietet:

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);  // Diagonal stabilization
            } else if(j < i) {
                A.Set(i, j, 0.1 / (i - j + 1));  // HiPPO weights
            }
        }
    }
}

Eine der wichtigsten Innovationen bei der Zeitreihenverarbeitung war das Konzept des Patching – die Unterteilung einer langen Sequenz in kurze Segmente (Patches), die als einzelne Token verarbeitet werden. Diese Idee, die aus der Computer Vision übernommen und in der Arbeit von PatchTST für Zeitreihen angepasst wurde, reduziert die Rechenlast drastisch.

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;
                
                // Handle a patch of 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);
                    }
                }
                
                // Positional encoding to preserve temporal information
                sum += position_embedding.Get(p, h);
                patches.Set(p, h, sum);
            }
        }
    }
};

Die Anwendung von Patching im Kontext von Finanzzeitreihen ist besonders effektiv. Ein Patch von 16 Zeitpunkten könnte einen 4-Stunden-Zeitraum auf einem 15-Minuten-Chart oder einen Tageszeitraum auf einem Stunden-Chart darstellen. Dies ermöglicht es dem Modell, mit semantisch bedeutsamen Zeiteinheiten anstatt mit einzelnen Kurspunkten zu arbeiten.

Das Training der Mamba-Architektur erfordert den Einsatz moderner Optimierungsalgorithmen. AdamW (Adam mit Weight Decay) ist eine verbesserte Version des klassischen Adam, die das Problem der fehlerhaften Regularisierung korrigiert:

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);
            
            // Update moments
            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);
            
            // Bias correction
            double m_hat = m / (1 - MathPow(beta1, step_count));
            double v_hat = v / (1 - MathPow(beta2, step_count));
            
            // Update with weight decay
            double update = effective_lr * (m_hat / (MathSqrt(v_hat) + epsilon) + weight_decay * weight);
            output_projection.Set(i, j, weight - update);
        }
    }
}


Architektonische Innovation im Detail

Ein tiefes Verständnis von Mamba erfordert die Betrachtung seiner architektonischen Komponenten auf der Ebene mathematischer Operationen. Der Selektivitätsmechanismus stellt einen grundlegenden Unterschied zu traditionellen Ansätzen dar. Bei klassischen Zustandsraummodellen bleiben die Parameter B und C über die Zeit konstant, was dazu führt, dass das Modell nicht in der Lage ist, sich an veränderte Eigenschaften des Eingabestroms anzupassen.

Der Selektivitätsmechanismus in Mamba wird durch Projektionsfunktionen implementiert, die das Eingangssignal in Systemparameter transformieren:

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++) {
        // Projection of the input signal into the parameter space
        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);
        
        // Adaptive scaling of parameters
        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;
}

Dieser Ansatz ermöglicht es dem Modell, seine Empfindlichkeit gegenüber verschiedenen Arten von Eingangsinformationen dynamisch anzupassen. Im Kontext der Finanzmärkte bedeutet dies die Fähigkeit, den Fokus in Phasen hoher Volatilität zu erhöhen und ihn während der Konsolidierung zu verringern.


Hardwareorientierte Optimierungen

Einer der entscheidenden Faktoren für den Erfolg von Mamba ist seine Optimierung für moderne Rechenarchitekturen. Herkömmliche SSMs erfordern eine sequentielle Verarbeitung von Zeitschritten, wodurch sie für paralleles Rechnen schlecht geeignet sind. Mamba löst dieses Problem durch einen parallelen Scan-Algorithmus, der eine effiziente Nutzung von GPU-Architekturen ermöglicht.

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);
    
    // Phase 1: Upward scan
    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) {
            // Combine states using an associative operation
            CombineStates(cumulative_states, i - step_size, i);
        }
    }
    
    // Phase 2: Downward propagation
    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) {
            // Propagation of accumulated states
            PropagateStates(cumulative_states, i - step_size, i);
        }
    }
    
    // Generate output sequence
    GenerateOutput(cumulative_states, output_sequence);
}

Diese Implementierung ermöglicht das Erreichen einer Zeitkomplexität von O(log N) für die Verarbeitung einer Sequenz der Länge N unter Verwendung von N Prozessoren, was die Skalierbarkeit im Vergleich zum sequentiellen O(N)-Algorithmus drastisch verbessert.


Fortgeschrittene Initialisierungstechniken

Die Initialisierung von SSM-Parametern spielt eine entscheidende Rolle bei der Gewährleistung der Stabilität des Lernens und der Qualität des Langzeitgedächtnisses. Forschung zeigt, dass die Verwendung der HiPPO-Initialisierung (High-order Polynomial Projection Operators) optimale Approximationseigenschaften für stetige Funktionen bietet:

void InitializeHiPPOAdvanced() {
    // Calculate the optimal HiPPO coefficients
    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) {
                // Coefficients of Legendre polynomials
                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));
            }
        }
    }
    
    // Discretization for digital processing
    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);
            // Tustin transform for discretization
            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;
}

Diese Initialisierung verleiht dem Modell die Fähigkeit, Funktionen mit Langzeitabhängigkeiten effektiv zu approximieren, was für die Analyse von Finanzzeitreihen mit ihren komplexen periodischen und Trendkomponenten entscheidend ist.


Integration mit Multiskalenanalyse

Finanzmärkte sind durch das Vorhandensein von Strukturen auf verschiedenen Zeitskalen gekennzeichnet. Tägliche Trends können wöchentlichen Zyklen widersprechen, die wiederum in monatliche und vierteljährliche Muster eingebettet sind. Die Mamba-Architektur bietet einen eleganten Weg, dieses Problem durch Multiskalenverarbeitung anzugehen:

struct MultiScaleMambaProcessor {
    MambaBlock scales[4];  // M5, M15, H1, H4
    Matrix fusion_weights;
    
    void Init() {
        // Different parameters for different scales
        for(int i = 0; i < 4; i++) {
            scales[i].Init();
            // Adapt the state size to the time scale
            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++) {
            // Resample data for the appropriate timeframe
            double resampled_data[];
            ResampleData(price_data, timeframes[scale], resampled_data);
            
            // Process using the corresponding Mamba block
            Matrix scale_input;
            PrepareScaleInput(resampled_data, scale_input);
            scales[scale].Forward(scale_input, scale_outputs[scale]);
        }
        
        // Merge information from different scales
        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);
            }
        }
    }
};

Das Training von Mamba-Modellen erfordert spezialisierte Ansätze, die an die spezifischen Merkmale der SSM-Architektur angepasst sind. Eines der Hauptprobleme ist die Stabilisierung von Gradienten bei rekurrenten Berechnungen:

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 with gradient tracking
            Matrix intermediate_states[NUM_LAYERS];
            double prediction = ForwardWithGradientTracing(training_data, intermediate_states);
            
            double loss = ComputeLoss(prediction, targets[batch]);
            epoch_loss += loss;
            
            // Calculate gradients with regularization
            Matrix gradients[NUM_LAYERS];
            ComputeRegularizedGradients(loss, intermediate_states, gradients);
            
            // Check the stability of gradients
            double grad_norm = ComputeGradientNorm(gradients);
            if(grad_norm > gradient_norm_threshold) {
                // Scale gradients to prevent explosion
                ScaleGradients(gradients, gradient_norm_threshold / grad_norm);
            }
            
            // Update parameters with exponential smoothing
            UpdateParametersSmoothed(gradients, stability_factor);
            batch_count++;
        }
        
        double avg_loss = epoch_loss / batch_count;
        
        // Adaptive learning rate correction
        if(epoch > 0 && avg_loss > previous_loss * 1.1) {
            learning_rate *= 0.8;  // Decrease in case of instability
        } else if(avg_loss < previous_loss * 0.95) {
            learning_rate *= 1.05; // Increase with stable improvement
        }
        
        previous_loss = avg_loss;
        
        Print("Epoch ", epoch, " | Loss: ", DoubleToString(avg_loss, 6), 
              " | LR: ", DoubleToString(learning_rate, 6));
    }
}

Die Implementierung der Mamba-Architektur in ein für den Praxiseinsatz ausgelegtes Handelssystem erfordert die Berücksichtigung vieler praktischer Faktoren. Ein Leistungsüberwachungssystem sollte nicht nur die Genauigkeit der Vorhersagen verfolgen, sondern auch die Stabilität der internen Zustände des Modells:

struct MambaMonitoringSystem {
    double state_stability_threshold;
    double prediction_variance_limit;
    int monitoring_window;
    
    bool MonitorSystemHealth() {
        // Check the stability of internal states
        double state_variance = ComputeStateVariance();
        if(state_variance > state_stability_threshold) {
            Print("WARNING: High state variance detected: ", state_variance);
            return false;
        }
        
        // Analysis of the consistency of predictions
        double prediction_variance = ComputePredictionVariance();
        if(prediction_variance > prediction_variance_limit) {
            Print("WARNING: Prediction instability: ", prediction_variance);
            return false;
        }
        
        // Check gradients for anomalies
        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;
            
            // Calculate the average
            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);
            
            // Calculating the variance
            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;
    }
};


Zukünftige Forschungsrichtungen

Die Entwicklung der Mamba-Architektur eröffnet vielfältige Ansatzpunkte für weitere Forschung. Die Integration mit Reinforcement-Learning-Algorithmen könnte die Schaffung adaptiver Handelsagenten ermöglichen, die unter sich verändernden Marktbedingungen selbstständig lernen können.

Die Erforschung von Few-Shot-Learning unter Verwendung von Mamba kann zu Modellen führen, die sich mit minimalen Trainingsdaten schnell an neue Finanzinstrumente anpassen können. Dies ist besonders relevant für Schwellenländer und neue Kryptowährungen.

Die Kombination von Mamba mit Meta-Learning-Techniken eröffnet die Möglichkeit, universelle Handelssysteme zu schaffen, die sich automatisch an verschiedene Marktbedingungen anpassen können, ohne dass manuelle Parameteranpassungen erforderlich sind.


Praktische Empfehlungen für die Implementierung

Um die Leistung von Mamba unter realen Handelsbedingungen zu testen, wurde der EA ModernAI_Expert.mq5 entwickelt. Er stellt eine vollwertige Implementierung von Selective State Space Models im MetaTrader 5-Ökosystem dar. Sein Ziel ist es, die praktische Anwendung moderner Ansätze des maschinellen Lernens im algorithmischen Handel zu demonstrieren.

Der EA basiert auf den Prinzipien eines reinen KI-Ansatzes, bei dem alle Handelsentscheidungen ausschließlich auf Basis von Vorhersagen neuronaler Netze getroffen werden. Im Gegensatz zu Hybridsystemen verlässt sich ModernAI_Expert vollständig auf die Fähigkeit der Mamba-Architektur, verdeckte Muster in Marktdaten ohne die Verwendung traditioneller technischer Indikatoren zu identifizieren. Die grundlegende Implementierung von Selective State Space Models unterstützt bis zu 200 Eingabe-Bars mit konfigurierbarer Analysetiefe, automatischem Modell-Retraining alle 24 Stunden und intelligenter Signalfilterung mit konfigurierbaren Konfidenzniveaus.


ModernAI_Expert implementiert ein fortschrittliches System zur Normalisierung von Eingabedaten, das für den stabilen Betrieb eines neuronalen Netzwerks entscheidend ist. Das System verarbeitet normalisierte Kursänderungen und logarithmisch skalierte Volumina, was die Trainingsstabilität gewährleistet und verhindert, dass eine Datenart die andere dominiert. Dieser Ansatz ist besonders kritisch für Finanzzeitreihen mit ihrer hohen Variabilität und unvorhersehbaren Aktivitätsschüben.


Das Hauptmerkmal von ModernAI_Expert ist das dynamische Positionsmanagement. Die Positionsgröße hängt nicht nur von den Standardregeln des Risikomanagements ab, sondern auch vom Konfidenzniveau des KI-Modells. Jeder Trade wird von einem Kommentar begleitet, der dieses Konfidenzniveau anzeigt, wodurch der Trader die Qualität der Entscheidungen in Echtzeit bewerten kann.

Ein weiteres zentrales Merkmal sind intelligente Exit-Signale. Positionen werden nicht nur durch Stop-Loss oder Take-Profit geschlossen, sondern auch, wenn sich die Einschätzung des Modells ändert. Long-Positionen werden geschlossen, wenn die Konfidenz unter 40 % fällt, und Short-Positionen werden geschlossen, wenn sie über 60 % steigt. Dies hilft dem System, auf sich ändernde Marktbedingungen zu reagieren, bevor herkömmliche Stops ausgelöst werden.


Schlussfolgerung

Die Mamba-Architektur stellt einen revolutionären Durchbruch im algorithmischen Handel dar, indem sie das grundlegende Problem der quadratischen Komplexität von Transformer-Modellen löst. Der Übergang zur linearen O(N)-Komplexität und der selektive Speichermechanismus eröffnen Möglichkeiten zur Analyse extrem langer Zeitreihen bei gleichzeitiger Wahrung der Recheneffizienz.

Die praktische Umsetzung in Form von ModernAI_Expert.mq5 beweist die Eignung der Technologie für den Einsatz in der Produktionsumgebung und demonstriert einen reinen KI-Ansatz ohne herkömmliche technische Indikatoren.


Wichtigste Ergebnisse

Die Hauptleistung der Mamba-Architektur ist ein rechnerischer Durchbruch – der Übergang von quadratischer zu linearer Komplexität, der die Analyse von Tausenden von Bars ohne Leistungsverlust ermöglicht. Der selektive Speichermechanismus bietet eine adaptive Filterung von Informationen, wobei der Fokus auf signifikanten Ereignissen liegt und Marktrauschen ignoriert wird. Die Skalierbarkeit des Systems eröffnet die Möglichkeit, langfristige historische Daten zur Identifizierung makroökonomischer Zyklen zu analysieren.

Die Eignung für den Einsatz der Technologie wird durch ihre erfolgreiche Integration in MetaTrader 5 mit dynamischem Positionsmanagement auf Basis des Modellvertrauens bestätigt. Dies stellt einen Paradigmenwechsel von hybriden Systemen hin zu einem reinen KI-Ansatz für Handelsentscheidungen dar.

Mamba eröffnet eine neue Ära des algorithmischen Handels, in der die Effizienz bei der Verarbeitung langer Sequenzen mit der Anpassungsfähigkeit an sich ändernde Marktbedingungen kombiniert wird.


Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/ru/articles/19047

Beigefügte Dateien |
Letzte Kommentare | Zur Diskussion im Händlerforum (3)
Борис Ворона
Борис Ворона | 27 Aug. 2025 in 06:26
Beim Kompilieren der Datei „ModernTimeSeriesNet.mqh“ treten folgende Fehler auf: - undeclare
Yevgeniy Koshtenko
Yevgeniy Koshtenko | 27 Aug. 2025 in 07:17
Борис Ворона #:
Beim Kompilieren der Datei „ModernTimeSeriesNet.mqh“ treten folgende Fehler auf: – undeclare

Hallo! Ich habe die aktuelle Version in die neue Version des Artikels eingefügt. In der vorherigen Version ließ sich der Expert Advisor zwar so kompilieren, das Problem war jedoch, dass die erforderlichen Variablen im EA und nicht in der mqh-Datei definiert waren.

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

Hallo! Ich habe die aktuelle Version in die neue Version des Artikels eingefügt. In der vorherigen Version ließ sich der Expert Advisor zwar so kompilieren, das Problem war jedoch, dass die Variablen im EA und nicht in m definiert waren.

Danke, jetzt funktioniert alles.

Neuronale Netze im Trading: Effektive Merkmalsextraktion für präzise Klassifizierung (Mantis) Neuronale Netze im Trading: Effektive Merkmalsextraktion für präzise Klassifizierung (Mantis)
Lernen Sie Mantis kennen – ein leichtgewichtiges Foundation-Model für die Zeitreihenklassifizierung auf Basis einer Transformer-Architektur mit kontrastivem Vortraining und einem hybriden Attention-Mechanismus, der eine rekordverdächtige Genauigkeit und hohe Skalierbarkeit ermöglicht.
Marktsimulation: Positionsansicht (IV) Marktsimulation: Positionsansicht (IV)
Hier werden wir beginnen, verschiedene Komponenten oder Anwendungen zusammenzuführen, die zuvor völlig voneinander isoliert waren. Chart Trade, der Mausindikator und der Expert Advisor waren bereits miteinander verknüpft, aber es gab immer noch keine Möglichkeit, die auf dem Handelsserver offenen Positionen, die oft über ein Cross-Order-System verwaltet werden, direkt im Chart anzuzeigen. Ab diesem Punkt wird dies möglich, was den Weg für verschiedene Ideen und zukünftige Implementierungen ebnet. Obwohl wir erst am Anfang stehen, diese Komponenten in Betrieb zu nehmen, haben wir bereits eine Richtung für die weitere Entwicklung.
Marktsimulation: Positionsansicht (V) Marktsimulation: Positionsansicht (V)
Trotz dessen, was im vorherigen Artikel gezeigt wurde, mag all dies zunächst einfach erscheinen. In Wirklichkeit gibt es jedoch noch einige Probleme, und viele Aufgaben sind noch offen. Sie, lieber Leser, Sie denken vielleicht, dass alles einfach und unkompliziert ist. Aus Unerfahrenheit akzeptieren Sie vielleicht einfach alles, was Ihnen präsentiert wird. Und das ist ein Fehler, den Sie zu vermeiden versuchen sollten. Noch schlimmer ist es, etwas zu verwenden, ohne wirklich zu verstehen, was genau Sie da verwenden. Anfänger durchlaufen oft eine Copy-and-Paste-Phase. Wenn Sie nicht für immer in dieser Phase stecken bleiben wollen, sollten Sie lernen, wie man bestimmte Werkzeuge verwendet. Eines der am häufigsten von Programmierern verwendeten Werkzeuge ist die Dokumentation. Das zweite ist das Testen, unterstützt durch Protokolldateien. Hier werden wir uns ansehen, wie man dabei vorgeht.
Neuronale Netze im Trading: Generalisierung von Zeitreihen ohne Abhängigkeit von spezifischen Daten (Kernmodule des Modells) Neuronale Netze im Trading: Generalisierung von Zeitreihen ohne Abhängigkeit von spezifischen Daten (Kernmodule des Modells)
Wir setzen unsere Bekanntschaft mit dem Mamba4Cast-Framework fort. Heute werden wir uns mit der praktischen Umsetzung der vorgeschlagenen Ansätze befassen. Mamba4Cast wurde nicht für eine lange Anpassungsphase bei jeder neuen Zeitreihe entwickelt, sondern für den sofortigen Einsatz. Dank des Konzepts des Zero-Shot-Forecastings kann das Modell hochwertige Prognosen auf realen Daten ohne zusätzliches Training oder Hyperparameter-Tuning erstellen.