Commit Graph

1643 Commits (baf3fcb6fd86772c15fa95c85f518f6470eb8b58)

Author SHA1 Message Date
Tyler Goodlet baf3fcb6fd Drop throttled rate margin to 100us 2021-11-03 09:09:02 -04:00
Tyler Goodlet be21df33c5 Turn on profiling for the moment 2021-11-03 09:09:02 -04:00
Tyler Goodlet 456cdc1820 De-densify some funcs 2021-11-03 09:09:02 -04:00
Tyler Goodlet d2d1f3223b Add some typing around web bs 2021-11-03 09:09:02 -04:00
Tyler Goodlet 0735d924a6 Rename feed bus entrypoint 2021-11-03 09:09:02 -04:00
Tyler Goodlet e978ae3151 Update some typing and add latency checks for binance 2021-11-03 09:09:02 -04:00
Tyler Goodlet 284e9397f7 Please please please let this dpi scaling hack work 2021-11-03 09:09:02 -04:00
Tyler Goodlet 905dc5a456 Port imports to tractor's new subpkg 2021-11-03 09:09:02 -04:00
Tyler Goodlet ef6eb3808e Repeat the click 3 times 2021-11-03 09:09:02 -04:00
Tyler Goodlet 3a3be89bd2 Start testing out trionics helpers, put vlm before rsi 2021-11-03 09:09:02 -04:00
Tyler Goodlet 4812cce8cf Make openGL flag actually work.. 2021-11-03 09:09:02 -04:00
wattygetlood 5bc2609a24 Only scale down for scale < 2 2021-11-03 09:09:02 -04:00
Tyler Goodlet baaf8d4a9d Revert to old shm "last" meaning last row 2021-11-03 09:09:02 -04:00
Tyler Goodlet 8b7e7fd110 Spawn and cache an fsp cluster ahead of time
Use a fixed worker count and don't respawn for every chart, instead
opting for a round-robin to tasks in a cluster and (for now) hoping for
the best in terms of trio scheduling, though we should obviously route
via symbol-locality next. This is currently a boon for chart spawning
startup times since actor creation is done AOT.

Additionally,
- use `zero_on_step` for dollar volume
- drop rsi on startup (again)
- add dollar volume (via fsp) along side unit volume
- litter more profiling to fsp chart startup sequence
- pre-define tick type classes for update loop
2021-11-03 09:09:02 -04:00
Tyler Goodlet ade0993d61 Start trionics mod with an `async_enter_all` 2021-11-03 09:09:02 -04:00
Tyler Goodlet 1ad7e9bae2 Activate/focus original window after feed reset 2021-11-03 09:09:02 -04:00
Tyler Goodlet ceb1152f2c Expose dollar volume to fsp engine
It can now be declared inside an fsp config dict under the name
`dolla_vlm`. We still need to offer an engine control that zeros
the newest sample value instead of copying from the previous.

This also litters the engine code with `pyqtgraph` profiling to see if
we can improve startup times - likely it'll mean pre-allocating a small
fsp daemon cluster at startup.
2021-11-03 09:09:02 -04:00
Tyler Goodlet 7d8202a63c Fix shm index update race
There was a lingering issue where the fsp daemon would sync its shm
array with the source data and we'd set the start/end indices to the
same value. Under some races a reader would then read an empty `.array`
which it wasn't expecting. This fixes that as well as tidies up the
`ShmArray.push()` logic and adds a temporary check in `.array` for zero
length if the array hasn't been written yet.

We can now start removing read array length checks in consumer code
and hopefully no more races will show up.
2021-11-03 09:09:02 -04:00
Tyler Goodlet 4783dd7efa TOSQUASH fix subplots.values() cuckup 2021-11-03 09:09:02 -04:00
Tyler Goodlet 4057209900 Add first draft of "dollar volume" fsp 2021-11-03 09:09:02 -04:00
Tyler Goodlet dde8697f71 Autoscale the y-range for all linked charts 2021-11-03 09:09:02 -04:00
Tyler Goodlet 926ee78216 `graphics_name` is more explicit then `name` 2021-11-03 09:09:02 -04:00
Tyler Goodlet 49227b6e57 Process framed ticks by type in main graphics loop
We are already packing framed ticks in extended lists from
the `.data._sampling.uniform_rate_send()` task so the natural solution
to avoid needless graphics cycles for HFT-ish feeds (like binance) is
to unpack those frames and for most cases only update graphics with the
"latest" data per loop iteration. Unpacking in this way also lessens
nested-iterations per tick type.

Btw, this also effectively solves all remaining issues of fast tick
feeds over-triggering the graphics loop renders as long as the original
quote stream is throttled appropriately, usually to the local display
rate.

Relates to #183, #192

Dirty deats:
- drop all per-tick rate checks, they were always somewhat pointless
  when iterating a frame of ticks per render cycle XD.
- unpack tick frame into ticks per frame type, and last of each type;
  the lasts are used to update each part of the UI/graphics by class.
- only skip the label update if we can't retrieve the last from from a
  graphics source array; it seems `chart.update_curve_from_array()`
  already does a `len` check internally.
- add some draft commented code for tick type classes and a possible
  wire framed tick data structure.
- move `chart_maxmin()` range computer to module level, bind a chart to
  it with a `partial.`
- only check rate limits in main quote loop thus reporting actual
  overages
- add in commented logic for only updating the "last" cleared price from
  the most recent framed value if we want to eventually (right now seems
  like this is only relevant to ib and it's dark trades: `utrade`).
- rename `_clear_throttle_rate` -> `_quote_throttle_rate`, drop
  `_book_throttle_rate`.
2021-11-03 09:09:02 -04:00
Tyler Goodlet 3f39c2bdfa Update fsps and overlays inside main OHLC chart update loop 2021-11-03 09:09:02 -04:00
Tyler Goodlet 6897393715 Fix color passthrough, make overlays a `dict` 2021-11-03 09:09:02 -04:00
Tyler Goodlet 549ff4ef11 Factor FSP subplot update code into func
This is in prep toward doing fsp graphics updates from the main quotes
update loop (where OHLC and volume are done). Updating fsp output from
that task should, for the majority of cases, be fine presuming the
processing is derived from the quote stream as a source. Further,
calling an update function on each fsp subplot/overlay is of course
faster then a full task switch - which is how it currently works with
a separate stream for every fsp output. This also will let us delay
adding full `Feed` support around fsp streams for the moment while still
getting quote throttling dictated by the quote stream.

Going forward, We can still support a separate task/fsp stream for
updates as needed (ex. some kind of fast external data source that isn't
synced with price data) but it should be enabled as needed required by
the user.
2021-11-03 09:09:02 -04:00
Tyler Goodlet 6751840568 More prep for FSP feeds
The major change is moving the fsp "daemon" (more like wanna-be fspd)
endpoint to use the newer `tractor.Portal.open_context()` and
bi-directional streaming api.

There's a few other things in here too:
- make a helper for allocating single colume fsp shm arrays
- rename some some fsp related functions to be more explicit on their
  purposes
2021-11-03 09:09:02 -04:00
Tyler Goodlet d0bad2e98e Make `.paint()` method always the last 2021-11-03 09:09:02 -04:00
Tyler Goodlet f269fe9732 Always draw a last step line with px width=2 2021-11-03 09:09:02 -04:00
Tyler Goodlet c37e6e2440 Clean up some imports, shift around some commented code 2021-11-03 09:09:02 -04:00
Tyler Goodlet 95baca219d Resize volume yaxis to in view range 2021-11-03 09:09:02 -04:00
Tyler Goodlet 6a82b1802b Update vlm sticky 2021-11-03 09:09:02 -04:00
Tyler Goodlet d751707e06 Pass curve color through to y sticky label 2021-11-03 09:09:02 -04:00
Tyler Goodlet 063b860cd4 Re-order grays by "lightness" 2021-11-03 09:09:02 -04:00
Tyler Goodlet 94793c276f Add back in rsi 2021-11-03 09:09:02 -04:00
Tyler Goodlet baaf6abec6 Increase current bar's pen size by a px 2021-11-03 09:09:02 -04:00
Tyler Goodlet a1b455349f Add dynamic subplot sizing logic, passthrouh step curve colors 2021-11-03 09:09:02 -04:00
Tyler Goodlet 940fc5d2f0 Use filled rect for current step
A `QRectF` is easier to make and draw (i think?) so use that and fill it
on volume events for decent sleek real-time look. Adjust the step array
generator to allow for an endpoints flag. Comment and/or clean out all
the old path filling calls that gave us perf issues..
2021-11-03 09:09:02 -04:00
Tyler Goodlet 6dd42bcfb3 Add test logic for range based volume curve filling 2021-11-03 09:09:02 -04:00
Tyler Goodlet 3670184c18 Bleh, try a bunch of stuff for step filling
Turns out the performance of updating and refilling step curves > 1k ish
points is super slow :sadkek:. Disabling the fill basically returns
normal performance, so it seems maybe we'll stick with unfilled volume
"bars" for now. The other tricky bit is getting the path to extend and
fill which is particularly slow if you use the `QPainterPath.united()`
(what `+` set op does) operation which seems to require an entire redraw
of the curve each paint iteration. Removing the pixel buffer cache makes
things that much worse too..

One technique i tried was only setting a `._fill` flag when so many
datums are in view (< 1k as determined by the chart widget), and this
helps, but under high load (trade rates) you still see more lag then
without the fill which makes me say screw it and let's stick with
unfilled bars for now. Trying go to get performant filled curves will be
an exercise for an aspiring graphics eng :P
2021-11-03 09:09:02 -04:00
Tyler Goodlet d6d284fec5 Add last step updates and path fill support 2021-11-03 09:09:02 -04:00
Tyler Goodlet c82046d59b Drop rsi from display by default 2021-11-03 09:09:02 -04:00
Tyler Goodlet 230fb00777 Add todo for new view padding testing 2021-11-03 09:09:02 -04:00
Tyler Goodlet 168c1eb2a9 Add volume plot as default
Toss in support for a "step mode" curve (unfinished atm) and use it to
plot from the `volume` field of the ohlcv shm array (if available).

changes to make it happen,
- dynamically generate the fsp sidepane form from an input config `dict`
  |_ dynamically generate the underlying `pydantic` model
  |_
- add a "volume checker" helper func that inspects the shm array
- toss in sidepane resize calls to avoid race where the ohlcv array
  is plotted too slowly compared to the volume and the chart somehow
  doesn't show..
- drop duplicate rsi2 cruft (previously used to test plots of the shm
  data)
2021-11-03 09:09:02 -04:00
Tyler Goodlet 699e670363 Invert 'c' (connection) array
In latest `pyqtgraph` it seems there's a discrepancy
since `function.arrayToQPath()` was reworked and now
we need to *not* connect the last point for each bar.
2021-11-03 09:09:02 -04:00
Tyler Goodlet 1e20b1d4dd Draft 'step' curve; couldn't get pg builtin to work 2021-11-03 09:09:02 -04:00
Tyler Goodlet df14ff052a Draft tina install section 2021-11-03 09:09:02 -04:00
Tyler Goodlet 8d34a2f13a Toss in references step mode impl 2021-11-03 09:09:02 -04:00
Tyler Goodlet 8d44706588 Add some type annots around pp msg handling 2021-11-03 08:58:44 -04:00
Tyler Goodlet cdf9f740f7 Expect accounts as tuple, don't start rt pnl on no live pp 2021-11-03 08:58:44 -04:00