Programmazione Metatrader Overfitting_II (per principianti)

La prima ottimizzazione preliminare, sul solito periodo di 20 mesi, e' finalizzata a individuare il valore migliore del nuovo parametro "SMASignal", ovvero della media mobile da applicare al MACD.
Insieme a questa variabile ho ottimizzato anche il parametro "Limit", che e' strettamente legato a "SMASignal".
Il risultato migliore l'ho ottenuto con:

SMASignal = 2;
Limit = 2,8;

Vorrei continuare a testare il TS mantenendo fisso il valore di SMASignal, insieme a quello degli altri due parametri del MACD; ricapitolando usero' solo questa configurazione MACD
:
SMAFast = 8;
SMASlow = 13;
SMASignal = 2;

La variabile "Limit" verrà ulteriormente ottimizzata cammin facendo, sulla base degli sviluppi delle questioni relative a SL e TP.
Le prestazioni del TS nella nuova versione, con entrate e uscite dipendenti solo dal MACD, sono queste (su 20 mesi):

Profitto totale netto 1141.00
Profitto lordo 2015.00
Perdita lorda -874.00
Drawdown assoluto 24.00
Drawdown massimo 494.00 (4.35%)
Drawdown relativo 4.35% (494.00)
Operazioni totali 29
Operazioni con profitto (% del totale) 19 (65.52%)
Operazioni in perdita (% del totale) 10 (34.48%)
Il piu' grande
operazione con profito 311.00
operazione in perdita -170.00
Media
operazione con profito 106.05
operazione in perdita -87.40

Ci sono "luci e ombre"...

A fronte di un profitto simile a quello che si otteneva prima, c'e' una drastica riduzione del numero delle operazioni (circa un terzo) con conseguente bell' incremento del payoff.
Il rapporto vincite/perdite migliora nettamente, passando da circa 40/60 a 65/35 % circa.
Questi progressi rappresentano proprio quello che stavo cercando :up:.
Per contro aumenta sensibilmente il valore medio delle perdite e si raddoppia il drawdown massimo; per esperienza so che, data una certa serie storica, questi due fattori sono difficilmente migliorabili :wall:.
Tutto sommato, ritengo che questa nuova versione rappresenti comunque un miglioramento incoraggiante del TS.
Si tratterà ora di riprendere in esame la questione SL/TP (e forse anche il Delay tra due trade consecutivi), per vedere se riesco a migliorare il profitto.

Continua ...

:ciao:
 
Riprendiamo il cammino cercando di stabilire i criteri per fissare stop-loss e take-profit.
Leggendo il 3D principale (Overfitting) intuisco che la questione e' cruciale e controversa.
Dando per assodato che la Giuly sia la piu "sgamata" di tutti, sono propenso a seguire il suo consiglio e quindi a non mettere limitazioni al TP.
Dal test precedente, nel quale il TS e' regolato solo dal MACD, si evince che la vincita massima nel periodo esaminato e' di 311, mentre la perdita massima e' di -170.
Purtroppo nei suoi report MT4 non indica il "drawup", ovvero l'equivalente del drawdown sul lato dei profitti, che presumibilmente sarà anche maggiore del profitto massimo.
Questa informazione poteva essere di qualche aiuto nella pianificazione dei test.
D'altro canto ritengo che ogni trade possa raggiungere un profitto massimo superiore a quello che si otterrà al momento dell'uscita dal trade e che sia umanamente impossibile catturare tutti questi profitti massimi.
Quindi si tratterà di trovare una soglia di profitto (parametro "ProfTrgt") che possa generare mediamente il massimo profitto possibile.
Questo target sarà certamente inferiore al drawup e presumibilmente inferiore anche alla vincita massima (311 nel nostro caso).
Fatti questi ragionamenti ed effettuati alcuni test preliminari, ho appurato che un algoritmo come quello che avevo ipotizzato in un precedente post
( http://www.investireoggi.it/forum/overfitting_ii-per-principianti-vt84491-4.html#post4153779 ), non e' facimente parametrizzabile e forse anche errato concettualmente.
Ho trovato che l'algoritmo piu' efficace sembra essere questo :

if (ActualProf >= MaxProf) MaxProf = ActualProf;
if (MaxProf >= ProfTrgt) Tkprft = MaxProf * ProfFctr;

dove "ActualProf" e "MaxProf" sono due variabili calcolate dinamicamente ad ogni tick mentre "ProfTrgt" (target di profitto) e "ProfFctr" (percentuale) sono i parametri da definire "una tantum" e/o ottimizzare.
Tradotto concettualmente l'algoritmo dice che fino a un certo valore le uscite dal trade vengono gestite solo dal MACD mentre quando viene superato il target di profitto scatta un trailing in percentuale sul profitto massimo che si raggiunge man mano.
Senza inserire alcuno SL (lasciando pertanto correre le perdite fino alla perdita massima di -170), e inserendo anche il parametro "Limit" (vedi precedente post) nell'ottimzzazione, il risultato migliore si ottiene con :

Limit = 2;
ProfTrgt = 133
ProfFctr = 95%

ecco il report :

Profitto totale netto 1517.00
Profitto lordo 2512.00
Perdita lorda -995.00
Drawdown assoluto 24.00
Drawdown massimo 349.00 (3.03%)
Drawdown relativo 3.03% (349.00)
Operazioni totali 40
Operazioni con profitto (% del totale) 23 (57.50%)
Operazioni in perdita (% del totale) 17 (42.50%)
Il piu' grande
operazione con profito 287.00
operazione in perdita -170.00
Media
operazione con profito 109.22
operazione in perdita -58.53

Alcuni fattori migliorano, altri peggiorano, ma il profitto cresce da 11,41% a 15,17%.

Metto anche il grafico della equity line.

:ciao:
 

Allegati

  • TesterGraph.gif
    TesterGraph.gif
    11,7 KB · Visite: 246
Restava da definire la questione SL.
Effettuando una ottimizazione simultanea di IniStplss, ProfTrgt e ProfFctr si ottiene un lieve miglioramento delle prestazioni imponendo qualsiasi valore di IniStplss compreso tra 110 e 170.
Si confermano invece tutti gli altri parametri.
Riassumendo, nel periodo di 20 mesi, i parametri stabiliti nel corso dei vari test sono :

SMAFast=8;
SMASlow=13;
SMASignal=2;
Limit=2;
Delay=1;
IniStplss=140; (valore medio tra 110 e 170)
ProfTrgt=133;
ProfFctr=0.95;

Usando questa combinazione si ottiene, in definitiva :

Deposito iniziale 10000.00
Profitto totale netto 1565.00
Profitto lordo 2512.00
Perdita lorda -947.00
Fattore di profitto (profit factor) 2.65
Ricompensa attesa 39.13
Drawdown assoluto 24.00
Drawdown massimo 301.00 (2.61%)
Drawdown relativo 2.61% (301.00)
Operazioni totali 40
Operazioni con profitto (% del totale) 23 (57.50%)
Operazioni in perdita (% del totale) 17 (42.50%)
Il piu' grande
operazione con profito 287.00
operazione in perdita -170.00
Media
operazione con profito 109.22
operazione in perdita -55.71

Per quanto riguarda la messa a punto del TS, per ora mi fermo qui.
Nel prosiego continuerò a ottimizzare periodicamente solo i parametri IniStplss e ProfTrgt, lasciando immutati tutti gli altri.
In questo modo l'overfitting dovrebbe rimanere contenuto.
Ora mettero' in funzione il TS sul mio conto reale, utilizzando 1/10 della posta, ovvero 1000 Euro (0.01 lotti) e posterò l'andamento del sistema ad ogni nuovo ingresso/uscita dai trade.
Vedremo quanto sarà buona la profittabilità del TS e la capacità di generalizzare le prestazioni da parte della combinazione di parametri che ho stabilito.
Mi riservo di effettuare parallelamente, in modo discrezionale, dei trade compensativi in modo da "flattare" la mia esposizione durante i drawdown piu' profondi.
Mi fermerò solo in caso di un drammatico flop del TS.

Lungo il cammino spero arrivino commenti/suggerimenti/obiezioni/critiche.
A presto.

:ciao:
 
Ultima modifica:
Ciao Tolomeo, scusa se mi permetto, però anche se tu ne vuoi ottimizzare nel proseguio solo 2, i parametri che il ts usa di fatto sono 8.
E con soli 40 trade eseguiti nel backtesting se non è overfitting questo, cos'è l'overfitting? Non credo che ci sia da stupirsi se non funzionerà out-of-sample.
Mi pare che si consigli almeno 30 trade per ciascun parametro per poter considerare affidabilie il backtest, nel tuo caso dovresti avere almeno 240 trades e non solo 40.
(Io mi lecco le ferite, quindi il consiglio è da prendere alla pari! ;))
 
Grazie Autotrader per le tue osservazioni.
Come dicevo in qualche precedente post ho difficoltà a trovare database piu' profondi di Eurostox per MT4.
Dovrei importare i dati da altri database o usare un altro strumento con più dati.
Cerchero' una soluzione...
Riguardo all'overfitting, per quanto ne so, dovrebbe generarsi nella ottimizzazione spinta di molti parametri simultaneamente.
Il fatto di usare 6 parametri fissi che non vengono ottimizzati insieme agli altri due dovrebbe ridurre l'overfitting ai soli due parametri ottimizzati ... o no ?
Non sono cosi' esperto della materia e quindi non sono sicuro al 100% di quello che dico, ma il fatto di aver scelto una-tantum i valori dei sei parametri fissi mi sembrava una buona strada per non overfittare troppo il sistema.
D'altro canto, qualunque sia l'indicatore o oscillatore che si utilizza in un TS, esso va inizialmente configurato con dei parametri e se anche questa configurazione contribuisse all'overfitting, allora non avremmo scampo.
Che ne pensi ?

Ciao e grazie ancora per il tuo interessamento.
 
Riguardo all'overfitting, per quanto ne so, dovrebbe generarsi nella ottimizzazione spinta di molti parametri simultaneamente.
:no:
Ne basta anche uno solo. Magari in questi anni il mercato ha rispettato una regola, poi ne seguirà un'altra. La cosa più importante è identificare dei comportamenti ripetitivi, che non necessariamente vengono scoperti guardando gli indicatori :mumble:
 
:no:
Ne basta anche uno solo. Magari in questi anni il mercato ha rispettato una regola, poi ne seguirà un'altra. La cosa più importante è identificare dei comportamenti ripetitivi, che non necessariamente vengono scoperti guardando gli indicatori :mumble:

Ciao boob e grazie.
Identificare dei momenti ripetivi ...:specchio:
Come posso fare ?
L'unica cosa che mi viene in mente e' passare i dati su un DBMS (tipo MySQL) e studiare i pattern...
Ma quali pattern ?
Quelli di Ross ?
Quelli di Williams ?
Altri ?
Tu come fai ?
 
Nel frattempo sto esercitandomi con le piu' disparate ottimizzazioni sul mio TS e ritorna sempre lo stesso problema.
Usando EurUsd dove il database e' piu' profondo e usando vari range temporali i parametri ottimizzati e i profitti variano in continuazione.
Usando periodi di uno o due mesi il profitto e' stratosferico.
Usando periodi di media lunghezza, come quello di 20 mesi che ho utilizzato finora, il profitto e' mediamente buono.
Usando l'intero database il profitto quasi sparisce.
Sembra un rompicapo inestricabile.
Tutto sommato continuo a pensare che la soluzione sia quella che pensavo fin dall'inizio, ovvero ottimizzare su un breve periodo e riottimizzare ogni due/tre giorni sciftando in avanti l'intervallo temporale.
In questo modo l'ottimizzazione "insegue" l'andamento del mercato.
Non mi viene in mente altro.
Continuo pertanto a porre la domanda che pongo fin dall'inizio : qualcuno conosce e mi suggerisce un metodo pratico per gestire e manutenere un TS ?

:ciao:
 
Una curiosità, siccome ti ho detto che 8 parametri per soli 40 trade di backtest son troppi.
Se ti va fai una prova in questo modo, inverti l'operatività, dove entrava long fallo entrare short e viceversa. Ed ottimizza.
Se 8 parametri son troppi, forse dovremmo ottenere ottimi risultati ottimizzati anche in tal modo, a riprova dell'overfitting. Se invece il ts coglie un bias di fondo dello strumento l'esperimento dovrebbe fallire.
Ha qualcosa di sensato l'idea?
 
Una curiosità, siccome ti ho detto che 8 parametri per soli 40 trade di backtest son troppi.
Se ti va fai una prova in questo modo, inverti l'operatività, dove entrava long fallo entrare short e viceversa. Ed ottimizza.
Se 8 parametri son troppi, forse dovremmo ottenere ottimi risultati ottimizzati anche in tal modo, a riprova dell'overfitting. Se invece il ts coglie un bias di fondo dello strumento l'esperimento dovrebbe fallire.
Ha qualcosa di sensato l'idea?

Grazie auto...
Faro' certamente questa prova e poi metterò i risultati.
Ciao.
 

Users who are viewing this thread

Back
Alto