def test_position_filled_with_buy_order_returns_expected_attributes(self): # Arrange order = self.order_factory.market( AUDUSD_FXCM, OrderSide.BUY, Quantity(100000)) order_filled = OrderFilled( self.account_id, order.id, ExecutionId('E123456'), PositionIdBroker('T123456'), order.symbol, order.side, order.quantity, Price(1.00001, 5), Currency.USD, UNIX_EPOCH, GUID(uuid.uuid4()), UNIX_EPOCH) last = Tick(AUDUSD_FXCM, Price(1.00050, 5), Price(1.00048, 5), Volume(1), Volume(1), UNIX_EPOCH) # Act position = Position(PositionId('P-123456'), order_filled) # Assert self.assertEqual(OrderId('O-19700101-000000-001-001-1'), position.from_order_id) self.assertEqual(Quantity(100000), position.quantity) self.assertEqual(Quantity(100000), position.peak_quantity) self.assertEqual(OrderSide.BUY, position.entry_direction) self.assertEqual(MarketPosition.LONG, position.market_position) self.assertEqual(UNIX_EPOCH, position.opened_time) self.assertIsNone(position.open_duration) self.assertEqual(1.00001, position.average_open_price) self.assertEqual(1, position.event_count) self.assertEqual([order.id], position.get_order_ids()) self.assertEqual([ExecutionId('E123456')], position.get_execution_ids()) self.assertEqual(ExecutionId('E123456'), position.last_execution_id) self.assertEqual(PositionIdBroker('T123456'), position.id_broker) self.assertTrue(position.is_long) self.assertFalse(position.is_short) self.assertFalse(position.is_closed) self.assertEqual(0.0, position.realized_points) self.assertEqual(0.0, position.realized_return) self.assertEqual(Money(0, Currency.USD), position.realized_pnl) self.assertEqual(0.0004899999999998794, position.unrealized_points(last)) self.assertEqual(0.0004899951000488789, position.unrealized_return(last)) self.assertEqual(Money(49.00, Currency.USD), position.unrealized_pnl(last)) self.assertEqual(0.0004899999999998794, position.total_points(last)) self.assertEqual(0.0004899951000488789, position.total_return(last)) self.assertEqual(Money(49.00, Currency.USD), position.total_pnl(last))
def test_position_filled_with_no_change_returns_expected_attributes(self): # Arrange order1 = self.order_factory.market( AUDUSD_FXCM, OrderSide.BUY, Quantity(100000)) order2 = self.order_factory.market( AUDUSD_FXCM, OrderSide.SELL, Quantity(100000)) order1_filled = OrderFilled( self.account_id, order1.id, ExecutionId('E1'), PositionIdBroker('T123456'), order1.symbol, order1.side, order1.quantity, Price(1.00000, 5), Currency.USD, UNIX_EPOCH, GUID(uuid.uuid4()), UNIX_EPOCH) position = Position(PositionId('P-123456'), order1_filled) order2_filled = OrderFilled( self.account_id, order2.id, ExecutionId('E2'), PositionIdBroker('T123456'), order2.symbol, order2.side, order2.quantity, Price(1.00000, 5), Currency.USD, UNIX_EPOCH, GUID(uuid.uuid4()), UNIX_EPOCH) last = Tick(AUDUSD_FXCM, Price(1.00050, 5), Price(1.00048, 5), Volume(1), Volume(1), UNIX_EPOCH) # Act position.apply(order2_filled) # Assert self.assertEqual(Quantity(), position.quantity) self.assertEqual(MarketPosition.FLAT, position.market_position) self.assertEqual(UNIX_EPOCH, position.opened_time) self.assertEqual(1.0, position.average_open_price) self.assertEqual(2, position.event_count) self.assertEqual([order1.id, order2.id], position.get_order_ids()) self.assertEqual([ExecutionId('E1'), ExecutionId('E2')], position.get_execution_ids()), self.assertEqual(order2.id, position.last_order_id) self.assertEqual(ExecutionId('E2'), position.last_execution_id) self.assertEqual(PositionIdBroker('T123456'), position.id_broker) self.assertEqual(UNIX_EPOCH, position.closed_time) self.assertEqual(1.0, position.average_close_price) self.assertFalse(position.is_long) self.assertFalse(position.is_short) self.assertTrue(position.is_closed) self.assertEqual(0.0, position.realized_points) self.assertEqual(0.0, position.realized_return) self.assertEqual(Money(00, Currency.USD), position.realized_pnl) self.assertEqual(0.0, position.unrealized_points(last)) self.assertEqual(0.0, position.unrealized_return(last)) self.assertEqual(Money(00, Currency.USD), position.unrealized_pnl(last)) self.assertEqual(0.0, position.total_points(last)) self.assertEqual(0.0, position.total_return(last)) self.assertEqual(Money(00, Currency.USD), position.total_pnl(last))