(self, position, market: Market = None)
| 3491 | return result |
| 3492 | |
| 3493 | def parse_account_position(self, position, market: Market = None): |
| 3494 | marketId = self.safe_string(position, 'symbol') |
| 3495 | market = self.safe_market(marketId, market, None, 'contract') |
| 3496 | symbol = self.safe_string(market, 'symbol') |
| 3497 | leverageString = self.safe_string(position, 'leverage') |
| 3498 | leverage = int(leverageString) if (leverageString is not None) else None |
| 3499 | initialMarginString = self.safe_string(position, 'initialMargin') |
| 3500 | initialMargin = self.parse_number(initialMarginString) |
| 3501 | initialMarginPercentageString = None |
| 3502 | if leverageString is not None: |
| 3503 | initialMarginPercentageString = Precise.string_div('1', leverageString, 8) |
| 3504 | rational = self.is_round_number(1000 % leverage) |
| 3505 | if not rational: |
| 3506 | initialMarginPercentageString = Precise.string_div(Precise.string_add(initialMarginPercentageString, '1e-8'), '1', 8) |
| 3507 | # to notionalValue |
| 3508 | usdm = ('notional' in position) |
| 3509 | maintenanceMarginString = self.safe_string(position, 'maintMargin') |
| 3510 | maintenanceMargin = self.parse_number(maintenanceMarginString) |
| 3511 | entryPriceString = self.safe_string(position, 'entryPrice') |
| 3512 | entryPrice = self.parse_number(entryPriceString) |
| 3513 | notionalString = self.safe_string_2(position, 'notional', 'notionalValue') |
| 3514 | notionalStringAbs = Precise.string_abs(notionalString) |
| 3515 | notional = self.parse_number(notionalStringAbs) |
| 3516 | contractsString = self.safe_string(position, 'positionAmt') |
| 3517 | contractsStringAbs = Precise.string_abs(contractsString) |
| 3518 | if contractsString is None: |
| 3519 | entryNotional = Precise.string_mul(Precise.string_mul(leverageString, initialMarginString), entryPriceString) |
| 3520 | contractSizeNew = self.safe_string(market, 'contractSize') |
| 3521 | contractsString = Precise.string_div(entryNotional, contractSizeNew) |
| 3522 | contractsStringAbs = Precise.string_div(Precise.string_add(contractsString, '0.5'), '1', 0) |
| 3523 | contracts = self.parse_number(contractsStringAbs) |
| 3524 | leverageBrackets = self.safe_dict(self.options, 'leverageBrackets', {}) |
| 3525 | leverageBracket = self.safe_list(leverageBrackets, symbol, []) |
| 3526 | maintenanceMarginPercentageString = None |
| 3527 | for i in range(0, len(leverageBracket)): |
| 3528 | bracket = leverageBracket[i] |
| 3529 | if Precise.string_lt(notionalStringAbs, bracket[0]): |
| 3530 | break |
| 3531 | maintenanceMarginPercentageString = bracket[1] |
| 3532 | maintenanceMarginPercentage = self.parse_number(maintenanceMarginPercentageString) |
| 3533 | unrealizedPnlString = self.safe_string(position, 'unrealizedProfit') |
| 3534 | unrealizedPnl = self.parse_number(unrealizedPnlString) |
| 3535 | timestamp = self.safe_integer(position, 'updateTime') |
| 3536 | if timestamp == 0: |
| 3537 | timestamp = None |
| 3538 | isolated = self.safe_bool(position, 'isolated') |
| 3539 | if isolated is None: |
| 3540 | isolatedMarginRaw = self.safe_string(position, 'isolatedMargin') |
| 3541 | isolated = not Precise.string_eq(isolatedMarginRaw, '0') |
| 3542 | marginMode = None |
| 3543 | collateralString = None |
| 3544 | walletBalance = None |
| 3545 | if isolated: |
| 3546 | marginMode = 'isolated' |
| 3547 | walletBalance = self.safe_string(position, 'isolatedWallet') |
| 3548 | collateralString = Precise.string_add(walletBalance, unrealizedPnlString) |
| 3549 | else: |
| 3550 | marginMode = 'cross' |
no test coverage detected