(self, position, market: Market = None)
| 3233 | return self.parse_ledger(response, currency, since, limit) |
| 3234 | |
| 3235 | def parse_position_risk(self, position, market: Market = None): |
| 3236 | # |
| 3237 | # { |
| 3238 | # "entryPrice": "6563.66500", |
| 3239 | # "marginType": "isolated", |
| 3240 | # "isAutoAddMargin": "false", |
| 3241 | # "isolatedMargin": "15517.54150468", |
| 3242 | # "leverage": "10", |
| 3243 | # "liquidationPrice": "5930.78", |
| 3244 | # "markPrice": "6679.50671178", |
| 3245 | # "maxNotionalValue": "20000000", |
| 3246 | # "positionSide": "LONG", |
| 3247 | # "positionAmt": "20.000", |
| 3248 | # "symbol": "BTCUSDT", |
| 3249 | # "unRealizedProfit": "2316.83423560", |
| 3250 | # "updateTime": 1625474304765 |
| 3251 | # } |
| 3252 | # |
| 3253 | marketId = self.safe_string(position, 'symbol') |
| 3254 | market = self.safe_market(marketId, market, None, 'contract') |
| 3255 | symbol = self.safe_string(market, 'symbol') |
| 3256 | isolatedMarginString = self.safe_string(position, 'isolatedMargin') |
| 3257 | leverageBrackets = self.safe_dict(self.options, 'leverageBrackets', {}) |
| 3258 | leverageBracket = self.safe_list(leverageBrackets, symbol, []) |
| 3259 | notionalString = self.safe_string_2(position, 'notional', 'notionalValue') |
| 3260 | notionalStringAbs = Precise.string_abs(notionalString) |
| 3261 | maintenanceMarginPercentageString = None |
| 3262 | for i in range(0, len(leverageBracket)): |
| 3263 | bracket = leverageBracket[i] |
| 3264 | if Precise.string_lt(notionalStringAbs, bracket[0]): |
| 3265 | break |
| 3266 | maintenanceMarginPercentageString = bracket[1] |
| 3267 | notional = self.parse_number(notionalStringAbs) |
| 3268 | contractsAbs = Precise.string_abs(self.safe_string(position, 'positionAmt')) |
| 3269 | contracts = self.parse_number(contractsAbs) |
| 3270 | unrealizedPnlString = self.safe_string(position, 'unRealizedProfit') |
| 3271 | unrealizedPnl = self.parse_number(unrealizedPnlString) |
| 3272 | liquidationPriceString = self.omit_zero((self.safe_string(position, 'liquidationPrice'))) |
| 3273 | liquidationPrice = self.parse_number(liquidationPriceString) |
| 3274 | collateralString = None |
| 3275 | marginMode = self.safe_string(position, 'marginType') |
| 3276 | if marginMode is None and isolatedMarginString is not None: |
| 3277 | marginMode = 'cross' if Precise.string_eq(isolatedMarginString, '0') else 'isolated' |
| 3278 | side = None |
| 3279 | if Precise.string_gt(notionalString, '0'): |
| 3280 | side = 'long' |
| 3281 | elif Precise.string_lt(notionalString, '0'): |
| 3282 | side = 'short' |
| 3283 | entryPriceString = self.safe_string(position, 'entryPrice') |
| 3284 | entryPrice = self.parse_number(entryPriceString) |
| 3285 | contractSize = self.safe_value(market, 'contractSize') |
| 3286 | contractSizeString = self.number_to_string(contractSize) |
| 3287 | # to notionalValue |
| 3288 | linear = ('notional' in position) |
| 3289 | if marginMode == 'cross': |
| 3290 | # calculate collateral |
| 3291 | precision = self.safe_dict(market, 'precision', {}) |
| 3292 | basePrecisionValue = self.safe_string(precision, 'base') |
no test coverage detected