コード例 #1
0
    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"]
            )
        )
コード例 #2
0
    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))