I developed my own backtesting system for multiple tickers in C++, maybe some of these ideas may help.
Storage: I store every ticker's data into a binary file (one file per ticker), ordered by timestamp. Any other kind of storage (CSV files, SQLITE database), ordered by timestamp will do, for the purpose of backtesting.
Backtesting: I create a priority queue in memory (priority given by timestamp), then I read a single tick from each of the ticker's files and put them into the priority queue, then I start consuming the ticks from the priority queue, lowest timestamp first. Every time I consume a tick, I read another tick from the file from which that tick came out, and put it into the priority queue.
In this way I can also simulate a delay for orders going to the market: every time the strategy I'm backtesting generates an order, I put an "order tick" with a delayed timestamp into the priority queue, and I simulate actual execution only when that order tick is consumed from the queue.
zipline
(github.com/quantopian/zipline), which is the only open source backtester that I know of. $\endgroup$