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

Method parse_market

python/ccxt/binance.py:3487–3654  ·  view source on GitHub ↗
(self, market: dict)

Source from the content-addressed store, hash-verified

3485 return result
3486
3487 def parse_market(self, market: dict) -> Market:
3488 swap = False
3489 future = False
3490 option = False
3491 underlying = self.safe_string(market, 'underlying')
3492 id = self.safe_string(market, 'symbol')
3493 optionParts = id.split('-')
3494 optionBase = self.safe_string(optionParts, 0)
3495 lowercaseId = self.safe_string_lower(market, 'symbol')
3496 baseId = self.safe_string(market, 'baseAsset', optionBase)
3497 quoteId = self.safe_string(market, 'quoteAsset')
3498 base = self.safe_currency_code(baseId)
3499 quote = self.safe_currency_code(quoteId)
3500 contractType = self.safe_string(market, 'contractType')
3501 contract = ('contractType' in market)
3502 expiry = self.safe_integer_2(market, 'deliveryDate', 'expiryDate')
3503 settleId = self.safe_string(market, 'marginAsset')
3504 if (contractType == 'PERPETUAL') or (expiry == 4133404800000): # some swap markets do not have contract type, eg: BTCST
3505 expiry = None
3506 swap = True
3507 elif underlying is not None:
3508 contract = True
3509 option = True
3510 settleId = 'USDT' if (settleId is None) else settleId
3511 elif expiry is not None:
3512 future = True
3513 settle = self.safe_currency_code(settleId)
3514 spot = not contract
3515 filters = self.safe_list(market, 'filters', [])
3516 filtersByType = self.index_by(filters, 'filterType')
3517 status = self.safe_string_2(market, 'status', 'contractStatus')
3518 contractSize = None
3519 fees = self.fees
3520 linear = None
3521 inverse = None
3522 symbol = base + '/' + quote
3523 strike = None
3524 if contract:
3525 if swap:
3526 symbol = symbol + ':' + settle
3527 elif future:
3528 symbol = symbol + ':' + settle + '-' + self.yymmdd(expiry)
3529 elif option:
3530 strike = self.number_to_string(self.parse_to_numeric(self.safe_string(market, 'strikePrice')))
3531 symbol = symbol + ':' + settle + '-' + self.yymmdd(expiry) + '-' + strike + '-' + self.safe_string(optionParts, 3)
3532 contractSize = self.safe_number_2(market, 'contractSize', 'unit', self.parse_number('1'))
3533 linear = settle == quote
3534 inverse = settle == base
3535 feesType = 'linear' if linear else 'inverse'
3536 fees = self.safe_dict(self.fees, feesType, {})
3537 active = (status == 'TRADING')
3538 if spot:
3539 permissions = self.safe_list(market, 'permissions', [])
3540 for j in range(0, len(permissions)):
3541 if permissions[j] == 'TRD_GRP_003':
3542 active = False
3543 break
3544 isMarginTradingAllowed = self.safe_bool(market, 'isMarginTradingAllowed', False)

Callers 1

fetch_marketsMethod · 0.95

Calls 15

safe_stringMethod · 0.80
splitMethod · 0.80
safe_string_lowerMethod · 0.80
safe_integer_2Method · 0.80
safe_listMethod · 0.80
index_byMethod · 0.80
safe_string_2Method · 0.80
parse_to_numericMethod · 0.80
safe_number_2Method · 0.80
parse_numberMethod · 0.80
safe_dictMethod · 0.80
safe_boolMethod · 0.80

Tested by

no test coverage detected