# 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__D1.csv` | un record per **ogni incrocio** tra le 9 linee | | `PaPP_bars__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 con `q < 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_1` coincide esattamente con `ret_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 ```bash # 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) ```