Files
trading-bot/docs/manual-test/README.md
T
2026-07-26 14:18:07 +03:00

2.7 KiB

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 to 1 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

  1. Start IBKR Gateway.
  2. Log in to the paper trading account.
  3. Confirm API access is enabled in IBKR Gateway.
  4. Confirm the API socket port is 4002.
  5. Confirm no other API client is already using client id 101.
  6. 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_ID in 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.