MCPcopy Create free account
hub / github.com/ccxt/ccxt / parse_account_position

Method parse_account_position

python/ccxt/async_support/aster.py:3493–3640  ·  view source on GitHub ↗
(self, position, market: Market = None)

Source from the content-addressed store, hash-verified

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'

Callers 1

Calls 15

PreciseClass · 0.90
safe_stringMethod · 0.80
parse_numberMethod · 0.80
string_divMethod · 0.80
is_round_numberMethod · 0.80
string_addMethod · 0.80
safe_string_2Method · 0.80
string_absMethod · 0.80
string_mulMethod · 0.80
safe_dictMethod · 0.80
safe_listMethod · 0.80
string_ltMethod · 0.80

Tested by

no test coverage detected