예제 #1
0
 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)
예제 #2
0
    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"))
예제 #3
0
    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)
예제 #4
0
    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"))