Programmazione Metatrader Overfitting_II (per principianti) (1 Viewer)

Tolomeo

Perdo pelo, non il vizio
Dunque il segnale di ingresso sul mercato del TS avra' parametri fissi e non dovrò ottimizzarlo.
Per quanto riguarda la controversa gestione del

TAKE-PROFIT e STOP LOSS

in attesa di scoprire come fanno guru a uscire sul profitto massimo, utilizzero' questo algoritmo :

if (ActualProf >= MaxProf) MaxProf = ActualProf;
if (MaxProf > 0) Tkprft = MaxProf - IniStplss;
if (MaxProf >= P1) Tkprft = MaxProf * 0.10;
if (MaxProf >= P2) Tkprft = MaxProf * 0.25;
if (MaxProf >= P3) Tkprft = MaxProf * 0.33;
if (MaxProf >= P4) Tkprft = MaxProf * 0.50;
if (MaxProf >= P5) Tkprft = MaxProf * 0.67;
if (MaxProf >= P6) Tkprft = MaxProf * 0.75;
if (MaxProf >= P7) Tkprft = MaxProf * 0.9;

Il significato del listato MT4 dovrebbe essere facilmente comprensibile da tutti.
Dirò solo che "IniStplss" e' il valore di ingresso dello stop-loss ed e' la prima delle due variabili che necessiteranno di ottimizzazione.
I valori da P1 a P7 sono delle costanti che andranno definite una-tantum, in funzione dello strumento, ovvero della sua dinamica, e dell'investimento caricato sul trade (n. di lotti).
La filosofia e' quella di catturare un qualsiasi profitto, non appena venga neutralizzato il valore iniziale dello stop-loss.
Per cercare, per quanto possibile, di lasciar correre il profitto, il trailing sarà lieve per profitti bassi e via via piu' incisivo se il profitto corre, in modo da lasciare comunque un certo spazio per gli inevitabili ritracciamenti/rimbalzi all'interno del trend.
Un possibile futuro miglioramento dell'algoritmo potrà essere quello di definire una funzione continua appropriata (lineare, parabolica, ellittica ecc.) invece dei quanti di percentuale.

Mentre l'ingresso del trade avverrà sempre all'apertura della candela, la sua uscita in perdita/profitto potra' avvenire in ogni momento; in altre parole il profitto attuale (ActualProf) sarà calcolato ad ogni tick.
 

Tolomeo

Perdo pelo, non il vizio
:vomito:



1- che c'entra con l'underfitting?
2- in che senso e per quale motivo ci si dovrebbe sganciare in automatico?
3- a meno che non fai arbitraggi puri, qualunque tipo di trading consiste nel fare previsioni.

1- che c'entra con l'underfitting?

Boh, da quel che ho capito dal post di Aldila... l'underfitting consiste nel trascurare i driver (economici, monetari, sociopsicodinamici ecc) che determinano il movimento del prezzo; ma se a me interessa solo di attaccarmi al movimento e seguirlo...

2- in che senso e per quale motivo ci si dovrebbe sganciare in automatico?

allora sono automaticamente disinteressato dal conoscere il perche' di quel movimento, lo seguo e basta.

3- a meno che non fai arbitraggi puri, qualunque tipo di trading consiste nel fare previsioni.

riconoscere un trend significa osservare il passato, non fare una previsione; se vedo che e' partito un trend, gli vado dietro; questo non e' un esercizio predittivo, casomai e' un atto di fede (o di co@lionaggine) :lol:. o no ?

Ciao e grazie.
 

Tolomeo

Perdo pelo, non il vizio
E vengo all'ultimo aspetto da considerare:
LO STAND-BY

Se l'algoritmo SL/TP mi butta fuori dal trade, significa che si e' verificata una inversione del trend rispetto alla direzione giusta.
Se il trailing non e' abbastanza largo, potrei essere buttato fuori da un ritracciamento/rimbalzo che si e' manifestato sul trend principale.
Il trend potrebbe poi riprendere la sua direzione originaria, mentre il mio TS e' fuori dal mercato.
A questo punto avrei davanti a me tre strade:

- se il segnale MACD conferma il trend originario, rientro immediatamente
- rimango fuori, inibisco il rientro nella stessa direzione e aspetto l'inversione del segnale MACD;
- mi metto in stand-by per un certo numero di candele e poi rientro sulla base del segnale MACD dopo lo stand-by

La prima opzione e' rischiosa perche' potrei trovarmi nella fase finale del segnale MACD, mentre il trend e' gia cambiato.
La seconda opzione e' troppo conservativa perche' se il trend originario riprendesse il suo cammino originale per molto tempo, perderei la possibilità di catturare un ulteriore profitto.
La terza opzione potrebbe essere un buon compromesso, se il periodo di stand-by si avvicinasse mediamente alla durata residua del rimbalzo/ritracciamento o alla durata della fase finale di un segnale MACD, in ritardo rispetto al cambio di trend.

Dunque scelgo la terza opzione, andando a introdurre un nuovo parametro (Delay) che indica al TS la durata (n. di candele) dello stand-by, durante il quale non verrà effettuata alcuna operazione e al termine del quale si verificherà il rientro sul mercato, sulla base del valore assunto dal segnale MACD.

La variabile Delay costituisce il secondo parametro che dovrò ottimizzare (il primo e IniStplss).

A questo punto il progetto di TS e' pressoche' completo.

Sarebbe bello se qualcuno volesse contribuire all'avventura con suggerimenti, integrazioni, correzioni e critiche volte a renderlo migliore.

Intanto io comincio a prepararlo...
 

Tolomeo

Perdo pelo, non il vizio
Il TS e' scritto.

Rispetto all'idea originaria, ho deciso di utilizzare l'Eurostox50 invece del DAX.
Gli strumenti sono pressoche' identici negli andamenti ma il primo consente di tradare in modo piu' tranquillo, a parità di investimento.
Finche' non sarò certo della profittabilità del TS, meglio usarlo su uno strumento meno rischioso.
A questo punto il prossimo passaggio consiste nella parametrazione dell'algoritmo che gestisce SL e TP.
Come base di partenza e di riferimento, ho pensato di eseguire un test del TS "senza rete", ovvero disattivando l'algoritmo, giusto per capire come si comporterebbe dovendo dipendere esclusivamente dall' oscillatore MACD.
Non essendoci uscite dai trade per SL/TP, anche il parametro Delay non viene considerato nel test.
In altri termini il reversal long/short avviene ad ogni cambio di pendenza del MACD.
Ancora : usato in questo modo il TS UTILIZZA SOLO PARAMETRI FISSI. Ecco il risultato del test, sugli ultimi sei mesi:

Strategy Tester Report
My_Sys_Mom_MACD

Simbolo Euro50Mar15 (EuroStoxx 50 March 2015 CFD)
Periodo Giornaliero (D1) 2014.08.04 00:00 - 2015.01.28 00:00 (2014.08.03 - 2015.01.29)
Modello Ogni tick (il metodo precissimo sulla base di tutti gli intervalli di tempo minimi)
Parametri AppliedPrice=1; SMAFast=8; SMASlow=13; MyMagic=880403; MyLts=0.1; PointFctr=9999; MaxDelay=1; IniTrade=0; IniStplss=999; ProfTrgt=999; ProfFctr=1;
Barre sotto esame 1036 Ticks adoperati per il modello 517020
Deposito iniziale 10000.00
Profitto totale netto 767.00

Profitto lordo 1243.00 Perdita lorda -476.00
Fattore di profitto (profit factor) 2.61 Ricompensa attesa 31.96
Drawdown assoluto 17.00 Drawdown massimo 265.00 (2.54%) Drawdown relativo 2.54% (265.00)
Operazioni totali 24
Posizioni al ribasso (vincite %) 12 (41.67%) Posizioni al rialzo (vincite %) 12 (50.00%)
Operazioni con profitto (% del totale) 11 (45.83%)
Operazioni in perdita (% del totale) 13 (54.17%)
Il piu' grande operazione con profito 257.00
Il piu' grande operazione in perdita -93.00
Media operazione con profito 113.00
Media operazione in perdita -36.62
Massimo vincite consecutive (profitto in denaro) 3 (270.00)
Massimo perdite consecutive (perdita in denaro) 4 (-61.00)
Massimale profitto consecutivo (numero delle vincite) 270.00 (3)
Massimale perdita consecutiva (numero delle perdite) -153.00 (2)
Media vincite consecutive 2
Media perdite consecutive 2

Allego anche il grafico della equity line.

Il TS rende piu' del 7% in sei mesi.
Il rapporto vincite su perdite non e' molto buono ma il profitto medio delle vincite e' nettamente piu' alto del profitto medio delle perdite.

Per un TS "grezzo", con parametrazione fissa, direi che non e' male.
Ora si tratta di vedere se introducendo i parametri "IniStplss" e "Delay" e l'algoritmo di gestione di SL e TP, riusciro' ad innalzare le prestazioni del TS.

:ciao:
 

Allegati

  • TesterGraph.gif
    TesterGraph.gif
    12,3 KB · Visite: 254

Tolomeo

Perdo pelo, non il vizio
Procedendo uno step alla volta, ho effettuato sul medesimo periodo del test precedente, una ottimizzazione dei due parametri IniStplss e Delay.
Per ora non e' ancora attivo alcun algoritmo di trailing del profitto.
Pertanto il TS entra ed esce dai trade solo per effetto dello SL o del cambio di pendenza del MACD.
Il migliore risultato viene ottenuto con :

MaxDelay=4;

IniStplss=105

Ecco il report:

Strategy Tester Report
My_Sys_Mom_MACD

Simbolo Euro50Mar15 (EuroStoxx 50 March 2015 CFD)
Periodo Giornaliero (D1) 2014.08.04 00:00 - 2015.01.28 00:00 (2014.08.03 - 2015.01.29)
Modello Ogni tick (il metodo precissimo sulla base di tutti gli intervalli di tempo minimi)
Parametri AppliedPrice=1; SMAFast=8; SMASlow=13; MyMagic=880403; MyLts=0.1; PointFctr=9999; MaxDelay=4; IniTrade=0; IniStplss=105; ProfTrgt=999; ProfFctr=1;

Barre sotto esame 1036
Ticks adoperati per il modello 517020
Deposito iniziale 10000.00
Profitto totale netto 847.00
Profitto lordo 1275.00
Perdita lorda -428.00
Fattore di profitto (profit factor) 2.98
Ricompensa attesa 36.83
Drawdown assoluto 17.00
Drawdown massimo 237.00 (2.20%)
Drawdown relativo 2.20% (237.00)
Operazioni totali 23
Posizioni al ribasso (vincite %) 11 (45.45%)
Posizioni al rialzo (vincite %) 12 (50.00%)
Operazioni con profitto (% del totale) 11 (47.83%)
Operazioni in perdita (% del totale) 12 (52.17%)
Il piu' grande
operazione con profito 257.00
operazione in perdita -105.00
Media
operazione con profito 115.91
operazione in perdita -35.67
Massimo
vincite consecutive (profitto in denaro) 3 (270.00)
perdite consecutive (perdita in denaro) 4 (-61.00)
Massimale
profitto consecutivo (numero delle vincite) 270.00 (3)
perdita consecutiva (numero delle perdite) -111.00 (2)
Media
vincite consecutive 2
perdite consecutive 2

C'e' un sensibile miglioramento della profittabilità, ma niente di clamoroso.
Il DD massimo resta sempre poco sopra del 2%, con incremento del rendimento del 7,67% all' 8,47%.
Ovviamente questi test preliminari, effettuati solo su sei mesi, non sono molto significativi ma solo indicativi.
La conclusione a questo punto e' che la ottimizzazione dei due parametri potrebbe non essere cosi' importante, ovvero si potrebbe operare senza SL e senza Delay, senza perdere molto in profittabilità.
Se cosi' fosse saremmo completamente svincolati dall'overfitting, non avendo alcuna necessità di effettuare ottimizzazioni.
Il che non sarebbe male.
Per dire una parola definitiva faro' un test su un periodo molto piu' lungo, il che richiederà un po' di tempo.
Per ora continuerò a non utilizzare il trailing sul profitto.
 

Tolomeo

Perdo pelo, non il vizio
Sto incontrando una difficoltà imprevista.
Il database del mio MT4 non va piu' indietro di maggio 2013 con i singoli tick relativi all'Eurostox50.
Potro' quindi testare e ottimizzare il TS solo fino a un max di 20 mesi circa, che non e' un granche'.
In rete ho trovato database piu' profondi per le valute ma non per i CFD sugli indici.
Dovro' cercare qualche altro database (gratuito) e poi convertire i dati (che palle :wall:).
Riporto comunque i dati salienti del test di riferimento sui 20 mesi, ovvero senza SL, TP e Delay.

Profitto totale netto 1122.00
Drawdown assoluto 69.00
Drawdown massimo 281.00 (2.65%)
Operazioni totali 102
Operazioni con profitto (% del totale) 41 (40.20%)
Operazioni in perdita (% del totale) 61 (59.80%)
Il piu' grande
operazione con profito 257.00
operazione in perdita -93.00
Media
operazione con profito 71.88
operazione in perdita -29.92
Massimo

Con l'aumento del periodo di test peggiora sensibilmente la profittabilità, ma questo non costituisce una novità: succede sempre con qualsiasi TS.
Nel prossimo post vedremo cosa succede ottimizzando i soliti due parametri

:ciao:
 

Tolomeo

Perdo pelo, non il vizio
Ottimizzando, i risultati migliori su 20 mesi si ottengono ponendo:

MaxDelay=3;
IniStplss=110;

Ecco la sintesi del report:

Profitto totale netto 1195.00
Drawdown assoluto 41.00
Drawdown massimo 313.00 (2.94%)
Operazioni totali 101
Operazioni con profitto (% del totale) 41 (40.59%)
Operazioni in perdita (% del totale) 60 (59.41%)
Il piu' grande
operazione con profito 257.00
operazione in perdita -114.00
Media
operazione con profito 72.71
operazione in perdita -29.77

L'incremento di profitto e' veramente irrisorio, e la perdita massima su singolo trade e' addirittura peggiore rispetto alla versione senza SL.
Questo mi fa propendere a proseguire la messa a punto del TS rinunciando definitivamente a inserire SL e Delay.
Per ora non sto ancora prendendo in esame la questione del TP (e nel frattempo seguo l'evoluzione del dibattito sul 3D Overfitting, in attesa di illuminazioni...:D).

:ciao:
 

boob

Nuovo forumer
Questo mi fa propendere a proseguire la messa a punto del TS rinunciando definitivamente a inserire SL e Delay.
Io non metto mai nessun stop loss. Da prove fatte con i miei TS qualsiasi uscita dalla posizione con un valore fisso genera overfit e alla lunga peggiora le performance del TS.
Preferisco uscite ragionate con indicatori.
Secondo me con un buon algoritmo riesci comunque a gestire bene la massima perdita sostenibile
 

Tolomeo

Perdo pelo, non il vizio
Io non metto mai nessun stop loss. Da prove fatte con i miei TS qualsiasi uscita dalla posizione con un valore fisso genera overfit e alla lunga peggiora le performance del TS.
Preferisco uscite ragionate con indicatori.
Secondo me con un buon algoritmo riesci comunque a gestire bene la massima perdita sostenibile

Grazie boob, credo che seguiro' il tuo consiglio :up:.

Ora sto appunto pensando come migliorare l'indicatore per evitare falsi segnali di entrata/uscita e migliorare il rapporto vincite/perdite.

Già ho una mezza idea ...:rolleyes:
 

Tolomeo

Perdo pelo, non il vizio
Lavorando sull'oscillatore MACD, ho preparato una modifica al TS, volta a limitare i falsi segnali e conseguentemente il numero di entrate e uscite.

Le modifiche consistono in:

- attivazione del MACD Signal, ovvero della media mobile semplice calcolata sul valore grezzo del MACD;

- calcolo del momento del MACD Signal invece che del MACD grezzo;

- introduzione del parametro "Limit", ovvero di una range di valori intorno a zero all'interno del quale il cambio di pendenza non viene preso in considerazione; espresso in programmazione MT4 viene cosi':

for( pos=Barstocalc; pos>=0; pos-- )
{
MyMacd[pos] = iMACD(NULL,Timeframe,SMAFast,SMASlow,SMASignal,AppliedPrice,Mode,pos);

Mom_Point[pos] = oldind;
if((MyMacd[pos] - MyMacd[pos+1]) > Limit) Mom_Point[pos] = 1;
if((MyMacd[pos] - MyMacd[pos+1]) < -Limit) Mom_Point[pos] = -1;
oldind = Mom_Point[pos];
}

Se, come risultato della esperienza maturata fino ad ora, non risulta necessario introdurre le variabili "IniStplss" e "Delay", l'introduzione del nuovo parametro "Limit" (da ottimizzare) non peggiora le specifiche del progetto iniziale, che voleva il minor numero possibile di parametri generatori di overfitting.
Nel grafico si vede bene l'effetto di smooting dei trade nella nuova versione (finestra sotto), rispetto alla versione originale (finestra di mezzo).
Per contro si osserva un ritardo di una/due candele nell'inversione dei principali trade.
Il prossimo step sarà l'inserimento del nuovo oscillatore nel TS e l'esecuzione dei test.

:ciao:
 

Allegati

  • Euro50Mar15Daily.png
    Euro50Mar15Daily.png
    53,5 KB · Visite: 452

Users who are viewing this thread

Alto