diff --git a/docs/diary/2026-06-16-mainnet-fase0-smoke.md b/docs/diary/2026-06-16-mainnet-fase0-smoke.md new file mode 100644 index 0000000..a465e19 --- /dev/null +++ b/docs/diary/2026-06-16-mainnet-fase0-smoke.md @@ -0,0 +1,57 @@ +# 2026-06-16 — Fase 0 smoke mainnet VERDE (ETH→USDC, limit non market) + +## Contesto +Il conto Deribit mainnet, fino al 2026-06-14 **vuoto** (€0, unico blocco al micro-test), ha +ricevuto un deposito iniziale di **~$50**: 25.00 USDC + 0.013878 ETH. Occasione per eseguire la +**Fase 0** del piano (`docs/specs/mainnet-microtest-plan.md`): validare la catena d'esecuzione su +soldi VERI con rischio ~0, abbinandola a un'operazione utile — **consolidare l'ETH stranded in +margine USDC**. + +Perché consolidare: noi eseguiamo sui perp **lineari USDC** (`*_USDC-PERPETUAL`), marginati in +**USDC**. I 0.0138 ETH stavano nel wallet ETH (collateral dell'inverse, che NON usiamo per la +matematica lineare del backtest) → margine effettivo solo i $25 USDC. Convertendo, l'intero ~$50 +diventa USDC utilizzabile. + +## Ordine (LIMIT, non market — istruzione utente) +Check capability read-only prima: spot `ETH_USDC` esiste (bid 1780.3/ask 1780.9, `testnet:false`, +price tick 0.1). Il listing strumenti NON espone lo spot (kind=spot vuoto, endpoint v1 404) ma il +ticker basta. `place_order` supporta `order_type="limit"` + `price`. + +- **LIMIT SELL `ETH_USDC` 0.0138 ETH @ floor 1776.3** (~0.1% sotto il bid) — *marketable limit con + cap di slippage*: crossa e filla al bid corrente, ma con un floor sotto cui NON può fillare. + Soddisfa "non a market" (prezzo protetto, niente slippage incontrollato) garantendo il fill. +- Step 0.0001 ok al primo colpo (niente fallback 0.013); fallback previsti 0.013/0.012. + +### Esito +``` +order_state = filled filled_amount = 0.0138 +average_price = 1778.1 (= bid al momento dell'invio; il bid era sceso 1780.3->1778.1 tra + quote e invio, ma > floor 1776.3 -> zero slippage negativo) +fee = 0.0 (maker, costo nullo) +order_id = ETH_USDC-8488088107 +``` +Riconciliazione conto (before→after): +| Wallet | Prima | Dopo | +|---|---|---| +| USDC | 25.00 | **49.538** (+24.538) | +| ETH | 0.013878 | 0.000078 (dust ~$0.14, sotto il min → non convertibile) | +| BTC | 0 | 0 | +| posizioni / ordini resting | — | nessuna / nessuno | + +## Cosa è dimostrato +Catena end-to-end su **mainnet** (`testnet:false`), a costo ~0: routing live + auth + `place_order` +limit + fill + verifica via `get_trade_history` + riconciliazione `get_account_summary`. La +meccanica d'esecuzione reale FUNZIONA su soldi veri. **Fase 0 ✅.** + +## Limite residuo (resta il blocco vero) +~$49.54 USDC è **sotto il minimo €500** del piano: a questo margine il rumore di arrotondamento +BTC (step lineare ~$6.6) soffoca il segnale → NON si può ancora testare l'**edge**. Per la **Fase 1** +(fade-only, €1000, 2-4 settimane, verdetto ledger-vs-backtest) serve un **top-up a ~€500-1000 USDC**. +Stato piano aggiornato: token+smoke ✅, funding 🟡 parziale, Fase 1 in attesa di capitale. + +## Note operative +- Operazione MANUALE one-off (non il runner): `.env.mainnet` sourcato a mano, client puntato a + mainnet solo per questa sessione. Il runner di produzione resta su **testnet** (`.env` condiviso + invariato) → nessun rischio di flip accidentale. +- La marketable-limit con floor è il pattern giusto per conversioni one-shot a prezzo controllato + (vs il TP resting/limit-al-livello degli sleeve): fill immediato + cap di slippage, fee maker. diff --git a/docs/specs/mainnet-microtest-plan.md b/docs/specs/mainnet-microtest-plan.md index fc3213f..4fa6c5a 100644 --- a/docs/specs/mainnet-microtest-plan.md +++ b/docs/specs/mainnet-microtest-plan.md @@ -14,16 +14,25 @@ testnet era ancora congelato a 1661.95 da 36h+ → conferma definitiva: testnet --- -## STATO (2026-06-14) +## STATO (2026-06-16) - ✅ **Token mainnet wired e VERIFICATO.** `MAINNET_TOKEN` (da cerbero-mcp, che ha già le chiavi Deribit LIVE) copiato in **`.env.mainnet`** (chmod 600, gitignored), SEPARATO dal `.env` condiviso. Verifica read-only: `is_mainnet()=True`, auth OK su `get_account_summary` (nessun ordine). Il `.env` condiviso resta testnet → il runner attuale NON flippa a mainnet a un riavvio. -- 🔴 **BLOCCO: conto Deribit mainnet VUOTO** (equity 0.0 USDC/BTC/ETH). Serve il deposito (~€1000 - USDC) prima di qualsiasi smoke/trade. -- ⏭️ Appena finanziato: avviare il micro-test come **servizio separato** (env_file `.env.mainnet`, - dir dati pulita, `portfolios.yml` fade-only) → Fase 0 smoke → Fase 1. +- ✅ **FASE 0 SMOKE VERDE (2026-06-16).** Catena d'esecuzione validata su mainnet con soldi VERI a + costo ~0: LIMIT SELL `ETH_USDC` spot 0.0138 ETH @ floor 1776.3 (marketable, NON market) → + `order_state=filled`, average_price **1778.1** (= bid, zero slippage negativo), **fee 0.0**. + Riconciliazione conto: USDC 25.00→**49.54** (+24.54), ETH→0.000078 dust, nessun ordine resting. + Provato end-to-end: routing live + auth + place_order limit + fill + verifica trade + balance. + (Doppio scopo: consolidare l'ETH stranded in margine USDC + smoke.) Diario + `docs/diary/2026-06-16-mainnet-fase0-smoke.md`. +- 🟡 **FINANZIAMENTO PARZIALE: ~$49.54 USDC** (deposito iniziale ~$50: 25 USDC + 0.0138 ETH, ora + consolidati). **Sotto il minimo €500** del piano → basta per la meccanica (Fase 0 ✅) ma NON per + testare l'edge (a $50 di margine il rumore di arrotondamento BTC soffoca il segnale). **Serve + top-up a ~€500-1000 USDC** prima della Fase 1. +- ⏭️ Appena finanziato a ~€1000: avviare il micro-test come **servizio separato** (env_file + `.env.mainnet`, dir dati pulita, `portfolios.yml` fade-only) → Fase 1. --- @@ -164,9 +173,9 @@ feed congelato). Criterio (lo stesso del report, soglie già nel verdetto 🟢/ - [x] MAINNET_TOKEN Cerbero abilitato + verificato (auth OK, is_mainnet=True) — 2026-06-14 - [x] Token in `.env.mainnet` (separato, gitignored, chmod 600) + `CERBERO_BOT_TAG=pythagoras-mainnet` -- [ ] **Conto Deribit mainnet KYC + finanziato ~€1000 USDC** ← BLOCCO ATTUALE (conto a €0) +- [x] Fase 0 smoke mainnet VERDE (LIMIT SELL ETH_USDC filled, fill@bid, fee 0, balance riconciliato) — 2026-06-16 +- [~] Conto Deribit mainnet finanziato: **~$49.54 USDC** (parziale, sotto il min €500) ← **TOP-UP a ~€1000 = BLOCCO Fase 1** - [ ] Servizio micro-test separato (env_file `.env.mainnet`, dir dati pulita) -- [ ] Fase 0 smoke mainnet verde (ordine→verifica→fee) - [ ] `portfolios.yml` micro-test (fade-only, €1000, exec sleeves MR01/02/07) - [ ] runner mainnet + reconciler + report ledger-vs-backtest schedulati - [ ] dopo ≥10–20 trade: leggere il verdetto → scala / aspetta / stop