Hey Jared,
I get what you're saying about the fictional price. If all you have is Ask and Bid and not Latest price, then the average of the both is as good as you're going to get.
But If you truely don't have Latest, then there's something wrong somewhere. Attached is a simple project that buys on first bar. A tag is added to the order that shows the Price, Ask, and Bid of the latest tick at the time of purchase.
It shows @ 2016-06-20 00:00:01,
the Price = 1.137425
the Ask = 1.13746
the Bid = 1.13739
Which jives with the fictional price. (1.13746 + 1.13739) / 2 = 1.137425 = Price.
But, the FillPrice of the order is $1.137495 which is different than the tick Price. It's actually slightly higher than the Ask price. The difference in this example is rather small but I'm coming across many larger differences enough to throw off the outcome of my algo.
I'm using the FxcmBrokerage model which uses the ImmediateFillModel. After poking around it looks like the FillPrice should be the Ask or Bid.