Commit Graph

3220 Commits (3b773c667bb287509e0f637710d4ebae43858711)

Author SHA1 Message Date
Tyler Goodlet 3b773c667b Use (modern) literal type annots in view code 2023-02-02 16:11:32 -05:00
Tyler Goodlet aa4a48cb98 Drop x-range query from `ChartPlotWidget.maxmin()`
Move the `Viz.datums_range()` call into `Viz.maxmin()` itself thus
minimizing the chart `.maxmin()` method to an ultra light wrapper around
the viz call. Also move all profiling into the `Viz` method.

Adjust `Viz.maxmin()` to return both the (rounded) x-range values which
correspond to the range containing the y-domain min and max so that
it can be used for up and coming overlay group maxmin calcs.
2023-02-02 16:11:32 -05:00
Tyler Goodlet cec5ef1d26 Drop multi mxmn from display mod 2023-02-02 16:11:32 -05:00
Tyler Goodlet 1f6ec98790 Only handle hist discrepancies when market is open
We obviously don't want to be debugging a sample-index issue if/when the
market for the asset is closed (since we'll be guaranteed to have
a mismatch, lul). Pass in the `feed_is_live: trio.Event` throughout the
backfilling routines to allow first checking for the live feed being active
so as to avoid breakpointing on false +ves. Also, add a detailed warning
log message for when *actually* investigating a mismatch.
2023-02-02 16:11:31 -05:00
Tyler Goodlet 702a13a278 Passthrough `tractor` kwargs directly 2023-02-02 16:11:31 -05:00
Tyler Goodlet 1aa7b937b9 Fix `open_trade_ledger()` enter value type annot 2023-02-02 16:11:31 -05:00
Tyler Goodlet 81b6cb17de Comment bad x-range bp for now 2023-02-02 16:11:31 -05:00
Tyler Goodlet 36f1edead0 Breakpoint bad (-ve or too large) x-ranges to m4
This should never really happen but when it does it appears to be a race
with writing startup pre-graphics-formatter array data where we get
`x_end` epoch value subtracting some really small offset value (like
`-/+0.5`) or the opposite where the `x_start` is epoch and `x_end` is
small.

This adds a warning msg and `breakpoint()` as well as guards around the
entire code downsampling code path so that when resumed the downsampling
cycle should just be skipped and avoid a crash.
2023-02-02 16:11:31 -05:00
Tyler Goodlet e1e52e9130 Downthrottle to 16Hz on multi-feed charts 2023-02-02 16:11:31 -05:00
Tyler Goodlet 3b15e76285 Attempt to keep selected item highlighted
This attempt was unsuccessful since trying to (re)select the last
highlighted item on both an "enter" or "click" of that item causes
a hang and then segfault in `Qt`; no clue why..

Adds a `keep_current_item_selected: bool` flag to
`CompleterView.show_cache_entries()` but using it seems to always cause
a hang and crash; we keep all potential use spots commented for now
obviously to avoid this. Also included is a bunch of tidying to logic
blocks in the kb-control loop for readability.
2023-02-02 16:11:31 -05:00
Tyler Goodlet c15a2babc1 Lol, pull hist chart from the display state 2023-02-02 16:11:31 -05:00
Tyler Goodlet 171e5da9f9 Make (cache) search-results a `set` and avoid overlay duplicate entries 2023-02-02 16:11:31 -05:00
Tyler Goodlet 92a609275b Take outer-interval values in `Viz.datums_range()` 2023-02-02 16:11:31 -05:00
Tyler Goodlet 07ee244ca9 Clean a buncha cruft from render mod 2023-02-02 16:11:31 -05:00
Tyler Goodlet 2122c7cbd9 Handle last-in-view time slicing edge case
Whenever the last datum is in view `slice_from_time()` need to always
spec the final array index (i.e. the len - 1 value we set as
`read_i_max`) to avoid a uniform-step arithmetic error where gaps in the
underlying time series causes an index that's too low to be returned.
2023-02-02 16:11:31 -05:00
Tyler Goodlet 888ae26d82 Drop bp blocks from formatters mod 2023-02-02 16:11:31 -05:00
Tyler Goodlet 61d1dd3306 Fix query-mode cursor labels to work with epoch-indexing 2023-02-02 16:11:31 -05:00
Tyler Goodlet 73f1e362bc Use `open_sample_stream()` in display loop 2023-02-02 16:11:31 -05:00
Tyler Goodlet 7208b3a2d2 Drop `Flume.index_stream()`, `._sampling.open_sample_stream()` replaces it 2023-02-02 16:11:31 -05:00
Tyler Goodlet ba8284e73b Add back another panes resize during startup 2023-02-02 16:11:31 -05:00
Tyler Goodlet ad1c9d02fa Always zero-on-step $vlm 2023-02-02 16:11:31 -05:00
Tyler Goodlet bb2d451a37 Mouse interaction tweaks
- adjust zoom focal to be min of the view-right coord or the right-most
  point on the flow graphic in view and drop all the legacy l1-in-view
  focal point cruft.
- flip to not auto-scaling overlays by default.
- change the `._set_yrange()` margin to `0.09`.
- drop `use_vr: bool` usage.
2023-02-02 16:11:31 -05:00
Tyler Goodlet 36c93e8dfe Modernize optional path variable type annots 2023-02-02 16:11:31 -05:00
Tyler Goodlet d68fd8662c Use `Curve.x_last()` for zoom focal point 2023-02-02 16:11:31 -05:00
Tyler Goodlet 58a82e7a3f Make `PlotItemOverlay` add items inwards->out
Before this axes were being stacked from the outside in (for `'right'`
and 'bottom'` axes) which is somewhat non-intuitive for an `.append()`
operation. As such this change makes a symbol list stack a set of
`'right'` axes from left-to-right.

Details:
- rename `ComposeGridLayout.items` -> `.pitems`
- return `(int, list[AxisItem])` pairs from `.insert/append_plotitem()`
  and the down stream `PlotItemOverlay.add_plotitem()`.
- drop `PlotItemOverlay.overlays` and add it back as `@property` around
  the underlying `.layout.pitems`.
2023-02-02 16:11:31 -05:00
Tyler Goodlet 5f5843613e Drop the legacy `relayed_from` cruft from our view box 2023-02-02 16:11:31 -05:00
Tyler Goodlet 42810056c3 Do full marker width after line 2023-02-02 16:00:39 -05:00
Tyler Goodlet c46f0c4a0a Fix indent level 2023-02-02 16:00:39 -05:00
Tyler Goodlet a2b4276cdf Make $vlm axis color same as clears 2023-02-02 16:00:39 -05:00
Tyler Goodlet bf0810ef4f Correctly load order mode for first fqsn in overlay set 2023-02-02 16:00:39 -05:00
Tyler Goodlet 404a34a049 Move $vlm y-axis to LHS 2023-02-02 16:00:39 -05:00
Tyler Goodlet 6b35484bce Better index step value scanning by checking with our expected set 2023-02-02 16:00:39 -05:00
Tyler Goodlet 3e754342de Repair auto-y-ranging to always include L1 spread
Goes back to always adjusting the y-axis range to include the L1 spread
and clearing label in view whenever the last datum is also in view,
previously this was broken after reworking the display loop for
multi-feeds.

Drops a bunch of old commented tick looping cruft from before we started
using tick-type framing. Also adds more stringent guards for ignoring
but error logging quote values that are more then 25% out of range; it
seems particularly our `ib` feed has some issues with strange `price`
values that are way off here and there?
2023-02-02 16:00:39 -05:00
Tyler Goodlet a06ff2fd75 Use static `L1Label._x_br_offset` as l1 label length 2023-02-02 16:00:39 -05:00
Tyler Goodlet 5b6240d167 Drop l1 labels attr from chart widget 2023-02-02 16:00:39 -05:00
Tyler Goodlet 846421bb28 Handle empty `indexes` input edge case.. 2023-02-02 16:00:39 -05:00
Tyler Goodlet 160c177ece TOSQUASH: 84f19308 (l1 rework) 2023-02-02 16:00:39 -05:00
Tyler Goodlet 40e6b5935d Set cursor label color to "bracket" 2023-02-02 16:00:39 -05:00
Tyler Goodlet 5ba472176e Don't set y-axis label colors to curve's, use the default from global scheme 2023-02-02 16:00:39 -05:00
Tyler Goodlet 5c853395bb Simplify L1 labels for multicharts
Instead of having the l1 lines be inside the view space, move them to be
inside their respective axis (with only a 16 unit portion inside the
view) such that the clear price label can overlay with them nicely
without obscuring; this is much better suited to multiple adjacent
y-axes and in general is simpler and less noisy.

Further `L1Labels` + `LevelLabel` style tweaks:
- adjust `.rect` positioning to be "right" (i.e. inside the parent
  y-axis) with a slight 16 unit shift toward the viewbox (using the new
  `._x_br_offset`) to allow seeing each level label's line even when the
  clearing price label is positioned at that same level.
- add a newline's worth of vertical space to each of the bid/ask labels
  so that L1 labels' text content isn't ever obscured by the clear price
  label.
- set a low (10) z-value to ensure l1 labels are always placed
  underneath the clear price label.
- always fill the label rect with the chosen background color.
- make labels fully opaque so as to always make them hide the parent
  axes' `.tickStrings()` contents.
- make default color the "default" from the global scheme.
- drop the "price" part from the l1 label text contents, just show the
  book-queue's amount (in dst asset's units, aka the potential clearing vlm).
2023-02-02 16:00:39 -05:00
Tyler Goodlet b7619e5ea4 Move old label sizing cruft to label mod 2023-02-02 16:00:39 -05:00
Tyler Goodlet ead2e1ed1f Make `FlowGraphic.x_last()` be optionally `None`
In the case where the last-datum-graphic hasn't been created yet, simply
return a `None` from this method so the caller can choose to ignore the
output. Further, drop `.px_width()` since it makes more sense defined on
`Viz` as well as the previously commented `BarItems.x_uppx()` method.
Also, don't round the `.x_uppx()` output since it can then be used when
< 1 to do x-domain scaling during high zoom usage.
2023-02-02 15:54:39 -05:00
Tyler Goodlet de3fd9edbe Add a parent-type for graphics: `FlowGraphic`
Factor some common methods into the parent type:
- `.x_uppx()` for reading the horizontal units-per-pixel.
- `.x_last()` for reading the "closest to y-axis" last datum coordinate
  for zooming "around" during mouse interaction.
- `.px_width()` for computing the max width of any curve in view in
  pixels.

Adjust all previous derived `pg.GraphicsObject` child types to now
inherit from this new parent and in particular enable proper `.x_uppx()`
support to `BarItems`.
2023-02-02 15:54:39 -05:00
Tyler Goodlet e9201c2bdf Drop `._index_step` from formatters and instead defer to `Viz.index_step()` 2023-02-02 15:29:56 -05:00
Tyler Goodlet d7b9c4044e Further fixes `Viz.default_view()` and `.index_step()`
Use proper uppx scaling when either of scaling the data to the x-domain
index-range or when the uppx is < 1 (now that we support it) such that
both the fast and slow chart always appropriately scale and offset to
the y-axis with the last datum graphic just adjacent to the order line
arrow markers.

Further this fixes the `.index_step()` calc to use the "earliest" 16
values to compute the expected sample step diff since the last set often
contained gaps due to start up race conditions and generated
unexpected/incorrect output.

Further this drops the `.curve_width_pxs()` method and replaces it with
`.px_width()`, taken from the graphics object API and instead returns
the pixel account for the whole view width instead of the
x-domain-data-range within the view.
2023-02-02 15:29:56 -05:00
Tyler Goodlet 0deee65318 Drop edge case from `slice_from_time()`
Doesn't seem like we really need to handle the situation where the start
or stop input time stamps are outside the index range of the data since
the new binary search handling via `numpy.searchsorted()` covers this
case at minimal runtime cost and with an equally correct output. Allows
us to drop some other indexing endpoint internal variables as well.
2023-02-02 15:29:56 -05:00
Tyler Goodlet 4c92575cb2 Use left-style index search on RHS scan as well 2023-02-02 15:29:56 -05:00
Tyler Goodlet 9a65cbbf5c Just-offset-from-arrow-marker on slow chart
We want the fast and slow chart to behave the same on calls to
`Viz.default_view()` so adjust the offset calc to make both work:
- just offset by the line len regardless of step / uppx
- add back the `should_line: bool` output from `render_bar_items()` (and
  use it to set a new `ds_allowed: bool` guard variable) so that we can
  bypass calling the m4 downsampler unless the bars have been switched
  to the interpolation line graphic (which we normally required before
  any downsampling of OHLC graphics data).

Further, this drops use of the `use_vr: bool` flag from all rendering
since we pretty much always use it by default.
2023-02-02 15:29:56 -05:00
Tyler Goodlet a50a09ff5c Fix history array name 2023-02-02 15:06:32 -05:00
Tyler Goodlet d4f8bb6545 Fix x-axis labelling when using an epoch domain
Previously with array-int indexing we had to map the input x-domain
"indexes" passed to `DynamicDateAxis._indexes_to_timestr()`. In the
epoch-time indexing case we obviously don't need to lookup time stamps
from the underlying shm array and can instead just cast to `int` and
relay the values verbatim.

Further, this patch includes some style adjustments to `AxisLabel` to
better enable multi-feed chart overlays by avoiding L1 label clutter
when multiple y-axes are stacked adjacent:
- adjust the `Axis` typical max string to include a couple spaces suffix
 providing for a bit more margin between side-by-side y-axes.
- make the default label (fill) color the "default" from the global
 color scheme and drop it's opacity to .9
- add some new label placement options and use them in the
 `.boundingRect()` method:
 * `._x/y_br_offset` for relatively shifting the overall label relative
   to it's parent axis.
 * `._y_txt_h_scaling` for increasing the bounding rect's height
   without including more whitespace in the label's text content.
- ensure labels have a high z-value such that by default they are always
 placed "on top" such that when we adjust the l1 labels they can be set
 to a lower value and thus never obscure the last-price label.
2023-02-02 15:06:32 -05:00