Sistemi Esperti: MarketPredictor - pagina 2

 

Grazie per i suggerimenti, il codice è in lavorazione da 5 giorni, ho risolto il problema di non impostare alcun trade, voglio solo fare piccoli aggiornamenti :)

 

È necessario creare una nuova iterazione

    // Regolare l'alfa in base alla volatilità (ATR)
    double atr = iATR(_Symbol, PERIOD_CURRENT, period); // Calcolo dell'ATR
    if(atr > 0.0)
        alpha = atr * 0.1; // Impostazione dell'alfa proporzionale alla volatilità
    else
        alpha = inputAlpha; // Fallback al valore di input se ATR non è disponibile

questo codice non calcolerà correttamente l'ATR

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

Valore di ritorno

Restituisce l'handle di un indicatore tecnico specificato


Restituisce l'handle, che è un codice, e non restituisce il valore ATR

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. correzioni di bug:
- In FFT: la chiamata ricorsiva FFT per array pari e dispari può portare a una ricorsione infinita se la dimensione dell'array non è di grado due.
È necessario assicurarsi che la dimensione dell'array sia di grado due. Questo non viene controllato nel codice attuale.
- Nella funzione CalculateFractalComponentFFT: si utilizza la FFT ma non si controlla che N sia di grado due.
Inoltre, dopo la FFT, utilizziamo solo i primi N/2 elementi, il che è corretto, ma il codice FFT presenta un errore nell'indicizzazione durante la combinazione.
2. Miglioramenti:
- Nella funzione ExecuteTrade: il controllo della posizione aperta utilizzando PositionSelect(_Symbol) non è del tutto corretto,
perché questa funzione restituisce true se c'è una posizione su un simbolo, ma non necessariamente che sia aperta al momento.
È meglio utilizzare un ciclo attraverso tutte le posizioni e controllare il numero magico e il simbolo.
- Inoltre, in ExecuteTrade non controlliamo se c'è già una posizione aperta, quindi possiamo aprire più posizioni.
Dobbiamo limitare l'apertura a una sola posizione (o utilizzare il numero magico per identificare le nostre posizioni).
- Nella funzione OptimiseParameters: il calcolo della media mobile può essere sostituito dalla funzione iMA integrata.
- Nella funzione SimulatePrice: l'utilizzo di MathRand() potrebbe non essere il migliore per Monte Carlo, è meglio utilizzare la distribuzione normale.