Data Model
GlowBack uses explicit, typed structures for market data and execution.
Bars
Bars represent OHLCV data with nanosecond timestamps in UTC.
Symbols
Symbols identify instruments across multiple asset classes. Each symbol carries
an AssetClass and exchange identifier.
Asset Classes
| Asset Class | 24/7 Trading | Fractional Qty | Default Exchange |
|---|---|---|---|
| Equity | No | No | NASDAQ |
| Crypto | Yes | Yes | BINANCE |
| Forex | No (weekdays) | Yes | FOREX |
| Commodity | No | No | CME |
| Bond | No | No | NYSE |
Crypto Symbols
Crypto symbols support both exchange conventions:
- Slash-separated:
BTC-USD,ETH-USD,SOL-USD - Concatenated:
BTCUSDT,ETHUSDT,SOLUSDT
Use Symbol::crypto("BTC-USD") to create a crypto symbol with sensible defaults.
Resolution
Resolution specifies the bar interval (Tick, Second, Minute, Hour, Day).
Storage
- Arrow/Parquet for columnar storage
- SQLite for metadata and queryable catalogs
Dataset Metadata + Validation
GlowBack persists per-symbol, per-resolution dataset metadata in the catalog alongside stored bars. Each catalog entry now records:
record_countdataset_kind(external,user_provided,sample)price_adjustment(raw,split_adjusted,total_return_adjusted,synthetic,unknown)- optional
validation_summary
validation_summary captures data-quality signals such as duplicate timestamps, missing expected intervals, invalid OHLCV rows, negative prices/volumes, timezone/resolution metadata, and whether the dataset is sample data.
Data Quality Modes
Backtest DataSettings include data_quality_mode:
warn(default): keep running, but surface validation warnings/critical issues in result metadata and run manifestsfail: reject datasets that contain critical validation issues before the engine starts
Run manifests now include dataset.validation_summaries, keyed by symbol, so downstream replay/audit tooling can see the exact data-quality findings attached to a run.