Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
C'è un link per un uso corretto di iCustom() che tenga conto di queste sfumature? Perché sono stanco di controllare e cercare cosa c'è che non va.
Date un'occhiata all'articolo Indicatore per indicatore in MQL5:
È necessario inizializzare i buffer degli indicatori?
Le matrici in MQL5 non sono inizializzate di default con nessun valore, e questo vale certamente per le matrici che sono assegnate ai buffer di indicatori usando SetIndexBuffer(). Se un array è un buffer indicatore, la sua dimensione dipenderà dal parametro rates_total nel gestore OnCalculate().
Ci può essere la tentazione di inizializzare tutti i buffer degli indicatori con un valore vuoto EMPTY_VALUE usando la funzione ArrayInitialize(), per esempio, una volta all'inizio di OnCalculate().
...
Caro Rosh - ho letto questo articolo, ma non ho potuto applicarlo, perché uso la seconda forma di chiamata OnCalculate, perché ho bisogno del tempo di ogni barra, non solo del prezzo.
La ragione è che c'è della spazzatura nel buffer dell'indicatore. E l'inizializzazione del buffer con valori vuoti non dà nulla, perché nel tester, quando appaiono nuovi dati, il buffer dell'indicatore cresce automaticamente e all'inizio contiene davvero spazzatura, e se il buffer non viene riempito su ogni barra, la spazzatura rimane lì.
Il mio EA funziona su timer - è molto più veloce di OnTick() per qualche motivo. E posso testarlo nel fine settimana.
Sto cercando di scoprire cosa si trova nel buffer di ogni indicatore. La complessità è che un indicatore ne chiama un altro in base ai suoi valori.
Cercherò di selezionare un periodo chiaro e di impostare la dimensione dei buffer. Determinerò la causa dei falsi positivi nel tester. Eh - è un peccato che il tester non abbia un debugger - tutti lo stavano aspettando.
Ho un EA che gira su un timer - è molto più veloce di OnTick() per qualche motivo. Puoi testarlo anche durante il fine settimana.
C'è un articolo tester di base in MetaTrader 5 dove viene mostrato:
Abbiamo misurato il tempo di prova a diversi valori del parametro del timer (il periodo dell'evento Timer). Un grafico che mostra la dipendenza del tempo di prova T dal valore di periodicità è stato tracciato sui dati ottenuti.
È chiaro che più piccolo è il parametro del timer all'inizializzazione del timer da parte della funzione EventSetTimer(timer), minore è il periodo tra le chiamate del gestore OnTimer() e maggiore è il tempo di test T nelle stesse condizioni.Se la vera spazzatura appare in iCustom(), il problema è sicuramente nell'inizializzazione.
Inizializza il buffer con zero piuttosto che con Empty_Value. Quando appare ogni nuova barra, non dimenticare di azzerare la cella del buffer corrispondente.
Se la vera spazzatura appare in iCustom(), il problema è sicuramente nell'inizializzazione.
Inizializza il buffer con zero invece di Empty_Value. Quando appare ogni nuova barra, non dimenticare di azzerare la cella del buffer corrispondente.
Sì, l'ho fatto. In ogni indicatore mi assicuro di azzerare i valori prima - ha aiutato a sbarazzarsi della spazzatura.
for(i=first;i<rates_total-1 && !IsStopped();i++)
{EnterBuffer[i]=0;
EditBuffer[i]=0;
ExitBuffer[i]=0;
....
}
Ora lo sto testando sul grafico a minuti. Sul grafico orario tutto funziona come un orologio )))) Ho alcune domande sull'EA sul grafico a 1 minuto.
Come previsto - nessuna inizializzazione. Nell'indicatore FB.
Prima di tutto, all'inizio della funzione OnCalculate dovremmo aggiungere l'inizializzazione degli array
Perché l'inizializzazione che avete, non sempre funziona
In secondo luogo, nel ciclo di calcolo principale, proprio all'inizio del ciclo, aggiungere l'inizializzazione degli elementi zero degli array (perché quando una nuova barra viene aggiunta al grafico, gli array di indicatori vengono automaticamente aumentati, e questi nuovi elementi non sono inizializzati in alcun modo, né esplicitamente perché prev_calculated>0, né implicitamente)
Inoltre, in CustomOptimisation.mqh nella classe TBalanceSlopeCriterion deve essere aggiunto un distruttore (non influenza il risultato, ma porta a perdite di memoria durante i test)
Anche io ho avuto un miracolo con il tester.
Testato EA con un nome: il tester disegna oggetti
...ho salvato e compilato l'EA sotto un altro nome::no objects
Ma ho notato che ho spostato il terminale in un'altra unità