
Parte Quarta: Costruzione TS
La realizzazione di un Trading System rappresenta il passaggio dalla semplice analisi dei mercati ad un approccio strutturato ed oggettivo al trading.
Attraverso regole precise di ingresso, uscita e gestione della posizione, un sistema automatico consente di eliminare gran parte della componente emotiva e di valutare le proprie strategie tramite test storici e simulazioni.
In questa parte vedremo nel dettaglio come costruire dall’inizio un sistema in prorealtime. L’obiettivo non è creare una strategia definitiva, ma comprendere la logica che sta alla base della programmazione di un sistema di trading, analizzandone, passo dopo passo, la struttura, le condizioni operative e le possibili evoluzioni.
Capitolo 21: Istruzioni iniziali
Iniziamo a sviluppare concretamente il codice per una strategia automatica su ProRealTime. All’inizio di ogni strategia automatica è fondamentale definire alcune regole generali. Per farlo si usano i comandi DEFPARAM di ProRealCode (il linguaggio nativo della piattaforma), da inserire proprio nelle primissime righe per indicare al sistema come comportarsi.
Vediamo subito i parametri principali da impostare.
§ 21.1 – Defparam: cumulateOrders
Una delle prime istruzioni da definire in un trading system riguarda la gestione delle posizioni cumulate (ovvero la possibilità di operare con un singolo contratto o con più contratti).
Impostare il sistema su un singolo contratto non significa necessariamente che la posizione iniziale debba essere pari a un contratto, ma impone un limite: impedisce al sistema di incrementare la dimensione della posizione mentre è già aperta. Se invece si desidera aggiungere ulteriori contratti all’operazione in corso (piramidazione o accumulo), è necessario abilitare l’accumulo delle posizioni.
Questa scelta la possiamo decidere con l’istruzione “DEFPARAM CUMULATE ORDERS” che va inserita nella prima riga del codice (ricordiamo che tali istruzioni rimangono valide per l’intera esecuzione del trading system).
defParam cumulateOrders = true
maxPos = 3 // numero massimo di contratti
if not onmarket and close crosses over average[20] then
buy 1 contract at market
endif
// Aggiunta di contratti a mercato quando il prezzo è sotto il prezzo medio di carico
if longOnMarket and countOfPosition < maxPos and close < positionPrice then
buy 1 contract at market
endif
set stop ploss 100
set target pprofit 200Di default, questo parametro è impostato su true, consentendo al sistema di aggiungere nuove posizioni a ogni barra in cui si verificano le condizioni di ingresso.
Poiché nella maggior parte dei casi non si utilizzano le posizioni cumulate, una delle prime istruzioni da inserire all’inizio del codice è:
defParam cumulateOrders = falseRipetiamo che acquistare più contratti insieme e rivenderli anche gradualmente non significa utilizzare posizioni cumulate.
Nell’esempio riportato la strategia apre una posizione long di 10 contratti quando il prezzo di chiusura si trova al di sopra della media mobile semplice a 55 periodi (SMA55). Al momento dell’ingresso viene inoltre calcolato uno stop loss iniziale sulla base dello Swing Low, individuato come il minimo più basso delle 10 candele precedenti.
La gestione della posizione avviene successivamente attraverso tre livelli progressivi di Take Profit.
Il primo livello viene raggiunto quando il prezzo attraversa verso l’alto la banda corrispondente a una deviazione standard sopra la media (BBUp1SD): in questa fase vengono chiusi 5 dei 10 contratti iniziali.
Il secondo livello si verifica quando il prezzo supera la banda a due deviazioni standard (BBUp2SD), con la chiusura di ulteriori 3 contratti.
Infine, quando il prezzo supera la banda a tre deviazioni standard (BBUp3SD), vengono chiusi gli ultimi 2 contratti, completando l’operazione.
defParam cumulateOrders = false
once flag1 = 0
once flag2 = 0
SMA55 = average[55](close)
BBUp1SD = average[55](close) + (1*std[55](close))
BBUp2SD = average[55](close) + (2*std[55](close))
BBUp3SD = average[55](close) + (3*std[55](close))
cBuy = close > SMA55
TP1Condition = close crosses over BBUp1SD
TP2Condition = close > BBUp2SD
TP3Condition = close > BBUp3SD
swingLow = lowest[10](low[1])
if cBuy and not longOnMarket then
buy 10 contracts at market
flag1 = 0
flag2 = 0
SL1 = (tradeprice(1) - swingLow)/pointsize
set stop loss SL1
elsIf longOnMarket and TP1Condition and flag1 = 0 and flag2 = 0 then
sell 5 contracts at market
flag1 = 1
SL2 = (close - SMA55)/pointsize
set stop loss SL2
elsIf longOnMarket and TP2Condition and flag1 = 1 and flag2 = 0 then
sell 3 contract at market
flag2 = 1
SL3 = (close - BBUp1SD)/pointsize
set stop loss SL3
elsIf longOnMarket and TP3Condition and flag1 = 1 and flag2 = 1 then
sell 2 contracts at market
endif§ 21.2 – Defparam: flat before/after
Un’altra istruzione fondamentale da inserire all’inizio del codice serve a definire la finestra temporale di operatività del sistema. A questo scopo si utilizzano le istruzioni FLATBEFORE e FLATAFTER.
HHMMSS é il formato dell’orario in ProRealTime, dove HH indica l’ora, MM indica i minuti e SS indica i secondi.
defParam flatBefore = HHMMSS
defParam flatAfter = HHMMSS DEFPARAM FLATBEFORE = HHMMSS: indica al sistema di non aprire alcuna posizione prima dell’orario specificato.
DEFPARAM FLATAFTER = HHMMSS: impone alla strategia di non entrare a mercato dopo un certo orario e di chiudere tutte le posizioni eventualmente ancora aperte.
Se l’orario impostato non coincide perfettamente con la chiusura di una candela (ad esempio cade a metà del timeframe operativo), ProRealTime adatta l’esecuzione alla prima chiusura disponibile.
Esempio su grafico a 15 minuti: se impostiamo DEFPARAM flatAfter = 171000, poiché le 17:10 cadono all’interno della candela 17:00–17:15, l’istruzione flatAfter avrà effetto alla chiusura di tale candela, cioè alle 17:15.
A quel momento il sistema chiuderà le eventuali posizioni aperte, annullerà gli ordini pendenti e impedirà l’inserimento di nuovi ordini.
defParam flatBefore = 093000 // chiude tutte le posizioni, cancella gli ordini in attesa ed evita di piazzarli prima delle 9:30.
defParam flatAfter = 220000 // chiude tutte le posizioni, cancella gli ordine in attesa ed evita di inserirli dopo tale orario.Tuttavia, le istruzioni defParam flatBefore e flatAfter presentano alcuni limiti. Una delle principali limitazioni è l’impossibilità di distinguere tra orari dedicati alle sole operazioni long e orari riservati alle sole operazioni short.
Per superare questo ostacolo e gestire l’operatività in modo più flessibile, occorre filtrare le condizioni di ingresso direttamente nel codice utilizzando la funzione time (oppure openTime):
once inizioLong = 090000
once fineLong = 160000
once inizioShort = 14000
once fineShort = 20000
if time > inizioLong and time < fineLong then
...
endifMolto spesso flatBefore – flatAfter e time si utilizzano insieme.
Possiamo infatti sfruttare defParam per definire la finestra temporale complessiva della strategia (oltre la quale tutte le posizioni a mercato verranno liquidate automaticamente) e la funzione time per impostare il limite orario all’ingresso di nuovi segnali.
In pratica: possiamo indicare al sistema di non accettare più nuove operazioni dopo le 17:30, pur mantenendo attiva la gestione delle posizioni aperte fino alle 22:00, orario in cui flatAfter forzerà la chiusura totale.
defParam flatbefore = 080000
defParam flatafter = 220000
limitHour = time <= 173000
if limitHour and close crosses over average[50] and not longOnMarket then
buy 1 contract at market
set target pProfit 100
set stop pLoss 100
endif§ 21.3 – Defparam: preLoadBars
Molti indicatori e strategie hanno bisogno di un certo numero di barre passate per produrre un valore valido. Ad esempio: una media mobile a 200 periodi non può calcolarsi correttamente sulle prime 199 barre, un ATR a 14 periodi ha bisogno di almeno 14 barre precedenti, un sistema di pattern che guarda indietro di n barre deve avere quei dati disponibili fin dall’inizio.
Senza PRELOADBARS (che determina il numero di barre caricate all’inizio), il codice partirebbe dalla prima barra disponibile nel grafico e i calcoli sulle prime barre sarebbero errati o incompleti.
defParam preLoadBars = 10000 // carichiamo 10000 barreEcco un classico blocco di intestazione che riassume tutte le impostazioni iniziali per un trading system intraday:
defParam cumulateOrders = false
defParam preLoadBars = 10000
defParam flatbefore = 080000
defParam flatafter = 220000
limitHour = time <= 173000Capitolo 22: Il punto di partenza
Come abbiamo visto, la prima cosa da fare per costruire un sistema di trading è scegliere un mercato ed un timeframe operativo.
Come già osservato, scegliere un mercato importante ci risolve molti problemi di spread, liquidità … e a tal fine ci concentriamo sui principali indici mondiali.
Per questo esempio scegliamo come mercato l’S&P 500, che insieme al Nasdaq è il principale indice americano.
Come timeframe operativo prendiamo un timeframe intraday classico come l’orario.
Il prossimo step consiste nel definire il tipo di strategia che vogliamo applicare: trend following, di breakout, di inversione, mean reverting (ritorno alla media), sulla compressione/esplosione della volatilità, sui pattern …
Prendiamo per semplicità e per fini didattici una strategia trend following, ossia cerchiamo di individuare un trend intraday e proviamo a seguirlo.
Definire la direzione del trend è la colonna vertebrale di qualsiasi strategia trend-following: è fondamentale stabilire criteri chiari ed oggettivi per determinare univocamente la tendenza prevalente del mercato.
Come ulteriore passo, per ragioni di semplicità didattica, sceglieremo di operare esclusivamente in direzione Long.
Una parentesi importante: ogni decisione progettuale porta con sé conseguenze sia dirette sia indirette, di cui non sempre si ha immediata consapevolezza.
Scegliere di eseguire solo operazioni rialziste semplifica indubbiamente la struttura del codice (implicazione diretta), ma comporta anche alcune rilevanti implicazioni indirette come:
– perdere una parte dei profitti derivanti da operazioni short (quindi limitare potenzialmente i profitti),
– mettere in conto che nelle fasi di mercato laterale o ribassista il sistema tenderà nel caso migliore a non guadagnare.
§ 22.1 – Identificare il trend
Dopo aver scelto di creare una strategia trend following, la prima domanda che ci dobbiamo fare è la seguente: come facciamo ad identificare un trend?
Ecco alcuni metodi classici che possiamo valutare:
– 1. La Media Mobile è da sempre lo strumento più semplice ed utilizzato per identificare un trend. L’utilizzo principale è elementare: se il prezzo è sopra la media il trend è rialzista, se è sotto la media il trend è ribassista.
– 2. L’incrocio di Medie Mobili è un altro metodo tipico per individuare un trend.
Invece di usare una sola media, se ne usano due: una veloce (es. 20 periodi) ed una lenta (es. 50 periodi). Il trend è confermato quando la media veloce taglia al rialzo (trend rialzista) o al ribasso (trend ribassista) quella lenta.
Facciamo osservare che al posto di due medie mobili si potrebbero anche usare indicatori basati sulle medie, come ad esempio il MACD.
– 3. Indicatori di trend. Tra i molteplici indicatori di trend disponibili nell’analisi tecnica, il “SuperTrend” è uno dei più utilizzati. Il Supertrend è un indicatore che si sovrappone direttamente al grafico dei prezzi e il suo scopo principale è identificare la direzione del trend in corso e segnalare i potenziali punti di inversione.
A livello visivo, si presenta come una linea continua che cambia colore a seconda del trend:
Linea Verde (sotto il prezzo): indica un trend rialzista (bullish). La linea indica il trend ed agisce anche come supporto dinamico.
Linea Rossa (sopra il prezzo): indica un trend ribassista (bearish). La linea agisce come resistenza dinamica.
Per ottenere questo risulatato il SuperTrend, che è un indicatore integrato in ProRealTime, unisce la media dei prezzi alla volatilità (tramite l’Average True Range) e si adatta molto bene ai mercati che si muovono rapidamente.
I parametri standard (e consigliati per iniziare) sono:
Periodo ATR: 10 (guarda alle ultime 10 candele per calcolare la volatilità).
Moltiplicatore: 3 (moltiplica l’ATR per 3 per stabilire la distanza della linea dal prezzo).
– 4. Un altro indicatore molto utilizzato per stabilire la forza del trend è l’ADX.
Il motivo è semplice: la maggior parte dei sistemi automatici fallisce perché applica logiche di trend-following (come il Supertrend o l’incrocio di medie) quando il mercato è fermo, o logiche di mean-reverting (compro i minimi e vendo i massimi) quando il mercato sta esplodendo in una sola direzione.
Quando la linea dell’ADX taglia verso l’alto la soglia critica compresa nel livello 20 – 30, significa che la volatilità si sta trasformando in direzionalità.
In ogni caso, nessun indicatore è perfetto. L’ADX ha un difetto strutturale: è un indicatore ritardato (lagging): quando l’ADX si accorge che il trend è iniziato il prezzo si è già mosso.
Nella pratica, affiancare l’ADX a un indicatore di trend è un’ottima soluzione: l’ADX agisce come un vero e proprio “semaforo verde”, confermando la forza della tendenza.
In questo modo, aumenta significativamente la probabilità statistica che il trend sia reale e persistente. Utilizziamo quindi l’ADX come un filtro per abilitare o disabilitare i segnali operativi generati dall’indicatore di trend principale.
Per iniziare a costruire la nostra strategia, decidiamo di identificare il trend utilizzando il primo metodo analizzato: l’incrocio al rialzo del prezzo sopra una media mobile (price crossover).
Un chiarimento importante: lo scopo di questa guida non è creare un sistema di trading perfetto o definitivo, qualsiasi algoritmo è sempre suscettibile di miglioramenti e ottimizzazioni, bensì mostrare passo dopo passo la logica di strutturazione e sviluppo di un trading system automatizzato.
Arriviamo ora a un passaggio fondamentale: come si sceglie la media mobile più adatta?
Uno dei primissimi aspetti da configurare in un sistema trend-following è proprio la definizione dei parametri della media, vale a dire il suo periodo (quante candele considerare) e la sua tipologia (semplice, esponenziale, ponderata, ecc.).
Non esiste un valore universalmente migliore: il periodo determina semplicemente quanto la media sarà veloce nel seguire il prezzo. Una media con pochi periodi segue il mercato molto da vicino, genera segnali frequenti ma anche numerosi falsi ingressi; una media con molti periodi è più stabile e filtra il rumore di mercato, ma entra spesso in ritardo.
Il periodo della media rappresenta quindi un compromesso tra reattività e stabilità.
Il tipo di media mobile in ProRealTime definisce il modello matematico con cui vengono calcolati e “pesati” i prezzi (media semplice, esponenziale, ponderata, triangolare, ecc.).
Questo parametro stabilisce la reattività dell’indicatore: determina quanto velocemente la media reagisce ai movimenti di prezzo, quanto rumore di fondo viene filtrato e quale importanza viene attribuita ai dati più recenti.
In sintesi: il periodo indica quanto guardiamo indietro nel tempo, mentre il tipo stabilisce come analizziamo quei dati.
Per scegliere il periodo della media mobile abbiamo a disposizione due strade principali:
– Utilizzare valori standard: adottare periodi classici ampiamente diffusi sul mercato (come 20, 50, 100 o 200 periodi), molto usati dagli istituzionali e dai fondi d’investimento.
– Effettuare un’ottimizzazione parametrica: ricercare il valore ideale tramite un processo automatizzato, il metodo che applicheremo in questo esempio per ottenere maggiore precisione.
Attenzione però ai pericoli dell’ottimizzazione: va chiarito fin da subito che l’ottimizzazione serve a studiare la stabilità e la logica del sistema, non a cacciare il parametro che ha generato il massimo profitto teorico nel passato.
Inizieremo con un’ottimizzazione classica, seguita da un’analisi Walk Forward, così da ottenere un quadro di riferimento chiaro e completo. L’obiettivo pratico è valutare se, sfruttando un semplice cross su questo specifico timeframe e strumento, sia possibile sviluppare una strategia sostenibile o meno. Sotto questo profilo, i primi test forniranno indicazioni davvero illuminanti.
Apriamo una breve parentesi per mostrare il grafico completo che utilizzeremo.

Come possiamo vedere il grafico è sufficientemente lungo da coprire vari regimi di mercato ed importanti eventi geopolitici.
Se diamo un’occhiata al periodo storico gli eventi più imporanti sono stati sicuramente:
– il covid negli anni 2020-2022 con il blocco dell’economia mondiale. A metà febbraio 2020, la rapida diffusione del virus in Europa e negli USA ha innescato un panico generalizzato, scatenando uno dei crolli azionari più rapidi e violenti della storia finanziaria moderna,
– la guerra tra Russia ed Ucraina iniziata nel febbraio 2022 ed ancora in corso (2026),
– i dazi di Trump ad inizio del suo mandato nel gennaio 2025,
– la guerra tra Stati Uniti ed Iran iniziata a febbraio 2026 (dopo un primo avvertimento l’anno prima con i bombardamenti ai siti nucleari iraniani).
Tornando ai criteri operativi, una volta definito il segnale d’ingresso tramite l’incrocio della media mobile, è necessario stabilire una regola di uscita. A scopo didattico, utilizzeremo come modello di partenza un semplice stop loss percentuale.
Soffermiamoci sulla scelta di utilizzare uno stop loss percentuale anziché a punti: si tratta di un principio generale valido per qualsiasi strategia. Mentre i punti rappresentano una misura fissa e statica, la percentuale si adatta automaticamente alle variazioni del valore nominale dello strumento.
– Stop a Punti: se impostiamo uno stop fisso a 50 punti su un indice che quota 10.000, stiamo rischiando lo 0,5%. Se lo stesso indice sale a 20.000 punti, quegli stessi 50 punti rappresenteranno solo lo 0,25%. Questo significa che lo stop risulterà troppo piccolo e rischiamo di venire liquidati continuamente per via del normale “rumore” di mercato.
– Stop Percentuale: uno stop del 2% rimane proporzionato al variare del valore temporale dell’asset. Sia che l’asset costi 10€, sia che costi 100€, mantiene costante l’ampiezza che concediamo al trade in rapporto al valore dello strumento finanziario.
Lo stop percentuale permette inoltre l’adattabilità su asset diversi ed una semplificazione del position sizing:
– Se abbiamo un trading system che opera su un portafoglio di titoli azionari e su diversi cross valutari, lo stop percentuale è chiaramente più gestibile.
Configurare uno stop a punti richiede di calcolare una misura specifica per ogni singolo titolo (perché 2 punti su un’azione da 10€ hanno un peso nettamente differente da un’azione che quota 500 €).
Con la percentuale, possiamo invece applicare la stessa identica regola (es. “stop al 3%”) su qualsiasi azione, semplificando drasticamente il codice del trading system.
– Il calcolo della dimensione della posizione (position sizing) si adegua nativamente con le percentuali.
Se rischiamo l’1% del nostro capitale totale su un trade, e abbiamo uno stop loss fissato al 2% dal prezzo di ingresso, calcolare la size della posizione è immediato.
Il limite dello stop percentuale è che ignora la volatilità reale. Se l’oscillazione media giornaliera sale al 3%, uno stop fisso inferiore viene colpito dal normale rumore di mercato. La soluzione: passare a uno Stop Loss dinamico sull’ATR (Average True Range), che adatta la distanza sia al prezzo dell’asset sia alla sua volatilità corrente.
Prima di lanciare i backtest su Stop Loss (SL) e Take Profit (TP) è utile fare alcune riflessioni generali. Questo ci permetterà di scartare a priori le combinazioni poco sensate e ridurre il numero di casi da analizzare.
Per un sistema operativo con timeframe orario e operatività intraday, uno Stop Loss non può essere troppo stretto: occorre evitare che venga attivato dal semplice rumore di fondo del mercato, impostiamo quindi un limite inferiore di partenza pari ad almeno lo 0,5%.
Al contempo, riguardo al limite superiore (pur dovendo valutare la specifica architettura della strategia), stop troppo ampi rischiano di generare drawdown rilevanti e difficilmente recuperabili in presenza di una serie di perdite consecutive.
Facciamo subito anche un’osservazione a cui si presta poca attenzione: la connessione dei vari elementi di un sistema. La percentuale dello stop loss impatta non solo sull’aspetto monetario del sistema, ma anche sulla durata delle operazioni. Stop troppo grandi espongono non solo a perdite troppo grosse, ma anche ad una durata delle operazioni troppo lunga.
Fatte tutte queste considerazioni preliminari ottimizziamo quindi lo SL da 0.5% a 1%.
Per quanto riguarda il Take Profit (TP), al fine di garantire un rapporto rischio/rendimento (Risk/Reward Ratio) favorevole, lo imposteremo indicativamente a 3 volte lo Stop Loss. Più in generale, nella prassi operativa si tende a fissare il target di profitto tra le 2 e le 3 volte l’ampiezza dello stop.
Questo ci permette anche di ridurre il numero di parametri da ottimizzare.
Con un Take Profit pari a tre volte lo Stop, il sistema può ottenere un Profit Factor e un’aspettativa interessanti anche con una percentuale di operazioni vincenti relativamente bassa. Questo è coerente con la natura dei sistemi Trend Following, nei quali pochi trades molto profittevoli compensano numerose piccole perdite.
Per tirare le somme di questa introduzione, nello sviluppo del sistema seguiremo questa procedura:
– prima fissiamo la struttura semplice del sistema,
– poi aggiungiamo gradualmente complessità solo se produce un miglioramento reale e robusto, che è uno dei principi fondamentali nello sviluppo di trading system affidabili.
§ 22.2 – Selezione dei parametri
Iniziamo ora l’ottimizzazione vera e propria. Per quanto riguarda la media mobile, testeremo un intervallo di periodi da 50 a 200 su tutti i tipi di media disponibili in ProRealTime (per approfondire, puoi fare riferimento al capitolo sugli indicatori). Insieme ai parametri della media, sottoporremo a ottimizzazione anche lo Stop Loss (SL), variando la sua percentuale dallo 0,5% all’1%.
In questa fase il Take Profit (TP) non verrà ottimizzato, ma sarà fissato a un valore pari a circa tre volte lo Stop Loss, diciamo di default un 2% (poi lo possiamo ottimizzare in un secondo tempo).
Come regola generale, al fine di evitare backtest molto lenti, è preferibile non ottimizzare più di 3-4 parametri alla volta. Inoltre ottimizzare molti parametri simultaneamente porta anche ad altri problemi come vedremo più avanti.
L’errore più comune quando si utilizza l’ottimizzatore di ProRealTime è lanciare un’ottimizzazione globale su tutte le variabili. L’obiettivo è trovare la combinazione migliore dei vari parametri, ma questo approccio presenta anche due problemi importanti:
– un rischio molto alto per non dire quasi certo di overfitting,
– non riuscire più a capire cosa fa ogni parametro all’interno del sistema.
La via che seguiremo sarà, al contrario, quella di lavorare a compartimenti stagni: prima manteniamo fissi la media e gli stop.
Ottimizziamo esclusivamente i parametri che generano il segnale d’ingresso ed uno stop semplice di base.
Solo dopo aver trovato un’area di valori stabile per l’ingresso, congeliamo questi parametri rendendoli costanti e passiamo ad ottimizzare il blocco successivo.
Questo metodo ci permette di capire esattamente quale ingranaggio del nostro algoritmo sta producendo profitto o perdite, garantendo che ogni componente della strategia mantenga un senso logico e una reale robustezza statistica.
Tornando brevemente al Take Profit, fissare un rapporto rendimento/rischio di 3:1 non è necessariamente la scelta migliore. È una scelta adottata esclusivamente per mantenere la strategia chiara e semplice durante la fase iniziale di sviluppo.
Successivamente, una volta individuata una configurazione robusta, sarà possibile verificare se una modifica del Take Profit può apportare benefici reali.
Un’altra variabile da definire all’inizio è la quantità di contratti, se, come avviene prevalentemente, utilizziamo sistemi su indici, valute o commodities.
Per i sistemi sull’azionario, invece, è necessario definire il numero preciso di azioni da acquistare o vendere.
Nel nostro esempio utilizziamo 4 contratti CFD. La scelta di 4 contratti risponde a un motivo pragmatico: consente un confronto diretto tra i principali strumenti che si utilizzano nei trading system: 4 contratti sull’S&P 500 hanno all’incirca lo stesso controvalore di 1 contratto sul Nasdaq o di 1 contratto sul DAX, che sono tra gli strumenti più liquidi e con spread più contenuti utilizzati nel trading sistematico.
Attualmente (2026), questi strumenti hanno un controvalore di circa 30.000 euro, equivalente a 1 euro per punto. Ricordiamo inoltre che il margine richiesto per aprire una posizione è pari a 1/20 del controvalore.
Per iniziare a prendere dimestichezza con la piattaforma, diamo un’occhiata ai principali grafici che ProRealTime mette a disposizione per analizzare i backtest. Questo ci aiuterà a capire subito come interpretare l’andamento del trading system e la sua gestione del rischio.
Di seguito viene riportata la scheda del codice relativa al nostro trading system, denominato per semplicità “simpleSystem v1”, impostato su un timeframe orario (1H) e con lo spread inserito nell’apposita sezione a destra della schermata.
All’inizio del codice troviamo le istruzioni di configurazione generale (DEFPARAM), seguite dalla logica operativa vera e propria della strategia. All’interno dello script vengono definite le variabili oggetto di ottimizzazione; è opportuno assegnare a ciascuna un nome chiaro e descrittivo per facilitare la successiva gestione dei parametri.

Per accedere alla scheda dell’ottimizzazione clicchiamo nella chiave inglese in alto a sinistra (ottimizzazione variabili).
Nel riquadro sottostante viene mostrata la finestra di ottimizzazione dei parametri di ProRealTime. In questa schermata vengono definiti:
– Le variabili da testare: nel nostro esempio, il periodo della media (period), la tipologia di media (tipo) e lo Stop Loss (sl),
– L’intervallo di valori (Min – Max): i limiti all’interno dei quali far variare ciascun parametro,
– Il passo di avanzamento (Step): la frequenza d’incremento per ciascun test.
Nella parte inferiore è possibile selezionare la modalità di ottimizzazione desiderata, scegliendo tra Classica e Walk-Forward.

Lanciata l’ottimizzazione classica, si apre la finestra “Rapporto ottimizzazione”, che mostra i risultati ottenuti:

Da questo primo test possiamo notare che abbiamo in generale un buon profitto ed un max drawdown abbastanza contenuto (queste sono le prime cose da guardare in un backtest).
Entrando nel dettaglio dei parametri ottimizzati, il test ci seleziona i migliori in base al profitto (colonna guadagno), ma cliccando in alto sulle intestazioni delle singole colonne possiamo anche vedere i parametri migliori sotto altri aspetti (ad esempio quali sono i migliori parametri con il minor drawdown),
Come vediamo i parametri migliori per quanto riguarda i periodi sono nel range da 90 a 150, i tipi principali 7 e 8 e lo stop loss 0.8-0.9%.
Se vogliamo possiamo anche vedere nello stesso “Rapporto ottimizzazione” la distribuzione dei parametri del backtest in una heat map tridimensonale (Grafico 3D).

Al termine dell’ottimizzazione, viene visualizzato anche un grafico (vedi sotto) relativo alla prima configurazione individuata dall’ottimizzazione classica: 150 come periodo, 7 come tipo e 0,9 come stop loss.
Nella parte superiore è mostrata l’equity line del sistema, insieme ai segnali di apertura e chiusura delle posizioni, rappresentati nel campo sottostante dalle righe blu.

Se clicchiamo sull’icona a forma di chiave inglese, in alto a sinistra, si apre il “Rapporto dettagliato”, che contiene le metriche calcolate durante l’ottimizzazione.
Questa finestra può essere configurata secondo le proprie esigenze e salvata, così da ritrovarla con la stessa impostazione nei successivi backtest.

Nello stesso Rapporto dettagliato oltre a questa Dashboard con le metriche possiamo anche consultare altre tab come le “Statistiche delle posizioni chiuse“:

Esaminiamo ora le metriche principali del rapporto dettagliato.
Il sistema sta a mercato il 61,9% del tempo ed ha un rapporto vincite e perdite del 37,1%, ossia quasi 4 volte su dieci guadagna e 6 volte su 10 perde.
Questo numero lo possiamo ritenere affidabile in quanto abbiamo un numero significativo di trades totali: 601 (223 vincenti e 378 perdenti).
Questo dato inoltre è abbastanza in linea con i sistemi trend following dove raramente si arriva al 50% di vincite. Questo perché la forza di questa tipologia di sistemi è il guadagno, ossia riuscire a lasciar correre le operazioni positive e tagliare le perdite.
Il rapporto rischio rendimento è infatti 2.17, ossia il sistema perde 1 e, quanto guadagna, guadagna più del doppio della perdita.
Questo dato (2.17) lo ricaviamo dividendo il guadagno medio per la perdita media. Troviamo a sinistra questi dati: vincita media (335,78 euro) / perdita media (-154,66 euro) = 2,17.
Da questi due dati, win rate e risk reward, ricaviamo un parametro fondamentale per giudicare un trading system: il profit factor.
Un sistema accettabile dovrebbe avere almeno un profit factor da 1,3. a 1,5 (da 1,5 a 2 sarebbe ideale). Sistemi con Profit factor inferiori a 1,3 sono tecnicamente alla pari, ma considerate le commissioni, lo slippage ed imprevisti vari si rischia di essere in perdita nel conto reale.
Come si calcola il Profit Factor:
– dobbiamo prendere il rapporto del win Rate: 37,1% e dividiamo la percentuale delle operazioni vincenti per quelle perdenti: 37,1/62,9 (totale 100%) = 0,5898
– moltiplichiamo il risultato per il risk Reward (2.17) ed otteniamo il profit factor: 0,5898 * 2,17 = 1,28.
Un’altra metrica importante è il guadagno ed il massimo drawdown: per avere un certo grado di robustezza non consideriamo risultati robusti quelli in cui il guadagno non sia almeno 5 -7 volte il drawdown (DD). Nel nostro caso siamo al limite (16.416,32 euro / 3.240,92 euro).
Terminata l’analisi classica, lanciamo ora un’analisi walk forward (rimandiamo al relativo paragrafo per le spiegazioni di questa ottimizzazione).
Terminato il backtest ci compare un grafico diverso da quello dell’ottimizzazione classica. Vediamo come è composto:

– Parte sinistra in alto (blocco unico, 8.549,80€): è il periodo in-sample iniziale, cioè il backtest sul primo blocco di dati usato per la prima ottimizzazione.
Non è la somma/concatenazione delle 5 parti in-sample (IS). È solo il primo periodo di ottimizzazione iniziale (il primo blocco di dati usato per calibrare i parametri la prima volta, prima che partisse qualsiasi test out of sample, OOS).
– Parte destra in alto (5 segmenti/finestre/occorrenze): rappresenta la vera equity curve out-of-sample, ottenuta concatenando in ordine cronologico i risultati delle 5 finestre out-of-sample, ciascuna pari al 20% dei dati non utilizzati dal relativo blocco di ottimizzazione.
Ogni segmento mostra il P&L realizzato nella specifica finestra out-of-sample. I parametri utilizzati sono stati ottimizzati esclusivamente sui dati precedenti, ovvero in-sample, e successivamente testati “alla cieca” sul periodo successivo.
Quella linea nera obliqua nel grafico del Walk Forward di ProRealTime non fa parte dell’equity della strategia. È una linea di regressione lineare (trend line) calcolata sull’equity complessiva del Walk Forward. Serve esclusivamente come riferimento visivo per valutare la regolarità della crescita.
Nel nostro caso notiamo alcune cose interessanti: la pendenza della linea è decisamente positiva, quindi il Walk Forward ha una crescita stabile; l’equity non si allontana mai troppo dalla retta e dopo i drawdown tende sempre a ritornare verso la linea e poi a superarla.
La struttura è questa: [IS iniziale] → [OOS1] → [OOS2] → [OOS3] → [OOS4] → [OOS5]
Se clicchiamo in alto a sinistra sull’icona del grafico e selezioniamo, nella tendina che si apre in Dashboard, la voce “Statistiche Walk Forward”, si apre la seguente finestra con il dettaglio dei dati in-sample (IS) e out-of-sample (OOS):

Qui troviamo le 5 finestre, con le rispettive parti in-sample (IS) e out-of-sample (OOS), il guadagno ottenuto e l’efficienza Walk Forward.
I parametri individuati in ciascuna ottimizzazione sono riportati nella parte destra della tabella, sotto la voce “Variabili”, e diventano visibili passandovi sopra il mouse.

Il primo valore evidenziato in viola/fucsia corrisponde al periodo della media mobile, il secondo identifica la tipologia di media e il terzo indica la percentuale di Stop Loss individuata. Per una maggiore chiarezza espositiva, sono riportate di seguito le 5 finestre con i rispettivi parametri selezionati dall’analisi Walk-Forward (WF) e il relativo indice di efficienza:
1) 50 – 5 – 0.8% –> -193,53% (efficienza Walk Forward)
2) 150 – 7 – 0.8% –> 100.90%
3) 150- 7 – 0.8% –> 142,62%
4) 90- 5 – 1% –> 80,13%
5) 90- 5 – 0.8% –> 67,51%
Ricordiamo che l’efficienza serve a misurare la robustezza della strategia: in parole semplici ci dice se i parametri che abbiamo ottimizzato nel passato continuano a funzionare sui dati futuri.
Un efficienza superiore al 50% (> 50%) è il valore di riferimento per considerare il test superato. Significa che la strategia mantiene nel periodo reale (OOS) almeno la metà dell’efficienza teorica stimata in ottimizzazione.
Efficienza vicina o superiore al 100% significa che nel periodo di test la strategia ha performato tanto quanto (o persino meglio) rispetto al periodo di ottimizzazione: tali valori vanno analizzati con cura, poiché potrebbero dipendere da improvvisi picchi di volatilità o trend macroeconomici favorevoli in quel preciso sotto-periodo.
La prima cosa che osserviamo è che il walk forward, a differenza dell’ottimizzazione classica ci ha tolto il dubbio del parametro dello stop loss: in 4 finestre su 5 compare 0.8% indicando una notevole stabilità.
Se riguardiamo un attimo l’ottimizzazione classica, lo stop loss della prima scelta tovata dall’ottimizzazione (con il criterio di default del guadagno) era invece 0.9%, la seconda scelta era 0.8%.
Quando un parametro rimane invariato durante quasi tutto il Walk Forward significa che il sistema è poco sensibile al cambio del mercato rispetto a quel parametro e ciò rappresenta un forte indizio di robustezza.
Anche i parametri della media mostrano due aree di convergenza (90-5 e 150-7).
Analizzando nel dettaglio i parametri ed i tipi osserviamo alcune cose interessanti:
– 150 di parametro compare due volte consecutive
– 90 di parametro compare due volte consecutive
– 50 compare una sola volta… ed è proprio la finestra che poi produce -193% di efficienza.
Questo è importante in quanto la prima finestra sembra essere un’anomalia, sceglie infatti un parametro completamente diverso ed è l’unica che fallisce chiaramente il test quindi non le possiamo dare molto peso.
Confrontando il test classico con il walk forward notiamo che 150 e 7 erano i parametri migliori del test classico. Ora il Walk Forward ci restituisce praticamente due gruppi di parametri importanti ed uno coincide con quelli classici.
Questo è un ottimo segnale in quanto significa che il backtest classico non stava semplicemente “adattandosi al rumore”, ma aveva individuato due vere zone di stabilità dei parametri.
Da questa analisi scegliamo di optare per la scelta di 150 di periodo di media e di 7 per il tipo (7 identifica in proRealTime la media mobile di Hull, vedi sezione indicatori).
I motivi di questa scelta sono i seguenti:
– il tipo 5 compare nella finestra peggiore e nell’ultima finestra, che comunque ha un efficienza più bassa delle altre,
– il tipo 7 sembra più convincente in quanto è il parametro che compare in due finestre con una buona efficienza, ed è il migliori anche nel backtest classico.
Dobbiamo comunque dire che più che scegliere il parametro “migliore”, l’obiettivo è selezionare quello appartenente alla zona più robusta, cioè quella meno sensibile alle variazioni del mercato e che appartiene ad una zona stabile.
Analizzando le 5 finestre WF, dobbiamo soffermarci sul fatto che la prima finestra ha un’efficienza negativa di -193,53% ed è molto diversa dalle altre quattro.
Questo potrebbe far pensare ad un particolare regime di mercato (ad esempio una fase molto laterale o una transizione tra volatilità elevata e bassa) in cui il sistema trend following ha sofferto.
Se guardiamo il grafico nel periodo nell’ottimizzazione scopriamo che va da fine 2021 a fine 2022 quando il mercato ha iniziato infatti un periodo ribassista caratterizzato da alta volatilità (si osservano swing decrescenti molto ampi).
Le finestre 2 e 3 sono le più significative: stessi parametri (150-7) e stesso stop loss a 0.8%, due finestre consecutive con efficienza alta e coerente. Questo è esattamente il tipo di robustezza che un WF deve evidenziare.
Le finestre 4 e 5 mostrano efficienza positiva ma in calo, con stessi parametri della media (90-5), ma diverso stop loss: 1% e 0.8%: questo suggerisce meno stabilità in quella zona temporale.
Il calo delle finestre 4-5 potrebbe indicare che le condizioni recenti sono meno favorevoli per questo tipo di logica. Vale la pena capire se si tratta di deterioramento del regime o semplicemente di meno opportunità.
Utilizziamo come base quindi i parametri 150-7, ma consideriamo nel caso il sistema fosse messo live a mercato di monitorare le performance ogni 2-3 mesi e di stabilire una soglia di “efficienza minima accettabile” per usare, mettere in pausa o stoppare il sistema.
Partiamo quindi da questa base con queste metriche:

Ed ecco il codice in cui sostituiamo i parametri scelti alle variabili.

§ 22.3 – Filtro adx
La domanda che ci facciamo ora è la seguente: come possiamo migliorare questo sistema?
Ricordiamo che un sistema trend following basato sull’incrocio prezzo/media mobile (o media veloce/media lenta) ha un limite strutturale ben noto: genera segnali indipendentemente dal fatto che il mercato sia effettivamente in trend oppure in fase laterale. La media mobile, per costruzione, è un indicatore reattivo e ritardato: segue il prezzo, non anticipa la sua direzione, e soprattutto non distingue tra un movimento direzionale genuino e un semplice rumore di mercato all’interno di un range.
In questo contesto, i filtri più efficaci sono quelli progettati per escludere le fasi di congestione laterale. Come esaminato nella sezione sugli indicatori, l’ADX (Average Directional Index) rappresenta una soluzione ideale: misura la forza del trend a prescindere dalla sua direzione, integrando un’informazione che la media mobile non è in grado di cogliere.
L’ADX non indica se il mercato sia rialzista o ribassista, ma quantifica la direzionalità del movimento rispetto al semplice rumore di fondo. L’integrazione dell’ADX come filtro (richiedendo che superi una soglia specifica, tipicamente 20, 25 o 30) consente di validare i soli segnali di crossover generati in presenza di un trend ben strutturato, migliorando la qualità complessiva dei trade.
Che parametri scegliamo? Partiamo sempre da alcune considerazioni generali: abbiamo due parametri da scegliere, il periodo e la soglia:
– per i periodi, visto il timeframe intraday, prendiamo un range ampio da 4 a 20 periodi,
– per quanto riguarda la soglia useremo quelle classiche da 20 a 30.
Ecco quindi le mascherine in PRT del codice e dell’ottimizzazione dei parametri delle variabili dell’adx su cui andremo a fare la seconda batteria di test, classici e walk forward.
Usiamo due variabili che scegliamo di chiamare “periodo” per il periodo e “valore” per la soglia.
Nella mascherina sottostante sulla “definizione delle variabili” vediamo il range e gli intervalli tra parametri.

Ecco i risultati dell’ottimizzazione classica:

Notiamo subito al volo un miglioramento significativo dei guadagni e contemporaneamente una riduzione del massimo drawdown, il che conferma la bontà del filtro dell’adx.
Analizzando i parametri scelti osserviamo che:
– per quanto riguarda i periodi vediamo uno sbilanciamento abbastanza chiaro per quelli bassi compresi in un range tra 4 e 10,
– per i valori della soglia notiamo una preferenza marcata per valori compresi tra 20 – 25, che sembrano preferibili alla soglia classica di 30.
Ecco il grafico dell’equity line della migliore ottimizzazione classica:

Ecco il quadro completo delle metriche relative al primo valore trovato:

Come vediamo qui più in dettaglio analizzando le performances, siamo passati ad un rapporto di guadagno da 5 a 7 volte più grande del DD che è un segnale molto positivo.
Anche il profit factor è salito sopra 1.3 che è il requisito minimo per un TS.
Direi che l’introduzione dell’adx come filtro ha fatto un buon lavoro.
Da un filtro infatti non ci dobbiamo aspettare che faccia salire molto, ad esempio, il Profit Factor ma renda instabili gli altri parametri. Questo è spesso un segnale di overfitting. Se invece un filtro migliora globalmente la stabilità del Walk Forward, allora è un filtro che probabilmente aggiunge un’informazione utile al sistema.
Proviamo ora anche la stessa ottimizzazione dei parametri con il metodo walk forward:

Ed ecco le 5 finestre OOS:

Con i parametri delle variabili delle 5 finestre:
PERIODI ADX – SOGLIA –> efficienza WF
1) 4 – 25 –> 106,85%
2) 6 – 20 –> 112,27%
3) 6 – 25 –> 138,68%
4) 6 – 25 –> 122,01%
5) 6 – 25 –> 10,3%
La prima cosa che notiamo subito è questa: la finestra 1 passa da -193% a +106% di efficienza. Questo dato vale molto più di qualsiasi aumento del profitto totale. Significa che il filtro ha corretto proprio il punto debole del sistema.
Notiamo anche che la finestra 5 al 10,3% di efficienza era e rimane la più debole, con o senza ADX. Non è un problema dell’ADX, è che quella finestra temporale copre probabilmente un regime di mercato strutturalmente poco adatto a un sistema trend-following fondato su una media lenta. Se infatti guardiamo il grafico dell’ S&P500 vediamo come il trend rialzista iniziato ad aprile 2026 si sia interrotta a fine maggio portando un periodo di lateralità (ancora in atto a luglio 2026) caratterizzato contemporaneamente da una volatilità molto più ampia di quella precedente.
Per quanto riguarda invece il test WF vero e proprio, facciamo notare che se tutte le finestre fossero improvvisamente schizzate verso l’alto, si sarebbe potuto iniziare a sospettare di overfitting.
Qui invece il filtro elimina il grosso problema della prima finestra, migliora le altre finestra e lascia una finestra debole, che è un comportamento tipico e credibile per un test WF.
Per quanto riguarda la selezione dei parametri notiamo che:
– il periodo 6 dell’adx compare quattro volte su cinque,
– la soglia 25 compare quattro volte su cinque.
Abbiamo quindi una zona di stabilità abbastanza uniforme.
Vista quindi anche la convergenza del test WF adottiamo il sistema con ADX(6) > 25, che era la prima scelta del test classico, e lasciamo, per garantire robustezza al sistema, inalterati i parametri della media a 150 periodi con tipo 7 (hull) e stessa percentuale dello stop loss a 0.8%.
Questa infatti è la configurazione più solida che emerge dal WF, con efficienza media OOS molto migliorata rispetto a quella precedente, e soprattutto ora abbiamo tutte e cinque le finestre WF positive, che rappresenta un obiettivo del test walk forward.
Proviamo ora ad individuare alcuni motivi per cui l’ADX ha fatto un buon lavoro:
– una media mobile a 150 periodi è un filtro molto lento. La sua pendenza cambia lentamente e spesso, quando diventa significativamente positiva, il mercato è già partito,
– l’ADX a 6 periodi invece è molto più reattivo: intercetta l’inizio dell’espansione della volatilità; elimina molte fasi laterali; lascia passare solo i breakout con una certa energia. In pratica sta filtrando proprio ciò che un sistema basato sulla media fatica a distinguere.
Come conferma ulteriore ho ritestato i valori ottimali della media (periodo e tipo) con il filtro Adx trovato. Si sono confermati come migliori gli stessi del test precedente, dimostrando la bontà dei parametri trovati.
Un parametro infatti è affidabile quando il Walk Forward continua a sceglierlo anche dopo aver modificato il sistema. Ed è esattamente ciò che è successo qui. L’aggiunta dell’ADX non ha spostato il sistema verso una nuova configurazione “ottimale”: ha semplicemente reso più robusta quella che già emergeva (150-7), correggendo la principale debolezza evidenziata dal primo Walk Forward.
Questo è uno dei segnali più forti che il filtro sta aggiungendo informazione reale e non solo adattamento ai dati storici.
Come fatto precedentemente prendiamo quindi i valori con maggiore stabilità che ci hanno consegnato i test: 6 per il periodo e 25 per la soglia e proviamo a migliorare ancora il sistema.
§ 22.4 – TRP
Una delle decisioni più importanti nella progettazione di un trading system riguarda le tecniche di gestione dell’uscita dalla posizione. Tra queste sicuramente la più utilizzata è il trailing profit che permette di proteggere parte dei profitti maturati senza rinunciare alla possibilità di sfruttare i movimenti più ampi del mercato.
La scelta dei parametri del trailing non dovrebbe essere casuale o basata esclusivamente sull’ottimizzazione.
È molto più efficace partire dall’analisi delle statistiche generate dal sistema, perché queste descrivono il comportamento reale delle operazioni.
Alcune delle statistiche più importanti che ci interessano sono quelle chiamate MEF e MAE:
– MEF (Maximum Favorable Excursion): indica la massima escursione favorevole raggiunta da un trade rispetto al prezzo di ingresso, mentre la posizione è aperta. In altre parole, misura il massimo profitto potenziale che il trade ha registrato prima della chiusura.
Esempio: entriamo long a 100. Durante il trade, il prezzo raggiunge un massimo di 112; la posizione viene poi chiusa a 105. Il MEF è di 12 punti.
– MAE (Maximum Adverse Excursion): indica la massima escursione sfavorevole registrata da un trade rispetto al prezzo di ingresso, mentre la posizione è aperta. In altre parole, misura quanto il prezzo si è mosso contro la posizione prima della chiusura.
Esempio: entriamo long a 100. Durante il trade, il prezzo scende fino a 93; la posizione viene poi chiusa a 105. Il MAE è di 7 punti.
Prima di aggiungere un trailing è opportuno fare un’analisi delle operazioni:
qual è il Maximum Favorable Excursion (MFE) medio delle operazioni vincenti?,qual è il Maximum Adverse Excursion (MAE)?
È un approccio molto più “ingegneristico”: prima osserviamo i dati delle operazioni, poi progettiamo la gestione dell’uscita, invece di ottimizzare alla cieca.
Le informazioni più utili sono confrontare questi quattro dati (ricavati dalle metriche della versione con adx):
– MFE: nel nostro caso è pari a 167 €,
– MAE: nel nostro caso è pari a 99 €,
– Guadagno medio delle operazioni vincenti: 336 €,
– Perdita media delle operazioni perdenti: 137 €.
L’MFE indica che, in media, i trade in profitto raggiungono un’escursione favorevole massima di 167 € prima di ritracciare o chiudersi.
Impostare l’attivazione del trailing profit a 80 € significa far entrare in funzione la protezione quando il trade ha percorso circa metà di quell’escursione media. La soglia mira a trovare un equilibrio: non così vicina da far scattare il trailing ai primi movimenti favorevoli, né così lontana da rischiare di non attivarlo.
In questo modo il trailing interviene dopo che il trade ha mostrato una spinta direzionale significativa, con l’obiettivo di proteggere parte del profitto prima che un eventuale ritracciamento lo riduca.
Evitiamo di far scattare l’attivazione sopra la soglia dei 150 € per il semplice fatto che il trailing profit scatterebbe solo quando il trade è ormai vicinissimo al suo target o alla sua estensione media (167 €).
Testare la finestra 80 € – 150 € permette di identificare teoricamente il punto di equilibrio ottimale tra due estremi.
In pratica, finché il mercato mantiene una spinta favorevole, lasciamo correre il trade senza intervenire. Quando il profitto raggiunge gli 80 punti, attiviamo la protezione per mettere al sicuro almeno una parte del guadagno, continuando al tempo stesso a lasciare spazio alla posizione per proseguire.
Vediamo ora cosa emerge dai backtest. Ottimizziamo il punto di attivazione del trailing profit, tramite la variabile «attivazione», testando valori da 80 a 150 punti. Impostiamo invece a 10 punti, senza ottimizzarla, la soglia di profitto iniziale da mantenere una volta raggiunto il punto di attivazione. Quest’ultimo è rappresentato dal massimo raggiunto, indicato dalla variabile «high» alla riga 24 del codice.

L’ottimizzazione classica ci mostra due parametri interessanti: 80 (proprio la base dell’ottimizzazione corrispondente al 50% del MEF medio) e 100, che è la prima scelta dell’ottimizzazione.

Nel complesso, continuiamo a registrare un miglioramento dei profitti e un contenimento del massimo drawdown, confermando l’efficacia della introduzione di un trailing profit.
Analizzando i parametri scelti notiamo che 100 punti viene scelto come parametro principale, mentre 80 è la seconda scelta.
Dobbiamo però riflettere sul fatto che:
– la prima scelta ha un guadagno elevato non allineato alle scelte successive (dal secondo al quinto valore abbiamo invece dei risultati abbastanza simili),
– 110 e 120 vengono dopo 80: significa che il sistema è sensibile alle micro-oscillazioni.
Nei grafici che seguono vediamo le metriche della prima (100) e seconda (80) scelta dell’ottimizzazione classica:

Questa è la seconda scelta dell’ottimizzazione classica.

Testiamo come sempre anche il test walk forward:

La finestra con i periodi OOS e l’efficienza:

Ed ecco i parametri delle variabili migliori trovati dal WF:
1) 80 –> 172% (efficienza)
2) 80 –> 115,39%
3) 80 –> 138,76%
4) 80 –> 101,39%
5) 100 –> 43,35%
L’analisi WF in questo caso si concentra quasi esclusivamente sul valore di 80, premiando questo valore come più robusto, sebbene meno performante rispetto a 100. Sarà quindi il valore di 80 che decidiamo di utilizzare nella nostra terza variante della strategia.
L’analisi Walk-Forward evidenzia una spiccata consistenza del parametro a quota 80, premiandone la robustezza Out-of-Sample a fronte di una prestazione assoluta inferiore rispetto a 100. In ottica di stabilità operativa, selezioniamo quindi il valore 80 per la terza variante della nostra strategia.
A questo punto potrebbe sorgere un dubbio spontaneo: se il trailing si attiva a 80 e l’escursione massima media si attesta a 167 €, come fa il sistema ad avere un guadagno medio per operazione ben più alto, pari a 336€?
La risposta risiede nella natura profondamente Trend Following della strategia. Il valore 80 non è un target fisso che chiude l’operazione, ma è solo il “grilletto” che attiva la protezione da quel momento in poi. Quando il mercato sperimenta una giornata di fortissima estensione direzionale (le cosiddette code grasse o fat tails della distribuzione), il trailing profit non fa altro che inseguire il prezzo, permettendo al sistema di cavalcare l’onda fino alla fine. Sono proprio questi rari ma enormi trade che fanno impennare la media matematica dei profitti fino a 336 €, mentre nei trade più normali l’attivazione a 80 fa egregiamente il suo lavoro di paracadute.
In conclusione, il valore attivazione = 80 rappresenta un punto di equilibrio algoritmico tra la protezione del capitale, l’efficienza matematica delle metriche e la stabilità nel lungo periodo.
Se il trailing venisse attivato troppo presto o con una distanza troppo ridotta, molte operazioni verrebbero chiuse semplicemente a causa delle normali oscillazioni del prezzo, senza lasciare al mercato lo spazio necessario per sviluppare il movimento previsto.
Al contrario, attivandolo troppo tardi (150-200 punti), lasceremmo scoperta una parte importante del profitto già maturato. Molti trade potrebbero salire fino a 120-140 punti, ritracciare completamente e chiudersi senza che il profit lock sia mai entrato in funzione.
L’obiettivo, quindi, non è trovare il parametro “perfetto”, ma individuare un equilibrio tra due esigenze opposte: lasciare respirare il mercato e, allo stesso tempo, evitare che un profitto ormai consistente venga completamente restituito.
Un MAE medio di 99 € fornisce una misura della normale sofferenza temporanea sofferta dalle operazioni in profitto e in perdita.
Sotto riportiamo l’equity line di questa terza variante del sistema.

Ecco il codice finale:
// SP500 simpleSystem v3 H1 // spread = 1
defParam cumulateOrders = false
defParam preLoadBars = 10000
positionSize = 4
avgHull = average[150,7](close)
if close crosses over avgHull and adx[6] > 25 then
buy positionSize contract at market
set stop %loss 0.8
set target %profit 2
endif
// Trailing profit
pointToReachLong = 80*pointSize
pointToKeepLong = 10*pointSize
if not onMarket then
newSL = 0
endif
if longOnMarket then
if newSL = 0 and high - tradePrice(1) > pointToReachLong then
newSL = tradePrice(1) + pointToKeepLong
endif
if newSL > 0 and close - newSL > pointToReachLong then
newSL = newSL + pointToKeepLong
endif
endif
if newSL > 0 then
sell at newSL STOP
endifÈ opportuno precisare che la strategia proposta è molto essenziale.
La sua vera importanza non risiede nelle performance finanziarie, quanto piuttosto nel processo logico che ne ha guidato lo sviluppo.
Il percorso seguito in questo lavoro racchiude un messaggio chiave: sviluppare un trading system è un processo sistematico e rigoroso, ma al tempo stesso creativo.
– Il valore della creatività: Costruire una strategia richiede metodo, ma soprattutto sperimentazione e intuizione nel formulare nuove ipotesi. È proprio questa componente creativa l’elemento più importante dell’intero processo,
– La vera robustezza: Un sistema solido non nasce dall’accumulo di indicatori, ma dalla semplicità delle regole, dalla coerenza della logica di fondo e dalla verifica oggettiva dei dati,
– Sviluppo graduale e test rigorosi: Siamo partiti da una semplice idea di base e abbiamo aggiunto elementi un passo alla volta, senza stravolgere la logica iniziale,
– Un cambio di prospettiva: molti si avvicinano al trading attratti da promesse di guadagni facili che nascondono la reale complessità della materia. Un approccio professionale, al contrario, si basa su interesse autentico, rigore e passione per la ricerca.
Capitolo 23: Conclusioni
Siamo arrivati alla fine di questo percorso. Nei capitoli precedenti abbiamo costruito un Trading System completo partendo da un’idea molto semplice e, passo dopo passo, l’abbiamo trasformata in un modello decisamente più robusto.
Il sistema presentato rappresenta solo una parte di un progetto più complesso ed è stato volutamente semplificato per concentrare l’attenzione sul processo di costruzione piuttosto che sulle performance.
Il risultato ottenuto, però, non è l’aspetto più importante.
Il vero valore di questa guida risiede nel percorso che ci ha portato fin qui. Abbiamo visto come un’idea iniziale possa essere analizzata, messa alla prova, migliorata e, quando necessario, corretta attraverso un processo strutturato e oggettivo.
Non conta tanto il sistema che abbiamo costruito, ma il metodo che abbiamo utilizzato per costruirlo. Probabilmente è questo l’insegnamento più prezioso di tutta la guida.
§ 23.1 – L’importanza del primo backtest
Un trading system è un processo evolutivo con un inizio e potenzialmente nessuna fine, nel senso che le prove che possiamo fare sono infinite. Tuttavia, trovata un’idea semplice che ci permette di avere un edge sul mercato, abbiamo una base solida su cui iniziare a lavorare.
Si parte da un’idea semplice, si verifica, si individuano i punti deboli, si formulano delle ipotesi e si testano. Successivamente si eliminano quelle che non funzionano e si conservano soltanto quelle che producono un miglioramento reale.
Durante questo percorso abbiamo fatto esattamente questo.
Una cosa su cui vorrei però soffermarmi è l’importanza del primo backtest: la prima cosa che testiamo non sono tanto i parametri quanto l’idea.
Nel percorso che porta un’idea di trading dal laboratorio al mercato reale, i primi backtest svolgono una funzione cruciale: separano l’intuizione dall’illusione.
Un set iniziale di risultati robusti non garantisce il successo futuro, ma rappresenta la prima e indispensabile prova che abbiamo identificato una logica operativa su cui lavorare.
Il valore pratico di buoni backtest iniziali non è quindi la promessa di profitto automatico, bensì l’identificazione di un’idea operativa che merita investimenti successivi di sviluppo e validazione.
Adottando un approccio sperimentale rigoroso, basato su ipotesi chiare, potremo ridurre tempi e costi e aumentare significativamente le probabilità di realizzare sistemi davvero efficaci.
In fondo, vale il principio che il buongiorno si vede dal mattino: se un test contiene un vero segnale, qualcosa su cui costruire, lo si percepisce fin dalle prime analisi. Al contrario, quando manca una base semplice e un edge identificabile, si rischia di inseguire un’idea mediocre aggiungendo strati di complessità: indicatori sopra indicatori, regole sempre più sofisticate e backtest con un numero crescente di parametri. Il risultato è spesso un modello ottimizzato sul passato ma privo di robustezza, destinato a deludere quando viene esposto alle condizioni del mercato reale.
L’idea iniziale deve essere semplice e deve dar prova da subito che c’è qualcosa su cui possiamo lavorare.
Uno degli errori più comuni è pensare che qualsiasi idea possa diventare un buon Trading System con un numero sufficiente di ottimizzazioni. In realtà, il primo backtest è spesso già molto indicativo. Non deve essere perfetto, ma deve mostrare di avere un vantaggio statistico sul quale costruire.
In altre parole, le ottimizzazioni possono migliorare un’idea buona, ma raramente riescono a trasformare un’idea sbagliata in un sistema vincente.
Imparare a riconoscere questa differenza fin dalle prime prove permette di risparmiare tempo e concentrare le energie solo sui progetti che hanno reali possibilità di successo.
Quando il primo backtest evidenzia una curva del capitale con una tendenza positiva, un Profit Factor superiore a 1, un Drawdown contenuto rispetto al profitto, una logica di mercato comprensibile e parametri che non cambiano radicalmente con piccole variazioni, allora esiste una base su cui lavorare.
Le ottimizzazioni successive serviranno a rifinire il sistema, non a crearne uno dal nulla.
§ 23.2 – Ottimizzare: l’illusione del passato
Esiste una tentazione molto forte: ogni volta che si osserva un drawdown, nasce il desiderio di aggiungere un nuovo filtro, un nuovo indicatore, una nuova regola, un nuovo parametro. Questo processo potrebbe andare avanti all’infinito, e il rischio è evidente: il sistema migliora sul passato, ma peggiora sul futuro.
In questo progetto abbiamo scelto volutamente di non percorrere questa strada. Abbiamo aggiunto solo ciò che dimostrava una reale capacità di migliorare il comportamento del sistema. Tutto il resto è stato scartato.
Una delle lezioni più interessanti di questo lavoro? Le modifiche migliori non hanno moltiplicato i grandi trade: hanno eliminato quelli peggiori. Una differenza sostanziale. Un sistema robusto non va a caccia del trade perfetto, ma evita le operazioni con bassa probabilità di successo. È questo che lo rende molto più stabile nel tempo.
Molti considerano il Risk Management qualcosa da aggiungere solo alla fine. In realtà fa parte della progettazione fin dall’inizio. Stop Loss, Take Profit, Trailing Stop, dimensione della posizione, eventuale limite di perdita giornaliera, eventuale numero massimo di operazioni negative consecutive: sono tutti elementi che definiscono il comportamento del sistema tanto quanto le regole di ingresso e per questo meritano la stessa attenzione durante i test.
Anche quando un filtro di rischio non genera alcun miglioramento, il risultato rimane comunque prezioso: significa che il mercato ha fornito una risposta a una domanda specifica. Ogni risposta ottenuta attraverso un test rigoroso amplia la nostra comprensione del sistema e contribuisce a orientare le ricerche successive.
Nessun sistema sarà perfetto. Ogni sistema avrà drawdown, serie di operazioni in perdita, mesi negativi. È normale. Non esiste un Trading System immune ai cambiamenti del mercato, e l’obiettivo non è eliminare il rischio, ma costruire un modello abbastanza robusto da adattarsi il più possibile ai cambiamenti del mercato.
Abbiamo visto come il Profit Factor e il Recovery Factor sono due metriche complementari nella valutazione di un trading system: il primo misura l’efficienza lorda della strategia, confrontando i profitti totali con le perdite totali, mentre il secondo misura l’efficienza netta del sistema in rapporto al massimo drawdown subito. Considerati insieme, permettono di capire non solo quanto una strategia sia redditizia, ma anche quanto sia robusta nel tempo; infatti, un sistema con Profit Factor elevato ma Recovery Factor debole può generare buoni risultati solo a fronte di un rischio eccessivo, mentre la combinazione di entrambi su livelli alti indica una strategia più solida, stabile e più facilmente sostenibile in ottica operativa.
Nei sistemi intraday, che sono la maggior parte, la stabilità del rapporto tra profitto e drawdown non andrebbe controllata ogni giorno, ma con una cadenza più ampia e statisticamente più sensata, ad esempio ogni 2–3 mesi.
Il segnale più rilevante di un possibile deterioramento del sistema non è una singola fase negativa, bensì un peggioramento persistente e progressivo delle metriche chiave: Recovery Factor in calo per più controlli consecutivi, Profit Factor in diminuzione, drawdown in aumento e tempi di recupero sempre più lunghi.
Quando il sistema passa da valori stabilmente superiori alle soglie attese a livelli progressivamente più deboli, e questo deterioramento si conferma per due o tre finestre di monitoraggio consecutive, non si è più di fronte alla normale variabilità statistica. In questi casi emerge invece un segnale concreto di possibile perdita dell’edge e di riduzione dell’efficacia operativa del modello.
Cosa fare in questi casi? Se il sistema è ancora positivo ma mostra segni di debolezza, possiamo ridurre la size per abbassare il rischio, verificare se il peggioramento dipende dal regime di mercato (osservando i grafici), testare la strategia su una finestra recente separata e confrontarla con uno storico più lungo.
Invece, quando il deterioramento non rappresenta più una normale fase negativa, ma una vera e propria rottura della struttura statistica che ne sostiene le performance ed il peggioramento si conferma nel tempo, allora dobbiamo considerare concretamente l’ipotesi di interromperne l’utilizzo della strategia e di sottoporla ad una revisione approfondita.
Il trading sistematico è un percorso di crescita continua. Ogni test, ogni modifica e ogni revisione, indipendentemente dall’esito, contribuiscono ad accrescere la conoscenza del mercato e del proprio sistema. Nel tempo, questo processo non porta soltanto a strategie più robuste e affidabili, ma anche a decisioni più consapevoli e disciplinate.
§ 23.3 – Sistemi e creatività
La creatività è spesso vista come qualcosa di “artistico”, lontano dalla matematica, dai backtest e dai codici. In realtà, nel trading sistematico è una competenza tecnica: la capacità di immaginare soluzioni nuove, combinare elementi noti in modi diversi, vedere pattern dove altri vedono rumore.
La creatività è ciò che ci permette di:
– generare idee originali di strategia,
– costruire regole che riflettono la nostra visione del mercato,
– trovare connessioni tra indicatori e condizioni,
– progettare filtri che migliorano la qualità dei segnali,
– immaginare scenari futuri e adattare il sistema.
Nel trading sistematico la creatività non è improvvisazione, è un processo che segue tre fasi:
– Osservazione: analizziamo il mercato, individuiamo comportamenti ricorrenti, notiamo anomalie. Qui nasce la domanda creativa: “Cosa succede se…?”,
– Formulazione: trasformiamo l’idea in una regola concreta: un nuovo indicatore, una condizione, un filtro, una gestione della posizione,
– Validazione: testiamo l’idea con metodo e verifichiamo i risultati.
ProRealTime è un ambiente ideale per la creatività perché permette di creare indicatori personalizzati, combinare condizioni logiche complesse, testare rapidamente varianti, visualizzare pattern nascosti, automatizzare idee che altrimenti resterebbero teoriche: la creatività prende forma quando un’intuizione diventa codice funzionante.
La creatività esprime il suo massimo potenziale quando opera entro confini ben definiti: regole chiare, obiettivi misurabili, metriche di valutazione e vincoli di rischio. I limiti non soffocano la creatività, la indirizzano. Senza vincoli, la creatività rischia di trasformarsi in caos; senza creatività, i vincoli producono sistemi rigidi e sterili.
La vera sfida del trader sistematico consiste nel trovare il punto di equilibrio tra queste due forze: sufficientemente creativo da generare nuove idee, sufficientemente disciplinato da valutarle con rigore.
In un contesto in cui molti trader utilizzano gli stessi indicatori, gli stessi pattern e gli stessi approcci operativi, la creatività rappresenta uno dei pochi veri fattori di differenziazione e può diventare una fonte di vantaggio competitivo.
La creatività permette di vedere opportunità che altri non vedono e testare idee che altri non immaginano.
La creatività è la componente più autenticamente umana del trading sistematico.
È l’elemento che rende ogni strategia unica, personale e difficilmente replicabile.
Per quanto rigoroso possa essere il metodo, ogni grande sistema nasce sempre da una domanda che qualcuno ha avuto il coraggio di porsi prima degli altri.
