![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Certo che dovrebbe, sono tutti solo interi, non un tipo separato.
Un piccolo consiglio.
Naturalmente, è auspicabile non riscrivere la strategia per il tester. Una volta scritta, la strategia dovrebbe funzionare nel tester e senza di esso (nel mondo reale).
Questo può essere fatto con l'aiuto delle biblioteche.
1. Tutte le funzioni relative al commercio, cambiano un po' il loro nome (il mio... - non molto bene, forse meglio _....).
2. Creare 2 librerie. Il primo contiene codice per i test (senza effettivamente inviare ordini), il secondo duplica solo i parametri nelle chiamate di funzioni standard. Il cambio di lavoro/prova viene fatto semplicemente sostituendo la libreria.
Naturalmente, potremmo mettere tutto in una libreria e introdurre un parametro globale per passare, ma probabilmente non è necessario.
E sarebbe meraviglioso introdurre in MT una funzione in più, che, imho, semplificherebbe radicalmente la scrittura di un tale tester - la funzione di impostare l'ultima barra corrente.
Cioè supponiamo di avere 1000 barre nella cronologia su cui stiamo testando.
Definiamo la barra 200 come ultima e usiamo Close[200] invece di Close[0]. Questa caratteristica dovrebbe funzionare in tutte le funzioni integrate.
Il tester si presenterà quindi come un ciclo sul numero di barra in cui questo valore è impostato (l'ultima barra del test) e la chiamata della funzione di avvio nella strategia.
In effetti, non è così semplice :))
Ho bisogno di altri punti ...
La frase "codice per i test" è un codice da tester o un codice EA? Sii più specifico.
Anche questo
Definiamo 200 barre come ultima, quindi invece di Close[0] usiamo Close[200].
E questa fic dovrebbe funzionare (influenzare) in tutte le funzioni in linea.
Qualsiasi codice EA è facilmente convertibile in codice per un indicatore:
Prendiamo il blocco start() dell'EA, aggiungiamo un costrutto for (testerconter=Bars;testerconter>=0;testerconter--)
{
chiuderlo con una parentesi alla fine
}
Sostituisci tutti i posti che usano riferimenti con [testerconter+riferimento].
Ecco un esempio dal built-in MACD_sample.mq4 Expert Advisor.
Codice sorgente:
Modificato
Come potete vedere, non c'è nessun problema. Se volete, potete sempre ridefinire testerconter=0 se
il codice viene eseguito nel corpo di Expert Advisor, non nel corpo di Expert Advisor .
Nella prima libreria la funzione
emula l'esecuzione dell'ordine nel tester, cioè lo aggiunge alla lista degli ordini nel tester e non invia l'ordine al server.
Nella seconda libreria, questa funzione chiama semplicemente la funzione incorporata
Prendiamo il blocco start() dell'EA, aggiungiamo un costrutto for(testerconter=Bars;testerconter>=0;testerconter--)
{
chiuderlo con una parentesi alla fine
}
Sostituire tutti i posti che usano riferimenti con [testerconter+riferimento].
Questo è quello che voglio dire.
Sarebbe più facile chiamare la funzione che imposta il valore della variabile testerconter in MT (0 di default) invece di sostituirla e questa sostituzione ([testerconter+reference]) sarebbe fatta in MT stessa.
Allora non dovremmo fare queste sostituzioni nella strategia stessa.
Si prega di sostituire pre con. pre a citare in "cioè diciamo che abbiamo 1000 barre in ...".
altrimenti la pagina sparisce di nuovo.
su
La mia conclusione: sembra che stiamo parlando della stessa cosa. Possiamo dimenticare l'attuale richiesta dell'ultima barra per ora -
Dovremmo cercare di farlo.
Per ora basta ridefinire le funzioni commerciali standard, il prefisso _. , è ancora più rispettabile :)
Ho il sospetto che tu abbia fatto il test "con molto sangue", cioè non hai ridefinito le funzioni di trading. E ogni nuovo test
Ogni nuovo test richiede la scrittura di un nuovo indicatore del tester. Ma dovete farlo solo una volta - e nessun problema dopo.
Se mi sbaglio - pubblicate le funzioni - non siate avari.
Sembra che non si possachiamare direttamente lafunzione di avvio dall'Expert Advisor.
Pertanto, sarebbe meglio scrivere il codice dell'Expert Advisor in una libreria e avere lì le funzioni _init, _deinit e _start.
Nell'Expert Advisor, scriveremo
È un po' poco chiaro, però, quali siano i parametri.
Come si fa in Omega:
Non è molto bello, ma funzionerà.
In generale, un sistema di elaborazione degli eventi fatto in casa funzionerà :))
Elabora questo codice - inserisce tutti i tipi di include, array di lavoro per Balance, Equity, ecc,
rinomina le variabili Lots in _Lots (e altre). In generale, fa il lavoro grossolano.
Dovrò solo archiviare l'uscita e andare. :)
Metodo di trasporto semplice.
Ho il sospetto che tu abbia fatto il test "con molto sangue", cioè non hai ridefinito le funzioni di trading. E ogni nuovo test richiedeva di scrivere un nuovo indicatore del tester. Ma dovete farlo solo una volta - e senza problemi. Se mi sbaglio, puoi postare le funzioni - non essere avaro.
Assolutamente giusto. "Grande sangue". Non ci sono state sostituzioni. Ho fatto tali tester già in MT3.x. MQL4 è diverso da MQL2 come il cielo dalla terra. Tuttavia, non ho approfittato di MQL4. Sono mentalmente stordito. Avrei dovuto prima pensare e poi lavorare.
Alla donna è stato consigliato: "Pensa prima, parla dopo". La donna rispose: "Come posso pensare a ciò che non ho ancora detto".