2026-01-13 02:35:48 +08:00
|
|
|
# Interactive Brokers Trading Module
|
|
|
|
|
|
2026-02-27 01:57:04 +08:00
|
|
|
Supports US stocks trading via TWS or IB Gateway.
|
2026-01-13 02:35:48 +08:00
|
|
|
|
|
|
|
|
## Installation
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
pip install ib_insync
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Or the dependency is already in `requirements.txt`.
|
|
|
|
|
|
|
|
|
|
## Port Reference
|
|
|
|
|
|
|
|
|
|
| Client | Live Port | Paper Port |
|
|
|
|
|
|--------|-----------|------------|
|
|
|
|
|
| TWS | 7497 | 7496 |
|
|
|
|
|
| IB Gateway | 4001 | 4002 |
|
|
|
|
|
|
|
|
|
|
## TWS / IB Gateway Configuration
|
|
|
|
|
|
|
|
|
|
1. Open TWS or IB Gateway
|
|
|
|
|
2. Go to **Configure** -> **API** -> **Settings**
|
|
|
|
|
3. Enable the following options:
|
|
|
|
|
- ✅ Enable ActiveX and Socket Clients
|
|
|
|
|
- ✅ Allow connections from localhost only
|
|
|
|
|
4. Set Socket port (refer to the table above)
|
|
|
|
|
5. Click Apply / OK
|
|
|
|
|
|
|
|
|
|
## API Endpoints
|
|
|
|
|
|
|
|
|
|
### Connection Management
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
GET /api/ibkr/status # Get connection status
|
|
|
|
|
POST /api/ibkr/connect # Connect to TWS/Gateway
|
|
|
|
|
POST /api/ibkr/disconnect # Disconnect
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Account Queries
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
GET /api/ibkr/account # Account information
|
|
|
|
|
GET /api/ibkr/positions # Current positions
|
|
|
|
|
GET /api/ibkr/orders # Open orders
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Trading
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
POST /api/ibkr/order # Place order
|
|
|
|
|
DELETE /api/ibkr/order/<id> # Cancel order
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Market Data
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
GET /api/ibkr/quote?symbol=AAPL&marketType=USStock
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Usage Examples
|
|
|
|
|
|
|
|
|
|
### Connect
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
curl -X POST http://localhost:5000/api/ibkr/connect \
|
|
|
|
|
-H "Content-Type: application/json" \
|
|
|
|
|
-d '{"host": "127.0.0.1", "port": 7497, "clientId": 1}'
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Place Order
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# Market order: buy 10 shares of AAPL
|
|
|
|
|
curl -X POST http://localhost:5000/api/ibkr/order \
|
|
|
|
|
-H "Content-Type: application/json" \
|
|
|
|
|
-d '{"symbol": "AAPL", "side": "buy", "quantity": 10, "marketType": "USStock"}'
|
|
|
|
|
|
2026-02-27 01:57:04 +08:00
|
|
|
# Limit order: sell 100 shares of MSFT
|
2026-01-13 02:35:48 +08:00
|
|
|
curl -X POST http://localhost:5000/api/ibkr/order \
|
|
|
|
|
-H "Content-Type: application/json" \
|
2026-02-27 01:57:04 +08:00
|
|
|
-d '{"symbol": "MSFT", "side": "sell", "quantity": 100, "marketType": "USStock", "orderType": "limit", "price": 400}'
|
2026-01-13 02:35:48 +08:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Get Positions
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
curl http://localhost:5000/api/ibkr/positions
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Symbol Format
|
|
|
|
|
|
|
|
|
|
| Market | Format | Examples |
|
|
|
|
|
|--------|--------|----------|
|
|
|
|
|
| US Stock | Ticker symbol | `AAPL`, `TSLA`, `GOOGL` |
|
|
|
|
|
|
|
|
|
|
## Important Notes
|
|
|
|
|
|
|
|
|
|
1. **TWS/Gateway must be running**: Ensure TWS or IB Gateway is started and logged in before using the API
|
|
|
|
|
2. **Market data subscription**: Real-time quotes may require market data subscription
|
|
|
|
|
3. **Client ID**: Use different clientId if multiple programs connect to the same TWS/Gateway
|
|
|
|
|
4. **Readonly mode**: Set `readonly: true` to only query without trading
|
|
|
|
|
5. **Multi-account**: Specify `account` parameter if you have multiple sub-accounts
|
|
|
|
|
|
|
|
|
|
## Troubleshooting
|
|
|
|
|
|
|
|
|
|
| Error | Cause | Solution |
|
|
|
|
|
|-------|-------|----------|
|
|
|
|
|
| Connection failed | TWS/Gateway not running | Start and login to TWS/Gateway |
|
|
|
|
|
| Connection failed | Wrong port | Check API port setting in TWS/Gateway |
|
|
|
|
|
| Connection failed | API not enabled | Enable Socket API in TWS/Gateway settings |
|
|
|
|
|
| Client ID conflict | Same clientId already connected | Use a different clientId |
|
|
|
|
|
| Invalid contract | Wrong symbol format | Check symbol format |
|
|
|
|
|
|
|
|
|
|
## Removing This Module
|
|
|
|
|
|
|
|
|
|
To remove this module, delete the following files/directories:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
backend_api_python/app/services/ibkr_trading/ # Entire directory
|
|
|
|
|
backend_api_python/app/routes/ibkr.py # Route file
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Then remove the related import and registration code in `app/routes/__init__.py`.
|
|
|
|
|
|
|
|
|
|
## Docker Note
|
|
|
|
|
|
2026-04-09 14:30:51 +07:00
|
|
|
When running in Docker, IBKR trading requires TWS/IB Gateway to be accessible from the container.
|
2026-01-13 02:35:48 +08:00
|
|
|
For local deployment, you can:
|
|
|
|
|
|
|
|
|
|
1. Run TWS/Gateway on host machine
|
|
|
|
|
2. Use host network mode or configure port mapping
|
|
|
|
|
3. Set `host` to the host machine's IP address (e.g., `host.docker.internal` on Docker Desktop)
|
|
|
|
|
|
|
|
|
|
> **Note**: IBKR connection parameters are configured per-strategy in the frontend, not via environment variables.
|