Che diavolo sta succedendo? - pagina 3

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

Renat, grazie. Ma spiegami una cosa oscura, qual è la differenza tra 2*2+2*3 nell'ottimizzatore e il passaggio singolo? Almeno dammi un suggerimento su dove esattamente può esserci una discrepanza?

Ti darò un indizio.

Nella vostra mente, c'è solo 2*2, mentre in realtà c'è un enorme ambiente di mercato e un'enorme quantità del vostro codice. Approssimativamente, ci sono almeno tre ordini di grandezza in più di variabili e condizioni.

Finché si va in giro in modalità economica, non si trovano ragioni. Proprio come giocare al gioco del "semplice codificatore". Una volta che hai iniziato a programmare, impara a fare il debug.

Vi consiglio per la terza volta - staccate la stampa e vedete con i vostri occhi dove sono iniziate le discrepanze nelle transazioni.

 
Renat Fatkhullin:

Ti do un indizio.

È solo 2*2 nella vostra mente mentre in realtà c'è un enorme ambiente di mercato e un'enorme quantità del vostro codice. Approssimativamente, ci sono almeno tre ordini di grandezza in più di variabili e condizioni.

Finché si va in giro in modalità economica, non si trovano ragioni. Proprio come giocare al gioco del "semplice codificatore". Una volta che avete iniziato a programmare, imparate a fare il debug.

Vi consiglio per la terza volta - staccate la stampa e vedete con i vostri occhi dove sono iniziate le discrepanze nelle transazioni.

Va bene, lo stacco. Darò un'occhiata. Ma è improbabile che io riesca a capire la ragione di queste discrepanze.

Soprattutto perché ho prescritto l'apertura, il mantenimento e la chiusura delle posizioni nella mia classe. Non ho notato alcuna dissonanza tra ottimizzazione e passaggio singolo in altri EAs per molto tempo (ho già discusso questo problema nel mio precedente articolo).

Ed è per questo che ho riaperto questa domanda.

Per quanto mi riguarda, lo capisco in questo modo: il lavoro con le posizioni è fine e non richiede interventi. Quindi il bug da qualche altra parte. Ma tutti gli altri posti sono codice di script per preparare, creare, addestrare e controllare la rete. Tutto è anche debuggato.

Questo lascia la possibilità di usare una variabile non inizializzata. Ho controllato ognuno di essi. Beh, forse mi sono perso qualcosa. In questo caso mi aspetto un avvertimento dal compilatore.

Oppure, un altro modo è che il codice sia compilato in modo tale che la variabile sia inizializzata dopo la sua chiamata.

Come capite, posso solo indovinare. Non ho mezzi reali per rilevare questo errore.

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

OK, lo decomprimo. Darò un'occhiata. Ma è improbabile che io riesca a capire la ragione di queste discrepanze.

Soprattutto perché l'apertura, il mantenimento e la chiusura delle posizioni sono stati implementati nella mia classe. Non ho notato alcuna dissonanza tra ottimizzazione e passaggio singolo in altri EAs per molto tempo (ho già discusso questo problema nel mio precedente articolo).

Ed è per questo che ho riaperto questa domanda.

Per quanto mi riguarda, lo capisco in questo modo: il lavoro con le posizioni è fine e non richiede interventi. Quindi il bug da qualche altra parte. Ma tutti gli altri posti sono codice di script per preparare, creare, addestrare e controllare la rete. Tutto è anche debuggato.

Questo lascia la possibilità di usare una variabile non inizializzata. Li ho controllati tutti. Beh, forse mi sono perso qualcosa. In questo caso mi aspetto un avvertimento dal compilatore.

Oppure, un altro modo è che il codice sia compilato in modo tale che la variabile sia inizializzata dopo la sua chiamata.

Come capite, posso solo indovinare. Non ho mezzi reali per rilevare questo errore.

Innanzitutto, assicuratevi di non usare le funzioni GetTickCount64(), GetTickCount() o GetMicrosecondCount() nella logica di trading. Possono causare divergenze di risultati nel tester e nell'ottimizzatore.

 
Geess:

Innanzitutto, assicuratevi di non usare le funzioni GetTickCount64(), GetTickCount() o GetMicrosecondCount() nella vostra logica di trading. Possono causare divergenze di risultati nel tester e nell'ottimizzatore.

Non è così.

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

Il modo in cui la vedo io è che il lavoro di posizione è messo a punto e non richiede interventi. Quindi il bug è da qualche altra parte. Ma tutti gli altri posti sono codice degli script per preparare, creare, addestrare e controllare la rete. E' anche tutto a posto.

...

Non è qui che è andato tutto storto?

 

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

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

 
In genere, dovrebbe esserci un errore di Stack Overflow.
 
)
 
Artyom Trishkin:

Non è questo il problema?

In che modo? La rete non è addestrata al volo nell'EA. Almeno, non ancora )).

È addestrato correttamente o no, è sovra o sotto addestrato, ma il segnale è lo stesso.

Se, per esempio, durante l'ottimizzazione dà un segnale di acquisto all'apertura della barra, allora dovrebbe dare lo stesso segnale durante un singolo test. E se non dà lo stesso segnale, non è né lì né lì.

Quindi è da lì che possono apparire le posizioni "inutili" (a condizione che i dati dei prezzi siano uguali, spero)?

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

In che modo? La rete non è addestrata al volo nell'EA. Almeno, non ancora )).

È addestrato correttamente o no, è sovra o sotto addestrato, ma il segnale è lo stesso.

Se la rete dà il segnale "buy" all'apertura della barra quando si ottimizza, allora dovrebbe dare lo stesso segnale quando si fa un singolo test. E se non dà lo stesso segnale, non è né lì né lì.

Quindi da dove possono venire le posizioni "extra" (sempre che i dati sui prezzi siano, spero, gli stessi)?

Prova 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.
Motivazione: