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>
31 lines
1.5 KiB
TOML
31 lines
1.5 KiB
TOML
[ib]
|
|
host = "127.0.0.1"
|
|
port = 4002 # IB Gateway: paper 4002 / live 4001; TWS: paper 7497 / live 7496
|
|
client_id = 17
|
|
health_client_id = 18 # `ibkr-quant gateway` probe; differs so it never collides with a running job
|
|
account = "" # empty = the single account managed by this login
|
|
market_data_type = 3 # 1 = live (needs subscription), 3 = delayed (free, for testing)
|
|
allow_live = false # refuse to connect to non-paper accounts unless true
|
|
|
|
[data]
|
|
universe = "data/universe.csv"
|
|
bars = "data/bars/daily.csv"
|
|
bars_duration = "2 Y" # the strategy needs > 252 sessions
|
|
|
|
# overnight_recovery_top10, ported from quant-trading strategies/robust_momentum.py:
|
|
# overnight-return momentum (12m, skip 1m) + distance from the 126-day low, signal on
|
|
# sessions through yesterday's close, equal-weight top_n filled at today's close.
|
|
[strategy]
|
|
top_n = 10
|
|
rebalance_every = 10 # sessions; nothing trades in between and weights drift
|
|
buffer = 2.0 # keep a held name while ranked within top_n * (1 + buffer)
|
|
anchor = 2026-09-29 # first rebalance session; then every rebalance_every sessions
|
|
|
|
[execution]
|
|
order_type = "MOC" # MOC (submit 09:30-15:45 ET) | LMT
|
|
limit_offset_bps = 20 # LMT only: price = snapshot * (1 ± offset)
|
|
cash_buffer = 0.02 # fraction of NAV kept in cash
|
|
resize_band = 0.10 # leave a held name alone while within 10% of its target value
|
|
min_trade_value = 50.0 # skip trades below max(min_trade_value, min_trade_fraction * NAV);
|
|
min_trade_fraction = 0.001 # full exits always trade
|