Compare commits

..

14 Commits

Author SHA1 Message Date
Tyler Goodlet 4025fd244a ib: `.api` mod and log-fmt cleaning
About time we tidy'd a buncha status logging in this backend..
particularly for boot-up where there's lots of client-try-connect poll
looping with account detection from the user config.

`.api.Client` pprint and logging fmt improvements:
- add `Client.__repr__()` which shows the minimally useful set of info
  from the underlying `.ib: IB` as well as a new `.acnts: list[str]`
  of the account aliases defined in the user's `brokers.toml`.
- mk `.bars()` define a comprehensive `query_info: str` with all the
  request deats but only display if there's a problem with the response
  data.
- mk `.get_config()` report both the config file path and the acnt
  aliases (NOT the actual account #s).
- move all `.load_aio_clients()` client poll loop requests do
  `log.runtime()` statuses, only falling through to a `.warning()` when
  the loop fails to connect the client to the spec-ed API-gw addr, and
 |_ don't allow loading accounts for which the user has not defined an
    alias in `brokers.toml::[ib]`; raise a value-error in such cases
    with a message indicating how to mod the config.
 |_ only `log.info()` about acnts if some were loaded..

Other mod logging de-noising:
- better status fmting in `.symbols.open_symbol_search()` with
  `repr(Client)`.
- for `.feed.stream_quotes()` first quote reporting use `.runtime()`.
2025-02-11 13:45:22 -05:00
Tyler Goodlet 7b506d29da ib: warn about mkt precision cuckups that `Contract`s clearly deliver wrong.. 2025-02-11 13:45:22 -05:00
Tyler Goodlet 2ac39c3233 ib: mask out trade and vlm rates for now 2025-02-11 13:45:22 -05:00
Tyler Goodlet 8d7fe58ffa ib: more trade record edge case handling
- timestamps came as `'date'`-keyed from 2022 and before but now are
  `'datetime'`..
- some symbols seem to have no commission field, so handle that..
- when no `'price'` field found return `None` from `norm_trade()`.
- add a warn log on mid-fill commission updates.
2025-02-11 13:45:22 -05:00
Tyler Goodlet bbdb506728 Port binance to `httpx`
Like other backends use the `AsyncClient` for all venue specific
client-sessions but change to allocating them inside `get_client()`
using an `AsyncExitStack` and inserting directly in the
`Client.venue_sesh: dict` table during init.

Supporting impl tweaks:
- remove most of the API client session building logic and instead make
  `Client.__init__()` take in a `venue_sessions: dict` (set it to
  `.venue_sesh`) and `conf: dict`, instead opting to do the http client
  configuration inside `get_client()` since all that code only needs to
  be run once.
 |_load config inside `get_client()` once.
 |_move session token creation into a new util func `init_api_keys()` and
  also call it from `get_client()` factory; toss in an ex. toml section
  config to the doc string.
- define `_venue_urls: dict[str, str]` (content taken from old static
  `.venue_sesh` dict) at module level and feed them as `base_url: str`
  inputs to the client create loop.
- adjust all call sigs in httpx-sesh-using methods, namely just
  `._api()`.
- do a `.exch_info()` call in `get_client()` to cache the symbology
  set.

Unrelated changes for various other outstanding buggers:
- to get futures feeds correctly loading when selected
  from search (like 'XMRUSDT.USDTM.PERP'), expect a `MktPair` input to
  `Client.bars()` such that the exact venue-key can be looked up (via
  a new `.pair2venuekey()` meth) and then passed to `._api()`.
- adjust `.broker.open_trade_dialog()` to failover to paper engine when
  there's no `api_key` key set for the `subconf` venue-key.
2025-02-11 13:45:22 -05:00
Nelson Torres 2b9990b0b3 Added note to exception when missing field in SpotPair class 2025-02-11 13:45:22 -05:00
Nelson Torres eda92ef458 Added new fields to SpotPair class in venues 2025-02-11 13:45:22 -05:00
Tyler Goodlet 70e3e6e9f0 binance: raise `NoData` on null hist arrays
Like we do with other history backends to indicate lack of a data set.
This avoids any raise that will will bring down the backloader task with
some downstream error.

Raise a `ValueError` on no time index for now.
2025-02-11 13:45:22 -05:00
Tyler Goodlet fba70577f7 Woops, `data` can be an empty list XD 2025-02-11 13:45:22 -05:00
Tyler Goodlet d37dd0e974 Woops, fix missing `api_url` ref in error log 2025-02-11 13:45:22 -05:00
Tyler Goodlet 0c157f82ed Change type-annots to use `httpx.Response` 2025-02-11 13:45:22 -05:00
Tyler Goodlet 7e43fc56f6 Port `kucoin` backend to `httpx` 2025-02-11 13:45:22 -05:00
Tyler Goodlet 38289e872e Port `kraken` backend to `httpx` 2025-02-11 13:45:22 -05:00
goodboy e4cd1f85f6 Merge pull request 'pyqt6' (#3) from pyqt6 into gitea_feats
Reviewed-on: #3 (well by fomo anyway..)
2025-02-11 17:25:03 +00:00

Diff Content Not Available