Che diavolo sta succedendo? - pagina 4

 
SeriousRacoon:
E provate a disabilitare la logica attuale e a sostituirla con una normale procedura guidata. Vedrete immediatamente dove il gatto ha sbagliato, nella logica o nell'esecuzione.

buon consiglio.... Non dovremmo arrivare al punto in cui pensiamo che l'ottimizzazione non sia altro che istanze separate di corse singole, almeno questo è ciò che gli utenti vorrebbero e ciò che gli sviluppatori volevano.

Ciò significa che non importa quanto sia complesso l'algoritmo dell'Expert Advisor, il risultato di una singola corsa dovrebbe essere identico a quello ottenuto in un gruppo di corse durante l'ottimizzazione.

Io stamperei (come consiglia Renat) al completamento di ogni corsa durante l'ottimizzazione la storia degli accordi in un file contenente i parametri (per facilitare la ricerca tra un mucchio di file creati) e farei lo stesso per una singola corsa, in questo modo sarà possibile trovare la differenza di risultati dopo l'ottimizzazione e una singola corsa. sembra essere l'unico modo per arrivare alla verità.

tuttavia, sono molto curioso di sapere cosa, quale sfumatura, può causare risultati diversi in ottimizzazione e singola esecuzione, perché la logica suggerisce che questo è impossibile in linea di principio, a condizione che una singola esecuzione è identica a quella del batch di ottimizzazione.

 
Алексей Тарабанов:

"Quasi tutti i dati sono inizializzati in un ciclo".

Ragazzi, non potete inizializzare in un ciclo. Dovete leggere nel ciclo.

Vi ho mostrato in quali casi non solo è possibile, ma necessario e non c'è altro modo.

 

@Andrey Dik, mi sto chiedendo esattamente come imbullonare la stampa su file. Sembra che il file debba essere scritto man mano che si procede. E cosa si dovrebbe scrivere esattamente lì? I prezzi non sono informativi. Devi scrivere alcune informazioni che ti aiuteranno a capire il motivo della discrepanza. Che tipo di informazioni? Dove possiamo trovarlo? Non ne ho ancora idea.

 
Сергей Таболин:

@Andrey Dik, mi sto chiedendo esattamente come imbullonare la stampa su file. Sembra che il file debba essere scritto man mano che si procede. E cosa si dovrebbe scrivere esattamente lì? I prezzi non sono informativi. Devi scrivere alcune informazioni che ti aiuteranno a capire il motivo della discrepanza. Che tipo di informazioni? Dove possiamo trovarlo? Non ho ancora idee.

Nella funzione OnTester(), create un file chiamato InputName1 + "_" + InputName2 + "_" + InputName3 + "_" + InputName4 + "_" +.... e registrare la storia di tutti gli scambi (non le posizioni) in esso, tutte le informazioni necessarie per l'analisi, il tempo, il prezzo, ecc sarà registrato. Si può anche scrivere in questo file qualcos'altro di molto interessante per un particolare EA, che può essere utile per cercare incongruenze tra l'ottimizzatore e una singola esecuzione.

Non dimenticate di controllare MQLInfoInteger (MQL_OPTIMIZATION)); per aggiungere il postfix nel nome del file alla singola esecuzione, in modo da non sovrascrivere lo stesso file dopo l'ottimizzazione.


SZY. Se ottieni due file con contenuti diversi, non sarà sufficiente per gli sviluppatori, ma ti darà solo la direzione dove scavare ulteriormente, avrai bisogno di portare il codice del problema riproducibile. si spera, il problema è nel codice EA.

 
Andrey Dik:

Nella funzione OnTester() create un file chiamato InputName1 + "_" + InputName2 + "_" + InputName3 + "_" + InputName4 + "_" +.... e registrare la storia di tutti gli scambi (non le posizioni) in esso, tutte le informazioni necessarie per l'analisi, il tempo, il prezzo, ecc sarà registrato. Si può anche scrivere in questo file qualcos'altro di molto interessante per un particolare EA, che può essere utile per cercare incongruenze tra l'ottimizzatore e una singola esecuzione.

Non dimenticate di controllare MQLInfoInteger (MQL_OPTIMIZATION)); per aggiungere il postfix nel nome del file alla singola esecuzione, in modo da non sovrascrivere lo stesso file dopo l'ottimizzazione.


SZY. Se ottieni due file con contenuti diversi, non sarà sufficiente per gli sviluppatori, ma ti darà solo la direzione dove scavare dopo, dovrai citare un problema di codice riproducibile. Spero che il problema sia nel codice EA.

Grazie. Sarà fatto.

 
Сергей Таболин:

Grazie. Lo farò.


 
Сергей Таболин:

Grazie. Sarà fatto.

Controlla l'inizializzazione delle variabili dichiarate globalmente.

Se l'inizializzazione non è in OnInit() ma nella dichiarazione e se i loro valori sono cambiati nel codice.

 
Andrey F. Zelinsky:

Controlla l'inizializzazione delle variabili dichiarate globalmente.

Se l'inizializzazione non è in OnInit(), ma nella dichiarazione e se i loro valori sono cambiati nel codice.

se le variabili sono inizializzate o meno, ma i risultati dovrebbero coincidere in entrambe le modalità del tester (ottimizzazione e corsa singola)

 
Andrey Dik:

buon consiglio.... Non dovremmo arrivare al punto in cui pensiamo che l'ottimizzazione non sia altro che istanze separate di corse singole, almeno questo è ciò che gli utenti vorrebbero e ciò che gli sviluppatori volevano.

Ciò significa che non importa quanto sia complesso l'algoritmo dell'Expert Advisor, il risultato di una singola corsa dovrebbe essere identico a quello ottenuto in un gruppo di corse durante l'ottimizzazione.

Stamperei (come consiglia Renat) dopo il completamento di ogni corsa durante l'ottimizzazione la storia degli accordi in un file contenente i parametri (per facilitare la ricerca nel mucchio di file creati) e farei lo stesso durante una singola corsa, così sarebbe possibile scoprire la differenza dei risultati dopo l'ottimizzazione e una singola corsa.

Tuttavia, sono ancora molto curioso di sapere cosa, quale sfumatura, può causare risultati diversi dopo l'ottimizzazione e una singola corsa, perché la logica suggerisce che questo è impossibile in linea di principio, a condizione che una singola corsa sia identica a quella del batch di ottimizzazione.

In generale, sono d'accordo con te. Se owl davvero non fa diramazioni a seconda dell'ambiente (se è in esecuzione in optimizer o in tester), allora l'unica cosa che possiamo assumere è che in modalità di ottimizzazione alcune chiamate api in tester sono troppo ottimizzate per la velocità, scusate la tautologia. Forse dipende dalle bandiere nelle funzioni utilizzate. Un registro dettagliato delle transazioni e dei risultati di esecuzione aiuterebbe, sì.

Non l'ho incontrato personalmente.

 
Andrey Dik:

se le variabili sono inizializzate o meno, ma i risultati dovrebbero corrispondere in entrambe le modalità del tester (ottimizzazione e corsa singola)

dichiarare una variabile globalmente e inizializzarla quando si dichiara, per esempio, int kk=0;

poi in OnTick() si toglie la stampa e si cambia il valore, per esempio Print("kk=",kk); ++kk;

poi cambiare TF o i parametri - e vedere il risultato.