def onOrder(self, order): #print "onOrder" # order object contains names # orderstate object contains actual objects # XXX These assertions should be accept/rejects assert not self.ordersByClOrdID.has_key( order.clOrdID) assert not self.openOrdersByClOrdID.has_key( order.clOrdID) os = OrderState(order) #account = self.accountManager.getUnique( lambda x: x.name==order.account) #os.account = account print "Type of security is %s %s" % (type(order.security), order.security ) #security = self.securityManager.getUnique( lambda x: order.security.upper() in [ x.ticker.upper(), x.ric.upper() ] ) #os.security = security os.setPortfolios( self.portfolioManager.portfoliosForOrder( os ) ) self.ordersByClOrdID[ order.clOrdID ] = os self.openOrdersByClOrdID[ order.clOrdID ] = os self.numOrders += 1 if not self.recoveryManager.inRecovery: self.fixApplication.send_order(order) self.persister.writeObject( order ) if self.orderStateListener: self.orderStateListener.notify( os )
def getCopyableState(self): d = self.__dict__ d['security'] = d['security'].ric d['account'] = d['account'].name d['broker'] = d['broker'].name def __repr__(self): return "Order: %s %s %s %s %s %s" % (self.clOrdID, self.side.name, self.orderQty, self.security, self.px, self.account) if __name__ == '__main__': o1 = Order('order1', 'MSFT', 100, Side.BUY) o2 = Order('order2', 'MSFT', 200, Side.SELL) os1 = OrderState(o1) os2 = OrderState(o2) e1 = Execution(ExecType.PARTIAL_FILL, 'exec1', 'order1', Side.BUY, 50, 'MSFT', 40.25) e2 = Execution(ExecType.FILL, 'exec2', 'order1', Side.BUY, 50, 'MSFT', 41.0) e3 = Execution(ExecType.FILL, 'exec3', 'order2', Side.SELL, 100, 'MSFT', 41.0) e4 = Execution(ExecType.FILL, 'exec4', 'order2', Side.SELL, 50, 'MSFT', 40.5) e5 = Execution(ExecType.FILL, 'exec5', 'order2', Side.SELL, 50, 'MSFT', 41.5) #e6 = Execution() os1.apply(e1)