def __init__(self, trading_pairs: List[str], wallet_private_key: str, ethereum_rpc_url: str, # not used, but left in place to be consistent with other gateway connectors trading_required: bool = True ): """ :param trading_pairs: a list of trading pairs :param wallet_private_key: a private key for eth wallet :param trading_required: Whether actual trading is needed. """ ExchangeBase.__init__(self) PerpetualTrading.__init__(self) self._trading_pairs = trading_pairs self._wallet_private_key = wallet_private_key self._trading_required = trading_required self._ev_loop = asyncio.get_event_loop() self._shared_client = None self._last_poll_timestamp = 0.0 self._last_balance_poll_timestamp = time.time() self._in_flight_orders = {} self._allowances = {} self._status_polling_task = None self._auto_approve_task = None self._real_time_balance_update = False self._poll_notifier = None self._funding_payment_span = [120, 120] self._fundingPayment = {} self._budget_checker = PerpetualBudgetChecker(self)
def __init__( self, trade_fee_schema: Optional[TradeFeeSchema] = None, buy_collateral_token: Optional[str] = None, sell_collateral_token: Optional[str] = None, ): MockPaperExchange.__init__(self, trade_fee_schema) PerpetualTrading.__init__(self) self._budget_checker = PerpetualBudgetChecker(exchange=self) self._funding_payment_span = [0, 10] self._buy_collateral_token = buy_collateral_token self._sell_collateral_token = sell_collateral_token
def test_funding_info(self): """ Test getting funding infos by manually adding a funding info to the class member """ pt: PerpetualTrading = PerpetualTrading() fInfo: FundingInfo = FundingInfo("pair1", Decimal(1), Decimal(2), 1000, Decimal(0.1)) pt._funding_info["pair1"] = fInfo self.assertEqual(pt.get_funding_info("pair1"), fInfo)
def test_position_key(self): pt: PerpetualTrading = PerpetualTrading() pt.set_position_mode(PositionMode.ONEWAY) self.assertEqual(pt.position_key("market1"), "market1") self.assertEqual(pt.position_key("market1", PositionSide.LONG), "market1") pt.set_position_mode(PositionMode.HEDGE) self.assertEqual(pt.position_key("market1", PositionSide.LONG), "market1LONG") self.assertEqual(pt.position_key("market1", PositionSide.SHORT), "market1SHORT")
def test_account_positions(self): """ Test getting account positions by manually adding a position to the class member """ pt: PerpetualTrading = PerpetualTrading() aPos: Position = Position("market1", PositionSide.LONG, Decimal("0"), Decimal("100"), Decimal("1"), Decimal("5")) pt._account_positions["market1"] = aPos self.assertEqual(len(pt.account_positions), 1) self.assertEqual(pt.account_positions["market1"], aPos) self.assertEqual(pt.get_position("market1"), aPos) self.assertEqual(pt.get_position("market2"), None)
def test_supported_position_modes(self): pt: PerpetualTrading = PerpetualTrading() with self.assertRaises(NotImplementedError): pt.supported_position_modes()
def test_leverage(self): pt: PerpetualTrading = PerpetualTrading() pt.set_leverage("pair1", 2) pt.set_leverage("pair2", 3) self.assertEqual(pt.get_leverage("pair1"), 2) self.assertEqual(pt.get_leverage("pair2"), 3)
def test_position_mode(self): pt: PerpetualTrading = PerpetualTrading() self.assertEqual(pt.position_mode, PositionMode.ONEWAY) pt.set_position_mode(PositionMode.HEDGE) self.assertEqual(pt.position_mode, PositionMode.HEDGE)
def test_init(self): pt: PerpetualTrading = PerpetualTrading() self.assertEqual(len(pt.account_positions), 0) self.assertEqual(pt.position_mode, PositionMode.ONEWAY) self.assertEqual(pt.funding_payment_span, [0, 0])
def __init__(self): BacktestMarket.__init__(self) PerpetualTrading.__init__(self) self._funding_payment_span = [0, 10]
def __init__(self): MockPaperExchange.__init__(self) PerpetualTrading.__init__(self) self._funding_payment_span = [0, 10]