binance: always upper case venue and expiry tokens

Since we need `.get_mkt_info()` to remain symmetric across calls with
different fqme inputs, and binance generally uses upper case for it's
symbology keys, we always upper the FQME related tokens for both
symcaching and general search purposes.

Also don't set `_atype` on mkt pairs since it should be fully handled
via the dst asset loading in `Client._cache_pairs()`.
account_tests
Tyler Goodlet 2023-07-26 12:41:15 -04:00
parent c00cf41541
commit 618c461bfb
1 changed files with 20 additions and 14 deletions

View File

@ -287,7 +287,15 @@ async def get_mkt_info(
mkt_mode: str = '' mkt_mode: str = ''
broker, mkt_ep, venue, expiry = unpack_fqme(fqme) broker, mkt_ep, venue, expiry = unpack_fqme(fqme)
venue: str = venue.lower()
# NOTE: we always upper case all tokens to be consistent with
# binance's symbology style for pairs, like `BTCUSDT`, but in
# theory we could also just keep things lower case; as long as
# we're consistent and the symcache matches whatever this func
# returns, always!
expiry: str = expiry.upper()
venue: str = venue.upper()
venue_lower: str = venue.lower()
# XXX TODO: we should change the usdtm_futes name to just # XXX TODO: we should change the usdtm_futes name to just
# usdm_futes (dropping the tether part) since it turns out that # usdm_futes (dropping the tether part) since it turns out that
@ -295,42 +303,37 @@ async def get_mkt_info(
# the margin assets.. it's going to require a wholesale # the margin assets.. it's going to require a wholesale
# (variable/key) rename as well as file name adjustments to any # (variable/key) rename as well as file name adjustments to any
# existing tsdb set.. # existing tsdb set..
if 'usd' in venue: if 'usd' in venue_lower:
mkt_mode: str = 'usdtm_futes' mkt_mode: str = 'usdtm_futes'
# NO IDEA what these contracts (some kinda DEX-ish futes?) are # NO IDEA what these contracts (some kinda DEX-ish futes?) are
# but we're masking them for now.. # but we're masking them for now..
elif ( elif (
'defi' in venue 'defi' in venue_lower
# TODO: handle coinm futes which have a margin asset that # TODO: handle coinm futes which have a margin asset that
# is some crypto token! # is some crypto token!
# https://binance-docs.github.io/apidocs/delivery/en/#exchange-information # https://binance-docs.github.io/apidocs/delivery/en/#exchange-information
or 'btc' in venue or 'btc' in venue_lower
): ):
return None return None
else: else:
# NOTE: see the `FutesPair.bs_fqme: str` implementation # NOTE: see the `FutesPair.bs_fqme: str` implementation
# to understand the reverse market info lookup below. # to understand the reverse market info lookup below.
mkt_mode = venue or 'spot' mkt_mode = venue_lower or 'spot'
sectype: str = ''
if ( if (
venue venue
and 'spot' not in venue and 'spot' not in venue_lower
# XXX: catch all in case user doesn't know which # XXX: catch all in case user doesn't know which
# venue they want (usdtm vs. coinm) and we can choose # venue they want (usdtm vs. coinm) and we can choose
# a default (via config?) once we support coin-m APIs. # a default (via config?) once we support coin-m APIs.
or 'perp' in venue or 'perp' in venue_lower
): ):
if not mkt_mode: if not mkt_mode:
mkt_mode: str = f'{venue}_futes' mkt_mode: str = f'{venue_lower}_futes'
sectype: str = 'future'
if 'perp' in expiry:
sectype = 'perpetual_future'
async with open_cached_client( async with open_cached_client(
'binance', 'binance',
@ -377,7 +380,10 @@ async def get_mkt_info(
expiry=expiry, expiry=expiry,
venue=venue, venue=venue,
broker='binance', broker='binance',
_atype=sectype,
# NOTE: sectype is always taken from dst, see
# `MktPair.type_key` and `Client._cache_pairs()`
# _atype=sectype,
) )
return mkt, pair return mkt, pair