Aiuto per la codifica - pagina 408

 
airquest:
Bene, ancora... Ecco alcuni test:

- Impostazioni predefinite (nessuna ottimizzazione, WriteCSV a True): Microsoft Excel - BB+CCI-EURUSD-H1-2014.12.18 00h11-SA1.csv

- Ottimizzare impostato su True, PeriodMin a 20 e PeriodMax a 20: Microsoft Excel - BB+CCI-EURUSD-H1-2014.12.18 00h13-SA1.csv

Il primo dà valori coerenti (i risultati del file CSV e dello schermo corrispondono). Questo è normale, perché entrambi provengono dalle stesse variabili. Ma nel secondo, i risultati opti sono moltiplicati quasi per 10 rispetto ai risultati dello schermo. Tuttavia, dovrebbero finire con gli stessi risultati...

Comunque, non c'è fretta, forse con il tempo scoprirò cosa c'è di sbagliato. Grazie per il tuo gentile aiuto Mladen.

Ciao Airquest,

Grazie per un'alternativa molto interessante allo Strategy Tester... un pezzo di codifica molto creativo e talentuoso da parte tua...!

Ho giocato un po' con il tuo indicatore...

E sembra che tu abbia due variabili diverse per i totali...

Una per la corsa normale = TotalTrades...

E una per la corsa di ottimizzazione = totalTrades...

Tuttavia... i tuoi commenti mostrano solo i tuoi TotalTrades della corsa normale...

Vai avanti e aggiungi il tuo ottimizzato ... totalTrades ... ai tuoi commenti e vedere se questo risolve il puzzle ...

Questo spero possa rispondere alla tua domanda sul perché della differenza tra la visualizzazione sullo schermo... e i totali del foglio di calcolo...

Spero che questo aiuti,

Robert

 
cosmiclifeform:
Ciao Airquest,

Grazie per un'alternativa molto interessante allo Strategy Tester... un pezzo di codifica molto creativo e talentuoso da parte tua...!

Ho giocato un po' con il tuo indicatore...

E sembra che tu abbia due variabili diverse per i totali...

Una per la corsa normale = TotalTrades...

E una per la corsa di ottimizzazione = totalTrades...

Tuttavia... i tuoi commenti mostrano solo i tuoi TotalTrades della corsa normale...

Vai avanti e aggiungi il tuo ottimizzato ... totalTrades ... ai tuoi commenti e vedere se questo risolve il puzzle ...

Questo spero possa rispondere alla tua domanda sul perché della differenza tra la visualizzazione sullo schermo... e i totali del foglio di calcolo...

Spero che questo aiuti,

Robert

Non sono sicuro che i risultati finali saranno corretti. Il problema è che mostrando il totale dei trade provenienti dalla funzione opti, si può vedere se la funzione sta funzionando bene o no. Inoltre non sono sicuro di come restituire più di un parametro dalla funzione doppia (è necessario restituire anche il saldo e il tasso di vincita). Ma la ragione principale è vedere che c'è una differenza nei risultati e quindi che qualcosa dovrebbe essere sbagliato nella funzione...

 

Ciao a tutti, ho appena scritto questo indicatore personalizzato basato sull'RSI.

Ho un'idea per usarlo in un EA. Ho bisogno di aiuto per scriverlo...

È una strategia di solo acquisto.

Compra su ogni segnale di rialzo... Chiudi tutto su segnale di ribasso

Idealmente l'EA aumenterebbe la dimensione del lotto per ogni segnale di rialzo consecutivo senza una chiusura. (con un massimo ovviamente)

L'indicatore funziona mettendo una freccia sul grafico ogni volta che l'RSI passa sotto/sopra un livello prestabilito.

freccia_rsi.mq4

File:
arrow_rsi.mq4  3 kb
 
airquest:
Non sono sicuro che i risultati finali saranno corretti. Il problema è che mostrando i trade totali provenienti dalla funzione opti, si può vedere se la funzione sta funzionando bene o no. Inoltre non sono sicuro di come restituire più di un parametro dalla funzione double (è necessario restituire anche il saldo e il win rate). Ma il motivo principale è quello di vedere che c'è una differenza nei risultati e quindi che qualcosa dovrebbe essere sbagliato nella funzione...

airquest

Per "restituire" tutti i parametri di cui avete bisogno da una funzione, passate un parametro per riferimento a una funzione. Qualcosa del genere:

doppio a;

doppio b;

doppio c = testFunction(a,b);

doppio tectFunction(double& _a,double& _b)

{

_a = 1;

_b = 2;

return(_a+_b);

}

dopo di che ad a e b verranno assegnati i valori 1 e 2 dalla testFunction (implicitamente "restituendo" 3 valori in questo caso di esempio - ho usato i nomi _a e _b nella funzione solo per mostrare che non devono avere lo stesso nome quando vengono passati per riferimento, altrimenti non c'è bisogno di farlo affatto)

 
airquest:
Non sono sicuro che i risultati finali saranno corretti. Il problema è che mostrando i trade totali provenienti dalla funzione opti, si può vedere se la funzione funziona bene o no. Inoltre non sono sicuro di come restituire più di un parametro dalla funzione doppia (è necessario restituire anche il saldo e il tasso di vincita). Ma il motivo principale è quello di vedere che c'è una differenza nei risultati e quindi che qualcosa dovrebbe essere sbagliato nella funzione...

Ciao Airquest,

Da quello che vedo... il tuo indicatore sembra funzionare bene.

Penso ancora che sia un problema di "visualizzazione dei valori"... e non un problema di calcolo.

Ecco cosa vedo accadere nell'indicatore...

Il programma ha 2 opzioni - 1) Esecuzione normale 2) Esecuzione ottimizzazione

Non sono scelte esclusive, né una né l'altra...

Quando l'ottimizzazione non è selezionata... il programma esegue solo l'esecuzione normale...

Quando l'ottimizzazione è selezionata... il programma esegue comunque l'esecuzione normale... E... poi esegue l'esecuzione di ottimizzazione... quindi ottiene entrambi i valori...

Tuttavia... solo i valori della corsa normale vengono visualizzati nella schermata Commenti... e non visualizza affatto i valori di ottimizzazione.

In allegato il mio test che mostra che i valori di ottimizzazione visualizzati sullo schermo sono gli stessi dei valori del foglio di calcolo...

Questo mi dimostra che tutti i tuoi calcoli vanno bene...

Inoltre sembra che utilizzi l'ultimo record del foglio di calcolo per ottenere i valori finali di ottimizzazione...

Raccomando anche di eseguirlo senza altri grafici/indicatori caricati... e di usare solo alcuni valori selezionati per testare alla volta.

Ho più di 20 grafici in esecuzione ... e MT4 diventa non reattivo mentre fa i suoi calcoli per questo indicatore ...

Meglio usare una configurazione MT4 pulita per eseguire i test di ottimizzazione...

Ma la buona notizia è che... non blocca il mio sistema perché posso fare altre cose mentre calcola i numeri e fa il rapporto.

Nel frattempo... per quanto posso dire negli screenshot qui sotto... il tuo indicatore sembra funzionare bene...

BTW... è un pezzo incredibile di codifica... Grazie mille per averlo condiviso...!

Spero che questo aiuti,

Robert

 
cosmiclifeform:
Ciao Airquest, Da quello che vedo... il tuo indicatore sembra funzionare bene.

Sei il benvenuto, grazie mille per le tue parole. L'idea è infatti quella di sostituire l'ottimizzazione di mt4 strategy tester (che secondo me fa schifo ed è troppo lento) per il backtesting di strategie semplici. E sì, è necessario aspettare un po 'per caricare e fare il calcolo, ma da quello che ho visto è già più veloce e più conveniente di una ottimizzazione regolare.

Ma continuo a pensare che ci sia un problema con l'indicatore e che non funzioni correttamente. Sostituendo il testo dello schermo con i risultati provenienti dall'ottimizzazione non si vede affatto se questi risultati in uscita sono giusti o sbagliati. È come verniciare una macchina arrugginita.

Penso che la funzione opti dia risultati sbagliati. Puoi vedere nel tuo screenshot che i risultati nel CSV danno 5'307 scambi. Questo è molto lontano dal tetto. Dipende da quante barre hai nel tuo schermo, ma non è possibile che la strategia abbia dato 5'307 trade da prendere. Per essere sicuro, non hai bisogno di contare le frecce, puoi ridurre il numero di barre da testare come ho fatto in questo screenshot (l'ho impostato a 100 barre):

Potete vedere qui che, per 100 barre, ci sono solo 10 trade da prendere, con 4 vincitori (contando le frecce), mentre i risultati opti mostrano 89 trade presi. Quindi, sulla base di un backtest visivo, i risultati dello schermo sono giusti (per il periodo migliore che l'opti ha detto), mentre il CSV è sbagliato. Quindi questo dimostra che non dovremmo fidarci dei risultati del CSV, né per il conteggio dei trade né per determinare quali impostazioni sono le migliori.

Quindi ho posto il problema in un modo più semplice. Ho fatto un semplice indicatore (allegato) che mostra sullo schermo i risultati che escono dalla funzione Optimization double e dalla funzione Start int (calcolo principale). Così non c'è bisogno di scrivere un CSV per vedere che i due risultati sono diversi.

Sulla base di questo indicatore, la mia (semplice) domanda è : PERCHE' DUE CALCOLI ESATTAMENTE STESSI (quello nella funzione Start e l'altro nella funzione Optimization double) danno risultati diversi? Se qualcuno può aiutarmi a capire questo, sarebbe fantastico, perché davvero non lo capisco. Per quanto vedo, i due sono esattamente uguali e dovrebbero dare gli stessi risultati. Grazie mille.

PS: l'indicatore è ancora un po' lento e dovrai probabilmente aspettare qualche secondo perché mostri i risultati. Tuttavia, suonerà un suono quando i risultati usciranno.

File:
sa1.png  78 kb
sa3.png  41 kb
 

Ciao Airquest,

Ho provato il tuo "Sample Test" ma non sono riuscito a farlo funzionare. Ho guardato il codice e aveva più di 400 linee cancellate...così ho lasciato perdere.

Sono tornato a testare il tuo codice originale... e credo di cominciare a capire cosa dici sul problema dei "troppi trade"...

Per mantenere i test semplici e veloci... ho testato usando solo le Bande... e ho ridotto al minimo le impostazioni (Bande 10 e Bande 20) per avere solo due (2) esecuzioni per vedere i risultati più velocemente.

Mi sono anche concentrato su "BarsToCount" dato che questo dovrebbe essere direttamente correlato al numero di trade...

Anche se non ho trovato alcuna risposta... potrei avere qualche altro indizio per te...

"BarsToCount"... non sembra funzionare...

Ho eseguito il tuo codice con 1 barra... 2 barre... e 100 barre indietro...

E tutti hanno avuto esattamente gli stessi risultati...il che non dovrebbe essere...dato che più barre dovrebbero equivalere a più compravendite...e meno barre dovrebbero equivalere a meno compravendite.

Ho allegato le mie schermate delle 3 corse che ho fatto... cambiando solo il "BarsToCount"...

Forse questo indizio ti aiuterà a rintracciare gli altri problemi. Buona fortuna nella ricerca delle tue risposte.

Spero che questo aiuti,

Robert

 

Finalmente sono riuscito a fare una versione funzionante. Ora i risultati degli opti sono corretti e corrispondono a quelli dello schermo. Ho semplicemente eliminato la doppia funzione e messo tutto in quella di Start. Così ora, avete solo una scelta tra eseguirlo in modalità Tester (quindi userà le impostazioni di default) o in modalità ottimizzatore (che non traccerà nulla ma scriverà solo un file CSV). Dopo aver eseguito un'ottimizzazione, potete tornare alla modalità tester e controllare se i risultati sono corretti.

Per favore fatemi sapere se trovate qualche problema, via PM è meglio, dato che non vogliamo rovinare questo thread. Ragazzi, grazie mille per il vostro aiuto. Questo forum è fantastico, le persone si motivano e si aiutano a vicenda (la maggior parte delle volte) e questo è il motivo per cui lo pubblico qui. Ora iniziamo il backtesting

 
cosmiclifeform:
Ciao Airquest,

Robert, grazie per il tuo aiuto. Vedi la versione che ho postato sopra, ora dovrebbe funzionare.

PS: per limitare il numero di barre, devi girare UseAllBars su False. Probabilmente non l'hai visto.

Saluti.

 

Ciao Airquest,

Ottimo lavoro per rintracciarlo e farlo funzionare...!

Non vedo l'ora di giocarci questa settimana...

Grazie e stammi bene,

Robert