class AnalyzerTests(unittest.TestCase): def setUp(self): # Fixture Setup self.analyzer = PerformanceAnalyzer() def test_add_return(self): # Arrange t1 = datetime(year=2010, month=1, day=1) t2 = datetime(year=2010, month=1, day=2) t3 = datetime(year=2010, month=1, day=3) t4 = datetime(year=2010, month=1, day=4) t5 = datetime(year=2010, month=1, day=5) t6 = datetime(year=2010, month=1, day=6) t7 = datetime(year=2010, month=1, day=7) t8 = datetime(year=2010, month=1, day=8) t9 = datetime(year=2010, month=1, day=9) t10 = datetime(year=2010, month=1, day=10) # Act self.analyzer.add_return(t1, 0.05) self.analyzer.add_return(t2, -0.10) self.analyzer.add_return(t3, 0.10) self.analyzer.add_return(t4, -0.21) self.analyzer.add_return(t5, 0.22) self.analyzer.add_return(t6, -0.23) self.analyzer.add_return(t7, 0.24) self.analyzer.add_return(t8, -0.25) self.analyzer.add_return(t9, 0.26) self.analyzer.add_return(t10, -0.10) result = self.analyzer.get_returns() # Assert self.assertEqual(10, len(result)) def test_add_positions(self): # Arrange position1 = TestStubs.position() position2 = TestStubs.position() positions = [position1, position2] # Act self.analyzer.add_positions(UNIX_EPOCH, positions, Money(100000, USD)) # Assert print(self.analyzer.get_positions())
class TestAnalyzer: def setup(self): # Fixture Setup self.analyzer = PerformanceAnalyzer() self.order_factory = OrderFactory( trader_id=TraderId("TESTER-000"), strategy_id=StrategyId("S-001"), clock=TestClock(), ) def test_get_realized_pnls_when_no_data_returns_none(self): # Arrange, Act result = self.analyzer.realized_pnls() # Assert assert result is None def test_get_realized_pnls_with_currency_when_no_data_returns_none(self): # Arrange, Act result = self.analyzer.realized_pnls(AUD) # Assert assert result is None def test_analyzer_tracks_returns(self): # Arrange t1 = datetime(year=2010, month=1, day=1) t2 = datetime(year=2010, month=1, day=2) t3 = datetime(year=2010, month=1, day=3) t4 = datetime(year=2010, month=1, day=4) t5 = datetime(year=2010, month=1, day=5) t6 = datetime(year=2010, month=1, day=6) t7 = datetime(year=2010, month=1, day=7) t8 = datetime(year=2010, month=1, day=8) t9 = datetime(year=2010, month=1, day=9) t10 = datetime(year=2010, month=1, day=10) # Act self.analyzer.add_return(t1, 0.05) self.analyzer.add_return(t2, -0.10) self.analyzer.add_return(t3, 0.10) self.analyzer.add_return(t4, -0.21) self.analyzer.add_return(t5, 0.22) self.analyzer.add_return(t6, -0.23) self.analyzer.add_return(t7, 0.24) self.analyzer.add_return(t8, -0.25) self.analyzer.add_return(t9, 0.26) self.analyzer.add_return(t10, -0.10) self.analyzer.add_return(t10, -0.10) result = self.analyzer.returns() # Assert assert len(result) == 10 def test_get_realized_pnls_when_all_flat_positions_returns_expected_series( self): # Arrange order1 = self.order_factory.market( AUDUSD_SIM.id, OrderSide.BUY, Quantity.from_int(100000), ) order2 = self.order_factory.market( AUDUSD_SIM.id, OrderSide.SELL, Quantity.from_int(100000), ) order3 = self.order_factory.market( AUDUSD_SIM.id, OrderSide.BUY, Quantity.from_int(100000), ) order4 = self.order_factory.market( AUDUSD_SIM.id, OrderSide.SELL, Quantity.from_int(100000), ) fill1 = TestStubs.event_order_filled( order1, instrument=AUDUSD_SIM, position_id=PositionId("P-1"), strategy_id=StrategyId("S-001"), last_px=Price.from_str("1.00000"), ) fill2 = TestStubs.event_order_filled( order2, instrument=AUDUSD_SIM, position_id=PositionId("P-1"), strategy_id=StrategyId("S-001"), last_px=Price.from_str("1.00010"), ) fill3 = TestStubs.event_order_filled( order3, instrument=AUDUSD_SIM, position_id=PositionId("P-2"), strategy_id=StrategyId("S-001"), last_px=Price.from_str("1.00000"), ) fill4 = TestStubs.event_order_filled( order4, instrument=AUDUSD_SIM, position_id=PositionId("P-2"), strategy_id=StrategyId("S-001"), last_px=Price.from_str("1.00020"), ) position1 = Position(instrument=AUDUSD_SIM, fill=fill1) position1.apply(fill2) position2 = Position(instrument=AUDUSD_SIM, fill=fill3) position2.apply(fill4) self.analyzer.add_positions([position1, position2]) # Act result = self.analyzer.realized_pnls(USD) # Assert assert len(result) == 2 assert result["P-1"] == 6.0 assert result["P-2"] == 16.0
class AnalyzerTests(unittest.TestCase): def setUp(self): # Fixture Setup self.analyzer = PerformanceAnalyzer() self.order_factory = OrderFactory( trader_id=TraderId("TESTER", "000"), strategy_id=StrategyId("S", "001"), clock=TestClock(), ) def test_get_daily_returns_when_no_data_returns_empty_series(self): # Arrange # Act result = self.analyzer.get_daily_returns() # Assert self.assertTrue(result.empty) def test_get_realized_pnls_when_no_data_returns_empty_series(self): # Arrange # Act result = self.analyzer.get_realized_pnls() # Assert self.assertTrue(result.empty) def test_analyzer_tracks_daily_returns(self): # Arrange t1 = datetime(year=2010, month=1, day=1) t2 = datetime(year=2010, month=1, day=2) t3 = datetime(year=2010, month=1, day=3) t4 = datetime(year=2010, month=1, day=4) t5 = datetime(year=2010, month=1, day=5) t6 = datetime(year=2010, month=1, day=6) t7 = datetime(year=2010, month=1, day=7) t8 = datetime(year=2010, month=1, day=8) t9 = datetime(year=2010, month=1, day=9) t10 = datetime(year=2010, month=1, day=10) # Act self.analyzer.add_return(t1, 0.05) self.analyzer.add_return(t2, -0.10) self.analyzer.add_return(t3, 0.10) self.analyzer.add_return(t4, -0.21) self.analyzer.add_return(t5, 0.22) self.analyzer.add_return(t6, -0.23) self.analyzer.add_return(t7, 0.24) self.analyzer.add_return(t8, -0.25) self.analyzer.add_return(t9, 0.26) self.analyzer.add_return(t10, -0.10) self.analyzer.add_return(t10, -0.10) result = self.analyzer.get_daily_returns() # Assert self.assertEqual(10, len(result)) self.assertEqual(-0.12, sum(result)) self.assertEqual(-0.20, result.iloc[9]) def test_get_realized_pnls_when_all_flat_positions_returns_expected_series( self): # Arrange order1 = self.order_factory.market( AUDUSD_SIM.symbol, OrderSide.BUY, Quantity(100000), ) order2 = self.order_factory.market( AUDUSD_SIM.symbol, OrderSide.SELL, Quantity(100000), ) order3 = self.order_factory.market( AUDUSD_SIM.symbol, OrderSide.BUY, Quantity(100000), ) order4 = self.order_factory.market( AUDUSD_SIM.symbol, OrderSide.SELL, Quantity(100000), ) fill1 = TestStubs.event_order_filled( order1, instrument=AUDUSD_SIM, position_id=PositionId("P-1"), strategy_id=StrategyId("S", "001"), fill_price=Price("1.00000"), ) fill2 = TestStubs.event_order_filled( order2, instrument=AUDUSD_SIM, position_id=PositionId("P-1"), strategy_id=StrategyId("S", "001"), fill_price=Price("1.00010"), ) fill3 = TestStubs.event_order_filled( order3, instrument=AUDUSD_SIM, position_id=PositionId("P-2"), strategy_id=StrategyId("S", "001"), fill_price=Price("1.00000"), ) fill4 = TestStubs.event_order_filled( order4, instrument=AUDUSD_SIM, position_id=PositionId("P-2"), strategy_id=StrategyId("S", "001"), fill_price=Price("1.00020"), ) position1 = Position(fill1) position1.apply(fill2) position2 = Position(fill3) position2.apply(fill4) self.analyzer.add_positions([position1, position2]) # Act result = self.analyzer.get_realized_pnls() # Assert self.assertEqual(2, len(result)) self.assertEqual(6.0, result['P-1']) self.assertEqual(16.0, result['P-2'])