Files
ibkr-quant/Makefile
Gahow Wang d945624601 Switch to overnight_recovery_top10, rebalanced every 10 sessions
Under quant-trading's PIT research engine (S&P 500 members 2006-2026,
10 bp), overnight_recovery_top10 filled at the next close beat the
daily UpCap+MomGap by 10.5%/yr (paired Newey-West t 2.44) at 3x instead
of 29x yearly turnover. UpCap+MomGap was a CN champion there, and its
daily variant was never picked for the US book.

- strategy: overnight-return momentum (12m skip 1m) + distance from the
  126-day low, ported from strategies/robust_momentum.py; top 10 equal
  weight, a held name stays while ranked within 30. Scores and picks
  match RobustMomentumStrategy on the IB bars (25 rebalances, 0 diffs).
- rebalance: every 10 sessions from strategy.anchor (2026-09-29), on
  completed sessions through yesterday's close, MOC at today's close;
  other sessions do nothing and weights drift.
- backtest trades only on rebalance sessions, like the live loop.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-29 18:06:14 +08:00

51 lines
1.5 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.
# Only rebalance sessions (every strategy.rebalance_every from strategy.anchor)
# trade; on other days plan and submit say so and do nothing.
# 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