I haven't done algorithmic trading before, but considering some simple strategies. First need to know a bit more about IB's market data access and what is possible with it. I'd need to use an API to get real-time price/quote and volume data for a large amount of stocks (e.g. all Russell3000 stocks). No need for historical data, only real-time data to base decisions on. I'd need to fetch real-time prices and quotes every 5 minutes, or perhaps even every 1 minute to monitor opportunities. Is this doable with IB market data access and at what cost approximately? Or what other data source would you recommend for this?
Minute bars? Sure, IB can do that depending on how many instruments you want to monitor concurrently.
The IB API is not really design to deliver real-time quotes for thousands of symbols. First problem is that their API uses callbacks to the user function for quotes, it calls once for each quote field; i.e. once for the Bid Price, another call for the Ask Price, the Bid Size, etc. A lot of callback overhead if you are monitoring 3,000 symbols. Second, IB only gives you a couple hundred free symbols based on how much your monthly commissions are. Then it is $30 per 100 symbols after that. For 3,000 symbols I would recommend either NxCore or Polygon.io
When I first started trading, 14 year ago, I contacted eSignal and they told their system was only designed for real-time charts and could only handle a couple hundred simultaneous symbols. It's probably much more now, but they lost me forever.
Save yourself a ton of headaches and get your data from another source designed specifically for that purpose. It's reasonably affordable. Then use the IB API to enter your trades and monitor positions. You're welcome.
I do use IBKR for 200+ tickers, because I already subscribe to the data and do not want to incur additional costs to another vendor as I am a frugal guy. If someone else is noticeably better and does not cost much, I will be interested.
First of all you can subscribe to bars, and upon Bar completion a callback is only invoked once. Not multiple times. Next you can request historical data for many more than the subscriber cap, the cap applies to streaming data that a user concurrently can subscribe to. So you can request the last 1 minute bar every minute for 100 or so symbols and then request the same 1 minute bar for another bunch of symbols and so on.