Files
PythagorasGoal/Old/docs/diary/2026-06-10-real-truth-ledger.md
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

3.2 KiB
Raw Permalink Blame History

2026-06-10 — REAL-TRUTH: il ledger segue i fill reali (sim → diagnostica)

Richiesta

L'utente vuole che sim e reale coincidano — o meglio, che il sim non esista come verità: «voglio vedere dati che hanno avuto movimento reale su exchange». La ricognizione dei 77 eventi reali (dal 2026-06-03) ha mostrato che il gap sim/reale NON era slippage (piccolo, es. 0.15 bps su un TP) ma contabile:

  1. Ledger separati. Il capital che guida portafoglio/ribilanci/sizing era aggiornato dal PnL SIM; il PnL reale finiva in un real_capital parallelo che non guidava nulla. MR01 BTC: sim +28.93 vs reale +1.98 sugli stessi 4 trade.
  2. Prezzi sim da candele testnet (spike print, es. 2026-06-07 sim short BTC a 65266.5 con mark reale 62395): il sim bookava PnL che il reale non vede. Con il ledger sim come verità, l'equity del portafoglio accumulava questa fantasia.

Nota: il notional reale era GIÀ derivato dalla formula sim (capital·ps·lev passato a _real_open/_real_open_pair) — il punto 1 della richiesta (sizing allineato) si chiude da solo una volta che capital è reale.

Implementazione (REAL-TRUTH)

  • StrategyWorker e PairsWorker accettano real_truth: bool (default False = shadow storico). Con flag attivo e esecuzione abilitata:
    • _real_close/_real_close_pair ritornano (real_pnl, applied); applied=True se ci sono fill reali (o chiusura verificata).
    • _close_position/_close chiamano la chiusura reale PRIMA dell'update ledger: capital += real_pnl (fee reali incluse); is_win = pnl_reale > 0.
    • Il sim resta nel log CLOSE come diagnostica: pnl_source ("real" | "sim_fallback"), sim_pnl, real_pnl.
    • Fallback al sim SOLO se il trade reale non è mai esistito/fillato (REAL_OPEN_FAIL, fill zero) — dichiarato nel log, mai silenzioso.
  • Runner: overrides.execution.real_truth (yml) → build_worker_for(..., real_truth=). portfolios.yml: real_truth: true.
  • Conseguenza a catena: equity ledger → pesi → allocazioni → notional dei prossimi ordini derivano ora dai soldi veri sul conto. Il real_capital parallelo resta come ledger puro-reale di confronto.

Test

tests/portfolio/test_real_truth.py (6 test): capital segue i fill reali (single-leg e pairs), una divergenza sim-win/reale-loss viene contata come LOSS, fallback sim dichiarato su REAL_OPEN_FAIL/leg-fail, e modalità shadow invariata senza flag. Suite completa: 99 passed.

Limiti onesti

  • I multi-asset (TR01/ROT02/TSM01/XS01) restano sim per costruzione (paper sleeves fuori dal pool, capitale insufficiente per i book multi-leg).
  • La STORIA del ledger non è riscritta: l'equity attuale (~2154) ingloba il PnL sim accumulato fino a oggi (reale realizzato era ≈ 15.6 dal 3/6). Da ora la divergenza smette di accumularsi; se si vuole un azzeramento (reset equity al conto reale) è un'operazione separata e deliberata.
  • Le DECISIONI di trading (entry/exit) restano guidate dai prezzi del feed (candele testnet): real-truth corregge la contabilità, non i segnali. Gli spike print del feed possono ancora generare entry/exit subottimali — ma ora il loro effetto si misura in PnL reale, non in PnL immaginario.