[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