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>
35 lines
1.8 KiB
TOML
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"]
|