StreamXLS
Built by an engineer who trades through it every session — used at a desk trading over $87 million a month through Trader Workstation.
What you already know about Excel + IBKR
Interactive Brokers ships a sample Excel RTD server with the TWS API — the one at C:\TWS API\samples\Excel\TwsRtdServer.xls. It is, per IBKR's documentation, "not intended to be used as production level trading tools." It's a teaching artifact that demonstrates basic market data streaming — top-of-book quotes only — with the callbacks for account values, positions, and orders left as empty stubs.
What does it take to get from sample to production-grade? First implement the API to subscribe and receive all market data fields, account values, positions, and orders. Support multiple accounts. Then implement COM-compliant multithreading so it maintains the stream even when Excel's UI is busy or blocked by a modal dialog. Then harden the RTD server against TWS exceptions: detect silent disconnects, rate limits, automatically connect and resubscribe without the user having to do anything. Late-seed and deduplicate between RTD topics and TWS subscriptions. And ensure that multiple Excel instances can run RTD streams against the same TWS instance. That's the gap I built StreamXLS to close — at first for my own desk, now for anyone with the same needs. The full case for why a spreadsheet is the right host is its own essay. Read it →
— David Bookstaber, StreamXLS
Technical features
One DLL, one COM registration, one demo workbook illustrating every feature so you can start without reading documentation. No Excel ribbon, no add-in; StreamXLS doesn't run until you ask for it via Excel-native =RTD() formulas.
#N/A on disconnect rather than showing a stale price.
=RTD() cells referencing the same logical topic share a single upstream TWS subscription, reference-counted so the subscription is canceled only when the last cell goes away. Copy-drag a formula across 200 rows of a chain and you get one subscription, not 200. The live count is exposed as ActiveTopicCount.
SendOrder topic family submits an order as the side-effect of subscribing; the cell returns Sending → Sent, or a structured error. The engine default is transmit=false — orders stage in the TWS ticket for the trader to release. Minimize the clicks; never zero.
=RTD() formulas, alongside the market-data topics the IBKR sample covers. One subscription model across data, account state, and execution.
Tws.Rtd, or install the optional legacy alias Tws.TwsRtdServerCtrl and leave existing workbooks unchanged. The engine runs against your own entitled TWS API installation.
What it does when things go wrong — and how you'll test it without committing your desk.
The engine's default is transmit=false by design: SendOrder stages an order into the TWS ticket, and a human releases it. Nothing in the spreadsheet can reach into the engine to flip that flag.
A stale price is worse than no price. On a dropped connection, realtime price values go #N/A rather than holding the last good value — so you never trade on a number that has quietly gone stale.
Quotes, positions, orders, and account values move only between your Excel and your own TWS, under your own IBKR entitlements. StreamXLS sends no market data, order flow, or usage telemetry anywhere. (Licensing is the one exception — a lightweight periodic activation check, with offline grace.)
Who buys this.
Annual subscription, per-machine seat.
Two tiers. Updates and support included. A full-featured trial (coming soon!).
- Additional machine, same user+$245/yr
- Updates + supportIncluded
- Trial30-day full
- Additional machine, same user+$745/yr
- Updates + supportIncluded
- Trial30-day full
Annual subscription per-machine seat — or monthly billing. Cancel any time; takes effect at end of period.