`ib`: adjust to new simplified `Symbol`

Drop usage of removed methods and attrs and only pass in the
`.tick_size: Decimal` value during construction.
pre_overruns_ctxcancelled
Tyler Goodlet 2023-03-14 20:29:57 -04:00
parent 04a2ccc42c
commit 8b7563488a
1 changed files with 21 additions and 16 deletions

View File

@ -21,6 +21,7 @@ from __future__ import annotations
from bisect import insort from bisect import insort
from contextlib import ExitStack from contextlib import ExitStack
from dataclasses import asdict from dataclasses import asdict
from decimal import Decimal
from functools import partial from functools import partial
from pprint import pformat from pprint import pformat
import time import time
@ -72,7 +73,6 @@ from piker.clearing._messages import (
) )
from piker.accounting._mktinfo import ( from piker.accounting._mktinfo import (
Symbol, Symbol,
float_digits,
) )
from .api import ( from .api import (
_accounts2clients, _accounts2clients,
@ -414,7 +414,7 @@ async def update_and_audit_msgs(
# right since `.broker` is already included? # right since `.broker` is already included?
account=f'ib.{acctid}', account=f'ib.{acctid}',
# XXX: the `.ib` is stripped..? # XXX: the `.ib` is stripped..?
symbol=p.symbol.front_fqsn(), symbol=p.symbol.fqme,
# currency=ibppmsg.currency, # currency=ibppmsg.currency,
size=p.size, size=p.size,
avg_price=p.ppu, avg_price=p.ppu,
@ -625,7 +625,7 @@ async def trades_dialogue(
pairinfo = pp.symbol pairinfo = pp.symbol
if msg.size != pp.size: if msg.size != pp.size:
log.error( log.error(
f'Pos size mismatch {pairinfo.front_fqsn()}:\n' f'Pos size mismatch {pairinfo.fqsn}:\n'
f'ib: {msg.size}\n' f'ib: {msg.size}\n'
f'piker: {pp.size}\n' f'piker: {pp.size}\n'
) )
@ -1110,7 +1110,6 @@ def norm_trade_records(
comms = -1*record['ibCommission'] comms = -1*record['ibCommission']
price = record.get('price') or record['tradePrice'] price = record.get('price') or record['tradePrice']
price_tick_digits = float_digits(price)
# the api doesn't do the -/+ on the quantity for you but flex # the api doesn't do the -/+ on the quantity for you but flex
# records do.. are you fucking serious ib...!? # records do.. are you fucking serious ib...!?
@ -1153,7 +1152,9 @@ def norm_trade_records(
# special handling of symbol extraction from # special handling of symbol extraction from
# flex records using some ad-hoc schema parsing. # flex records using some ad-hoc schema parsing.
asset_type: str = record.get('assetCategory') or record.get('secType', 'STK') asset_type: str = record.get(
'assetCategory'
) or record.get('secType', 'STK')
# TODO: XXX: WOA this is kinda hacky.. probably # TODO: XXX: WOA this is kinda hacky.. probably
# should figure out the correct future pair key more # should figure out the correct future pair key more
@ -1170,34 +1171,38 @@ def norm_trade_records(
suffix = f'{exch}.{expiry}' suffix = f'{exch}.{expiry}'
expiry = pendulum.parse(expiry) expiry = pendulum.parse(expiry)
src: str = record['currency'] # src: str = record['currency']
# price_tick_digits = float_digits(price)
tick_size = Decimal(
Decimal(10)**Decimal(str(price)).as_tuple().exponent
)
pair = Symbol.from_fqsn( pair = Symbol.from_fqsn(
fqsn=f'{symbol}.{suffix}.ib', fqsn=f'{symbol}.{suffix}.ib',
info={ info={
'tick_size_digits': price_tick_digits, 'tick_size': tick_size,
# NOTE: for "legacy" assets, volume is normally discreet, not # NOTE: for "legacy" assets, volume is normally discreet, not
# a float, but we keep a digit in case the suitz decide # a float, but we keep a digit in case the suitz decide
# to get crazy and change it; we'll be kinda ready # to get crazy and change it; we'll be kinda ready
# schema-wise.. # schema-wise..
'lot_size_digits': 1, 'lot_tick_size': 0.0,
# TODO: remove when we switching from # TODO: remove when we switching from
# ``Symbol`` -> ``MktPair`` # ``Symbol`` -> ``MktPair``
'asset_type': asset_type, 'asset_type': asset_type,
# TODO: figure out a target fin-type name # # TODO: figure out a target fin-type name
# set and normalize to that here! # # set and normalize to that here!
'dst_type': asset_type.lower(), # 'dst_type': asset_type.lower(),
# starting to use new key naming as in ``MktPair`` # # starting to use new key naming as in ``MktPair``
# type have drafted... # # type have drafted...
'src': src, # 'src': src,
'src_type': 'fiat', # 'src_type': 'fiat',
}, },
) )
fqsn = pair.front_fqsn().rstrip('.ib') fqsn = pair.fqme.rstrip('.ib')
# NOTE: for flex records the normal fields for defining an fqsn # NOTE: for flex records the normal fields for defining an fqsn
# sometimes won't be available so we rely on two approaches for # sometimes won't be available so we rely on two approaches for