def test_performance_metrics(self): trades: List[Trade] = [ Trade(trading_pair, TradeType.BUY, 100, 10, None, trading_pair, 1, TradeFee(0.0, [(quote, 0)])), Trade(trading_pair, TradeType.SELL, 120, 15, None, trading_pair, 1, TradeFee(0.0, [(quote, 0)])) ] cur_bals = {base: 100, quote: 10000} metrics = asyncio.get_event_loop().run_until_complete( PerformanceMetrics.create("hbot_exchange", trading_pair, trades, cur_bals)) self.assertEqual(Decimal("200"), metrics.trade_pnl) print(metrics)
def test_performance_metrics_for_derivatives(self, is_trade_fill_mock): is_trade_fill_mock.return_value = True trades = [] trades.append(self.mock_trade(id="order1", amount=100, price=10, position="OPEN", type="BUY", fee=TradeFee(0.0, [(quote, 0)]))) trades.append(self.mock_trade(id="order2", amount=100, price=15, position="CLOSE", type="SELL", fee=TradeFee(0.0, [(quote, 0)]))) trades.append(self.mock_trade(id="order3", amount=100, price=20, position="OPEN", type="SELL", fee=TradeFee(0.1, [("USD", 0)]))) trades.append(self.mock_trade(id="order4", amount=100, price=15, position="CLOSE", type="BUY", fee=TradeFee(0.1, [("USD", 0)]))) cur_bals = {base: 100, quote: 10000} metrics = asyncio.get_event_loop().run_until_complete( PerformanceMetrics.create("hbot_exchange", trading_pair, trades, cur_bals)) self.assertEqual(metrics.num_buys, 2) self.assertEqual(metrics.num_sells, 2) self.assertEqual(metrics.num_trades, 4) self.assertEqual(metrics.b_vol_base, Decimal("200")) self.assertEqual(metrics.s_vol_base, Decimal("-200")) self.assertEqual(metrics.tot_vol_base, Decimal("0")) self.assertEqual(metrics.b_vol_quote, Decimal("-2500")) self.assertEqual(metrics.s_vol_quote, Decimal("3500")) self.assertEqual(metrics.tot_vol_quote, Decimal("1000")) self.assertEqual(metrics.avg_b_price, Decimal("12.5")) self.assertEqual(metrics.avg_s_price, Decimal("17.5")) self.assertEqual(metrics.avg_tot_price, Decimal("15")) self.assertEqual(metrics.start_base_bal, Decimal("100")) self.assertEqual(metrics.start_quote_bal, Decimal("9000")) self.assertEqual(metrics.cur_base_bal, 100) self.assertEqual(metrics.cur_quote_bal, 10000), self.assertEqual(metrics.start_price, Decimal("10")), self.assertEqual(metrics.cur_price, Decimal("15")) self.assertEqual(metrics.trade_pnl, Decimal("1000")) self.assertEqual(metrics.total_pnl, Decimal("650"))
def test_performance_metrics(self): rate_oracle = RateOracle() rate_oracle._prices["USDT-HBOT"] = Decimal("5") RateOracle._shared_instance = rate_oracle trade_fee = AddedToCostTradeFee( flat_fees=[TokenAmount(quote, Decimal("0"))]) trades = [ TradeFill( config_file_path="some-strategy.yml", strategy="pure_market_making", market="binance", symbol=trading_pair, base_asset=base, quote_asset=quote, timestamp=int(time.time()), order_id="someId0", trade_type="BUY", order_type="LIMIT", price=100, amount=10, trade_fee=trade_fee.to_json(), exchange_trade_id="someExchangeId0", position=PositionAction.NIL.value, ), TradeFill( config_file_path="some-strategy.yml", strategy="pure_market_making", market="binance", symbol=trading_pair, base_asset=base, quote_asset=quote, timestamp=int(time.time()), order_id="someId1", trade_type="SELL", order_type="LIMIT", price=120, amount=15, trade_fee=trade_fee.to_json(), exchange_trade_id="someExchangeId1", position=PositionAction.NIL.value, ) ] cur_bals = {base: 100, quote: 10000} metrics = asyncio.get_event_loop().run_until_complete( PerformanceMetrics.create(trading_pair, trades, cur_bals)) self.assertEqual(Decimal("799"), metrics.trade_pnl) print(metrics)
def test_performance_metrics_for_derivatives(self, is_trade_fill_mock): rate_oracle = RateOracle() rate_oracle._prices["USDT-HBOT"] = Decimal("5") RateOracle._shared_instance = rate_oracle is_trade_fill_mock.return_value = True trades = [] trades.append( self.mock_trade(id="order1", amount=Decimal("100"), price=Decimal("10"), position="OPEN", type="BUY", fee=AddedToCostTradeFee( flat_fees=[TokenAmount(quote, Decimal("0"))]))) trades.append( self.mock_trade(id="order2", amount=Decimal("100"), price=Decimal("15"), position="CLOSE", type="SELL", fee=AddedToCostTradeFee( flat_fees=[TokenAmount(quote, Decimal("0"))]))) trades.append( self.mock_trade(id="order3", amount=Decimal("100"), price=Decimal("20"), position="OPEN", type="SELL", fee=AddedToCostTradeFee( Decimal("0.1"), flat_fees=[TokenAmount("USD", Decimal("0"))]))) trades.append( self.mock_trade(id="order4", amount=Decimal("100"), price=Decimal("15"), position="CLOSE", type="BUY", fee=AddedToCostTradeFee( Decimal("0.1"), flat_fees=[TokenAmount("USD", Decimal("0"))]))) cur_bals = {base: 100, quote: 10000} metrics = asyncio.get_event_loop().run_until_complete( PerformanceMetrics.create(trading_pair, trades, cur_bals)) self.assertEqual(metrics.num_buys, 2) self.assertEqual(metrics.num_sells, 2) self.assertEqual(metrics.num_trades, 4) self.assertEqual(metrics.b_vol_base, Decimal("200")) self.assertEqual(metrics.s_vol_base, Decimal("-200")) self.assertEqual(metrics.tot_vol_base, Decimal("0")) self.assertEqual(metrics.b_vol_quote, Decimal("-2500")) self.assertEqual(metrics.s_vol_quote, Decimal("3500")) self.assertEqual(metrics.tot_vol_quote, Decimal("1000")) self.assertEqual(metrics.avg_b_price, Decimal("12.5")) self.assertEqual(metrics.avg_s_price, Decimal("17.5")) self.assertEqual(metrics.avg_tot_price, Decimal("15")) self.assertEqual(metrics.start_base_bal, Decimal("100")) self.assertEqual(metrics.start_quote_bal, Decimal("9000")) self.assertEqual(metrics.cur_base_bal, 100) self.assertEqual(metrics.cur_quote_bal, 10000), self.assertEqual(metrics.start_price, Decimal("10")), self.assertEqual(metrics.cur_price, Decimal("0.2")) self.assertEqual(metrics.trade_pnl, Decimal("1000")) self.assertEqual(metrics.total_pnl, Decimal("650"))