Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
PaPP v2 — Analisi dei pattern di incrocio
Questa cartella contiene l'analisi statistica di cosa succede dopo che due linee si incrociano (le 9 linee del sistema: prezzo, Mediana, 7 MA), gli script per riprodurla e i risultati.
Risultati di riferimento: EURUSD D1, dal 1999 (l'euro reale esiste dal 1999; i dati pre-1999 forniti dal broker sono sintetici e vengono esclusi).
1. Da dove vengono i dati
I dati sono generati in MetaTrader dallo script PaPP v2/PaPP_CrossExport.mq5,
ancorato a D1 esattamente come l'indicatore. Produce due file:
| file | contenuto |
|---|---|
PaPP_crosses_<SYM>_D1.csv |
un record per ogni incrocio tra le 9 linee |
PaPP_bars_<SYM>_D1.csv |
un record per ogni giorno D1 (la baseline) |
Per ogni record sono salvati:
- contesto al momento dell'evento: distanza dalla Mediana, ampiezza del cluster, trend (sopra/sotto MA365), e le metriche velocita' / accelerazione / volatilita' calcolate come mediana delle 7 scale (no ATR di MetaTrader);
- esiti futuri a 1/3/5/10/20 giorni: rendimento, max favorevole/avverso,
ritorno alla Mediana, e la traiettoria completa
cret_1 … cret_20(rendimento cumulato giorno per giorno, in percentuale).
Le 36 coppie sono tutte le combinazioni delle 9 linee; ogni coppia ha 2 direzioni
(dir=+1 la 1a linea passa sopra la 2a, dir=-1 sotto) → 72 casi.
2. Le 3 correzioni metodologiche (perche' l'analisi e' "onesta")
Una media grezza dei rendimenti dopo un incrocio e' fuorviante. Abbiamo corretto i tre problemi tipici:
2.1 Bias di periodo → confronto con una baseline nello stesso regime
Non confrontiamo il rendimento post-incrocio con zero, ma con quello di un
giorno qualunque nello stesso regime di mercato. Il regime e' definito da:
trend (sopra/sotto MA365) × tercile del cluster × tercile della velocita'.
extra-rendimento = rendimento dopo l'incrocio − rendimento medio della baseline nello stesso regime
Se l'extra e' ~0, l'incrocio non aggiunge nulla oltre al contesto. (Su EURUSD il drift di fondo della baseline e' risultato ~0, quindi non c'era un bias rialzista che gonfiava i numeri.)
2.2 "Movimenti piccoli" → effetto in unita' di volatilita'
L'extra-rendimento e' espresso anche come frazione della deviazione standard
del movimento tipico a quell'orizzonte (eff = extra / sd_baseline_h), cosi' un
+0.3% pesa diversamente a 5 o a 20 giorni.
2.3 Finestre sovrapposte + tanti test → bootstrap a blocchi + multi-test
- Gli eventi vicini condividono il futuro (autocorrelazione) → la significativita' e' calcolata con block bootstrap (blocchi temporali di 20 giorni), non con il t-test classico.
- Testiamo 72 casi × 5 orizzonti → alcuni "vincono" per fortuna. Applichiamo la
correzione Benjamini-Hochberg (
q-value): consideriamo robusti solo i casi conq < 0.10.
3. Verifiche di correttezza
Lo script full_table.py esegue 4 controlli automatici:
- V1 la direzione registrata coincide col segno di (A−B) all'incrocio (~99.9%);
- V2
cret_1coincide esattamente conret_1(differenza 0); - V3 ricalcolo indipendente della media di un pattern (combacia col summary);
- V4 la baseline ha drift ~0 (atteso su FX).
4. Come riprodurre
# 1) genera i due CSV da MetaTrader (PaPP_CrossExport.mq5) e copiali in ./data
# 2) dalla cartella scripts:
cd scripts
python excess_analysis.py EURUSD 1999 # summary + top per orizzonte
python full_table.py EURUSD 1999 # verifiche + tabella 72 casi
python plot_trajectories.py EURUSD 1999 # grafico traiettorie extra-rendimento
Dipendenze: pandas, numpy, matplotlib. I risultati finiscono in ./results.
5. Risultati principali (EURUSD, 1999+)
A) Mean-reversion (il segnale piu' robusto, vale per quasi tutte le coppie): dopo un incrocio il prezzo torna a toccare la Mediana entro 20 giorni nel 77–94% dei casi, in 2–4 giorni mediani.
B) Edge direzionali significativi (q<0.10), legati alle scale lunghe:
- SALGONO:
MA365xMA7 +,MA365xMA182 ±,MA365xMA121 −,MA121xMA7 +,MA121xMA3 +,PRICExMA121 −; - SCENDONO:
MA182xMA30 +,MA365xMA121 +(forte a 20g); - gli incroci tra MA cortissime e prezzo↔MA brevi sono neutri (rumore).
Lettura onesta: gli edge direzionali sono reali ma modesti (~0.1–0.3 sigma, +0.2–0.5% di extra, 55–59% di probabilita' di battere la baseline). Il tema ricorrente e' la MA121 (semestrale). I casi con pochi campioni (n<40) vanno trattati con cautela anche se "significativi".
Vedi results/tabella_incroci_EURUSD_1999.md per la tabella completa dei 72 casi.
6. Contenuto della cartella
Analisi/
├── README.md questo documento
├── scripts/
│ ├── _common.py utility (load, regime, bootstrap, BH)
│ ├── excess_analysis.py extra-rendimento + significativita'
│ ├── full_table.py verifiche + tabella 72 casi
│ └── plot_trajectories.py grafico traiettorie
├── results/
│ ├── summary_EURUSD_1999.csv
│ ├── tabella_incroci_EURUSD_1999.csv
│ ├── tabella_incroci_EURUSD_1999.md
│ └── trajectories_EURUSD_1999.png
└── data/
└── README.md dove mettere i CSV di input (non versionati)