NinjaTrader allows you to store and code against historical BID/ASK/LAST data. You can get limited amount of historical BID/ASK data via Zen-Fire, CQG or Vision. If you require the ability to access historical BID/ASK data at the time of a trade, there is a 3rd party script that supports this...