Backtesting & verifica intermediate 12 min di lettura

Ottimizzazione parametri MT5: 116 combinazioni, 252 esecuzioni, 0 impostazioni adottate

Ottimizzazione dei parametri su MT5: l'abbiamo lanciata su otto nostri template di strategia e non ne abbiamo adottato nessuno. La parte utile è come ciascuno ha fallito: il miglior risultato in-sample è caduto più in basso di tutti, uno ha passato un controllo out-of-sample e poi è crollato, due non hanno mai superato 1,0. Ecco la procedura e la lettura che ti evita di adottare la prima riga.

Pubblicato · Revisionato

L’ottimizzazione dei parametri in MetaTrader 5 è una ricerca: dichiari un intervallo per ogni input, lo Strategy Tester esegue ogni combinazione e ti consegna una tabella ordinata secondo la metrica che hai scelto. La parte difficile non è lanciarla. La parte difficile è che la tabella ha sempre una prima riga, e la prima riga è quasi sempre sbagliata.

Quello che ottieni da questo articolo è una procedura che produce una decisione invece di un numero: una ricerca che puoi difendere, una lettura della griglia dei passaggi che sopravvive al contatto con un secondo periodo, e una regola di arresto.

Condizioni del test
ID esperimentoEXP-PARAM-SEARCH-OUTCOMES-001
Esperimento padreEXP-BUILDER-TEMPLATE-BASELINE-001
Fonteea-templates-manifest.jsbt.explored
Popolazione8 recorded searches of the 53 measured templates
Simbolo / timeframeUSDJPYm, M5 and H1
ModelloM1 OHLC (Model=1), Exness MT5, measured 2026-06-18
Parametri variatistop loss and take profit only
Ultima verifica2026-08-25

Preparazione: la griglia, la divisione e i dati

Tre impostazioni decidono se valga la pena lanciare la ricerca. Sbagliale e la griglia dei passaggi diventa un generatore di numeri casuali molto costoso.

CampoDoveCosa impostarePerché
OptimisationScheda SettingsSlow complete algorithm per una griglia piccolaLa modalità genetica campiona lo spazio; per 12–32 combinazioni puoi permetterti di vederlo tutto
Start / Step / StopScheda Inputs, per ogni inputDue parametri, passi grossolaniOgni input che spunti moltiplica la griglia. La nostra ne ha mossi due
ForwardScheda Settings1/2, 1/3 o 1/4Divide l’intervallo così che il tester valuti separatamente la seconda metà — è questo il controllo per cui stai lanciando la ricerca
Criterio di ottimizzazioneScheda SettingsDeciderlo prima di guardare la grigliaÈ la metrica con cui il tester ordina i passaggi, quindi decide quale riga è la prima riga
ModellingScheda SettingsUna modalità grossolana per scandagliare, poi rilancia il sopravvissuto su tick realiLe modalità di scansione servono a ordinare i candidati, mai a produrre una cifra pubblicata
PeriodScheda SettingsAbbastanza lungo da contenere più di un regimeUna ricerca dentro un solo trend trova l’impostazione che l’ha cavalcato

Il criterio merita una decisione, non un valore predefinito. Ordinare per profitto netto premia il passaggio che si è preso più rischio, e ordinare per una misura basata sul drawdown premia quello che ha operato meno — il recovery factor esiste proprio perché quelle due risposte non concordano. Le nostre ricerche non sono state giudicate affatto dall’ordinamento del tester: ogni sopravvissuto è stato valutato sul profit factor su tre finestre separate, e l’ordinamento dentro una qualsiasi di esse non ha mai deciso niente.

La qualità dei dati viene prima di tutto: una ricerca su tick cattivi ottimizza i buchi. La versione breve è che una qualità di modellazione sotto il 90% rende inutilizzabili le griglie dei passaggi intraday, e che un’esecuzione costruita su dati tick interpolati non riesce a risolvere uno stop che sta dentro una barra.

  1. Lancia prima un singolo backtest, con i valori predefiniti, e conserva il report. Senza una linea di base la griglia dei passaggi non ha niente da battere — come fare un backtest copre quel passaggio dall’inizio alla fine.
  2. Nella scheda Settings imposta Optimisation su un passaggio completo per una griglia piccola, e imposta Forward su 1/3 così che il tester trattenga l’ultimo terzo dell’intervallo.
  3. Nella scheda Inputs spunta solo i parametri che stai davvero testando, e dai a ciascuno uno Start, uno Step e uno Stop. Due input con passi grossolani battono quattro con passi fini.
  4. Premi Start e lascia che finisca. Leggi la scheda Optimisation Results come una tabella, e l’Optimisation Graph come una forma — un picco isolato è un avvertimento, un plateau è un risultato.
  5. Prendi i sopravvissuti — non il vincitore — e rilancia ciascuno come singolo backtest su un periodo precedente alla finestra di ottimizzazione. È il passo che ha prodotto ogni verdetto negativo del nostro insieme, ed è quello che la gente salta.

Leggere i risultati: tre periodi, non uno

Ecco per intero il nostro insieme registrato, ordinato per il miglior profit factor in-sample raggiunto da ciascuna ricerca. IS è il periodo su cui l’impostazione è stata adattata, OOS è la finestra di hold-out, e Precedente una finestra anteriore che la ricerca non ha mai visto.

TemplateGriglia cercataMiglior ISOOSPrecedenteVerdetto
ichimoku12 combinazioni × 3 finestre1,370,890,80no_robust_edge
ma_crossover20 + 12 combinazioni, due timeframe1,230,89–0,940,78no_robust_edge
cci_level12 combinazioni × 3 finestre1,071,050,92no_robust_edge
adx_trend12 combinazioni × 3 finestre1,040,910,80no_robust_edge
breakout12 combinazioni × 3 finestre1,040,79–0,890,64–0,84no_robust_edge
macd_signal12 combinazioni × 3 finestre1,14–1,150,74–0,77no_robust_edge
rsi_reversal12 combinazioni × 3 finestre0,91no_robust_edge
bb_bounce12 combinazioni × 3 finestre0,91no_robust_edge

Leggi in verticale la prima colonna numerica, poi in orizzontale. Il risultato in-sample più alto dell’insieme ha prodotto il crollo più grande: l’1,37 di ichimoku è sceso a 0,89 e poi a 0,80. Quell’ordine non è una coincidenza — l’impostazione che si adatta meglio a una finestra è per costruzione quella che ha assorbito di più il rumore di quella finestra.

Ora leggi l’impostazione che ci è arrivata davvero più vicina. Non è nella tabella qui sopra, perché non è mai stata la prima riga di niente: sulla stessa griglia di ichimoku, SL50/TP150 ha segnato 1,18 in sample, 0,99 out of sample e 1,00 sulla finestra precedente. Tre periodi, tutti più o meno piatti. È stata registrata come il candidato più vicino e comunque non adottata, perché il pareggio su tre finestre non è un vantaggio: è l’assenza di un vantaggio, misurata con cura.

Rispetto a tutto ciò, le linee di base che queste ricerche cercavano di battere stanno tra 0,92 e 1,03. Nemmeno una ricerca ha spostato un valore predefinito già pubblicato.

Trappole da evitare

La modalità di fallimento sotto tutte e cinque è la stessa. L’overfitting non è un errore che commetti alla fine di una ricerca: è l’esito predefinito del lanciarne una, e la disciplina dei tre periodi esiste per renderlo visibile prima che tu ci agisca sopra.

Migliorare e iterare: cosa cambiare e quando fermarsi

Cambia una cosa sola, rilancia, confronta con la linea di base che hai conservato. L’ordine che spreca meno tempo:

  1. Allarga il periodo prima di allargare la griglia. Più regimi battono più combinazioni. Una ricerca che copre un solo trend troverà l’impostazione che l’ha cavalcato, qualunque sia la risoluzione.
  2. Poi rendi i passi più grossolani, invece di raffinarli. Se un risultato esiste solo a SL47, non esiste.
  3. Poi, e solo allora, aggiungi un parametro. Le nostre non sono mai arrivate così avanti, perché già due parametri non superavano l’asticella dei tre periodi.

Fermati quando una di queste è vera, e scrivi quale:

  • Un sopravvissuto supera tutti e tre i periodi. Adottalo, e registra tutta la griglia che hai cercato — non solo il passaggio che hai tenuto.
  • Il miglior risultato in-sample è sotto 1,0. Hai una risposta vera: due delle nostre otto ricerche sono finite qui, e finire qui dopo 36 valutazioni costa poco.
  • I sopravvissuti continuano a superare una finestra e a fallirne un’altra. La regola dipende dal regime. Cercare di più produce solo altre impostazioni che dipendono dal regime.
  • Hai iniziato a spiegare perché la finestra precedente «non conta». È il momento in cui la ricerca ha smesso di essere un test.

Il registro onesto di una ricerca è l’intervallo che hai coperto e il verdetto, insieme. Tutte e otto le nostre sono archiviate così, ed è l’unico motivo per cui questo articolo ha potuto essere scritto a partire da esse — un vincitore archiviato da solo non avrebbe dimostrato niente.

Prossimi passi: fai un forward test, poi decidi

L’ottimizzazione è il secondo passo di quattro. La sequenza è backtest → ottimizzazione → walk-forward → demo, e ognuno elimina un modo diverso di sbagliare.

  • Fai pratica del ciclo su qualcosa che controlli: costruisci una strategia nell’EA Builder e cerca tu stesso il suo stop e il suo target, perché una griglia che hai dichiarato tu è molto più facile da leggere onestamente di una che hai ereditato.
  • La versione formale del controllo su tre periodi è la walk-forward analysis, che fa scorrere in avanti la divisione invece di fissarla in un punto solo.
  • Qualunque cosa ti restituisca la ricerca, il report in cui te la restituisce va comunque letto: leggere un report di backtest MT5 spiega su quale popolazione ciascuna cifra in evidenza stia davvero facendo un’affermazione.
  • Per vedere che aspetto ha un registro finito quando i numeri sono sopravvissuti, ogni scheda degli EA pubblicati porta l’elenco completo delle operazioni chiuse e il manifesto di esecuzione.
  • Come testiamo, valutiamo e registriamo tutto questo è descritto nella nostra metodologia di test.

Domande frequenti

Quanti parametri conviene ottimizzare in una volta sola?
Meno di quanti il tester te ne lascia muovere. Ogni ricerca del nostro insieme registrato ne ha mossi esattamente due — lo stop loss e il take profit — su un numero di combinazioni che va da 12 a 32, e nessuna delle otto ha prodotto un'impostazione che fossimo disposti ad adottare. Aggiungere un terzo e un quarto parametro non risolve la cosa: moltiplica la griglia e rende molto più facile trovare una combinazione che si adatta al rumore della tua finestra di test. Se due parametri non riescono a produrre un risultato che sopravvive a tre periodi, il problema è la regola, non la risoluzione della ricerca.
Che profit factor devo cercare in un passaggio di ottimizzazione?
Guarda tre numeri, non uno. Nel nostro insieme il miglior profit factor in-sample ha raggiunto 1,37 sul template ichimoku — e la stessa impostazione ha segnato 0,89 out of sample e 0,80 sulla finestra anteriore. L'impostazione che è arrivata più vicina a essere utilizzabile era molto meno impressionante in-sample: 1,18, che ha tenuto 0,99 e 1,00 sugli altri due periodi. Non è stata comunque adottata, perché il pareggio su due periodi su tre non è un vantaggio. Un numero alto in-sample è la cifra meno informativa che vedi sullo schermo.
Basta un solo test out-of-sample per validare un'impostazione ottimizzata?
No, e abbiamo un caso che spiega perché. Il template macd_signal ha prodotto un'impostazione che ha raggiunto da 1,14 a 1,15 out of sample — un passaggio pulito su un singolo hold-out — e poi ha segnato da 0,74 a 0,77 sulla finestra che precede il periodo di test. Un secondo progetto, cci_level, è andato oltre: 1,07 in sample, 1,05 out of sample e 0,92 sulla finestra precedente. Nemmeno due periodi sono bastati. Entrambi sarebbero stati adottati sotto la solita regola del singolo hold-out.
Cosa significa se l'ottimizzazione non trova affatto un'impostazione profittevole?
Significa che hai la tua risposta presto e a poco prezzo, che è l'esito buono. Due delle nostre otto ricerche — rsi_reversal e bb_bounce — non hanno mai prodotto un profit factor sopra 1,0 nemmeno sul periodo su cui erano state adattate; il loro miglior risultato in-sample è stato 0,91. Una regola che non si riesce a far funzionare sui dati su cui è stata messa a punto non verrà salvata da una griglia più ampia o da un'esecuzione più lunga. Registra l'intervallo che hai cercato e il verdetto, e passa all'idea successiva.