Faza 5.1 — schema migracija za exchange

2026-05-20 infra

exchange ulazi u primarni ključ klines tabele; 13.8M redova migrirano. Features dobija kolonu bez PK migracije.

↑ Svi izveštaji ← Faza 5.2 — multi-exchange sanity check Korak E — pokretanje bulk fetch-a →

Status: gotovo (Faza 5.1 + sanity check); Faza 5.3 (CCXTScanner adapter) ostavljena za kasnije

Multi-exchange ready storage. klines i features tabele sada imaju exchange kolonu sa default-om 'binance'. Sanity-check (Faza 5.2) dokazao da je multi-source pooling bezbedan (mean spread < 0.1% vs Binance).

Sanity-check rezultati (Faza 5.2 — completed)

ExchangeDays overlapMean spread vs Binance
bybit3650.006%
okx3000.006%
kraken3650.025%
binanceus3650.078%
coinbase(requires apiKey, skipped)

Svi well below 0.1% threshold. Pool je bezbedan. Detalji u 2026-05-20_faza5_sanity_check.md.

Schema migration (Faza 5.1)

klines table

features table

Stages

Write path izmene

Svi 3 cache writers sad propagiraju exchange:

  1. tools/history_cache/build_klines_cache.py:insert_klines — novi parametar exchange='binance'
  2. src/klines_provider.py:_write_cache — novi parametar; INSERT INTO sad uključuje exchange kolonu eksplicitno
  3. src/klines_cache_maintenance.py:_insert_klines — novi parametar; daily catchup i symbol churn propagiraju

Default 'binance' všuda — backward-compatible, postojeće pozive ne traže izmenu.

Read path izmena

KlinesProvider.get(symbol, interval, start, end, exchange=None) — novi parametar:

Validacija

Test 1: Faza 2 klines equivalence test re-run

SymbolTFDaysResult
BTCUSDT4h60✅ identical (360 rows)
ETHUSDT1h7⚠️ 167 vs 168 rows (boundary open-candle leak, pre-existing)
SOLUSDT15m3✅ identical (288 rows)
BTCUSDT1d365✅ identical (365 rows)
AAVEUSDT4h30✅ identical (180 rows)

4/5 PASS. Jedan fail je boundary issue (provider correctly filtrira open-at-fetch candle, direct path ga uzima). Nije migration regresija.

Test 2: Schema introspection

klines cols: ['exchange', 'symbol', 'interval', 'open_time', 'close_time', ...]
klines PK: ['exchange', 'symbol', 'interval', 'open_time']
klines rows: 13,821,604 (all exchange='binance')
features cols last: 'exchange' (as added column)
features rows: 13,818,805 (all exchange='binance')

Šta NIJE deploy-ovano (Faza 5.3-5.7)

Provenance

Izvor: crypto_scanner/reports/analysis/2026-05-20_faza5_schema_migration.md