def testShortLoss(self): s1 = Symbol.get("TEST") s1.lot_size = 10000 # LONG order = Order(s1, 1, Entry(Entry.Type.MARKET), Direction.SHORT) tick = Tick(datetime.utcnow(), 1.12239, 1.12245) # spread of 0.6 position = Position(order, tick) tick = Tick(datetime.utcnow(), 1.12259, 1.12265) position.close(tick) self.assertAlmostEquals(-2, position.points_delta())
def testModifiedStopLoss(self): s1 = Symbol.get("TEST") s1.lot_size = 10000 # LONG order = Order(s1, 1, Entry(Entry.Type.MARKET), Direction.SHORT) tick = Tick(datetime.utcnow(), 1.12239, 1.12245) # spread of 0.6 position = Position(order, tick) self.assertIsNone(position.stop_price) position.update(stop_loss=StopLoss(StopLoss.Type.FIXED, 2)) self.assertIsNotNone(position.stop_price) self.assertEqual(1.12265, position.stop_price)
def place_order(self, order): self.orders.append(order) [f(order, State.PENDING_NEW) for f in self.orderStatusObservers] position = Position(order, self.tick) [f(order, State.FILLED) for f in self.orderStatusObservers] self.positions.append(position) [f(position, None) for f in self.positionObservers]
def _fill_order(self, order, tick): previousState = order.status #Create position and notify client (ordersStatusObservers & position_observers) order.status = State.FILLED self.orders.remove(order) #TODO we should filter the observers to the observers related to the position/order [f(order, previousState) for f in self.orderStatusObservers] position = Position(order, tick) [f(position, None) for f in self.positionObservers] self.positions.append(position) logging.debug("Opened position for %s" % position)