Sei sulla pagina 1di 19

PROREALTIME - PROBACKTEST

ESEMPI DI SISTEMI PER PROBACKTEST

Vediamo ora alcuni esempi di SISTEMI AUTOMATICI BASE con cui svolgere i backtest.

Questi sistemi di esempio possono essere cambiati e personalizzati da voi ulteriormente.

Inoltre, possono servire anche per determinare i parametri degli indicatori dominanti di uno strumento.

Come esempio utilizzeremo il cambio forex EUR/USD.

Per la grandezza della posizione potete decidere se utilizzare il comando CASH, determinando l'ammontare
dei contratti in base ad un dato capitale.

Oppure potete utilizzare SHARES, per il forex defininendo la grandezza del contratto.

In questi sistemi definisco il contratto di compravendita di 1 shares come default pari a 10.000 $ (1
minilotto) e con un capitale totale di 10.000 $.

Le variabili (segnate in blu) sono da impostare con i range dei valori ed i passi che potete scegliere a vostro
piacimento.

1 - INCROCIO PREZZO-MEDIA MOBILE

Questo sistema è utile per trovare la media mobile dominante, cioè quella media mobile che restituisce la
miglior performance quando incrocia il prezzo.

Conseguentemente il sistema ci indica la media mobile più correlata con i trend.

Io ho impostato la media mobile semplice, ma potete utilizzare una qualsiasi altra media mobile, basta
cambiare l'indicatore.

Se volete utilizzare il sistema per trovare il periodo dominante non v'interessa impostare il rischio con la %
sul capitale. Vi interessa sapere solamente quale sia il periodo più performante.

Se volete analizzarlo come sistema di trading consiglio di utilizzare la % di rischio, cioè impostando uno stop
loss con il quale calcolarlo medianto la formula: lotti=rischio/(entry -stoploss) o rischio/(stoploss-+entry).
Lo vedremo meglio nella pagina successiva.

DEFPARAM CumulateOrders = false


// definizione medie mobili
sma=average[X](close)
prezzo= close

// definizione condizioni
C1=prezzo crosses over sma
C2=prezzo crosses under sma

// apertura long
if C1 then
buy 1 shares at market
endif
// chiusura long
If longonmarket and C2 then
Sell at market
Endif

// vendita allo scoperto


if C2 then
sellshort 1 shares at market
endif
// chiusura short
if shortonmarket and C1 then
exitshort at market
endif

 
 

Ecco la media mobile semplice giornaliera dominante di EUR/USD degli ultimi 10 anni.

Ho settato i parametri della variabile tra i valori 10 e 300 con un passo di 10.

Questo passo può essere ulteriormente ridotto a 5 oppure ad 1.

Il risultato è stato: 160 con un profitto pari al 77,77% del conto.

Ricordatevi però che più si va nel piccolo, più il risultato è influenzato dai diversi prezzi dello strumento
forniti dai vari brokers.

Notate come la media mobile segua bene le fasi bull e bear del mercato, e che nell'ultimo periodo di
trading range è quasi perfettamente piatta!

2 - INCROCIO DI DUE MEDIE MOBILI

Abbiamo già visto come funziona questo sistema nella pagina precedente.
Riproponiamolo questa volta come esempio di incrocio tra due medie mobili semplici.

Come l'incrocio tra prezzo e media mobile determina una media mobile dominante di uno strumento,
l'incrocio tra due medie mobili determina le due medie mobili dominanti, cioè quelle che determinano i
trend stessi.

Quando avviene un incrocio si ha il segnale di acquisto o di vendita e quando la media mobile breve è sopra
la media mobile lunga, siamo in presenza di un trend rialzista mentre quando è sotto siamo in presenza di
un trend ribassista.

Quindi facendo girare questo sistema possiamo determinare le medie mobili che utilizzeremo per orientarci
in ogni singolo mercato.

Ecco l'importanza dei backtest!

In questo caso ho utilizzato i seguenti parametri per le variabili:

media mobile breve: 5 - 50, passo 5.

media mobile lunga: 50 - 300, passo 5.

Risultato: 45-135 con un profitto pari al 89,19% del conto.

DEFPARAM CumulateOrders = false


// definizione indicatori
smabreve= average[breve](close)
smalunga= average[lunga](close)

// condizioni di acquisto e di vendita


C1=smabreve crosses over smalunga
C2=smabreve crosses under smalunga

C3=lunga>=(breve*1.5)

// entrata in posizione long


if C1 and C3 then
buy 1 shares at market
endif
// chiusura long
if longonmarket and C2 then
Sell at market
endif
// vendita allo scoperto
if C2 and C3 then
sellshort 1 shares at market
endif
// chiusura short
if shortonmarket and C1 then
exitshort at market
endif

3 - SWING TRADING CON 2 MEDIE MOBILI

Questo sistema è una via di mezzo dei due precedenti.

Trova quale è la media mobile di lungo periodo e quella di breve periodo la quale, all'incrocio con il prezzo,
da la migliore performance.

La media mobile di lungo periodo definisce il trend sottostante, mentre quella a breve periodo i
ritracciamenti secondari.

Ho chiamato questa strategia swing trading perchè il prezzo, per incrociare con la media mobile breve deve
trovarsi necessariamente tra questa e quella di più lungo periodo.

Il risultato mi da i parametri relativi alla strategia di swing trading.


 

DEFPARAM CumulateOrders = false


// definizione indicatori
smabreve= average[breve](close)
smalunga= average[lunga](close)

prezzo=close

// condizioni di acquisto e di vendita


C1=smabreve>smalunga
C2=smabreve<smalunga

C3=prezzo crosses over smabreve

C4= prezzo crosses under smabreve

C5=lunga>=(breve*1.5)

// entrata in posizione long


if C1 and C3 and C5 then
buy 1 shares at market
endif
// chiusura long
if longonmarket and C4 then
Sell at market
endif
// vendita allo scoperto
if C2 and C4 and C5 then
sellshort 1 shares at market
endif
// chiusura short
if shortonmarket and C3 then
exitshort at market
endif

Variabili

emabreve: 5-50 passo 5

emalunga: 20-300 passo 10

RISULTATO: 45-90, con 67,50% di profitto.

 
4 - OSCILLATORI

Questo sistema trova quali sono i più efficienti livelli di ipercomprato, ipervenduto ed il periodo
dell'oscillatore dominante.

Lo stesso codice può essere utilizzato per altri oscillatori come l'RSI, lo stocastico od il commodity channel
index.

Le condizioni per l'entrata long prevedono un incrocio a rialzo del livello di ipervenduto e per l'entrata short
un incrocio a ribasso del livello di ipercomprato.

Le variabili da impostare sono il periodo X dell'oscillatore ed i livelli di ipercomprato ed ipervenduto.

DEFPARAM CUMULATEORDERS=false
// definizione indicatore
MYWILLIAMS=WILLIAMS[X](close)
// definizione condizioni
C1=MYWILLIAMS[1]<ipervenduto
C2=MYWILLIAMS[0]>=ipervenduto
C3=MYWILLIAMS[0]>MYWILLIAMS[1]
C4=MYWILLIAMS[1]>ipercomprato
C5=MYWILLIAMS[0]<=ipercomprato
C6=MYWILLIAMS[0]<MYWILLIAMS[1]
// apertura long
If C1 and C2 and c3 then
BUY 1 shares AT MARKET
ENDIF
// chiusura long
If C4 and C5 and C6 and LONGONMARKET THEN
SELL AT MARKET
ENDIF
// apertura short
If C4 and C5 and C6 THEN
SELLSHORT 1 shares AT MARKET
ENDIF
// chiusura short
If C1 and C2 and C3 and SHORTONMARKET THEN
EXITSHORT AT MARKET
ENDIF

Per le variabili ho settato i seguenti parametri:

ipecomprato: -30, 0 passo 5

ipervenduto: -100, -70 passo 5

periodo oscillatore X: 5 - 40, passo 5.


 

Risultato: -75 (ipervenduto),-30 (ipercomprato),

periodo 30 con un profitto pari al 111,21 % del conto.

Questi parametri possono essere ulteriormente ristretti con passo a 2 per esempio.

Consiglio di impostare i livelli con valori simili a quelli di default per non snaturare e sviare troppo le
funzioni dell'oscillatore, cioè quelle di determinare due bande opposte di prezzo.

5 - MACD

Questo sistema trova i parametri più adatti dell'indicatore MACD per un determinato mercato.

Si basa sulla miglior performance data dall'incrocio delle 2 linee del MACD:

la linea MACD data dalla differenza tra 2 medie mobili esponenziali e la linea SIGNAL, che è la media mobile
esponenziale della linea MACD.

Entra in posizione long quando la linea MACD incrocia a rialzo la SIGNAL ed entrambe si trovano sotto lo 0
(ipervenduto), mentre entra in posizione short quando la MACD incrocia a ribasso la SIGNAL ed entrambe si
trovano sopra lo 0 (ipercomprato).

Escono di posizione quando avviene un incrocio inverso sia che le linee siano sopra o sotto lo 0.

Per fare questo si è reso necessario scomporre l'indicatore nelle sue componenti, e cioè le due medie
mobili esponenziali a breve e lungo periodo e la media mobile di lisciatura della differenza tra le due.

Come variabili ho inserito i seguenti parametri:

breve: 5 - 25, passo 1

lunga: 10 - 40, passo 1

liscia: 4 - 15, passo 1

Risultato: MACD (8,35,6) con un profitto pari solo all' 36,71% del conto.
 

DEFPARAM CUMULATEORDERS=false

// definizione indicatori

A=exponentialaverage[breve](close)

B= exponentialaverage[lunga](close)

// calcolo linea MACD

LINEAMACD=A-B

SIGNAL=exponentialaverage[liscia](MACD)

// definizione condizioni

C1=LINEAMACD<0 and SIGNAL<0

C2=LINEAMACD crosses over SIGNAL

C3=LINEAMACD>0 and SIGNAL>0

C4= LINEAMACD crosses under SIGNAL

C5=lunga>(breve*1.5)

// apertura long

If not longonmarket and C1 and C2 and C5 then

buy 1 SHARES at market

endif

// chiusura posizione long

if C4 and longonmarket then

sell at market

endif

// apertura short

if not shortonmarket and C3 and C4 and C5 then

sellshort 1 SHARES at market

endif
// chiusura posizione short

if C2 and shortonmarket then

exitshort at market

endif

6 - SUPERTREND

Questo sistema si può trovare anche all'interno della piattaforma.

Può essere utilizzato anche con il volatility stop o gli indicatori di Abraham visti nella sezione Probuilder,
basta richiamarli con la funzione MYFUCTION una volta salvati come indicatori personalizzati.

Questo sistema ha lo scopo di definire i parametri ideali sia del sistema supertrend che nella sua funzione di
stop loss/trailing profit.

Le variabili da impostare sono il moltiplicatore X ed il periodo Y.


Ogni volta che lo stop loss incrocia il prezzo apre una posizione e chiude quella aperta precedentemente
nella direzione opposta.

Ho settato come parametri delle variabili:

0.2 - 4 - passo 0.2 per il moltiplicatore X.

5 - 40 passo 5 per il periodo dell'ATR Y.

Il risultato è stato 1,4 per il moltiplicatore e 15 per il periodo con un profitto pari al 80,24 % del conto.

DEFPARAM CUMULATEORDERS=false

// definizione indicatori
stoploss=supertrend[X,Y]

prezzo=close[0]

// definizione condizioni
C1=prezzo>stoploss
C2=prezzo<stoploss

// apertura long
If C1 then
BUY 1 shares AT MARKET
ENDIF

// chiusura long
If C2 and LONGONMARKET THEN
SELL AT MARKET
ENDIF

// apertura short
If C2 THEN
SELLSHORT 1 shares AT MARKET
ENDIF

// chiusura short
If C1 and SHORTONMARKET THEN
EXITSHORT AT MARKET
ENDIF

 
7 - DOPPIO SUPERTREND

Questo sistema utilizza 2 supertrend, uno maggiore, per determinare il trend a lungo termine, e l'altro
minore, per determinare entrate ed uscite.

E' simile ai sistemi con i canali di Donchian che vredremo nel capitolo successivo.

Anche per questo sistema possono essere utilizzati altri indicatori di trend lineari simili.

Per il settaggio delle variabili, manteniamo il periodo 20 per tutti e due i supetrend, mentre variamo solo i
coefficienti moltiplicatori X e Y

X=1-4, passo 0.1

Y=1-3 passo 0.1

DEFPARAM CUMULATEORDERS=false

// definizione indicatori

majortrend=supertrend[X,20]
stoploss=supertrend[Y,20]

prezzo=close[0]

// definizione condizioni
C1=prezzo>majortrend

C2=prezzo<majortrend

C3=prezzo>stoploss
C4=prezzo<stoploss

C5=x>(y*2)

// apertura long
If C1 and C3 and C5 then
BUY 1 shares AT MARKET
ENDIF

// chiusura long
If C4 and LONGONMARKET THEN
SELL AT MARKET
ENDIF

// apertura short
If C2 and C4 and C5 THEN
SELLSHORT 1 shares AT MARKET
ENDIF

// chiusura short
If C3 and SHORTONMARKET THEN
EXITSHORT AT MARKET
ENDIF

Risultato: X=2,7 e Y=1,3 con il 55,23% di profitto sul conto.

 
8 - NUOVI MASSIMI/MINIMI CON STOP LOSS E TARGET PROFIT

Mediante questo esempio, vogliamo impostare un sistema che ad un nuovo massimo di prezzo di N periodi
apre una posizione long, mentre ad ogni nuovo minimo di N periodi apre una posizione short, posizionando
uno STOP LOSS ed un TARGET PROFIT a determinate distanze dal prezzo di entrata.

La candela deve chiudere sopra il massimo storico e sotto il minimo storico di periodo.

Vediamo quindi come determinare lo stop loss e take profit nei 2 seguenti modi:

1) SL e TP con le ottimizzazioni del sistema, cioè vedere quale quantità di $ è quella ideale con i dati storici e
la statistica,

2) posizionare lo stop loss automaticamente a livello del minimo della candela di nuovo massimo per un
trade long o a livello del massimo della candela di nuovo minimo per un trade short ed un target profit da
ottimizzare il base al rapporto rischio-rendimento.

In entrambi i casi possiamo tralasciare le istruzioni di chiusura long e chiusura short poichè impostiamo
stop loss e take profit all'interno delle istruzioni di BUY e SELLSHORT.
 

Il codice per determinare un nuovo massimo o minimo sono quelli che vedremo successivamente con i
Canali di Donchian è molto semplice:

DEFPARAM CUMULATEORDERS=false

// definizione indicatori

massimo=highest[X](high)[1]

minimo=lowest[X](low)[1]

// definizione condizioni
C1=close>massimo

C2=close<minimo

// apertura long
If C1 then
BUY 1 shares AT MARKET

set stop $loss SL

set target $profit TP


ENDIF

// apertura short
If C2 THEN
SELLSHORT 1 shares AT MARKET

set stop $loss SL

set target $profit TP

ENDIF

Come potete vedere abbiamo impostato la variabile X per i periodi di massimo e minimo (10-200; 10), e le
variabili SL (50-200;10) e TP (50-1000;50) per lo stop loss ed il target profit, che in questo caso, verranno
calcolati come quantità di $ di perdita e profitto.

Potete anche settarli come unità, pips o % di distanza dal prezzo entry.
 

Risultato: X=70, SL=170 $, TP=850 $  con il 76,50 % di profitto sul conto.

Allo stesso modo può essere impostato una variabile di trailing profit con il comando:

SET STOP $TRAILING Z

Vediamo ora i codici del 2° esempio, cioè impostando lo stop loss automaticamente a livello del minimo
della candela di nuovo massimo per un trade long e a livello del massimo della candela di nuovo minimo
per un trade short con un target profit da ottimizzare il base al rapporto rischio-rendimento.

Quindi impostiamo gli stop loss come differenza tra il livello di entry trade, cioè l'apertura della successiva
che corrisponde alla chiusura del giorno in cui avviene il segnale, salvo aperture in gap.

Impostiamo poi il target con un moltiplicatore di quella distanza.

Le variabili sono: X (10-200; 10) e Y (1-10; 0,2)

 
DEFPARAM CUMULATEORDERS=false

// definizione indicatori

massimo=highest[X](high)[1]

minimo=lowest[X](low)[1]

// definizione condizioni
C1=close>massimo

C2=close<minimo

C3=close[0]-low[0]

C4=high[0]-close[0]

// apertura long
If C1 then
BUY 1 shares AT MARKET

set stop loss C3

set target profit C3*Y


ENDIF

// apertura short
If C2 THEN
SELLSHORT 1 shares AT MARKET

set stop loss C4

set target profit C4*Y

ENDIF

Il risultato è stato: X=60 e Y=6,8 per un profitto pari al 58,78 % del conto.

Potrebbero piacerti anche