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