In order to create OHLC bars in realtime, you need to use reqMktData to subscribe to each contract's data, so that won't be iterative, but you will receive "tick" events and can build up bars from those. I also use reqRealtimeBars() to get 5-second bars and aggregate those into the desired duration bars. I believe those are supposed to be more accurate, especially w.r.t. volume, since IB doesn't deliver all ticks. 5- second bars are not vailable on some contracts such as indeces such as VIX/TRIN/TICK, etc. however.