feat(research): collettore full-chain opzioni con book_depth e colonna source
Aggiunge un secondo collettore opzioni indipendente dal live, pensato per
trasformare il dataset da "skew/premi medi" a backtest opzioni vero
(per-trade e standing put).
- option_chain_research_cycle.py: cattura tutte le scadenze <= expiry_max_days
(1g..3mesi) ed entrambe le ali (OI>=100, filtro moneyness opzionale),
popolando book_depth_top3 via orderbook_depth_top3 (concorrenza limitata)
cosi' lo slippage reale e' modellabile. Best-effort come il collettore live.
- migrazione 0007: colonna `source` su option_chain_snapshots ('live' default
per le righe storiche, 'research' per il nuovo collettore) + indice
(asset, source, timestamp). user_version 6 -> 7.
- ResearchCollectorConfig (schema): blocco `research_collector`, enabled=false
di default (costo API non trascurabile); cron orario, expiry_max_days=95.
- orchestrator: job `option_chain_research` schedulato solo se data-analysis
attiva E research_collector.enabled.
- repository: insert+mapper estesi con `source`; list_option_chain_snapshots
accetta un filtro `source` per le query di backtest.
Verificato in isolamento (immagine + interprete reali): import, migrazione,
round-trip repo. Suite: 527 passed, zero regressioni vs baseline pristina.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -178,6 +178,9 @@ class OptionChainQuoteRecord(BaseModel):
|
||||
open_interest: int | None = None
|
||||
volume_24h: int | None = None
|
||||
book_depth_top3: int | None = None
|
||||
# 'live' = collettore operativo (finestra DTE strategia, no depth);
|
||||
# 'research' = collettore full-chain con book_depth popolato.
|
||||
source: str = "live"
|
||||
|
||||
|
||||
class ManualAction(BaseModel):
|
||||
|
||||
Reference in New Issue
Block a user