#!/bin/bash # BOOK DERIBIT-ONLY (TP01+SKH01 nettati) — esecuzione LIVE a cadenza ORARIA. v2.0.0+. # SKH01 decide su griglia 230m -> serve girare piu' spesso del daily; orario IDEMPOTENTE: # riconcilia al target NETTO corrente (se non cambia nulla -> HOLD). Il feed 5m fresco per il # segnale SKH e' preso IN MEMORIA dentro book_execute (livefeed.fresh_5m): NON tocca i dati # certificati su disco. Esecuzione reale gated da config/live.json (execution_enabled) + --execute. # # INSTALLATO AL MINUTO :47 (`47 * * * *`). Due vincoli, entrambi misurati — e questa riga deve # restare d'accordo con la crontab: un commento che dichiara un minuto diverso da quello che gira # e' lo stesso difetto del docstring "ogni ~230 minuti" (§5.7), e si paga quando qualcuno lo # "corregge" nel verso sbagliato. # # 1. FUORI DAL MINUTO TONDO. Il collettore full-chain al :00 produce 12.186 risposte 429 in 26 # ore, di cui 11.700 (96%) dentro il minuto :00 — ~770 ticker + ~770 orderbook in ~26s da un # IP solo, che si auto-saturano il rate-limit Deribit per-IP (misura del 2026-07-30). Il # vincolo vero e' *stare fuori da quei ~26 secondi*: qualunque minuto != :00 lo soddisfa. # Storia: :00 -> :07 il 2026-07-29 (ipotesi di contesa, dichiarata non verificata), :07 -> # :47 il 2026-08-25. # 2. FUORI DALLO SLOT DI RELEASE DERIBIT. Le release Deribit escono il MARTEDI' alle 09:00 UTC, # annunciate 15-30 minuti. Il :07 cadeva dentro quella finestra, e ci e' caduto 4 volte in 63 # giorni: 2026-07-21 (che uccise anche il giro di ETH), 11/08, 18/08, 25/08. Il :47 lascia # 47 minuti di margine dall'inizio dello slot, e 22 dal collettore catena del :25. # # ⚠️ PREVISIONE DA MISURARE (M12: un follow-up dichiarato contiene una previsione). Sulle 4 # finestre osservate, 3 sono rientrate entro l'ora (21/07, 11/08, 25/08 ~20 min) e una no (18/08, # giu' anche alle 10:07). Il :47 avrebbe quindi scavalcato 3 episodi su 4. Se al prossimo martedi' # il :47 becca comunque la manutenzione, la previsione e' sbagliata e lo slot non e' quello che # credo: rileggere `venue_probe.RELEASE_*` prima di spostare ancora. export PATH="/home/adriano/.local/bin:$PATH" cd /opt/docker/PythagorasGoal || exit 1 mkdir -p logs { echo "===== $(date -u '+%Y-%m-%dT%H:%M:%SZ') cron_book =====" # Tripwire di venue PRIMA dell'esecuzione: se Deribit e' in stress l'allarme deve # partire anche quando book_execute fallisce per la stessa ragione. Non blocca (exit 2 # = allarme inviato); l'azione a un allarme e' manuale, vedi src/live/venue_watch.py. uv run python scripts/live/venue_watch.py --quiet || true uv run python scripts/live/book_execute.py --execute # Libro di bordo: materializza in data/live/trades.db (che il backup COPRE) l'ora vera dei # fill, che altrimenti vive solo in questo log — gitignored, fuori dal backup e ruotabile. # Va DOPO book_execute: dentro lo stesso blocco vede le righe appena scritte. uv run python scripts/live/trades_db.py --sync --quiet || true echo "===== done $(date -u '+%H:%M:%SZ') =====" } >> logs/cron_book.log 2>&1