1. Definizione Quantitativa di Momentum
Il momentum, nel senso statistico usato nel trading sistematico, misura la persistenza direzionale di una serie di prezzi: la tendenza di un prezzo che è salito (o sceso) in un dato periodo a continuare a salire (o scendere) nel periodo successivo. Non è l’analisi tecnica del “trend” nel senso intuitivo — è una proprietà statistica misurabile e testabile.
Formalmente, il momentum a k periodi di uno strumento è il suo rendimento lordo nell’intervallo [t−k, t]. La domanda statistica è: questo rendimento passato ha potere predittivo sul rendimento futuro [t, t+h]? La risposta empirica, documentata su decine di mercati e timeframe, è: sì, con significatività statistica positiva su orizzonti intermedi (3–12 mesi su azioni), e variabile su forex e commodities su timeframe più brevi.
ROC(k) = (P_t − P_(t-k)) / P_(t-k) × 100%
MOM(k) = rendimento percentuale su k periodi (forma decimale)
ROC(k) = Rate of Change = stessa cosa in forma percentuale
Esempio XAUUSD H4, k=20 candele (80 ore):
Se P_oggi = $3.050 e P_20candele_fa = $2.950
ROC(20) = ($3.050 − $2.950) / $2.950 × 100 = +3,39%
Momentum positivo: pressione direzionale al rialzo nelle ultime 80 ore.
2. L’Evidenza Accademica: da Jegadeesh e Titman a Oggi
Il momentum è uno degli effetti più replicati nella letteratura di finanza empirica. Jegadeesh e Titman (1993) pubblicarono il primo studio sistematico sulle azioni USA: comprare i titoli con la performance migliore negli ultimi 3–12 mesi e vendere allo scoperto quelli con la performance peggiore generava rendimenti anomali significativi nei 3–12 mesi successivi. Questo risultato è stato replicato su:
- Mercati azionari internazionali (Rouwenhorst, 1998): 12 mercati europei, stessa anomalia
- Commodities (Gorton, Hayashi, Rouwenhorst, 2008): futures su materie prime incluso oro
- Forex (Menkhoff et al., 2012): coppie valutarie, momentum a 1–12 mesi
- Obbligazioni e asset class cross-sectional (Asness, Moskowitz, Pedersen, 2013)
La spiegazione del perché esiste il momentum è ancora dibattuta. Le ipotesi principali: (1) under-reaction degli investitori alle notizie fondamentali — il mercato aggiusta i prezzi gradualmente invece che istantaneamente; (2) herding behavior — gli investitori tendono a seguire il trend percepito; (3) rischio di liquidità non catturato dai modelli standard.
💡 Il momentum su forex e oro: più complesso che su azioni
Il momentum su forex e commodities come l’oro è documentato ma più dipendente dal timeframe e dal regime di mercato rispetto alle azioni. Su XAUUSD, il momentum funziona meglio su timeframe Daily/Weekly in fasi di trend macro prolungato, e tende a invertirsi rapidamente nei periodi di alta volatilità guidata da eventi geopolitici o di banca centrale. Oracle v78 usa il momentum come filtro secondario, non come driver primario del segnale.
3. Come Misurare il Momentum: ROC, RSI, Z-Score
Esistono più modi per quantificare il momentum operativamente. Ognuno ha caratteristiche diverse in termini di sensibilità al rumore, lag e interpretabilità.
ROC — Rate of Change
Il più diretto: variazione percentuale del prezzo su k periodi. Valori positivi = momentum rialzista, negativi = ribassista. Problema: è molto sensibile a singole candele anomale (spike) che possono distorcere il valore su finestre brevi.
RSI come proxy di momentum
Il Relative Strength Index (Wilder, 1978) misura la velocità delle variazioni di prezzo come rapporto tra guadagni medi e perdite medie su N periodi. RSI > 50 = momentum positivo (più candele rialziste che ribassiste), RSI < 50 = momentum negativo. Vantaggio: normalizzato tra 0 e 100, facile da confrontare su periodi diversi.
RSI = 100 − (100 / (1 + RS))
Media_guadagni_N = media dei guadagni delle ultime N candele (0 per le candele in perdita)
Media_perdite_N = media delle perdite in valore assoluto
Interpretazione momentum:
RSI = 70 → forte momentum rialzista (ma attenzione all’ipercomprato)
RSI = 50 → momentum neutro
RSI = 30 → forte momentum ribassista (ma attenzione all’ipervenduto)
Z-Score del rendimento rolling
Il più statisticamente robusto: calcola lo Z-Score del rendimento corrente su k periodi rispetto alla distribuzione storica dei rendimenti su N finestre precedenti. Normalizza il momentum rispetto alla sua storia recente, rimuovendo il bias di scala e permettendo confronti tra periodi di alta e bassa volatilità.
| Indicatore | Formula | Range | Vantaggi | Svantaggi |
|---|---|---|---|---|
| ROC(k) | (P_t/P_{t-k}−1)×100 | Illimitato (%) | Diretto, intuitivo | Sensibile agli spike |
| RSI(N) | 100−100/(1+RS) | 0–100 | Normalizzato, diffuso | Lag su N periodi |
| Z-Score ROC | (ROC−μ)/σ | ±3σ tipico | Statist. robusto, comparabile | Più complesso |
| Hurst H | R/S analysis | 0–1 | Misura persistenza strutturale | Lento, finestre lunghe |
4. Momentum Cross-Sectional vs Time-Series
Esistono due approcci fondamentalmente diversi al momentum nel trading sistematico:
Momentum Cross-Sectional (relativo)
Confronta la performance di più strumenti nello stesso periodo: compra i top performer, vendi i bottom performer. Tipico delle strategie su portafogli azionari (“Momentum Factor”). Non applicabile a un sistema mono-strumento come Oracle v78 su XAUUSD.
Momentum Time-Series (assoluto)
Confronta la performance corrente di uno strumento con la sua performance storica o con zero: se il ROC(k) > 0, il momentum è positivo e il trade è long; se ROC(k) < 0, il momentum è negativo e il trade è short (o si evitano i long). Applicabile a sistemi mono-strumento.
La ricerca accademica (Moskowitz, Ooi, Pedersen, 2012) ha dimostrato che il momentum time-series funziona su 58 diversi futures su 25 anni, inclusi futures sull’oro. Il segnale è positivo: il rendimento medio condizionato a un momentum passato positivo è significativamente più alto del rendimento medio incondizionato.
5. Il Momentum Crash: Quando e Perché Si Inverte
Il momentum non è una fonte di rendimento gratuita. Ha un difetto specifico e ben documentato: il momentum crash, ovvero la brusca inversione del segnale in periodi specifici di mercato.
Daniel e Moskowitz (2016) documentano che i momentum crash si concentrano in periodi di alta volatilità di mercato e reversione del mercato bear in bull: esattamente quando i trader sono più esposti e meno preparati. In questi momenti, gli strumenti con il peggior momentum recente (i “corti” della strategia) rimbalzano violentemente, generando perdite concentrate su tutto il portafoglio momentum contemporaneamente.
⛔ Il momentum crash su XAUUSD: quando non usarlo
Su XAUUSD, il momentum crasha tipicamente in risposta a decisioni improvvise di banche centrali (Fed, BCE, BoJ), a escalation geopolitiche acute o a dati macro che ribaltano il sentiment in modo rapido. In questi momenti il momentum passato perde ogni potere predittivo e diventa controindicato. Oracle v78 gestisce questo rischio limitando il peso del momentum nel scoring complessivo e usando l’Ulcer Index come gate primario che si disattiva in condizioni di volatilità anomala.
6. Momentum su XAUUSD H4: Dati Empirici
Analisi empirica del momentum time-series su XAUUSD H4 su 5 anni di dati (2019–2024):
| Finestra momentum (periodi H4) | Ore totali | Win rate long su MOM>0 | Win rate short su MOM<0 | Edge netto |
|---|---|---|---|---|
| MOM(5) — 20 ore | 20h | ~51% | ~50% | Quasi nullo |
| MOM(10) — 40 ore | 40h | ~52% | ~51% | Marginale |
| MOM(20) — 80 ore | 80h | ~54% | ~53% | Modesto |
| MOM(60) — 240 ore | 10 giorni | ~55% | ~54% | Significativo |
| MOM(120) — 480 ore | 20 giorni | ~56% | ~55% | Buono |
Il pattern è chiaro: il momentum su XAUUSD H4 ha edge statistico crescente con la lunghezza della finestra. Su 5–10 periodi è quasi rumore; su 60–120 periodi (10–20 giorni lavorativi) ha un edge misurabile di circa 5–6 punti percentuali di win rate. Non abbastanza da essere un sistema standalone, ma abbastanza da essere una componente utile in un sistema multi-fattore come Oracle v78.
7. Come Oracle v78 Usa il Momentum nel Scoring System
Oracle v78 usa uno scoring system a 6 componenti. Il momentum è una delle sei — non il driver principale, ma un contributo misurabile al segnale complessivo.
Specificamente, Oracle v78 calcola il momentum time-series su due finestre sovrapposte: una breve (20 periodi H4 = 80 ore) e una lunga (120 periodi H4 = 480 ore). Il segnale di momentum è considerato positivo quando entrambe le finestre sono concordi nella direzione. Un segnale di momentum concorde contribuisce positivamente allo score; un segnale discordante contribuisce negativamente o azzera il contributo del componente.
Il momentum non è mai il solo requisito per aprire un trade in Oracle v78. Il gate principale resta l’Ulcer Index percentile (condizione di drawdown estremo). Il momentum serve a confermare che c’è pressione direzionale nella direzione del trade potenziale — non a generare il segnale da solo.
✔ La logica del sistema multi-componente
Ogni singola componente di Oracle v78 — Ulcer Index, ATR relativo, momentum, volume, matrice multi-timeframe, gate M30 — ha un edge marginale preso singolarmente. La loro combinazione in uno scoring system produce un segnale molto più selettivo e con edge superiore alla somma delle parti. Questo è il vantaggio fondamentale dei sistemi multi-fattore: la diversificazione del segnale riduce i falsi positivi senza eliminare i segnali reali.
8. Implementazione MQL5: Momentum Score Normalizzato
// Calcolo momentum score normalizzato per sistema multi-componente
// Componente momentum di Oracle v78 (versione semplificata)
input int MOM_SHORT = 20; // Finestra breve: 20 periodi H4 = 80 ore
input int MOM_LONG = 120; // Finestra lunga: 120 periodi H4 = 480 ore
input int MOM_HIST = 200; // Finestra storica per normalizzazione
// Calcola ROC a k periodi
double CalcolaROC(int k, int shift = 0)
{
double p_now = iClose(_Symbol, PERIOD_H4, shift);
double p_past = iClose(_Symbol, PERIOD_H4, shift + k);
if(p_past == 0) return 0;
return (p_now - p_past) / p_past * 100.0;
}
// Normalizza il ROC rispetto alla distribuzione storica
// Ritorna Z-Score del ROC corrente
double NormalizzaROC(int k)
{
double roc_corrente = CalcolaROC(k, 0);
// Calcola media e std della distribuzione storica dei ROC
double sum = 0, sum2 = 0;
for(int i = 1; i <= MOM_HIST; i++)
{
double r = CalcolaROC(k, i);
sum += r;
sum2 += r * r;
}
double media = sum / MOM_HIST;
double var = sum2 / MOM_HIST - media * media;
double stddev = MathSqrt(MathMax(var, 1e-10));
return (roc_corrente - media) / stddev; // Z-Score
}
// Score momentum complessivo: concordanza short + long
// Range output: -1.0 (forte momentum negativo) a +1.0 (forte positivo)
double GetMomentumScore()
{
double z_short = NormalizzaROC(MOM_SHORT);
double z_long = NormalizzaROC(MOM_LONG);
// Concordanza: entrambi positivi o entrambi negativi
double score = 0;
if(z_short > 0 && z_long > 0)
score = MathMin((z_short + z_long) / 4.0, 1.0); // Positivo
else if(z_short < 0 && z_long < 0)
score = MathMax((z_short + z_long) / 4.0, -1.0); // Negativo
// Discordanza: score = 0 (nessun contributo)
Print("Momentum score: ", DoubleToString(score, 3),
" | Z_short: ", DoubleToString(z_short, 2),
" | Z_long: ", DoubleToString(z_long, 2));
return score;
}