def simulate_funding_payment_completed(market_info: MarketTradingPairTuple): example_rate: Decimal = Decimal("100") # Example API response for funding payment details response = { "symbol": "BTCUSDT", "incomeType": "COMMISSION", "income": "-0.01000000", "asset": "USDT", "info": "COMMISSION", "time": 1570636800000, "tranId": "9689322392", "tradeId": "2059192" } market_info.market.trigger_event( MarketEvent.FundingPaymentCompleted, FundingPaymentCompletedEvent( response["time"], market_info.market.name, example_rate, response["symbol"], response["income"] ) )
async def _update_positions(self): position_tasks = [] for pair in self._trading_pairs: position_tasks.append( self._api_request( "post", "perpfi/position", {"pair": convert_to_exchange_trading_pair(pair)})) positions = await safe_gather(*position_tasks, return_exceptions=True) for trading_pair, position in zip(self._trading_pairs, positions): position = position.get("position", {}) amount = self.quantize_order_amount(trading_pair, Decimal(position.get("size"))) if amount != Decimal("0"): position_side = PositionSide.LONG if amount > 0 else PositionSide.SHORT unrealized_pnl = self.quantize_order_amount( trading_pair, Decimal(position.get("pnl"))) entry_price = self.quantize_order_price( trading_pair, Decimal(position.get("entryPrice"))) leverage = self._leverage[trading_pair] self._account_positions[self.position_key( trading_pair)] = Position(trading_pair=trading_pair, position_side=position_side, unrealized_pnl=unrealized_pnl, entry_price=entry_price, amount=amount, leverage=leverage) else: if self.position_key(trading_pair) in self._account_positions: del self._account_positions[self.position_key( trading_pair)] payment = Decimal(str(position.get("fundingPayment"))) oldPayment = self._fundingPayment.get(trading_pair, 0) if payment != oldPayment: self._fundingPayment[trading_pair] = oldPayment action = "paid" if payment < 0 else "received" if payment != Decimal("0"): self.logger().info( f"Funding payment of {payment} {action} on {trading_pair} market." ) self.trigger_event( MarketEvent.FundingPaymentCompleted, FundingPaymentCompletedEvent( timestamp=time.time(), market=self.name, funding_rate=self._funding_info[trading_pair]. rate, trading_pair=trading_pair, amount=payment))