live(feed): l'allerta funzionava, la sua CAUSA era una riga cablata
Il 29/07 il feed 5m di SKH01 e' ricaduto sul certificato in 6 giri orari su 8 (eta' 265->685 min, +60 a ogni giro = firma esatta del fallback): latenza d'uscita da ~1h a ~11h, book flat, nessuna posizione esposta. L'allerta del 26/07 ha segnalato 6/6, poi ha stampato un perche' che non aveva misurato — la nota "fetch pubblico KO" era cablata, identica in ogni caso, compreso quello in cui la coda fresca E' attaccata e il vecchio e' il certificato. E la causa vera non era recuperabile per costruzione: _fetch_recent_5m ingoia l'eccezione di pagina con un break e a prima pagina fallita ritorna un frame vuoto, indistinguibile da "il venue non ha barre". Cablato: livefeed.last_fetch_error() (registra E logga nel punto in cui l'errore viene ingoiato) -> book_report.skh_feed_errors -> allerta con la causa. Stesso buco chiuso sul ramo gemello "conto offline", che la ragione l'aveva gia' in mark_src e non la stampava mai. La causa del 29/07 resta IGNOTA e va citata cosi': una prima stesura la attribuiva a un rate limit per-IP come se fosse un fatto -> rimossa, sarebbe stato lo stesso difetto che stavo correggendo scritto meglio. Cron spostato al minuto :07 come ripiego da UNA osservazione, dichiarato tale. Test 11 -> 16 (incluso il caso a meta' paginazione: coda parziale attaccata, mancano le barre PIU' recenti). Book/pesi/config/strategia INVARIATI. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -4,6 +4,12 @@
|
||||
# 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 :07, NON :00 (`7 * * * *`, spostato il 2026-07-29 durante l'incidente del
|
||||
# feed 5m). Motivo: IPOTESI di contesa al minuto tondo (l'ora esatta e' quando parte tutto il
|
||||
# resto della VPS). ⚠️ NON e' un fix verificato — e' un ripiego da un'osservazione sola, preso
|
||||
# perche' costa zero. Se il feed torna stantio anche al :07, l'ipotesi e' morta e la causa vera
|
||||
# la dira' `skh_feed_errors` nel report (instrumentazione del 29/07, vedi src/live/livefeed.py).
|
||||
export PATH="/home/adriano/.local/bin:$PATH"
|
||||
cd /opt/docker/PythagorasGoal || exit 1
|
||||
mkdir -p logs
|
||||
|
||||
@@ -106,20 +106,34 @@ def _run():
|
||||
if skh_age is None:
|
||||
print(" ⚠️ freschezza feed SKH NON MISURATA (segnale su feed certificato?)")
|
||||
elif skh_age > max_skh_age:
|
||||
# La CAUSA e' misurata (livefeed.last_fetch_error), non piu' presunta: fino al 29/07 questa
|
||||
# nota diceva sempre "fetch pubblico KO" a prescindere — una presunzione stampata come se
|
||||
# fosse una misura. Quel giorno il feed e' stato stantio in 6 giri orari su 8 (fino a 685
|
||||
# min) e la causa NON e' stata stabilita, proprio perche' l'unica riga disponibile era
|
||||
# questa e non veniva dai dati.
|
||||
errs = r.get("skh_feed_errors") or {}
|
||||
causa = "; ".join(f"{a}: {e}" for a, e in sorted(errs.items())) if errs else \
|
||||
"coda fresca attaccata: il feed certificato stesso e' vecchio (rebuild giornaliero?)"
|
||||
print(f" ⚠️ FEED SKH STANTIO: ultima barra 5m di {skh_age:.0f} min fa "
|
||||
f"(soglia {max_skh_age:.0f}) -> le uscite SKH sono in ritardo, NON blocco.")
|
||||
print(f" causa: {causa}")
|
||||
if do_execute:
|
||||
notify("⚠️ BOOK — feed SKH stantio (uscite in ritardo)",
|
||||
{"eta_min": round(skh_age), "soglia_min": round(max_skh_age),
|
||||
"effetto": "SL/TP di SKH01 rilevati in ritardo",
|
||||
"nota": "fresh_5m e' ricaduto sul feed certificato (fetch pubblico KO)"})
|
||||
"causa": causa[:300]})
|
||||
else:
|
||||
print(f" feed SKH : fresco ({skh_age:.0f} min)")
|
||||
|
||||
if not r["online"]:
|
||||
print(" conto non leggibile (offline) -> stop, non eseguo a cieco.")
|
||||
# `online` e' falso quando il mark di BTC non viene da mainnet: la ragione sta in
|
||||
# `mark_src` ("fallback close (<Eccezione>)") ma non veniva MAI stampata, quindi
|
||||
# l'allerta diceva solo "conto offline" — vero e inutile. Stesso buco del feed SKH.
|
||||
srcs = "; ".join(f"{a['asset']}: {a.get('mark_src')}" for a in r["assets"])
|
||||
print(f" conto non leggibile (offline) -> stop, non eseguo a cieco.\n mark: {srcs}")
|
||||
if do_execute:
|
||||
notify("⚠️ BOOK LIVE — conto offline", {"nota": "salto l'esecuzione, non opero a cieco"})
|
||||
notify("⚠️ BOOK LIVE — conto offline", {"nota": "salto l'esecuzione, non opero a cieco",
|
||||
"mark": srcs[:300]})
|
||||
return
|
||||
|
||||
if r.get("pos_error"): # ONLINE ma posizione IGNOTA (read fallita -> assunta flat)
|
||||
|
||||
Reference in New Issue
Block a user