Commit Graph

4411 Commits (1f41b151d74cd3f9ff6721282de988a63499f3a5)

Author SHA1 Message Date
Nelson Torres 1f41b151d7 move constants to venue 2025-01-29 15:44:33 -03:00
Nelson Torres e8c196fd88 refactor redundant code 2025-01-29 15:44:33 -03:00
Nelson Torres 7cefb202fb name formatting fixes 2025-01-29 15:44:33 -03:00
Nelson Torres ddb4c0269f get_mkt_info cleanup 2025-01-29 15:44:33 -03:00
Nelson Torres 139f62f4de cache_symbols refactor 2025-01-29 15:44:33 -03:00
Nelson Torres 338e292002 json_rpc_auth_wrapper 2025-01-29 15:44:33 -03:00
Nelson Torres 13af0a90eb move object classes to venue 2025-01-29 15:44:33 -03:00
Nelson Torres e84781ca1e Added options symbols to get_assets 2025-01-29 15:44:33 -03:00
Nelson Torres 576b15e2c6 get_assets now uses public endpoint
It's better if the data is available through a public endpoint.
2025-01-29 15:44:33 -03:00
Nelson Torres b7e54571ea now using exch_info in search_symbols 2025-01-29 15:44:33 -03:00
Nelson Torres 1a295c0c21 Fix bs_fqme using venue and expiry 2025-01-29 15:44:33 -03:00
Nelson Torres f057a20bfa Added expiry property for OptionPair 2025-01-29 15:44:33 -03:00
Nelson Torres 9dba47902e No longer needed 2025-01-29 15:44:33 -03:00
Nelson Torres e0ecef04bb bs_mktid instead bs_fqme for deribits options 2025-01-29 15:44:33 -03:00
Nelson Torres 266347bcdb Fixed pair instrument name in search_symbols endpoint.
Fixed instrument in bars endpoint, for options in deribits bs_mktid instead bs_fqme.
Fixed the id is in msg.
2025-01-29 15:44:33 -03:00
Tyler Goodlet 051d43b559 data._web_bs: try to raise jsonrpc errors in parent task 2025-01-29 15:44:33 -03:00
Nelson Torres ac3ea5d960 Add necessary classes in init file for deribit 2025-01-29 15:44:33 -03:00
Nelson Torres cd1ad13720 Minor refactor in open_symbol_search 2025-01-29 15:44:33 -03:00
Nelson Torres 941340f853 stream_quotes now using FeedInit 2025-01-29 15:44:33 -03:00
Nelson Torres b046151464 symbol_info refactor 2025-01-29 15:44:33 -03:00
Nelson Torres f3d810f3ef search_symbols output type fix 2025-01-29 15:44:33 -03:00
Nelson Torres 1c433e7bda add get_mkt_pairs method 2025-01-29 15:44:33 -03:00
Nelson Torres af0bba5667 get_assets refactor 2025-01-29 15:44:33 -03:00
Nelson Torres 28bbf11484 formatting 2025-01-29 15:44:33 -03:00
Nelson Torres d1c00de05b created exch_info in api class 2025-01-29 15:44:33 -03:00
Nelson Torres 30caac4c27 modify self_pairs type to ChainMap 2025-01-29 15:44:33 -03:00
Nelson Torres 3de985d3cd Necessary imports 2025-01-29 15:44:33 -03:00
Nelson Torres cf46671e4b add get_market_info 2025-01-29 15:44:33 -03:00
Nelson Torres 87b0ac2331 Necessary imports 2025-01-29 15:44:33 -03:00
Nelson Torres d014f6f37d minor fixes in venues 2025-01-29 15:44:33 -03:00
Nelson Torres f50e7ad5f0 add class Pair in venues, PAIRTYPES for future uses 2025-01-29 15:44:33 -03:00
Nelson Torres de55fbd44a fix syms for venues.
little refactor in get_config, and created get_fh_config for cryptofeed.
2025-01-29 15:44:33 -03:00
Nelson Torres e941afc491 venues for deribit 2025-01-29 15:44:33 -03:00
Nelson Torres 2ed8b47883 Added cryptofeed and pyarrow necessary for the feed, enable deribit
in the brokers init file, at this point the feed is working, to check
the tables use vd tool.
2025-01-29 15:44:33 -03:00
Nelson Torres bda7e69ad9 `default.nix` is created with required nixos deps "wiring"
`pyproject.toml` update to use pikers.dev/goodboy/tractor.git, branch: `aio_abandons`.
2025-01-29 15:40:31 -03:00
Tyler Goodlet 0223074d24 Allow ledger passes to ignore (symcache) unknown fqmes
For example in the paper-eng, if you have a backend that doesn't fully
support a symcache (yet) it's handy to be able to ignore processing
other paper-eng txns when all you care about at the moment is the
simulated symbol.

NOTE, that currently this will still result in a key-error when you load
more then one mkt with the paper engine (for which the backend does not
have the symcache implemented) since no fqme ad-hoc query was made for
the 2nd symbol (and i'm not sure we should support that kinda hackery
over just encouraging the sym-cache being added?). Def needs a little
more thought depending on how many backends are never going to be able
to (easily) support caching..
2025-01-29 15:36:35 -03:00
Tyler Goodlet 77d73d27db .clearing._ems: Don't require `first_quote['last']`
Instead just check for the field (which i'm not huge on the key-name for
anyway) and if not found get the "last price" from the real-time shm
buffer's latest 'close' sample.

Unrelatedly, use a `subs.copy()` in the `Router.client_broadcast()` loop
such that if a `client_stream` is popped on connection failure, we don't
RTE for the "size changed on iteration".
2025-01-29 15:36:35 -03:00
Tyler Goodlet 411b517d8d `kucoin`: repair live quotes streaming..
This must have broke at some point during the new `MktPair` and thus
`.fqme: str` updates; mas-o-menos the symbol key in the quote-msg-`dict`
was NOT set to the `MktPair.bs_fqme: str` value and thus wasn't being
processed by the downstream sampling and feed subsys.

So fix that as well as a few other refinements,
- set the `topic: mkt.bs_fqme` in quote msgs obvi.
- drop the "wait for first clearing vlm" quote poll loop; going to fix
  the sampler to handle a `first_quote` without a `'last'` key.
- add some typing around calls to `get_mkt_info()`.
- rename `stream_messages()` -> `iter_normed_quotes()`.
2025-01-29 15:36:35 -03:00
Nelson Torres 12250a7bb1 Deleted settlePlan field from binance FutesPair. 2025-01-29 15:36:35 -03:00
Nelson Torres ddfffc38b0 Added missing fields for kucoin.
feeCategory, makerFeeCoefficient, takerFeeCoefficient and st.
2025-01-29 15:36:35 -03:00
Nelson Torres 69b1bb57ea Updated tractor method name. 2025-01-29 00:17:36 -03:00
Tyler Goodlet 1f2755ee36 Drop `.cancel_actor()` from `maybe_spawn_daemon()`
Since `tractor`'s new and improved inter-actor cancellation semantics
are much more pedantic, AND bc we use the `ServiceMngr` for spawning
service actors on-demand, the caller of `maybe_spawn_daemon()` should
NEVER conduct a so called "out of band" `Actor`-runtime cancel request
since this is precisely the job of our `ServiceMngr` XD

Add a super in depth note explaining the underlying issue and adding
a todo list of how we should prolly augment `tractor` to make such cases
easier to grok and fix in the future!
2025-01-29 00:17:36 -03:00
Tyler Goodlet ff171af168 Prep service mngr for move to `tractor.hilevel`
Given it's a fairly simple yet useful abstraction, it makes sense to
offer this sub-sys alongside the core `tractor` runtime lib.

Without going into extreme detail on the impl changes (it'll come in
the commit that moves to the other repo) here is the high level summary:
------ - ------
- rename `Services` -> `ServiceMngr` and use an factory `@acm`
  to guarantee a single-instance-per-actor using a niche approach for a
  singleton object using a default keyword-arg B)
  - the mod level `open_service_mngr()` and `get_service_mngr()` are the
    new allocation/access API.
- add a `ServiceMngr.start_service()` method which does the work of both
  spawning a new subactor (for the daemon) and uses its portal to start
  the mngr side supervision task.
- open actor/task nurseries inside the `@acm` allocator.

Adjust other dependent subsystems to match:
------ - ------
- use `open_service_mngr()` when first allocated in `open_pikerd()`.
- use `get_service_mngr()` instead of importing the class ref inside
  `.service.maybe_spawn_daemon()`, `.brokers._daemon.spawn_brokerd()`
  and `.data._sampling.spawn_samplerd()` using a `partial` to pack in
  the endpoint ctx kwargs (unpacked inside `.start_service()` XD).
2025-01-29 00:17:36 -03:00
Tyler Goodlet aa4a89451a Lel, forgot to add a `SPOT` venue for `binance`.. 2025-01-29 00:17:36 -03:00
Tyler Goodlet a461fcc3e3 Mask no-data pause-point, add perps to sig.
Was orig for debugging an issue with `kucoin` i think but definitely
shouldn't be left in XD

Also add `'perpetual_future'` to `start_backfill()` input literal set.
2025-01-29 00:17:36 -03:00
Tyler Goodlet b577180773 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()`.
2024-06-20 14:40:21 -04:00
Tyler Goodlet f12c452d96 ib: warn about mkt precision cuckups that `Contract`s clearly deliver wrong.. 2024-06-18 12:42:21 -04:00
Tyler Goodlet 3531c2edc1 ib: mask out trade and vlm rates for now 2024-06-18 10:03:34 -04:00
Tyler Goodlet 97dd7e766a 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.
2024-06-18 10:00:18 -04:00
Tyler Goodlet ab1463d942 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.
2024-06-12 09:41:23 -04:00