diff --git a/src/live/book.py b/src/live/book.py index a0a02a5..8aafa7d 100644 --- a/src/live/book.py +++ b/src/live/book.py @@ -4,8 +4,8 @@ TP01 e SKH01 tradano lo STESSO strumento (BTC/ETH _USDC-PERPETUAL). Su Deribit e posizione netta per strumento per conto -> non si possono tenere due gambe separate: si combinano in software in un unico target netto, e si manda UN ordine per asset per raggiungerlo. -Formula (preserva il budget di rischio $300/asset, split 75/25; coerente col blend di ritorni -deribit_book_sleeves = 0.75*TP01 + 0.25*SKH01): +Formula (preserva il budget di rischio per-asset di config (CAP sotto: `max_notional_per_asset_usd` +o `_frac`), split 75/25; coerente col blend di ritorni deribit_book_sleeves = 0.75*TP01 + 0.25*SKH01): net_target_usd[asset] = clamp( WEIGHT * E * (W_TP01 * tp_frac + W_SKH * skh_sign), ±CAP ) @@ -13,8 +13,8 @@ deribit_book_sleeves = 0.75*TP01 + 0.25*SKH01): tp_frac = target TP01 (causale, >=0, long-flat) da TrendPortfolio.current_target skh_sign = +1 long / -1 short / 0 flat da _skyhook_positions (book 230m) E = equity reale del conto (fallback paper se offline) - CAP = cap notional per-asset. Fisso = max_notional_per_asset_usd ($300), OPPURE - DINAMICO = equity * max_notional_per_asset_frac (es. 0.5 -> equity/2) se la + CAP = cap notional per-asset. Fisso = `max_notional_per_asset_usd` di config, OPPURE + DINAMICO = equity * `max_notional_per_asset_frac` (es. 0.5 -> equity/2) se la frazione e' presente in config -> il cap cresce col capitale e non strozza il book quando depositi (frontiera 2026-07-03). Dinamico SOLO con equity reale fidata; su fallback/offline si torna al cap fisso (protezione downside). diff --git a/src/live/deribit.py b/src/live/deribit.py index 437427a..43c56f4 100644 --- a/src/live/deribit.py +++ b/src/live/deribit.py @@ -1,13 +1,16 @@ -"""Accesso Deribit MAINNET in SOLA LETTURA (via Cerbero MCP) + costruttore ordini deterministico. +"""Accesso Deribit MAINNET (via Cerbero MCP) + costruttore ordini deterministico. La classe +`DeribitRead` qui e' in SOLA LETTURA (nessun metodo di trading, by design); l'esecuzione REALE la +estende in un modulo separato (`src.live.execution.DeribitTrader`) — non e' piu' un progetto +futuro (#35 A9): e' ARMATA e LIVE su Deribit mainnet dal 2026-06-23 (`execution_enabled` in +config/live.json), usata da `scripts/live/book_execute.py`. -Serve lo SHADOW MODE di TP01 (`scripts/live/live_trend.py`): legge prezzi / conto / posizioni REALI -dal mainnet (token `.env.mainnet`) e costruisce gli ordini di ribilancio **senza inviarli**. Qui NON -esiste alcun metodo di trading — by design: l'unica via per piazzare ordini sara' un modulo separato, -abilitato esplicitamente, dopo la validazione shadow + micro-test. +Da qui vengono prezzi / conto / posizioni REALI (token `.env.mainnet`): li usa sia il libro live +(TP01+SKH01, via src.live.book + execution) sia lo shadow mode e i monitor di sorveglianza. -Disciplina del progetto: **testnet FUORI** (feed farlocco, causa del reset v2.0.0). Solo mainnet reale, -e in questa fase solo in lettura. I contratti sono ristretti a BTC/ETH-PERPETUAL (inverse: `amount` -in USD notional, step verificato su Deribit: BTC $10, ETH $1). +Disciplina del progetto: **testnet FUORI** (feed farlocco, causa del reset v2.0.0). Solo mainnet +reale. I contratti ESEGUITI sono i perp LINEARI USDC (`_USDC-PERPETUAL`, non inverse): `amount` in +base-coin (BTC/ETH), margine e P&L in USDC — vedi `_CONTRACT` sotto per step/tick/minimi per +strumento. """ from __future__ import annotations diff --git a/src/live/execution.py b/src/live/execution.py index 4edd3e1..5d7c322 100644 --- a/src/live/execution.py +++ b/src/live/execution.py @@ -23,10 +23,11 @@ from dataclasses import dataclass from src.live.deribit import DISASTER_LABEL, DeribitRead, disaster_stop_price, notional_to_amount, quantize_price # Conto USDC -> perp LINEARE USDC (amount in base-coin). MAX_AMOUNT = TETTO HARD anti-fat-finger di -# DEFAULT (~$630/$430 su un conto ~$600), usato SOLO quando nessuno ha chiamato set_open_cap() (il -# micro-test, che invia comunque size fissa minima). Sul libro il tetto per apertura lo deriva -# set_open_cap() dal cap di config (config/live.json max_notional_per_asset_usd, #18): backstop -# sopra il sizing di TP01/book, non il sizing operativo. +# DEFAULT (in coin, sotto), usato SOLO quando nessuno ha chiamato set_open_cap() (il micro-test, +# che invia comunque size fissa minima). Sul libro il tetto per apertura lo deriva set_open_cap() +# dal cap di config (config/live.json max_notional_per_asset_usd, #18): backstop sopra il sizing +# di TP01/book, non il sizing operativo. (#35 A9: via il "~$630/$430 su conto ~$600" cablato — +# MAX_AMOUNT e' in coin, non in dollari, e non e' il tetto operativo da quando esiste set_open_cap.) ALLOWED = {"BTC_USDC-PERPETUAL", "ETH_USDC-PERPETUAL"} MAX_AMOUNT = {"BTC_USDC-PERPETUAL": 0.01, "ETH_USDC-PERPETUAL": 0.25} # DEFAULT — vedi set_open_cap() FLAT_USD = 1.0 # |notional| < $1 = posizione considerata flat