Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
130 lines
5.3 KiB
Markdown
130 lines
5.3 KiB
Markdown
# 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
|
||
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)
|
||
```
|