Files
PythagorasGoal/Old/docs/diary/2026-06-07-pairspos-gate.md
T
Adriano Dal Pastro 14522262e6 chore(reset): v2.0.0 — storico certificato Deribit mainnet, ripartenza pulita
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>
2026-06-19 15:20:59 +00:00

2.4 KiB
Raw Blame History

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).