Files
TR_Agent/PaPP v2/Analisi/README.md
T
Pietro GiacobazziandDevin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> 19c2e0ac72 PaPP v2: cartella Analisi (script, risultati, metodologia incroci)
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-06-17 07:40:41 +00:00

130 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 (AB) 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
**7794%** dei casi, in **24 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.10.3 sigma,
+0.20.5% di extra, 5559% 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)
```