14522262e6
Reset del progetto su fondamenta verificate dopo la scoperta che l'intera libreria "validata OOS" era artefatto di feed contaminato (print fantasma del feed Cerbero TESTNET + storico Binance/USDT). - Storico ricostruito da Deribit MAINNET (ccxt pubblico, tokenless) e CERTIFICATO (certify_feed.py): BTC/ETH puliti su TUTTA la storia (mediana 2-6 bps vs Coinbase USD), integrita' OHLC + coerenza resample (maxΔ 0.00) + cross-venue OK. Alt esclusi (illiquidi/divergenti: LTC/DOGE 50-82% barre flat; XRP/BNB non certificabili). - Verdetto sul feed pulito: FADE / PAIRS / XS01 / TSM01 morti (ogni portafoglio Sharpe -2.3..-3.0, DD ~40%); solo SH01 e frammenti HONEST con segnale residuo, da ri-validare in isolamento. - Cleanup "restart pulito": strategie, stack live (src/live, src/portfolio, runner/executor, yml, docker), ~100 script ricerca/gate, waste/games/ portfolios, dati non certificati + cache e 60+ diari -> archiviati in Old/ (preservati, non cancellati). Diario consolidato in un unico documento. - Skeleton ricerca tenuto: Strategy ABC + indicatori + src/fractal + src/backtest/engine + load_data; tool dati certificati (rebuild_history, certify_feed, audit_feed, multi_source_check). - Universo dati ATTIVO: solo BTC/ETH (5m/15m/1h); guardrail fisico (load_data su alt -> FileNotFoundError). Esecuzione DISABILITATA, conto flat. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
30 lines
1014 B
Python
30 lines
1014 B
Python
"""src.live.bars — detection condivisa della barra in formazione (lezione EXIT-16)."""
|
|
import numpy as np
|
|
|
|
from src.live.bars import bar_ms_of, last_bar_is_forming, last_settled_idx
|
|
|
|
H = 3_600_000
|
|
|
|
|
|
def _ts(n, end_ms):
|
|
return np.arange(end_ms - (n - 1) * H, end_ms + 1, H, dtype="int64")
|
|
|
|
|
|
def test_bar_ms_median():
|
|
assert bar_ms_of(_ts(50, 10 * H)) == H
|
|
assert bar_ms_of([1]) == 0 # troppo corta per stimare
|
|
|
|
|
|
def test_forming_vs_settled():
|
|
now = 1_000_000 * H
|
|
ts = _ts(60, now) # ultima barra appena aperta
|
|
assert last_bar_is_forming(ts, now_ms=now + 1) # in corso
|
|
assert last_settled_idx(ts, now_ms=now + 1) == -2
|
|
assert not last_bar_is_forming(ts, now_ms=now + H) # durata trascorsa
|
|
assert last_settled_idx(ts, now_ms=now + H) == -1
|
|
|
|
|
|
def test_degenerate_series_defaults_to_settled():
|
|
assert not last_bar_is_forming([], now_ms=0)
|
|
assert last_settled_idx([123], now_ms=0) == -1 # bar_ms non stimabile -> -1
|