Manual Test Instructions
IBKR Daily Fetcher
This test checks the IBKR data fetcher and confirms it writes a symbol-named Parquet file.
The fetcher currently requests:
- gateway:
127.0.0.1:4002; - client id:
101; - symbol: provided as a command line argument;
- end date: provided with
--end-date YYYYMMDD, defaulting to yesterday; - end date can also be derived with
--end-date-from-parquet; - duration: provided with
--duration, defaulting to1 W; - bar size:
1 day; - data type:
TRADES; - regular trading hours only;
- output: printed CSV-like rows and a Parquet file in
data/ibkr/daily/.
Prerequisites
- Start IBKR Gateway.
- Log in to the paper trading account.
- Confirm API access is enabled in IBKR Gateway.
- Confirm the API socket port is
4002. - Confirm no other API client is already using client id
101. - Sync Python dependencies:
mise exec -- uv sync
Run The Test
From the repository root, run:
mise exec -- uv run python src/trading_bot/data/fetch_ibkr_daily.py SPY
To fetch a specific IBKR range, pass an end date and duration:
mise exec -- uv run python src/trading_bot/data/fetch_ibkr_daily.py SPY --end-date 20250605 --duration "1 M"
To fetch backward from the oldest date already stored in data/ibkr/daily/SPY.parquet:
mise exec -- uv run python src/trading_bot/data/fetch_ibkr_daily.py SPY --end-date-from-parquet
--end-date and --end-date-from-parquet cannot be used together. If the symbol Parquet file does not exist or has no rows, --end-date-from-parquet uses today's US/Eastern date.
Expected Output
The tool should first print the request range and connection target:
Fetching SPY daily candles ending 2025-06-05 for duration 1 M
Connecting to IBKR Gateway at 127.0.0.1:4002 with client id 101
If the request succeeds, it should then print a header and one row per returned trading day:
date,symbol,open,high,low,close,volume
2025-06-05,SPY,...
Exact prices and volume depend on what IBKR returns.
The tool should then write or update:
data/ibkr/daily/SPY.parquet
If the Parquet file already exists, rows from the latest fetch are merged into it. The trading date is used as the row key, so a symbol file keeps only one row for each date.
Common Issues
- Connection refused: IBKR Gateway is not running, the port is not
4002, or API access is disabled. - Client id already in use: change
IBKR_CLIENT_IDin the fetcher or disconnect the other client. - No historical bars: confirm the account has market data permissions and that IBKR accepts the requested historical data range.
- Pacing or permission errors: note the IBKR error message before changing the request.