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

Method parse_account_position

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

Source from the content-addressed store, hash-verified

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