14522262e6
Reset del progetto su fondamenta verificate dopo la scoperta che l'intera libreria "validata OOS" era artefatto di feed contaminato (print fantasma del feed Cerbero TESTNET + storico Binance/USDT). - Storico ricostruito da Deribit MAINNET (ccxt pubblico, tokenless) e CERTIFICATO (certify_feed.py): BTC/ETH puliti su TUTTA la storia (mediana 2-6 bps vs Coinbase USD), integrita' OHLC + coerenza resample (maxΔ 0.00) + cross-venue OK. Alt esclusi (illiquidi/divergenti: LTC/DOGE 50-82% barre flat; XRP/BNB non certificabili). - Verdetto sul feed pulito: FADE / PAIRS / XS01 / TSM01 morti (ogni portafoglio Sharpe -2.3..-3.0, DD ~40%); solo SH01 e frammenti HONEST con segnale residuo, da ri-validare in isolamento. - Cleanup "restart pulito": strategie, stack live (src/live, src/portfolio, runner/executor, yml, docker), ~100 script ricerca/gate, waste/games/ portfolios, dati non certificati + cache e 60+ diari -> archiviati in Old/ (preservati, non cancellati). Diario consolidato in un unico documento. - Skeleton ricerca tenuto: Strategy ABC + indicatori + src/fractal + src/backtest/engine + load_data; tool dati certificati (rebuild_history, certify_feed, audit_feed, multi_source_check). - Universo dati ATTIVO: solo BTC/ETH (5m/15m/1h); guardrail fisico (load_data su alt -> FileNotFoundError). Esecuzione DISABILITATA, conto flat. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
47 lines
2.4 KiB
Markdown
47 lines
2.4 KiB
Markdown
# 2026-06-07 — Gate position_size PAIRS: 0.5 → 0.20 (assicurazione, come il cap SHAPE)
|
||
|
||
Punto 8 della roadmap improvement-sweep: i pairs giravano col `position_size`
|
||
GLOBALE 0.5 a leva 2 (esposizione 1.0 della fetta) mentre TUTTA la validazione PR01
|
||
è a pos 0.15 lev 3 (esposizione 0.45) — ~2.2x il validato su una famiglia **senza
|
||
stop** (exit solo |z|≤z_exit o max_bars). Scelta deliberata (commento yml) ma mai
|
||
gateata. Evidenza live: ADA/ETH 2026-06-05 net −8.52% = −4.26% di sleeve in un trade.
|
||
|
||
## Metodo
|
||
|
||
`scripts/analysis/pairspos_port06_impact.py`: le 5 equity pairs ricostruite con
|
||
`pairs_sim` alla **leva live (2x)** su griglia pos {0.50, 0.25, 0.20, 0.15},
|
||
innestate nel PORT06 canonico (pesi cap PAIRS 0.33 + SHAPE 0.0588). Parità
|
||
verificata: `pairs_sim(0.15, lev3)` == equity canoniche (corr 1.00000, 5/5).
|
||
|
||
## Risultati
|
||
|
||
| pos | esp. | FULL Sh / DD | CAGR | OOS Sh / DD | fam DD | worst pair DD grezzo |
|
||
|---|---|---|---|---|---|---|
|
||
| 0.50 (live) | 1.00 | 6.69 / 4.77% | 130% | 9.05 / 3.40% | 14.0% | ETH/BTC 78% |
|
||
| 0.25 | 0.50 | 6.50 / 4.04% | 67% | 8.69 / 1.54% | 7.2% | 51% |
|
||
| **0.20** | **0.40** | 6.33 / 3.90% | 57% | 8.43 / **1.26%** | 5.8% | 44% |
|
||
| 0.15 | 0.30 | 6.03 / 3.78% | 47% | 7.99 / 1.33% | 4.3% | 35% |
|
||
|
||
Letture:
|
||
- Il gate meccanico (OOS Sharpe non peggiora) **boccia ogni riduzione**: ovvio —
|
||
ridurre l'esposizione di una famiglia che in-sample non è mai esplosa costa sempre
|
||
Sharpe. Ma il +130% CAGR / +2.6e9% compounded di ETH/BTC a pos 0.5 è fantasia da
|
||
compounding: dice solo che il tail event non è ancora successo in-sample.
|
||
- **0.20 è il ginocchio**: OOS DD 1.26% batte anche 0.15 (1.33% — oltre il ginocchio
|
||
si taglia ritorno senza guadagnare DD); esposizione 0.40 ≈ il validato 0.45.
|
||
- Decisione di tipo assicurativo, identica al precedente cap SHAPE (adottato pagando
|
||
−0.24 OOS Sharpe).
|
||
|
||
## Decisione (utente): pos PAIRS = 0.20
|
||
|
||
Implementazione:
|
||
- `runner.pos_for_spec(sid, global_ps, family_overrides)` — override per-famiglia
|
||
(chiave = `weighting.family_of`), plumbato in `build_worker_for`.
|
||
- `portfolios.yml`: `position_size_family: {PAIRS: 0.20}` (globale 0.5 invariato
|
||
per fade/dip/shape).
|
||
- Test: `test_pos_for_spec_family_override`, `test_build_pairs_worker_position_size`.
|
||
|
||
Nota di transizione: la posizione LTC/ETH aperta al deploy (entrata a sizing 0.5)
|
||
verrà chiusa col pos nuovo 0.20 → il pnl % sleeve di quel singolo trade è bookato
|
||
alla taglia nuova (one-time, conservativo).
|