On 2026-09-29 Gateway lost its connection, failed the reconnect's SSL handshake and sat on an error dialog for 9 hours with its API port open: clients connected, every startup request timed out, and systemd never restarted it because java kept running. - Broker connects with raiseSyncErrors, so a failed startup sync exits instead of continuing with an empty portfolio(), which rebalance would read as holding nothing. - `ibkr-quant gateway` probes the Gateway under its own health_client_id. - deploy/ensure-gateway.sh (`make gateway`) probes, waits a minute for a self-reconnect, then restarts ibgateway.service and waits for it. - The trade and fills units run `make gateway` as ExecStartPre; fills now retries on failure like trade does. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
49 lines
1.4 KiB
Makefile
49 lines
1.4 KiB
Makefile
# Needs IB Gateway or TWS running and logged in, with
|
|
# "Enable ActiveX and Socket Clients" on and the port matching config.toml.
|
|
# Daily flow, 09:31-15:45 ET on a trading day: `make bars` (picks up today's
|
|
# open), `make plan` to review, `make submit` to send MOC orders filled at the close.
|
|
# With delayed data (market_data_type = 3) today's bar appears ~15 min after the
|
|
# open, so start after 09:47 ET.
|
|
RUN = uv run ibkr-quant
|
|
|
|
.PHONY: test universe check gateway bars plan submit fills backtest install-units
|
|
|
|
test:
|
|
uv run pytest -q
|
|
|
|
universe:
|
|
$(RUN) universe
|
|
|
|
check:
|
|
$(RUN) check
|
|
|
|
# On the server: probe the Gateway and restart it if it has lost IBKR's servers.
|
|
gateway:
|
|
sh deploy/ensure-gateway.sh
|
|
|
|
bars:
|
|
$(RUN) bars
|
|
|
|
plan:
|
|
$(RUN) rebalance
|
|
|
|
submit:
|
|
$(RUN) rebalance --submit
|
|
|
|
fills:
|
|
$(RUN) fills
|
|
|
|
# e.g. make backtest ARGS="--top-n 5 10 20 --every 1 5 --capital 10000"
|
|
backtest:
|
|
$(RUN) backtest $(ARGS)
|
|
|
|
# On the server: install the systemd user units from deploy/systemd. The timers
|
|
# start now; the Gateway is only enabled for boot, so start it by hand
|
|
# (systemctl --user start ibgateway) once ~/ibc/config.ini has the credentials.
|
|
install-units:
|
|
mkdir -p ~/.config/systemd/user
|
|
cp deploy/systemd/* ~/.config/systemd/user/
|
|
systemctl --user daemon-reload
|
|
systemctl --user enable ibgateway.service
|
|
systemctl --user enable --now ibkr-quant-trade.timer ibkr-quant-fills.timer ibkr-quant-universe.timer
|