Riprendiamo il trading system presentato nelle puntate precedenti, basato sulle bande di Bollinger. Il nostro obiettivo dichiarato è migliorare le performance che di base sono positive, con un profit factor maggiore di 1.4 sul titolo Fiat, preso come base di test.
Rispetto al sorgente abbiamo apportato i seguenti interventi:
- abbiamo inserito un filtro di volatilità in cui l’ATR a 5 periodi deve essere maggiore dell’ATR a 15 periodi. Solo quando si verifica questa condizione il trading system inizierà ad operare;
- abbiamo aggiunto un trailing stop dinamico sul minimo delle 7 barre precedenti, per il caso long, e sul massimo delle 7 barre precedenti per il caso short;
- abbiamo ottimizzato i tre input. La media veloce è stata ottimizzata da 7 a 10 periodi. La media lenta da 14 a 20 periodi e la lunghezza delle bande di Bollinger da 20 a 25 periodi. Così facendo si ottengono 168 combinazioni di input. Questo tema è molto delicato. L’ottimizzazione ha grandi potenzialità ma spesso si rischia l’”overfitting” ottenendo performance passate molto buone ma poi deludenti in real time, quindi va usata con moderazione e con piccoli accorgimenti (che si possono approfondire in “Trading system vincenti” edito da Hoepli)
- Abbiamo allargato lo stop loss di mezzo punto. In questo modo abbiamo ottenuto un profit factor molto buono, maggiore di 2. Il drawdown massimo si dimezza a fronte di guadagni che sono più bassi appena del 18%. Questo significa che il rapporto rischio/rendimento migliora in modo molto netto. Anche la percentuale di successo aumenta significativamente.
{Codice per Omega Prosuite 2000i}
Input: len1(9), len2(15), lenboll(23);
if avgtruerange(5) > avgtruerange(14) then begin
if average(close, len1) crosses over average(close, len2 )
and c < bollingerband(close, lenboll, 2)
and c > bollingerband(close, lenboll, -2) then buy next bar at market;
if average(close, len1) crosses under average(close, len2) a
and c < bollingerband(close, lenboll, 2) and c > bollingerband(close, lenboll, -2) then sell next bar at market;
end;
if marketposition = 1 then exitlong (“Stopl”) next bar at entryprice*0.965 stop;
if marketposition = -1 then exitshort (“stops”) next bar at entryprice*1.035 stop;
if marketposition = 1 then exitlong (“TrailL”) at lowest(L, 7)[1] stop;
if marketposition = -1 then exitshort (“TrailSL”) at highest(H, 7)[1] stop;
Ulteriori implementazioni sarebbero possibili (come ad esempio aggiungere condizioni che portino lo stop a pareggio dopo un certo numero di barre) ma li lasciamo al lettore come utile esercizio.
TradeStation Strategy Performance Report – MF1 ITAF-Daily (03/04/1995-17/07/2013) | ||||||
Performance Summary: All Trades | ||||||
Total Net Profit | $26,994.6836 | Open position P/L | $649.9500 | |||
Gross Profit | $46,446.9141 | Gross Loss | ($19,452.2305) | |||
Total # of trades | 118 | Percent profitable | 38.98% | |||
Number winning trades | 46 | Number losing trades | 72 | |||
Largest winning trade | $9,443.4326 | Largest losing trade | ($910.8320) | |||
Average winning trade | $1,009.7155 | Average losing trade | ($270.1699) | |||
Ratio avg win/avg loss | 3.7373 | Avg trade (win & loss) | $228.7685 | |||
Max consec. Winners | 4 | Max consec. losers | 6 | |||
Avg # bars in winners | 20 | Avg # bars in losers | 4 | |||
Max intraday drawdown | ($2,874.7285) | |||||
Profit Factor | 2.3877 | Max # contracts held | 6,038 | |||
Account size required | $2,874.7285 | Return on account | 939.03% |
Per approfondimenti: