Files
ibkr-quant/config.toml
Gahow Wang e2b06f1b1c Manage every USD stock position except an explicit unmanaged list
rebalance treated only today's S&P 500 members as the strategy's, so a held
name that left the index (or was renamed on Wikipedia) was never sold and
its value shrank the investable amount, unlike quant-trading's engine, which
sells non-members at the next rebalance. Now every USD stock/ETF position
is managed except execution.unmanaged (AAOI); a holding without bars is
priced from the account for its exit. On the paper account the managed set
is unchanged (the 10 current members).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 05:26:06 -07:00

35 lines
1.8 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
# IBKR symbols rebalance never trades; their value is set aside before sizing. Every
# other USD stock/ETF position is the strategy's and is sold once it is not selected,
# including a name that has left the index.
unmanaged = ["AAOI"]