Commit Graph

3585 Commits (116f7fd40f078f480b60a8608840814bcedca42e)

Author SHA1 Message Date
Tyler Goodlet 116f7fd40f WIP: refactor ib pp load init 2023-04-14 15:58:53 -04:00
Tyler Goodlet 8d7b968c44 Cache contract lookups from `Client.get_con()` 2023-04-14 15:58:53 -04:00
Tyler Goodlet 5f89ec4feb Dump `Position`s as pformatted dicts for now.. 2023-04-14 15:58:53 -04:00
Tyler Goodlet f783d3eba3 Use common `.brokers` logger in most backends 2023-04-14 15:58:53 -04:00
Tyler Goodlet a72a9e76e9 Add common logger instance for `.brokers` 2023-04-14 15:58:53 -04:00
Tyler Goodlet c412197413 Use a single log for entire `.service` subsys 2023-04-14 15:58:53 -04:00
Tyler Goodlet 0930074e76 Use a single log for entire `.clearing` subsys 2023-04-14 15:58:53 -04:00
Tyler Goodlet ca752bea8c Use `MktPair` attr `.size_tick` in charting 2023-04-14 15:58:53 -04:00
Tyler Goodlet 963523359c Use `Struct.copy()` with update dict for `Order` from staged 2023-04-14 15:58:53 -04:00
Tyler Goodlet 3db9854271 Rename `Client.send_update()` -> `.update_nowait()` 2023-04-14 15:58:53 -04:00
Tyler Goodlet b1e241781e Use `str(cmd.symbol)` for fqme on cancels, add `_nowait()` method names 2023-04-14 15:58:53 -04:00
Tyler Goodlet 71019ad54b Add `.__str__()` to mktpair and symbol types, fix `MktPair.fqme` token order 2023-04-14 15:58:53 -04:00
Tyler Goodlet 2a1d485cd1 Rename `fqsn` -> `fqme` in paper engine 2023-04-14 15:58:53 -04:00
Tyler Goodlet f7f2d1247b Drop more `Optional` usage on our `Struct` 2023-04-14 15:58:53 -04:00
Tyler Goodlet 8594a39c61 '`kraken`: finally, use new `MktPair` in `'mkt_info'` init msg field!' 2023-04-14 15:58:53 -04:00
Tyler Goodlet 08b4d69a91 Drop use of legacy `Symbol.broker_info` in display startup 2023-04-14 15:58:53 -04:00
Tyler Goodlet 0aacb835dc Typecast `OrderMode.staged.symbol: str` before `.copy()`! 2023-04-14 15:58:53 -04:00
Tyler Goodlet 4447f45430 `kraken`: parse our source asset key and set on `MktPair.src: str` 2023-04-14 15:58:53 -04:00
Tyler Goodlet 0e0338e217 Always cast `Order.symbol: str` for now
To make nested `msgspec.Struct`s work we need to tell the codec that the
`.symbol` is some struct def, since we don't really need to enforce that
(yet) we're just going to enc/dec as `str` until we further formalize
and/or need something more complex.
2023-04-14 15:58:53 -04:00
Tyler Goodlet ef2d0c46d4 Expect new `MktPair.tick_size: Decimal` attr in ems 2023-04-14 15:58:53 -04:00
Tyler Goodlet 986bb4e7c8 Use `MktPair` for `Flume.symbol` when used by backend
Initial attempt at getting the sampling and shm layer to use the new mkt
info meta-data type. Draft out a potential `BackendInitMsg:
msgspec.Struct` for validating the init msg returned from the
`stream_quotes()` start value; obvs don't actually use it yet.
2023-04-14 15:58:53 -04:00
Tyler Goodlet 76fe9018cf `.clearing`: broad rename of `fqsn` -> `fqme` 2023-04-14 15:58:53 -04:00
Tyler Goodlet d7c1e5e188 Add `MktPair.suffix: str` read from contract info
To be compat with the `Symbol` (for now) and generally allow for reading
the (derivative) contract specific part of the fqme. Adjust
`contract_info: list[str]` and make `src: str = ''` by default.
2023-04-14 15:58:53 -04:00
Tyler Goodlet 52de60c7ee Optionally load `MktPair` in `Flume`s 2023-04-14 15:58:47 -04:00
Tyler Goodlet 8b0aead72e First stage port of `.data.feed` to `MktPair`
Add `MktPair` handling block for when a backend delivers
a `mkt_info`-field containing init msg. Adjust the original
`Symbol`-style `'symbol_info'` msg processing to do `Decimal` defaults
and convert to `MktPair` including slapping in a hacky `_atype: str`
field XD

General initial name changes to `bs_mktid` and `_fqme` throughout!
2023-04-14 15:58:47 -04:00
Tyler Goodlet da7371988a Comment about `Struct.typecast()` conflict with frozen instances 2023-04-14 15:58:47 -04:00
Tyler Goodlet 0866d46484 Default `pps.toml` precision fields to `Decimal`
For `price_tick` and `size_tick` we read in `str` and decimal-ize
and now correctly fail over to default values of the same type..
Also, always treat `bs_mktid` field as a `str` in TOML form.

Drop the strange `clears: dict` var from the loading code (not sure why
that was left in smh) and better name `toml_clears_list` for the
TOML-loaded-pre-transaction sequence.
2023-04-14 15:58:47 -04:00
Tyler Goodlet 98d8b4a0e8 Implement `MktPair.from_msg()` constructor
Handle case where `'dst'` field is just a `str` (in which case delegate to
`.from_fqme()`) as well as do `Asset` loading and use our
`Struct.copy()` to enforce type-casting to (for eg. `Decimal`s) such
that we'll now capture typing errors despite IPC transport.

Change `Symbol.tick_size` and `.lot_tick_size` defaults to decimal
for proper casting and type `MktPair.atype: str` since `msgspec` can't
cast to `AssetTypeName` without special handling..
2023-04-14 15:58:47 -04:00
Tyler Goodlet 901562cb6b `ib`: deliver mkt precision info as `Decimal` 2023-04-14 15:58:47 -04:00
Tyler Goodlet d628b732b7 `binance`: deliver mkt precision info as `Decimal` 2023-04-14 15:58:47 -04:00
Tyler Goodlet 2a5c13bcde Rename `float_digits()` -> `dec_digits()`, since decimal. 2023-04-14 15:58:47 -04:00
Tyler Goodlet c68f240376 Fix `Symbol.tick_size_digits`, add `.price/size_tick` props 2023-04-14 15:58:47 -04:00
Tyler Goodlet 141af47ec0 Cast to float from decimal for level line y-increment
Qt only accepts `float` to it's APIs obvs..
2023-04-14 15:57:48 -04:00
Tyler Goodlet 904a73804d Add parity mapping from altnames back to themsevles in `Client._ntable` 2023-04-14 15:57:48 -04:00
Tyler Goodlet 4cfe13756b Encode a `mktpair` field if passed in msg by caller 2023-04-14 15:57:48 -04:00
Tyler Goodlet bd73ec4ea4 Use `MktPair` building `Position` objects in `PpTable.update_from_trans()` 2023-04-14 15:57:48 -04:00
Tyler Goodlet 8891da2ff3 Explicitly decode tick sizes as decimal for symbol loading in `Flume` 2023-04-14 15:57:48 -04:00
Tyler Goodlet 068f5d8eab Cast back to float from decimal for cursor y-increment 2023-04-14 15:57:48 -04:00
Tyler Goodlet 4b57235bd0 Pass old fields in sym info init msg section 2023-04-14 15:57:48 -04:00
Tyler Goodlet 42f7aa994a Ensure `Symbol` tick sizes are decoded as `Decimal`.. 2023-04-14 15:57:48 -04:00
Tyler Goodlet 28f52dae93 `kraken`: use `Client.mkt_info()` in quotes feed init msg 2023-04-14 15:57:48 -04:00
Tyler Goodlet d6634e9b02 Add `MktPair._atype` for back-compat, always `str(.dst)` 2023-04-14 15:57:48 -04:00
Tyler Goodlet 94cb8fa1b1 `kraken`: use `MktPair` in trasactions 2023-04-14 15:57:48 -04:00
Tyler Goodlet 204f9c49d2 `kraken`: add `Client.mkt_info()`
Allows building a `MktPair` from the backend specific `Pair` for
eventual use in the data feed layer. Also adds `Pair.price/tick_size` to
get to the expected tick precision info format.
2023-04-14 15:57:48 -04:00
Tyler Goodlet 3fccd8a67a Drop shm logging levels to debug over warning 2023-04-14 15:57:17 -04:00
Tyler Goodlet 3ead16c47c Flip to `.bs_mktid` in `ib` and `kraken` 2023-04-14 15:57:17 -04:00
Tyler Goodlet b4ab1675fc Handle read and write of `pps.toml` using `MktPair`
Add a logic branch for now that switches on an instance check.
Generally swap over all `Position.symbol` and `Transaction.sym` refs to
`MktPair`. Do a wholesale rename of all `.bsuid` var names to
`.bs_mktid`.
2023-04-14 15:57:17 -04:00
Tyler Goodlet 9ab196d778 Prep for dropping `Transaction.sym`
Instead let's name it `.sys` for "system", the thing we use to conduct
the "transactions" ..

Also rename `.bsuid` -> `.bs_mktid` for "backend system market id`
which is more explicit, easier to remember and read.
2023-04-14 15:57:17 -04:00
Tyler Goodlet e5eb317b47 Further refinement and shimming of `MktPair`
Prepping to entirely replace `Symbol`; this adds a buncha docs/comments,
better implementation for representing and parsing the FQME: "fully
qualified market endpoint".

Deatz:
- make `.src` an optional field until we figure out how we're going
  to support loading source assets from all backends sensibly..
- implement `MktPair.fqme: str` (what was previously called `fqsn`)
  using a new util func: `maybe_cons_tokens()`.
- `Symbol.brokers` and expect only `.broker` usage.
- remap anything with `fqsn` in the name to `fqme` with aliases from the
  old name.
- implement `unpack_fqme()` with `match:` syntax B)
- add `MktPair.tick_size_digits`, `.lot_size_digits`, `.fqsn`, `.key` for
  backward compat.
- make all fqme generation related fields empty `str`s by default.
- add `MktPair.resolved: bool` a flag indicating whether or not `.dst`
  is an `Asset` instance or just a string and, `.bs_mktid` the field
  to hold the "backend system market id" per broker.
2023-04-14 15:57:17 -04:00
Tyler Goodlet 2485bc803b Drop use of `mk_fqsn()` 2023-04-14 15:57:17 -04:00