Add fill/update/cancel times to order object

LastFillTime is updated on each partial/fill order event
LastUpdateTime is updated on each submitted order event w/ update count > 0
CancelTime is updated on canceled order events

Also fixes bug in regression algorithm where it used Time instead of UtcTime
for creating the SubmitOrderRequest object.
This commit is contained in:
Michael Handschuh
2018-05-01 15:11:29 -04:00
parent 3a3f5e3403
commit c25afbad29
5 changed files with 99 additions and 21 deletions
@@ -85,7 +85,7 @@ class UpdateOrderRegressionAlgorithm(QCAlgorithm):
if orderType == OrderType.Limit:
limitPrice = d.Decimal(1 + self.limit_percentage)*data["SPY"].High if not isLong else d.Decimal(1 - self.limit_percentage)*data["SPY"].Low
request = SubmitOrderRequest(orderType, self.security.Symbol.SecurityType, "SPY", self.quantity, stopPrice, limitPrice, self.Time, str(orderType))
request = SubmitOrderRequest(orderType, self.security.Symbol.SecurityType, "SPY", self.quantity, stopPrice, limitPrice, self.UtcTime, str(orderType))
ticket = self.Transactions.AddOrder(request)
self.tickets.append(ticket)
@@ -116,6 +116,20 @@ class UpdateOrderRegressionAlgorithm(QCAlgorithm):
def OnOrderEvent(self, orderEvent):
order = self.Transactions.GetOrderById(orderEvent.OrderId)
#order cancelations update CanceledTime
if order.Status == OrderStatus.Canceled and orderEvent.CanceledTime != orderEvent.UtcTime:
raise ValueError("Expected canceled order CanceledTime to equal canceled order event time.")
#fills update LastFillTime
if (order.Status == OrderStatus.Filled or order.Status == OrderStatus.PartiallyFilled) and order.LastFillTime != orderEvent.UtcTime:
raise ValueError("Expected filled order LastFillTime to equal fill order event time.")
#updates have a status of submitted and the created time will be different from the event time
if order.Status == OrderStatus.Submitted and order.Time != orderEvent.UtcTime and order.LastUpdateTime != orderEvent.UtcTime:
raise ValueError("Expected updated order LastUpdateTime to equal submitted update order event time")
if orderEvent.Status == OrderStatus.Filled:
self.Log("FILLED:: {0} FILL PRICE:: {1}".format(self.Transactions.GetOrderById(orderEvent.OrderId), orderEvent.FillPrice))
else: