Initial hello world IBKR API connection.
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
# Data Fetcher Design
|
||||
|
||||
## Initial Goal
|
||||
|
||||
Create a Python module/tool that fetches daily candlestick data from the IBKR API for a specific ticker and date range.
|
||||
|
||||
The intended example workflow is:
|
||||
|
||||
- ticker: `SPY`;
|
||||
- date range: `2026-06-01` to `2026-06-30`;
|
||||
- bar size: one trading day;
|
||||
- fields: open, high, low, close, volume;
|
||||
- output: one Parquet file named for the ticker, such as `SPY.parquet`.
|
||||
|
||||
## Current Skeleton
|
||||
|
||||
The first implementation is intentionally small:
|
||||
|
||||
- hard-coded ticker: `SPY`;
|
||||
- hard-coded range: `2026-06-01` to `2026-06-05`;
|
||||
- hard-coded IBKR Gateway target: `127.0.0.1:4002`;
|
||||
- uses the IBKR API through `ib_insync`;
|
||||
- prints fetched candles as CSV-like rows;
|
||||
- does not write Parquet yet;
|
||||
- does not expose CLI arguments yet;
|
||||
- does not define storage paths yet.
|
||||
|
||||
Run it with:
|
||||
|
||||
```sh
|
||||
mise exec -- uv run python src/trading_bot/data/fetch_ibkr_daily.py
|
||||
```
|
||||
|
||||
This expects a local IBKR Gateway session to be running and accepting API connections on `127.0.0.1:4002`.
|
||||
|
||||
Manual test instructions are in [manual-test/README.md](manual-test/README.md).
|
||||
|
||||
## Intended Future Behavior
|
||||
|
||||
Later, this tool should accept a ticker and date range, fetch daily candles from IBKR, normalize the schema, and write the result to a ticker-named Parquet file.
|
||||
|
||||
Decided storage behavior:
|
||||
|
||||
- Parquet files are partitioned by ticker, not by date.
|
||||
- Each ticker should have its own Parquet file, such as `SPY.parquet`.
|
||||
|
||||
Candidate output schema:
|
||||
|
||||
| Column | Type | Description |
|
||||
| --- | --- | --- |
|
||||
| `date` | date | Trading session date |
|
||||
| `ticker` | string | Asset ticker |
|
||||
| `open` | float | Daily open price |
|
||||
| `high` | float | Daily high price |
|
||||
| `low` | float | Daily low price |
|
||||
| `close` | float | Daily close price |
|
||||
| `volume` | integer | Daily traded volume |
|
||||
|
||||
Open decisions:
|
||||
|
||||
- where raw and normalized data files should live;
|
||||
- how to handle adjusted versus unadjusted prices;
|
||||
- how to handle missing sessions and IBKR pacing limits;
|
||||
- whether to use `ib_insync` long term or a lower-level IBKR client wrapper.
|
||||
Reference in New Issue
Block a user