Expert Advisors: MarketPredictor - Seite 2

 

Danke für die Tipps, der Code ist seit 5 Tagen in Arbeit, ich habe das Problem mit den nicht gesetzten Trades gelöst, ich möchte nur kleine Updates machen :)

 

Sie müssen eine neue Iteration durchführen

    // Alpha auf Basis der Volatilität anpassen (ATR)
    double atr = iATR(_Symbol, PERIOD_CURRENT, period); // ATR berechnen
    if(atr > 0.0)
        alpha = atr * 0.1; // Alpha proportional zur Volatilität einstellen
    else
        alpha = inputAlpha; // Rückgriff auf den Eingabewert, wenn ATR nicht verfügbar ist

dieser Code wird die ATR nicht korrekt berechnen

https://www.mql5.com/de/docs/indicators/iatr

Rückgabewert

Gibt das Handle eines angegebenen technischen Indikators zurück


Gibt den Handle zurück, der ein Code ist, und nicht den ATR-Wert

Documentation on MQL5: Technical Indicators / iATR
Documentation on MQL5: Technical Indicators / iATR
  • www.mql5.com
The function returns the handle of the Average True Range indicator. It has only one buffer. Parameters symbol [in] The symbol name of the security...
 
1. Fehlerbehebungen:
- In FFT: Der rekursive FFT-Aufruf für gerade und ungerade Arrays kann zu einer unendlichen Rekursion führen, wenn die Array-Größe nicht ein Grad von zwei ist.
Wir müssen sicherstellen, dass die Array-Größe ein Grad von zwei ist. Dies wird im aktuellen Code nicht überprüft.
- In der Funktion CalculateFractalComponentFFT: wird die FFT verwendet, aber nicht geprüft, ob N ein Zweiergrad ist.
Außerdem verwenden wir nach der FFT nur die ersten N/2 Elemente, was korrekt ist, aber der FFT-Code hat einen Fehler in der Indexierung beim Kombinieren.
2. Verbesserungen:
- In der Funktion ExecuteTrade: Die Überprüfung auf offene Positionen mit PositionSelect(_Symbol) ist nicht ganz korrekt,
weil diese Funktion true zurückgibt, wenn es eine Position auf einem Symbol gibt, aber nicht notwendigerweise, dass es im Moment offen ist.
Es ist besser, eine Schleife durch alle Positionen zu verwenden und die magische Zahl und das Symbol zu überprüfen.
- Außerdem wird bei ExecuteTrade nicht geprüft, ob bereits eine Position offen ist, so dass wir mehrere Positionen eröffnen können.
Wir müssen die Eröffnung auf nur eine Position beschränken (oder die magische Zahl zur Identifizierung unserer Positionen verwenden).
- In der Funktion OptimiseParameters: kann die Berechnung des gleitenden Durchschnitts durch die integrierte iMA-Funktion ersetzt werden.
- In der Funktion SimulatePrice: ist die Verwendung von MathRand() möglicherweise nicht die beste für Monte Carlo, es ist besser, die Normalverteilung zu verwenden.