c655604131
PairsExecutionClient (compone ExecutionClient): open_pair (2 market long A/short B, verifica per-gamba, LEG-RISK unwind se una sola filla), close_pair (2 reduce-only via close_amount, MAI close_position), register_contract (fetch spec USDC). Spec LTC/ADA/SOL aggiunti. PairsWorker: ledger reale shadow a 2 gambe resume-safe (_real_open_pair/ _real_close_pair, PnL per gamba dir A=+d/B=-d, doppio arrotondamento riportato). Runner: pairs_executor gated su execution.pairs_enabled (false di default). Validazione: test 92/92 (open/close, leg-risk unwind, resume) + smoke testnet end-to-end (open 2 gambe verificate, close reduce-only, PnL reale -0.039 vs sim -0.036, conto flat). Smoke ora aborta se ci sono posizioni di produzione + usa solo close_amount. NB incidente testnet documentato (diario): pulizia manuale con close_position ha flattato le quote shadow dei fade sul conto condiviso -> auto-riconciliazione al prossimo close. Lezione: mai close_position su strumenti condivisi. pairs_enabled resta FALSE: accendere con finestra a conto flat + osservazione. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4.4 KiB
4.4 KiB
TODO — prossimi passi
Raccolta dei follow-up aperti. Aggiornato 2026-06-07 (fine sessione: roadmap improvement-sweep 10/10 completata, v1.1.9 live).
Esecuzione reale — i pezzi grossi mancanti
Executor a 2 gambe per i PAIRS— FATTO (2026-06-08):PairsExecutionClient(open/close 2 gambe, leg-risk unwind, ledger shadow resume-safe). Test 92/92 + smoke testnet end-to-end OK. Capability PRONTA ma SPENTA (pairs_enabled: false). Diariodocs/diary/2026-06-08-pairs-executor.md.- Accendere
pairs_enabled: truequando c'è una finestra a conto flat + osservazione. Poi monitorare REAL_OPEN_PAIR/REAL_CLOSE_PAIR e lo sbilanciamento notional fra gambe. - SH01 in reale: oggi escluso perché non ha TP/SL (esce a orizzonte H=12) → manca il livello
a cui agganciare il limit resting + disaster-bracket. Due strade: (a) nuovo percorso
"market reduce-only a scadenza orizzonte" nell'executor; (b) valutare TP/SL su SH01 — MA la
ricerca dedicata (
sh01_exit_lab, 11 famiglie di stop, 0 sopravvissute) dice che ogni stop rompe l'edge → andrebbe ri-gateato. Prima conviene osservare il PnL live post-fix di oggi.
Capitale (decisione utente, non codice)
- Valutare aumento capitale a €5.000-10.000 per togliere il rumore di arrotondamento. A €2.000 il rumore BTC per trade è ~2.4% (morde); soglie: ~€4.800 (<1%), ~€9.500 (<0.5%, "punto dolce"), ~€19.000 (trascurabile). Le commissioni invece sono % e neutre al capitale. Riguarda solo i 7 single-leg che eseguono reale; pairs/SH01 sono simulati.
Follow-up dal code-review (bassa priorità, non urgenti)
- forming-bar su ROT02/TSM01: i worker daily valutano la candela 1d IN FORMAZIONE al primo
poll dopo mezzanotte UTC (stessa classe del fix TR01/Pairs, pre-esistente). Ora è banale:
usare
src.live.bars.last_settled_idxin_panel/ nei due tick. Impatto basso (1d) ma stessa famiglia di bug. - ancora bfill di
_daily_equity: la serie a punti-trade reindexata su IDX àncora il primo valore della finestra al PRIMO trade in-finestra, non al capitale portato avanti. Tocca le metriche canoniche di TUTTI gli sleeve a punti-trade (honest/pairs/tsm). Valutare se correggere OVUNQUE in un colpo (cambierebbe i numeri canonici di riferimento). Scoperto nel gate DIP01 (parità inizialmente fallita per questo). - convenzione TR01 worker vs reference: il replay
validate_honest_workersdà TR01 worker -44% vs reference +42% (identico pre/post fix di oggi). È la divergenza capitale-unico (mean(rets)solo sugli asset in posizione) vs media-equity 1/N del reference. Indagare: sospetto chemean(rets)sovrappesi gli asset in posizione quando il paniere è parzialmente investito. - engine duplicato nei 3 gate
*_port06_impact.py(exit16/trendmax/dip01):build_trades_variant/port_metricscopiati quasi verbatim. Sono regression-lock per decisioni live → la copy-drift corrompe i verdetti. Fattorizzare in un modulo condiviso. - epoche hardcoded in
hourly_report.lossguard_section(LOSSGUARD_SINCE, TRENDSWAP_SINCE): ogni nuova epoca-filtro richiede di editare la funzione. Derivarle da deploy history/config.
Ricerca dispersion/correlation (2026-06-08, 165 agenti) — follow-up opzionale
Gate PORT06 di— FATTO (2026-06-08): PROMOSSO MARGINALE. Decorrela bene (corr 0.06 col MASTER) ma OOS PIATTO (Sharpe −0.01). Documentato e rimandato (non deployato): gate inindex_comp_dispW=168dispersion_edges/gate_index_comp_disp.py, riprendere solo se si costruisce una famiglia DISP più ampia. Diario aggiornato.
Monitoraggio (osservare, non agire subito)
- PnL live post-swap trend (epoca TREND in
hourly_report): verdetto stop-rate fade a n>=30. - SH01 post-bootstrap: il trade-rate live deve scendere da ~25% a ~10% delle barre (selettività della soglia ripristinata). Controllare nel report orario.
- MR02_ETH: ultima posizione aperta SENZA disaster-SL (aperta pre-v1.1.4). Si chiuderà normalmente; le prossime aperture avranno il bracket.
- parquet fresco per SH01 bootstrap: oggi al 2026-05-28, il feed copre 365g → margine ~11
mesi. Rilanciare
download_all()periodicamente (WARN automatico se il gap supera il lookback).