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 = ''
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
# 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
# (variable/key) rename as well as file name adjustments to any
# existing tsdb set..
if 'usd' in venue:
if 'usd' in venue_lower:
mkt_mode: str = 'usdtm_futes'
# NO IDEA what these contracts (some kinda DEX-ish futes?) are
# but we're masking them for now..
elif (
'defi' in venue
'defi' in venue_lower
# TODO: handle coinm futes which have a margin asset that
# is some crypto token!
# https://binance-docs.github.io/apidocs/delivery/en/#exchange-information
or 'btc' in venue
or 'btc' in venue_lower
):
return None
else:
# NOTE: see the `FutesPair.bs_fqme: str` implementation
# to understand the reverse market info lookup below.
mkt_mode = venue or 'spot'
mkt_mode = venue_lower or 'spot'
sectype: str = ''
if (
venue
and 'spot' not in venue
and 'spot' not in venue_lower
# XXX: catch all in case user doesn't know which
# venue they want (usdtm vs. coinm) and we can choose
# a default (via config?) once we support coin-m APIs.
or 'perp' in venue
or 'perp' in venue_lower
):
if not mkt_mode:
mkt_mode: str = f'{venue}_futes'
sectype: str = 'future'
if 'perp' in expiry:
sectype = 'perpetual_future'
mkt_mode: str = f'{venue_lower}_futes'
async with open_cached_client(
'binance',
@ -377,7 +380,10 @@ async def get_mkt_info(
expiry=expiry,
venue=venue,
broker='binance',
_atype=sectype,
# NOTE: sectype is always taken from dst, see
# `MktPair.type_key` and `Client._cache_pairs()`
# _atype=sectype,
)
return mkt, pair