v3.5.0b
[v3.5.0b] - 2026-08-29
Signals can now be sized in cash — "invest 300" — instead of a percentage or an exact
quantity. Stock bots also stop assuming a US-listed, USD-denominated instrument. Every
new setting defaults to the previous behaviour, so existing bots are unaffected.
Added
- Cash-denominated order sizing —
order_size_type: "cash"makesorder_sizean
amount of the currency you pay with: your account currency for stocks, the pair's quote
currency for crypto. The same payload works on either, so a signal never needs to know
which broker it reaches. Buy only — usepercentagewith100to close a position.
This is what recurring DCA wants: the amount stays fixed rather than following the
balance.- Without
fractional_shares: true, stock orders truncate to whole shares and log what
was left undeployed. Unlike percentage sizing this does not catch up on its own, so
enable fractional shares where the instrument supports it. - Crypto amounts are checked against the pair's quote balance and the exchange's
minimum notional, naming the limit rather than letting the venue reject the order.
- Without
account_currency(defaultUSD) for stock bots — which cash balance orders are
sized against. IBKR reports one figure per currency an account holds; this names the one
to use, and says which currencies were reported if the configured one is absent.trading_currency(defaults toaccount_currency),exchange(default
SMART) andprimary_exchange— contract routing.SMARTsuits US listings and is
ambiguous for a ticker cross-listed on several European venues in different currencies.
Changed
- Explicit share counts are now checked against available cash or the position held
before the order is sent. Selling more than is held is refused rather than passed to the
broker, where a margin-enabled account would open a short for the excess. - Bot card logs drop internal
[LAYER n]prefixes; they remain at DEBUG level. - Cash figures in stock logs show the account's currency instead of a
$prefix. - The dashboard log pane keeps your scroll position instead of jumping to the newest entry
every refresh.
Fixed
- Market-hours settings in stock bot configs now take effect.
market_timezone,
market_open,market_close,pre_market_openandafter_hours_closewere documented
and read by the trader but never reached it — a bot on a non-US venue ran on NYSE hours,
refusing to trade during its own session and trading outside it. - A crypto bot config that omits the optional
hostnameline now loads. It previously
failed with an error that stopped the whole file, taking every other bot in it along.
The shipped examples all sethostname: ""explicitly, so only hand-written configs
that left the line out were affected. - Static assets are versioned, so a released fix reaches the browser instead of sitting
behind a cached copy of the previous one.