def test_can_flatten_all_positions(self): # Arrange strategy = TradingStrategy(order_id_tag='001') self.exec_engine.register_strategy(strategy) order1 = strategy.order_factory.market(USDJPY_FXCM, OrderSide.BUY, Quantity(100000)) order2 = strategy.order_factory.market(USDJPY_FXCM, OrderSide.BUY, Quantity(100000)) position_id1 = strategy.position_id_generator.generate() position_id2 = strategy.position_id_generator.generate() strategy.submit_order(order1, position_id1) strategy.submit_order(order2, position_id2) # Act strategy.flatten_all_positions() # Assert self.assertEqual(order1, strategy.orders()[order1.id]) self.assertEqual(order2, strategy.orders()[order2.id]) self.assertEqual(OrderState.FILLED, strategy.orders()[order1.id].state) self.assertEqual(OrderState.FILLED, strategy.orders()[order2.id].state) self.assertEqual(MarketPosition.FLAT, strategy.positions()[position_id1].market_position) self.assertEqual(MarketPosition.FLAT, strategy.positions()[position_id2].market_position) self.assertTrue(strategy.positions()[position_id1].is_closed) self.assertTrue(strategy.positions()[position_id2].is_closed) self.assertTrue(position_id1 in strategy.positions_closed()) self.assertTrue(position_id2 in strategy.positions_closed()) self.assertTrue(strategy.is_flat())
def test_flatten_all_positions(self): # Arrange strategy = TradingStrategy(order_id_tag="001") strategy.register_trader( TraderId("TESTER", "000"), clock=self.clock, uuid_factory=self.uuid_factory, logger=self.logger, ) self.exec_engine.register_strategy(strategy) order1 = strategy.order_factory.market( USDJPY_FXCM, OrderSide.BUY, Quantity(100000), ) order2 = strategy.order_factory.market( USDJPY_FXCM, OrderSide.BUY, Quantity(100000), ) strategy.submit_order(order1) strategy.submit_order(order2) filled1 = TestStubs.event_order_filled( order1, position_id=PositionId("B-USD/JPY-1"), strategy_id=strategy.id, ) filled2 = TestStubs.event_order_filled( order2, position_id=PositionId("B-USD/JPY-2"), strategy_id=strategy.id, ) position1 = Position(filled1) position2 = Position(filled2) # Act strategy.flatten_all_positions(USDJPY_FXCM) # Assert self.assertTrue(order1 in strategy.execution.orders()) self.assertTrue(order2 in strategy.execution.orders()) self.assertEqual(OrderState.FILLED, strategy.execution.orders()[0].state()) self.assertEqual(OrderState.FILLED, strategy.execution.orders()[1].state()) self.assertEqual(PositionSide.FLAT, strategy.execution.positions()[0].side) self.assertEqual(PositionSide.FLAT, strategy.execution.positions()[1].side) self.assertTrue(position1.id in strategy.execution.position_closed_ids()) self.assertTrue(position2.id in strategy.execution.position_closed_ids()) self.assertTrue(strategy.execution.is_completely_flat())
def test_flatten_all_positions(self): # Arrange strategy = TradingStrategy() strategy.register( trader_id=self.trader_id, portfolio=self.portfolio, msgbus=self.msgbus, cache=self.cache, clock=self.clock, logger=self.logger, ) # Start strategy and submit orders to open positions strategy.start() order1 = strategy.order_factory.market( USDJPY_SIM.id, OrderSide.BUY, Quantity.from_int(100000), ) order2 = strategy.order_factory.market( USDJPY_SIM.id, OrderSide.BUY, Quantity.from_int(100000), ) strategy.submit_order(order1) self.exchange.process(0) strategy.submit_order(order2) self.exchange.process(0) # Act strategy.flatten_all_positions(USDJPY_SIM.id) self.exchange.process(0) # Assert assert order1.status == OrderStatus.FILLED assert order2.status == OrderStatus.FILLED assert strategy.portfolio.is_completely_flat()