binance: spec `.ns_path: str` on pair structs
Provides for fully isolated symbology caching in a flat TOML table without special case handling B) Also explicitly define `.bs_mktid: str` which is now used by the symcache to to key-index the backend specific pair set and thus provides for round-trip marshalling without special knowledge of any backend schema.account_tests
parent
d794afcb5c
commit
a5821ae9b1
|
@ -33,11 +33,16 @@ from .feed import (
|
||||||
from .broker import (
|
from .broker import (
|
||||||
open_trade_dialog,
|
open_trade_dialog,
|
||||||
)
|
)
|
||||||
|
from .venues import (
|
||||||
|
SpotPair,
|
||||||
|
FutesPair,
|
||||||
|
)
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'get_client',
|
'get_client',
|
||||||
'get_mkt_info',
|
'get_mkt_info',
|
||||||
|
'SpotPair',
|
||||||
|
'FutesPair',
|
||||||
'open_trade_dialog',
|
'open_trade_dialog',
|
||||||
'open_history_client',
|
'open_history_client',
|
||||||
'open_symbol_search',
|
'open_symbol_search',
|
||||||
|
|
|
@ -36,7 +36,6 @@ import trio
|
||||||
|
|
||||||
from piker.accounting import (
|
from piker.accounting import (
|
||||||
Asset,
|
Asset,
|
||||||
# MktPair,
|
|
||||||
)
|
)
|
||||||
from piker.brokers._util import (
|
from piker.brokers._util import (
|
||||||
get_logger,
|
get_logger,
|
||||||
|
@ -232,6 +231,9 @@ async def open_trade_dialog(
|
||||||
account_name: str = 'usdtm'
|
account_name: str = 'usdtm'
|
||||||
use_testnet: bool = False
|
use_testnet: bool = False
|
||||||
|
|
||||||
|
# TODO: if/when we add .accounting support we need to
|
||||||
|
# do a open_symcache() call.. though maybe we can hide
|
||||||
|
# this in a new async version of open_account()?
|
||||||
async with open_cached_client('binance') as client:
|
async with open_cached_client('binance') as client:
|
||||||
subconf: dict = client.conf[venue_name]
|
subconf: dict = client.conf[venue_name]
|
||||||
use_testnet = subconf.get('use_testnet', False)
|
use_testnet = subconf.get('use_testnet', False)
|
||||||
|
|
|
@ -84,6 +84,7 @@ def get_api_eps(venue: MarketType) -> tuple[str, str]:
|
||||||
|
|
||||||
|
|
||||||
class Pair(Struct, frozen=True, kw_only=True):
|
class Pair(Struct, frozen=True, kw_only=True):
|
||||||
|
|
||||||
symbol: str
|
symbol: str
|
||||||
status: str
|
status: str
|
||||||
orderTypes: list[str]
|
orderTypes: list[str]
|
||||||
|
@ -117,6 +118,10 @@ class Pair(Struct, frozen=True, kw_only=True):
|
||||||
def bs_fqme(self) -> str:
|
def bs_fqme(self) -> str:
|
||||||
return self.symbol
|
return self.symbol
|
||||||
|
|
||||||
|
@property
|
||||||
|
def bs_mktid(self) -> str:
|
||||||
|
return f'{self.symbol}.{self.venue}'
|
||||||
|
|
||||||
|
|
||||||
class SpotPair(Pair, frozen=True):
|
class SpotPair(Pair, frozen=True):
|
||||||
|
|
||||||
|
@ -137,6 +142,13 @@ class SpotPair(Pair, frozen=True):
|
||||||
allowedSelfTradePreventionModes: list[str]
|
allowedSelfTradePreventionModes: list[str]
|
||||||
permissions: list[str]
|
permissions: list[str]
|
||||||
|
|
||||||
|
# NOTE: see `.data._symcache.SymbologyCache.load()` for why
|
||||||
|
ns_path: str = 'piker.brokers.binance:SpotPair'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def venue(self) -> str:
|
||||||
|
return 'SPOT'
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def bs_fqme(self) -> str:
|
def bs_fqme(self) -> str:
|
||||||
return f'{self.symbol}.SPOT'
|
return f'{self.symbol}.SPOT'
|
||||||
|
@ -173,6 +185,9 @@ class FutesPair(Pair):
|
||||||
underlyingSubType: list[str] # ['PoW'],
|
underlyingSubType: list[str] # ['PoW'],
|
||||||
underlyingType: str # 'COIN'
|
underlyingType: str # 'COIN'
|
||||||
|
|
||||||
|
# NOTE: see `.data._symcache.SymbologyCache.load()` for why
|
||||||
|
ns_path: str = 'piker.brokers.binance:FutesPair'
|
||||||
|
|
||||||
# NOTE: for compat with spot pairs and `MktPair.src: Asset`
|
# NOTE: for compat with spot pairs and `MktPair.src: Asset`
|
||||||
# processing..
|
# processing..
|
||||||
@property
|
@property
|
||||||
|
|
Loading…
Reference in New Issue