Commit Graph

1115 Commits (725909a94ccf07537f68a32e335422cf6ffb5877)

Author SHA1 Message Date
Tyler Goodlet 423fc8332c Allocate pnl calc subtask inside order mode machinery 2021-09-06 09:28:10 -04:00
Tyler Goodlet fd982df7a9 Add `Allocator.slots_used()` helper calc method 2021-09-06 09:28:10 -04:00
Tyler Goodlet abc5c382ae Use a better exit slot heuristic
When exiting a pp toward net-zero, we may sometimes run into the issue
of having a "fractional slot" worth of units in allocator limit terms.
This is further nuanced by live orders which are submitted above the
current clearing price which get allocated a size (based on that staged
but non-cleared price) according to their limit size unit which can be
calculated to be less then the size that would have been allocated at
the actual clearing price. In the short term cope with this discrepancy
by simply using a "slot and a half" as the decision point of whether to
exit a slot's worth or the remaining pp's worth of units. In other words
if you can exit 1.5x a slot's worth or less, exit the remaining pp,
otherwise exit a slot's worth. This is a stop gap until we have a better
solution to limiting staged orders to (some range around) the currently
computed clear-able price.
2021-09-06 09:28:10 -04:00
Tyler Goodlet 8c7e4c0ce9 Add real-time pnl calc and display in status pane 2021-09-06 09:28:10 -04:00
Tyler Goodlet 3dd98ff56a Fix inverval logic, lel 2021-09-06 09:28:10 -04:00
Tyler Goodlet dfe4ca948a Flip to `open_order_mode()` as ctx mngr
We need a subtask to compute the current pp PnL in real-time but really
only if a pp exists - a spawnable subtask would be ideal for this. Stage
a tick streaming task using a stream bcaster; no actual pnl calc yet.

Since we're going to need subtasks anyway might as well stick the order
mode UI processing loop in a task as well and then just give the whole
thing a ctx mngr api. This'll probably be handy for when we have
auto-strats that need to dynamically use the mode's api as well.

Oh, and move the time -> index mapper to a chart method for now.
2021-09-06 09:28:10 -04:00
Tyler Goodlet ee377e6d6b "Back load" exits, always abs the order size, `SettingsPane` is better name 2021-09-06 09:28:10 -04:00
Tyler Goodlet 942cbc2743 `x:` seems clean enough for a "step symbol" 2021-09-06 09:28:10 -04:00
Tyler Goodlet 91fb451696 Fix marker-off-screen-placement for down arrows 2021-09-06 09:28:10 -04:00
Tyler Goodlet 1ab23dcba3 Solve the short pps issue with nice `abs()` 2021-09-06 09:28:10 -04:00
Tyler Goodlet 5103204853 Trigger order allocation at stage/creation time 2021-09-06 09:28:10 -04:00
Tyler Goodlet d9d65bd71a Pass in labl fields as kwargs 2021-09-06 09:28:10 -04:00
Tyler Goodlet 07aafac106 Breakout position line method to module func 2021-09-06 09:28:10 -04:00
Tyler Goodlet a28c3f9eba Handle status-group-closed-too-soon bug 2021-09-06 09:28:10 -04:00
Tyler Goodlet 5b923ae577 Update status UI in `.on_ui_settings_change()`
Use this method to go through writing all allocator parameters and then
reading all changes back into the order mode pane including updating the
limit and step labels by the fill bar.

Machinery changes:
- add `.limit()` and `.step_sizes()` methods to the allocator to
  provide the appropriate data depending on the pp limit size unit (eg.
  currency vs. units)
- humanize the label display text such that you have nice suffixes and
  a fixed precision
- tweak the fill bar labels to be simpler since the values are now
  humanized
- expect `.on_ui_settings_change()` to be called for every slots hotkey
  tweak
2021-09-06 09:28:10 -04:00
Tyler Goodlet 3c7bf4310c Just simple update on a slots setting change 2021-09-06 09:28:10 -04:00
Tyler Goodlet a006ffce80 Update pane status on position updates from ems
Turned out to be pretty simple, on every pp update just recompute
the proportion of slots used based on the limit size units.
Don't assign the allocator callback method for alert lines since
there's no size to generate. Move from-existing-pp calculations
into the order pane itself.
2021-09-06 09:28:10 -04:00
Tyler Goodlet 37f5648883 Clarify comment 2021-09-06 09:28:10 -04:00
Tyler Goodlet c4add92422 Move widget-style "format label" to our label mod
Might as well group similar components..
Drop form widget user input update logic, instead expect caller to
provide an async handler.
2021-09-06 09:28:10 -04:00
Tyler Goodlet 16c1f727c7 Finally, correct "next size" allocation logic
Handling the edge cases in this was "fun", namely:
- entering with less then a slot's worth of units to purchase
  before hitting the pp limit or, less then a slots worth when exiting
  toward a net-zero position.
- round pp msg updates using the symbol tick and lot size digits to
  avoid super small (1e-30 lel) positions lingering in the ems (happens
  moreso with the paper engine).
- don't expect the next size method to be called for alert level changes
2021-09-06 09:28:10 -04:00
Tyler Goodlet 80b01ed8cf Create a formattable label, increase fill bar label sizes 2021-09-06 09:28:10 -04:00
Tyler Goodlet c4d5ca008e Add a `ChartnPane` composite for every symbol 2021-09-06 09:28:10 -04:00
Tyler Goodlet 206af0d575 Port to order pane apis 2021-09-06 09:28:10 -04:00
Tyler Goodlet bc2f4186fd Turn off debug prints 2021-09-06 09:28:10 -04:00
Tyler Goodlet b09d0d7129 Add an a pane composite and throw ui update methods on it 2021-09-06 09:28:10 -04:00
Tyler Goodlet 2b8c3f69b1 Return quick on unmatched event type 2021-09-06 09:28:10 -04:00
Tyler Goodlet 58afe07a88 Move `Allocator` to module level, `OrderPane` over to pp mod 2021-09-06 09:28:10 -04:00
Tyler Goodlet dfb9c55944 Compute symbol digits at creation time
Add a new factory func `mk_symbol()` to create the initial
instance at feed creation time.
2021-09-06 09:28:10 -04:00
Tyler Goodlet 6744f59c58 Add numberline hotkeys for slots config 2021-09-06 09:28:10 -04:00
Tyler Goodlet 07b20a5e68 Fill out allocator calcs for $size and #units, draft pp ui tracking 2021-09-06 09:28:10 -04:00
Tyler Goodlet 17fbe6a6ab Start drafting out alloctor settings per asset type 2021-09-06 09:28:10 -04:00
Tyler Goodlet be956c4031 Move fill status bar to module level, draft out order pane composite 2021-09-06 09:28:10 -04:00
Tyler Goodlet 7192264818 Position pane UI improvements
- pass label text and field widget key separately
- fix fill status bar slot sizing logic (once and for all) and
  create a new type that allows generating / resizing the bar's
  size / values with a `.set_slots()` method
- pull account names from allocator attr
- set `.fill_bar` as the fill status bar on the form for now
2021-09-06 09:28:10 -04:00
Tyler Goodlet a1d4e61fc2 Port chart code to new subsys apis
- make `GodWidget.load_symbol()` async
- track loaded feeds with a private `._feeds` dict
- add methods to pause/resume all feeds when chart is (un)focussed
- add some commented test code for 2nd feed consumer task and rsi2 fsp
- load async signal handler for view clicking
2021-09-06 09:28:10 -04:00
Tyler Goodlet 1cb311602c Revert commenting bounding rect fix.. 2021-09-06 09:28:10 -04:00
Tyler Goodlet 873d531521 Vastly simplify order mode line management
- generate lines from staged `Order` msgs
- apply level update callback to each order that dynamically
  updates the order size from the allocator calcs
- pass order msg instances to the ems client for submission
- update order size on line moves
- add `Order` msg and `Symbol` refs to each dialog
2021-09-06 09:28:10 -04:00
Tyler Goodlet ccad7cfc2a Allocate order size using lots digits calc 2021-09-06 09:28:10 -04:00
Tyler Goodlet 69a1f5e8a8 Add line copy func, drop old markers cruft 2021-09-06 09:28:10 -04:00
Tyler Goodlet 68e23fc567 Simplify line editor to track lines instead of create them 2021-09-06 09:28:10 -04:00
Tyler Goodlet 97ebd03508 Avoid position resets on label paint 2021-09-06 09:28:10 -04:00
Tyler Goodlet 92d6b19777 Rejig order line creation / config
In an effort to simplify line creation and management from an order
mode here's a slew of changes:
- use our new ``LevelMarker`` for order lines and fully drop usage
 of the original marker implementation stuff from `pg.InfiniteLine`
- add a left side label which shows the instrument's "units" value
  - the most fundamental unit for the "size" of the order
- allow passing in an optional `marker_size: str` so that `action: str`
  doesn't necessarily have to be passed (eg. when copying from an
  existing line)
- change a couple of internal line config options to be public attrs
  which can now be configured dynamically in real-time (since they're
  all `bool` anyway):
  * `hl_on_hover` -> `highlight_on_hover`
  * `_always_show_labels` -> `always_show_labels`
- `LevelLine.set_level()` now only sets the position if it was **not**
  called from the position changed signal (which would be redundant)
2021-09-06 09:28:10 -04:00
Tyler Goodlet c37ce664f5 Uggh, don't override click handler on view; pg has it's own mouse events.. 2021-09-06 09:28:10 -04:00
Tyler Goodlet f2376f90ad Support "next to be focussed" args to async form handlers 2021-09-06 09:28:10 -04:00
Tyler Goodlet ac35e26d9a Make completer view click handler async 2021-09-06 09:28:10 -04:00
Tyler Goodlet 4f4f9f66b4 Move view mode mouse click into async handler 2021-09-06 09:28:10 -04:00
Tyler Goodlet 5ce6dcf3cb Properly capture graphics scene mouse events 2021-09-06 09:28:10 -04:00
Tyler Goodlet 3ddd4bc2c2 Add a private level change cb, fix marker hidingn 2021-09-06 09:28:10 -04:00
Tyler Goodlet 7fc7f72643 Add mouse event and signal proxying support 2021-09-06 09:28:10 -04:00
Tyler Goodlet cebfe9dca3 Split up form creation and input handling, require a `.model` 2021-09-06 09:28:10 -04:00
Tyler Goodlet 1d7300577e Drop godwidget ref to `FieldsForm` 2021-09-06 09:28:10 -04:00
Tyler Goodlet 7295ceb51a Pass labels to form builder, toy with broadcast consumer task 2021-09-06 09:28:10 -04:00
Tyler Goodlet a40205728f Position tracker is passed at init 2021-09-06 09:28:10 -04:00
Tyler Goodlet 4ddfea654b Lol, initial size calcs on order line update 2021-09-06 09:28:10 -04:00
Tyler Goodlet 5528e80c22 Basic allocator state updates from pp sidepane 2021-09-06 09:28:10 -04:00
Tyler Goodlet ce7eb75ada Validate allocator assignments with pydantic 2021-09-06 09:28:10 -04:00
Tyler Goodlet a7920689b6 Add reference gist for Qt guest mode stuff 2021-09-06 09:28:10 -04:00
Tyler Goodlet a3d1a71017 Unpack keyboard events into an explicit msg model 2021-09-06 09:28:10 -04:00
Tyler Goodlet b302707bf3 Order mode docs/comments updates 2021-09-06 09:28:10 -04:00
Tyler Goodlet c982634839 Add draft `pydantic`-`QWidget` ORM system
Move all the ``pydantic`` finagling to an `_orm.py` and
just keep an `Allocator` as the backing model for our pp controls
in the position module. This all needs to be tied together in some sane
with with facility for multiple symbols/streams per chart for when we
get to charting-trading aggregate feeds.
2021-09-06 09:28:10 -04:00
Tyler Goodlet 2d1deb7ab7 Drop uneeded `typing` types for py3.9+ 2021-09-06 09:28:10 -04:00
Tyler Goodlet b79b9c8c41 "last" and "current" are better names 2021-09-06 09:28:10 -04:00
Tyler Goodlet deedcb2c4a Flip to view mode on field exit key combos 2021-09-06 09:28:10 -04:00
Tyler Goodlet 5f7c9a16fb Make god widget focus to chart / "view mode" 2021-09-06 09:28:10 -04:00
Tyler Goodlet 70a283e336 Call god what it is 2021-09-06 09:28:10 -04:00
Tyler Goodlet d1f9273418 Use lightest default for pp line 2021-09-06 09:28:10 -04:00
Tyler Goodlet 8eaf2a1afe Allocate minority to OHLC chart since 2 fsps by default is likely 2021-09-06 09:28:10 -04:00
Tyler Goodlet 75f50f4b7e "bracket"-ify fills bar + labels and try to evenly space the pane sections 2021-09-06 09:28:10 -04:00
Tyler Goodlet 1fc9047746 Drop old pp config widget inserts; use new pane layout func 2021-09-06 09:28:10 -04:00
Tyler Goodlet 3e237124ec Break health bar and pane layout into separate routines 2021-09-06 09:28:10 -04:00
Tyler Goodlet b0ab240f9e Match search bar margins to pp pane 2021-09-06 09:28:10 -04:00
Tyler Goodlet 41b79d0f9a Fix pp pane to show on symbol switches 2021-09-06 09:28:10 -04:00
Tyler Goodlet e005c8b345 Use `QFormLayout` instead of rolling our own; add pp and feed status sections 2021-09-06 09:28:10 -04:00
Tyler Goodlet 318f3b45c5 Just always use a lambda ; it's innocuous 2021-09-06 09:28:10 -04:00
Tyler Goodlet b6c68e381d Move status back to gunmetal 2021-09-06 09:28:10 -04:00
Tyler Goodlet 0ffbb15bc7 Add a "health bar" factor B) 2021-09-06 09:28:10 -04:00
Tyler Goodlet 63138ccbf4 WIP add a lambda-QFrame to get per chart sidpanes for each linkedsplits row 2021-09-06 09:28:10 -04:00
Tyler Goodlet 825680b8c6 Support (sub)plot names separate from data array keys 2021-09-06 09:28:10 -04:00
Tyler Goodlet 65158b8c64 Add position status (health) bar math for sizing and styling 2021-09-06 09:28:10 -04:00
Tyler Goodlet 3eabe93d54 Always hide contents labels at startup 2021-09-06 09:28:10 -04:00
Tyler Goodlet 21d1e17c6a Better search label styling 2021-09-06 09:28:10 -04:00
Tyler Goodlet 30ac32da55 Add ctrl-p as "pane toggle" 2021-09-06 09:28:10 -04:00
Tyler Goodlet 0ce356f5d9 Make field form a vertical layout, add formatted style sheets 2021-09-06 09:28:10 -04:00
Tyler Goodlet 1ae39c963a Allocate pp config form alongside god widget as a side-pane 2021-09-06 09:28:10 -04:00
Tyler Goodlet d022a105bb Start using a small schema for generating forms 2021-09-06 09:28:10 -04:00
Tyler Goodlet 011f36fc3c WIP add input handler for each widget in the form 2021-09-06 09:28:10 -04:00
Tyler Goodlet 43b769a136 Support opening a handler on a collection of widgets 2021-09-06 09:28:10 -04:00
Tyler Goodlet d1244608bd Use font scaled delegate from forms module 2021-09-06 09:28:10 -04:00
Tyler Goodlet 5ec00ee762 Size view delegate from monkey patched parent 2021-09-06 09:28:10 -04:00
Tyler Goodlet 940aafe1be OMG Qt view item sizing is sooo dumb.. 2021-09-06 09:28:10 -04:00
Tyler Goodlet 29ea91553d Use "slots" as name for "number of entries" 2021-09-06 09:28:10 -04:00
Tyler Goodlet c18cf4f0bf Mock up initial selection field and progress bar 2021-09-06 09:28:10 -04:00
Tyler Goodlet 7e2e316cbf "Forms" is a better module name 2021-09-06 09:28:10 -04:00
Tyler Goodlet a2b61a67b5 Allocate pp config with new actory, drop old line update method 2021-09-06 09:28:10 -04:00
Tyler Goodlet e8e9e20124 Use mode name setter throughout 2021-09-06 09:28:10 -04:00
Tyler Goodlet 00ff0e96cd Add mode name setter 2021-09-06 09:28:10 -04:00
Tyler Goodlet 97f4d9bc2d Drop stale anchors 2021-09-06 09:28:10 -04:00
Tyler Goodlet 1ed7be7c00 Move font-aware line edit to "text entry" mod 2021-09-06 09:28:10 -04:00
Tyler Goodlet 8d65a55f9e Toggle pp config widget on order mode active 2021-09-06 09:28:10 -04:00
Tyler Goodlet 64ccc79a33 Change order label format to color:count 2021-09-06 09:28:10 -04:00
Tyler Goodlet 0f176425b1 First WIP of pp config entry widget on status bar 2021-09-06 09:28:10 -04:00
Tyler Goodlet c4a9d53306 Use one marker, drop old anchors, add graphics update on marker paint 2021-09-06 09:28:10 -04:00
Tyler Goodlet 4d5afc2e25 Add dpi font scale getter 2021-09-06 09:28:10 -04:00
Tyler Goodlet 4ce6edae70 Skip line stage when chart not yet initialized 2021-09-06 09:28:10 -04:00
Tyler Goodlet da3f149646 Add a tight pp anchor 2021-09-06 09:28:10 -04:00
Tyler Goodlet 5473c9848d Start a "text entry widgets" module 2021-09-06 09:28:10 -04:00
Tyler Goodlet 3fb0e02788 Factor font-size-based labeled-line edit into generics widget 2021-09-06 09:28:10 -04:00
Tyler Goodlet 5fb00f726e Add support for a marker "on paint" callback 2021-09-06 09:28:10 -04:00
Tyler Goodlet d283872eb6 Add a scene bounding rect getter to our label 2021-09-06 09:28:10 -04:00
Tyler Goodlet 5144492534 Just warn for now on unknown dialogs 2021-09-06 09:28:10 -04:00
Tyler Goodlet 568dd488b5 Move level marker to annotate module 2021-09-06 09:28:10 -04:00
Tyler Goodlet dc279a48c2 Move DPI / screen get logging to debug; reduce cli noise 2021-09-06 09:28:10 -04:00
Tyler Goodlet 7367ed5464 Drop all `ChartPlotWidget._lc` remap to `.linked 2021-09-06 09:28:10 -04:00
Tyler Goodlet c8b14e9445 Pass position msg to tracker, append fill msgs 2021-09-06 09:28:10 -04:00
Tyler Goodlet 3b0b7475c8 Fixup commented view locate call 2021-09-06 09:28:10 -04:00
Tyler Goodlet 1a5770c127 Only hide position (extra) info on order mode exit 2021-09-06 09:28:10 -04:00
Tyler Goodlet 1abbd095ec Fix oustanding label bugs, make `.update()` accept a position msg 2021-09-06 09:28:10 -04:00
Tyler Goodlet 826c4408ea Stop pulling lot size precision from symbol for now in the UI 2021-09-06 09:28:10 -04:00
Tyler Goodlet d3457cd423 Drop position-line factory from lines module, add endpoint getter 2021-09-06 09:28:10 -04:00
Tyler Goodlet 444421bddf Make our default label opaque (since it's normally just text) 2021-09-06 09:28:10 -04:00
Tyler Goodlet 565380368a Increase cursor debounce delay slightly? 2021-09-06 09:28:10 -04:00
Tyler Goodlet f06e05c9cb Switch mode to touch `.pp` 2021-09-06 09:28:10 -04:00
Tyler Goodlet 71eef1b7fd Add `.view` property, throttle to 50Hz by default 2021-09-06 09:28:10 -04:00
Tyler Goodlet 20a8045127 Add a left-side-of-marker orientation 2021-09-06 09:28:10 -04:00
Tyler Goodlet 74d6dd5957 Move position tracking to new module
It was becoming too much with all the labels and markers and lines..
Might as well package it all together instead of cramming it in the
order mode loop, chief.

The techincal summary,
- move `_lines.position_line()` -> `PositionInfo.position_line()`.
- slap a `.pp` on the order mode instance which *is* a `PositionInfo`
- drop the position info info label for now (let's see what users want
  eventually but for now let's keep it super minimal).
- add a `LevelMarker` type to replace the old `LevelLine` internal
  marker system (includes ability to change the style and level on the
  fly).
- change `_annotate.mk_marker()` -> `mk_maker_path()` and expect caller
  to wrap in a `QGraphicsPathItem` if needed.
2021-09-06 09:28:10 -04:00
Tyler Goodlet afcb323c49 Use `QGraphicsPathItem` for marker, add line hide method 2021-09-06 09:28:10 -04:00
Tyler Goodlet 45d6682ae0 Update entry count on position msgs, draft a composite position info type 2021-09-06 09:28:10 -04:00
Tyler Goodlet ff6ac6ba4f Add label location description param for graphics path anchor 2021-09-06 09:28:10 -04:00
Tyler Goodlet d21112dcd7 Drop the open ctx mng; add wip pp label 2021-09-06 09:28:10 -04:00
Tyler Goodlet 69091a894f Move marker label anchor to anchors mod 2021-09-06 09:28:10 -04:00
Tyler Goodlet e58a980786 Move all anchor funcs to new mod 2021-09-06 09:28:10 -04:00
Tyler Goodlet 94d3f67707 Move marker level-line-positioning anchor to new module 2021-09-06 09:28:10 -04:00
Tyler Goodlet 3aab6d67e9 Use label anchor 2021-09-06 09:28:10 -04:00
Tyler Goodlet 791fd23524 Remove `LevelLine.add_label()`, add dynamic pp marker label 2021-09-06 09:28:10 -04:00
Tyler Goodlet 62517c1662 Add user defined anchor support to label; reorg mod 2021-09-06 09:28:10 -04:00
Tyler Goodlet 0dc18598fb Add a client side order dialog type for tracking flows in the UI 2021-09-05 13:59:40 -04:00
Tyler Goodlet 62dd327ef3 Drop `_graphics` subpkg; flat is better then nested 2021-09-05 13:59:40 -04:00
Tyler Goodlet 1c59a01a78 Make subplot proportion slightly larger 2021-09-05 13:59:40 -04:00
Tyler Goodlet fd5c72f97d WIP position market offscreen nav 2021-09-05 13:59:40 -04:00
Conrad Steenberg afafe56ec0 Remove List typing 2021-07-21 18:30:50 -07:00
Conrad Steenberg c830183073 More fixes, some reversions 2021-07-21 18:26:24 -07:00
Conrad Steenberg 3912b22b41 Fix a few QtGui -> QtWidget issues 2021-07-21 18:26:24 -07:00
Conrad Steenberg 9d8d8fd1a2 Fix PyQt5 error 2021-07-21 10:53:40 -07:00
Tyler Goodlet 83ad071cb4 Load provider search engines in tasks instead of exit stack 2021-07-11 11:13:35 -04:00
Tyler Goodlet 90588018a6 Label doc tweak 2021-07-11 11:13:35 -04:00
Tyler Goodlet 26c333ff22 Only close event send side (facepalm) 2021-07-08 10:55:47 -04:00
Tyler Goodlet 48053588da Don't cancel handler nursery, let errors bubble 2021-07-08 10:55:47 -04:00
Tyler Goodlet 830ef90721 Enable contents labels on q for "query" 2021-07-08 10:55:47 -04:00
Tyler Goodlet 8b966cd7e4 Port all to use new cursor and ohlc refs 2021-07-08 10:55:47 -04:00
Tyler Goodlet b6eeed1ae0 Move contents labels management to cursor mod
Add a new type/api to manage "contents labels" (labels that sit in
a view and display info about viewed data) since it's mostly used by
the linked charts cursor. Make `LinkedSplits.cursor` the new and only
instance var for the cursor such that charts can look it up from that
common class. Drop the `ChartPlotWidget._ohlc` array, just add
a `'ohlc'` entry to `._arrays`.
2021-07-08 10:55:47 -04:00
Tyler Goodlet d3d5d4ad06 Drop global order lines map
Orders in order mode should be chart oriented since there's a mode per
chart. If you want all orders just ask the ems or query all the charts
in a loop.

This fixes cancel-all-orders such that when 'cc' is tapped only the
orders on the *current* chart are cancelled, lel.
2021-07-08 10:55:47 -04:00
Tyler Goodlet 91209b7d6e Use group status for symbol loading 2021-07-08 10:55:47 -04:00
Tyler Goodlet 37180a4e4e Fix old msg clearing var name 2021-07-08 10:55:47 -04:00
Tyler Goodlet eeeeb29f71 Add order cancellation and submission statuses
Generalize the methods for cancelling groups of orders (all or those
under cursor) and add new group status support such that statuses for
each cancel or order submission is displayed in the status bar. In the
"cancel-all-orders" case, use the new group status stuff.
2021-07-08 10:55:47 -04:00
Tyler Goodlet 572f984d06 Add an all order lines getter method 2021-07-08 10:55:47 -04:00
Tyler Goodlet 0133f0b589 Add "group statuses" support to status bar
Allows for submitting a top level "group status" associated with
a "group key" which eventually resolves once all sub-statuses associated
with that group key (and thus top level status) complete and are also
removed. Also add support for a "final message" for each status such
that once the status clear callback is called a final msg is placed on
the status bar that is then removed when the next status is set.

It's all a questionable bunch of closures/callbacks but it worx.
2021-07-08 10:55:47 -04:00
Tyler Goodlet 53074b552a Add fast tap key sequence support and order-mode-type statuses 2021-07-08 10:55:47 -04:00
Tyler Goodlet 3650db3321 Make alerts solid line only 2021-07-08 10:55:47 -04:00
Tyler Goodlet 0ded790330 Didn't end up needing a task stack 2021-07-08 10:55:47 -04:00
Tyler Goodlet ca23825aff Start input handling **after** order mode is up 2021-07-08 10:55:47 -04:00
Tyler Goodlet c971997f1a Don't access unset cursor 2021-07-08 10:55:47 -04:00
Tyler Goodlet aabbc12b82 Beautifully simplify kb handling code with set ops 2021-07-08 10:55:47 -04:00
Tyler Goodlet 983a517a8c Drop old commented behaviour; see parent class if needed 2021-07-08 10:55:47 -04:00
Tyler Goodlet 03c95ca908 Factor press and release handling into same qtloop 2021-07-08 10:55:47 -04:00
Tyler Goodlet 569b2efb51 Move region selection to editors mod 2021-07-08 10:55:47 -04:00
Tyler Goodlet 4a37cf768f Move line and arrow editors to new mod 2021-07-08 10:55:47 -04:00
Tyler Goodlet 93af8c936c Port cursor and axes to new widget names 2021-07-08 10:55:47 -04:00
Tyler Goodlet 75804a441c Convert view box to async input handling
Instead of callbacks for key presses/releases convert our `ChartView`'s
kb input handling to async code using our event relaying-over-mem-chan
system. This is a first step toward a more async driven modal control
UX. Changed a bunch of "chart" component naming as part of this as well,
namely: `ChartSpace` -> `GodWidget` and `LinkedSplitCharts` ->
`LinkedSplits`. Engage the view boxe's async handler code as part of new
symbol data loading in `display_symbol_data()`. More re-orging to come!
2021-07-08 10:55:47 -04:00
Tyler Goodlet 85621af8af Extend Qt event relaying
Add an `open_handler()` ctx manager for wholesale handling event sets
with a passed in async func. Better document and implement the event
filtering core including adding support for key "auto repeat" filtering;
it turns out the events delivered when `trio` does its guest-most tick
are not the same (Qt has somehow consumed them or something) so we have
to do certain things (like getting the `.type()`, `.isAutoRepeat()`,
etc.) before shipping over the mem chan. The alt might be to copy the
event objects first but haven't tried it yet. For now just offer
auto-repeat filtering through a flag.
2021-07-08 10:55:47 -04:00
Tyler Goodlet df2f6487ff Apply `brokerd` quote rate throttling when requested in `open_feed()` 2021-06-14 21:55:51 -04:00
Tyler Goodlet f320f95288 Drop old hi-dpi font inches sizes 2021-06-13 23:59:02 -04:00
Tyler Goodlet d269edc0b3 Re-org main window singleton into a new module
Avoids some cyclical and confusing import time stuff that we needed to get
DPI aware fonts configured from the active display. Move the main window
singleton into its own module and add a `main_window()` getter for it.
Make `current_screen()` a ``MainWindow` method to avoid so many module
variables.
2021-06-13 23:47:52 -04:00
Tyler Goodlet 84f61c9a92 Avoid clearing cached results; detect repeats later 2021-06-10 13:23:28 -04:00
Tyler Goodlet 0dcadec11a Add multi-status updates throughout chart init 2021-06-10 13:23:28 -04:00
Tyler Goodlet 90b0673052 Add multi-status support to window 2021-06-10 13:23:28 -04:00
Tyler Goodlet ce67022e2e Only add font size scaled down when dpi scaling > 2 2021-06-10 13:23:28 -04:00
Tyler Goodlet 9d31f8ca6a Add default "small" dpi aware font 2021-06-10 13:23:28 -04:00
Tyler Goodlet f68295653d Load cache search before other providers 2021-06-10 13:23:28 -04:00
Tyler Goodlet 112b3f0f07 Drop hidpi font size hacking from contents labels 2021-06-10 13:23:28 -04:00
Tyler Goodlet e924cbeb43 Min debounce period for faster cached completions 2021-06-10 13:23:28 -04:00
Tyler Goodlet 62c456f8eb Downscale fonts on scaled-down hidpi displays 2021-06-10 13:23:28 -04:00
Tyler Goodlet 193f4f945c Flip to using scaled hi DPI detected by Qt 2021-06-10 13:23:28 -04:00
Tyler Goodlet bb1c549d94 Add some initial status updates during startup 2021-06-10 13:23:28 -04:00
Tyler Goodlet df50700aa5 Style a basic status bar and add a mode label to it 2021-06-10 13:23:28 -04:00
Tyler Goodlet a9cdb94ff3 Port styling to latest `qtdarkstyle` version 2021-06-10 13:23:28 -04:00
Tyler Goodlet 74b63b9868 Add mode label to right side 2021-06-10 13:23:28 -04:00
Tyler Goodlet cc60ad46fc Skip chart updates if parent widget is hidden to save cpus 2021-06-10 13:23:28 -04:00
Tyler Goodlet 7da7dee02b Add mode name to viewbox 2021-06-10 13:23:28 -04:00
Tyler Goodlet 78e04e66a5 Add mode names to search, repair LIFO ordering on select 2021-06-10 13:23:28 -04:00
Tyler Goodlet 0564bbd9c3 Use focus switch signal to update status bar 2021-06-10 13:23:28 -04:00
Tyler Goodlet 754a5cce4f WIP toying with a simple status bar 2021-06-10 13:23:28 -04:00
Tyler Goodlet 8d02778158 Don't bail on unknown order ids 2021-06-10 12:02:57 -04:00
Tyler Goodlet b06cb5bb5a Comments clean and improvments 2021-06-10 08:24:10 -04:00
Tyler Goodlet 6e58f31fd8 Port EMS to typed messaging + bidir streaming
This moves the entire clearing system to use typed messages using
`pydantic.BaseModel` such that the streamed request-response order
submission protocols can be explicitly viewed in terms of message
schema, flow, and sequencing. Using the explicit message formats we can
now dig into simplifying and normalizing across broker provider apis to
get the best uniformity and simplicity.

The order submission sequence is now fully async: an order request is
expected to be explicitly acked with a new message and if cancellation
is requested by the client before the ack arrives, the cancel message is
stashed and then later sent immediately on receipt of the order
submission's ack from the backend broker. Backend brokers are now
controlled using a 2-way request-response streaming dialogue which is
fully api agnostic of the clearing system's core processing; This
leverages the new bi-directional streaming apis from `tractor`.  The
clearing core (emsd) was also simplified by moving the paper engine to
it's own sub-actor and making it api-symmetric with expected `brokerd`
endpoints.

A couple of the ems status messages were changed/added:
'dark_executed' -> 'dark_triggered'
added 'alert_triggered'

More cleaning of old code to come!
2021-06-08 14:33:30 -04:00
Tyler Goodlet 0bcad35c70 Set ack time on pydantic model 2021-06-08 14:31:04 -04:00
Tyler Goodlet b689adaeb0 Throttle L1 label updates at a lower rate 2021-05-28 14:11:02 -04:00
Tyler Goodlet 1a7b06c147 Limit l1 graphics updates to half the refresh rate 2021-05-28 14:11:02 -04:00
Tyler Goodlet ee71f445fb Clear entries on no results returned per task 2021-05-28 14:08:24 -04:00
Tyler Goodlet a31b83c5ca Don't ever send plain whitespace a search pattern 2021-05-28 13:44:30 -04:00
Tyler Goodlet ea3d96e7ed Accept arbitrary QEvent subscriptions via a set 2021-05-28 13:30:26 -04:00
Tyler Goodlet c56c7b8540 Increase min debounce period, stop searching on user nav selection 2021-05-28 10:16:00 -04:00
Tyler Goodlet ec6ea32dda Don't pass through linked charts x-axis handle 2021-05-27 13:05:23 -04:00
Tyler Goodlet 7dfc7f7fa2 Factor chart selection into widget, cleanups, add resource links 2021-05-27 13:05:23 -04:00
Tyler Goodlet ab3adcee9e Get basic switch-on-click mouse support working 2021-05-27 13:05:23 -04:00
Tyler Goodlet 607e1a8299 Add per-provider-async searching with status updates 2021-05-27 13:05:23 -04:00
Tyler Goodlet 89beb92866 Add api for per-section filling/clearing
Makes it so we can move toward separate provider results fills in an
async way, on demand.

Also,
- add depth 1 iteration helper method
- add section finder helper method
- fix last selection loading to be mostly consistent
2021-05-27 13:05:23 -04:00
Tyler Goodlet c478ddaed0 Disable cursor blink globally 2021-05-27 13:05:23 -04:00
Tyler Goodlet 924960a359 Add label to search bar 2021-05-27 13:05:23 -04:00
Tyler Goodlet 46d88965d3 Get LIFO sort on cache syms working properly 2021-05-27 13:05:23 -04:00
Tyler Goodlet 59475cfd81 Store lowercase symbols within piker data internals 2021-05-27 13:05:23 -04:00
Tyler Goodlet af9dcf9230 Use an ordered dict to get LIFO cache sorting on sym selection 2021-05-27 13:05:23 -04:00
Tyler Goodlet 9bfc230dde Speedup: load provider searches async at startup 2021-05-27 13:05:23 -04:00
Tyler Goodlet 82cdb176e1 Make ctrl-l highlight current text in edit 2021-05-27 13:05:23 -04:00
Tyler Goodlet 212882a5a5 Don't try to show xhair if no active plot 2021-05-27 13:05:23 -04:00
Tyler Goodlet 307afb1935 Clean some key handling 2021-05-27 13:05:23 -04:00
Tyler Goodlet 67498c60af More UX features
- load previous search state on open
- show cached on empty search bar
- allow ctrl-u/d to navigate provider "sections"
2021-05-27 13:05:23 -04:00
Tyler Goodlet 8129fcc648 Ignore key auto-repeats 2021-05-27 13:05:23 -04:00
Tyler Goodlet 07d8bf1453 Add a `.select_first()` view method + more cleaning 2021-05-27 13:05:23 -04:00
Tyler Goodlet d5e83e61d4 Reorder, drop some cruft 2021-05-27 13:05:23 -04:00
Tyler Goodlet 9d2c8a9526 Factor selection details into completer view methods 2021-05-27 13:05:23 -04:00
Tyler Goodlet 43d73b4a7c Info log the current provider search 2021-05-27 13:05:23 -04:00
Tyler Goodlet 64c1d9a965 Support ctrl-space to open search pane 2021-05-27 13:05:23 -04:00
Tyler Goodlet d8a200aadc Increase completion-tree width, support ctrl-space toggle 2021-05-27 13:05:23 -04:00
Tyler Goodlet 2471ce446e Require `<symbol>.<provider>` format to cli 2021-05-27 13:05:23 -04:00
Tyler Goodlet e77a51f16e Support multi-provider cache symbol switching 2021-05-27 13:05:23 -04:00
Tyler Goodlet 1bd0ee8746 Support loading multi-brokerds search at startup 2021-05-27 13:05:23 -04:00
Tyler Goodlet fd8dc4f1a3 Make -b a multi-option for backends 2021-05-27 13:05:23 -04:00
Tyler Goodlet b2ff09f193 Support min and max keyboard pauses
Some providers do well with a "longer" debounce period (like ib) since
searching them too frequently causes latency and stalls.  By supporting
both a min and max debounce period on keyboard input we can only send
patterns to the slower engines when that period is triggered via
`trio.move_on_after()` and continue to relay to faster engines when the
measured period permits. Allow search routines to register their "min
period" such that they can choose to ignore patterns that arrive before
their heuristically known ideal wait.
2021-05-27 13:05:23 -04:00
Tyler Goodlet 63363d750c Port chart to multi-search api 2021-05-27 13:05:23 -04:00
Tyler Goodlet cb102f692c Top level widget `.focus()` 2021-05-27 13:05:23 -04:00
Tyler Goodlet 0163a582a5 Move search machinery to ui module, add fast cached chart selection 2021-05-27 13:05:23 -04:00
Tyler Goodlet 82ece83d33 Drop commented cruft 2021-05-27 13:05:23 -04:00
Tyler Goodlet b39fd5e1fc Use per-provider indented tree layout for results 2021-05-27 13:05:23 -04:00
Tyler Goodlet 25dbe60c77 Flip to ctrl-l to pop out search/list 2021-05-27 13:05:23 -04:00
Tyler Goodlet 51c61587d2 Make list pop out next to primary y-axis 2021-05-27 13:05:23 -04:00
Tyler Goodlet 2c24c9ef2d Compose search bar and view under parent widget 2021-05-27 13:05:23 -04:00
Tyler Goodlet 25d7122cb6 Throttle requests using a static "typing paused period" 2021-05-27 13:05:22 -04:00
Tyler Goodlet 5766dd518d Enforce lower case symbols across providers 2021-05-27 13:05:22 -04:00
Tyler Goodlet 478b114708 First draft completion in background task 2021-05-27 13:05:22 -04:00
Tyler Goodlet c9efbcc6d2 Drop completion list from startup 2021-05-27 13:05:22 -04:00
Tyler Goodlet 431fdd3f9c Add initial working symbol search with async completions 2021-05-27 13:05:22 -04:00
Tyler Goodlet a5826e6e22 Up the kb event queue size 2021-05-27 13:05:22 -04:00
Tyler Goodlet be39e9bdf5 Load async kb search handler at startup 2021-05-27 13:05:22 -04:00
Tyler Goodlet 60d44f30ee Make search kb handling async 2021-05-27 13:05:22 -04:00
Tyler Goodlet 2861f321ce Add async keyboard cloner sub-sys 2021-05-27 13:05:22 -04:00
Tyler Goodlet 5e1b15f319 Repair indents from rebasing 2021-05-27 13:05:22 -04:00
Tyler Goodlet 821d5ab9ec Bring back in and merge tractor stream api patch 2021-05-27 13:05:22 -04:00
Tyler Goodlet da0cb9b2ac Call search focus directly 2021-05-27 13:05:22 -04:00
Tyler Goodlet 0e83906f11 Initial WIP search completer; still a mess 2021-05-27 13:05:22 -04:00
Tyler Goodlet 157f6ab02b Drop lingering chart focus call 2021-05-27 13:05:22 -04:00
Tyler Goodlet 1f9f2b873a Super fast switching, just hide loaded charts 2021-05-27 13:05:22 -04:00
Tyler Goodlet 0627f7dcee First draft: symbol switching via QLineEdit widget 2021-05-27 13:05:22 -04:00
goodboy 9c821c8cfd
Merge pull request #181 from pikers/syseng_tweaks
Syseng tweaks
2021-05-25 08:39:06 -04:00
Tyler Goodlet 9e367432fd Minimize update to Qt reported display's refresh rate 2021-05-25 06:56:18 -04:00
Tyler Goodlet e623c58754 Naively throttle graphics updates to 60 FPS 2021-05-25 06:33:22 -04:00
Tyler Goodlet 319eacd8c1 Use compact async with tuple syntax from py3.9 2021-05-24 12:26:50 -04:00
Tyler Goodlet f6f4a0cd8d Use tractor settings for qtractor 2021-05-24 12:26:34 -04:00
Tyler Goodlet 435e005d6e Drop quantdum legend item 2021-05-24 12:23:02 -04:00
Tyler Goodlet ecd94ce24d Better indexing logic? 2021-05-24 12:17:08 -04:00
Tyler Goodlet c08f192f77 Move charting to new tractor stream api
This required a fsp task spawning logic rework which ended up being
cleaner just spawning tasks in a loop sequentially instead of trying
a 2-phase spawn-then-initialize approach.

This also includes changes from the symbol search branch hacked in.
Mostly it includes isolating the main chart startup-sequence to a
function that can be run in a new task every time a new symbol is
requested by the selector/searcher. The actual search functionality
obviously isn't in here yet but minor changes are included as part of
pulling out the `tractor` stream api patch from the symbol search dev
branch.
2021-04-29 11:28:00 -04:00
Tyler Goodlet 3375735914 Port kivy monitor to new tractor stream api 2021-04-29 09:10:11 -04:00
Tyler Goodlet 7d6bc4d856 Move feed api(s) into new submodule
Also add a --pdb flag to chart app.
2021-04-15 10:43:29 -04:00
Tyler Goodlet 0b10c8d6d6 Make standalone mode work again 2021-04-15 08:23:08 -04:00
Tyler Goodlet 9622254cdb Hack broadcast chan for order submissions, smh 2021-04-14 11:02:14 -04:00
Tyler Goodlet 9a15cd48f0 Just symbol info in window title 2021-04-10 14:18:40 -04:00
Tyler Goodlet 1523637979 Always update L1 labels 2021-04-10 14:18:40 -04:00
Tyler Goodlet 3506bbe05c Nest async withs 2021-04-10 14:18:40 -04:00
Tyler Goodlet a18a4b5a4c Call the app what it is 2021-04-10 14:18:40 -04:00
Tyler Goodlet 20c99733b6 Let cli pass through actor name 2021-04-10 14:18:40 -04:00
Tyler Goodlet a8a3f098cf Drop lingering prints 2021-04-10 14:18:40 -04:00
Tyler Goodlet 3ebb7ab6b1 Only activate Qt hidpi detection on windows for now 2021-04-10 14:18:40 -04:00
goodboy feb8d5bbad
Merge pull request #153 from wattygetlood/windows_patches
Windows patches
2021-04-06 11:55:51 -04:00
Tyler Goodlet 6891309abd Fix import 2021-04-03 12:22:14 -04:00
Tyler Goodlet fb996bfffb Change subpkg name in cli 2021-04-03 12:22:14 -04:00
Tyler Goodlet 20a9617c18 Use open pikerd from chart entrypoint 2021-04-03 12:22:14 -04:00
Tyler Goodlet d4395dbcbc Make default view more zooomed in 2021-03-31 14:26:32 -04:00
Tyler Goodlet f75b3108ce Size execution arrows to dpi 2021-03-31 14:26:13 -04:00
Tyler Goodlet 0dfa92230d Size level line markers to dpi aware font size 2021-03-31 14:25:51 -04:00
Tyler Goodlet 54d36f26f0 Base anchor contents labels based on dpi-aware font bounding rect 2021-03-31 14:25:17 -04:00
Tyler Goodlet 3f7d9c5c15 Base axis text offset on dpi-aware font size 2021-03-31 14:24:39 -04:00
Tyler Goodlet 3bd87caf4b Hip shot: try making low dpi font sizes "just work" 2021-03-29 17:52:32 -04:00
wattygetlood c39c4f11db Forcinng trio spawner seems to work? 2021-03-28 17:24:30 -04:00
Tyler Goodlet 07a5bf4b7c Use low dpi inches on 96 dpi 2021-03-19 09:33:47 -04:00
Tyler Goodlet 77fbde1115 Override the inverse transform func from pg 2021-03-19 00:40:39 -04:00
Tyler Goodlet 6fa1d4dc88 Show xhair even if order is filled while line is hovered 2021-03-18 21:57:08 -04:00
Tyler Goodlet 5610807b8e Move marker factory funcs to new mod 2021-03-18 16:59:22 -04:00
Tyler Goodlet 55de079320 Add low dpi settings and different default view bars counts 2021-03-18 13:40:31 -04:00
Tyler Goodlet 67c5563090 Enable marker-on-select through order mode 2021-03-18 13:33:10 -04:00
Tyler Goodlet 68f75b582a More fixes for kivy shit 2021-03-18 13:32:34 -04:00
Tyler Goodlet cd5da45abf Show order line marker on hover 2021-03-18 13:28:28 -04:00
Tyler Goodlet 2c7d8cdbb0 Support hiding only "half" the xhair 2021-03-18 13:27:49 -04:00
Tyler Goodlet e1dc2b9225 Enable daemon debug through top level kwarg 2021-03-17 08:36:34 -04:00
Tyler Goodlet aaca2b2f33 Tweak L1 labels to have more spaces 2021-03-17 08:26:28 -04:00
Tyler Goodlet 17b66e685f Experiment with zoom focal @ L1 edge 2021-03-17 08:25:58 -04:00
Tyler Goodlet d1c8c2a072 More level line reworking
- break (custom) graphics item style marker drawing into separate func
 but keep using it since it still seems oddly faster then the
 QGraphicsPathItem thing..
- unfactor hover handler; it was uncessary
- make both the graphics path item and custom graphics items approaches
  both work inside ``.paint()``
2021-03-16 19:36:05 -04:00
Tyler Goodlet adf6437449 Move margin settings to class scope 2021-03-16 15:59:44 -04:00
Tyler Goodlet 61198818dc Fix label snap on line highlight bug 2021-03-14 12:28:11 -04:00
Tyler Goodlet cf2f001bcc Add save last datum toggle to y-label 2021-03-13 21:06:53 -05:00
Tyler Goodlet 776395791a Pass action to line editor 2021-03-13 19:31:22 -05:00
Tyler Goodlet c75dacb239 Support func ops on field data, extend anchor logics 2021-03-13 19:29:52 -05:00
Tyler Goodlet c71a3e0fc5 Level line look and feel rework
Add support for drawing ``QPathGraphicsItem`` markers but don't use them
since they seem to be shitting up when combined with the infinite line
(bounding rect?): weird artifacts and whatnot. The only way to avoid
said glitches seems to be to update inside the infinite line's
`.paint()` but that slows stuff down.. Instead stick with the manual
paint job use the same pin point: left of the L1 spread graphics - where
the lines now also extend to.

Further stuff:
- Pin the y-label to a line's value on hover.
- Disable x-dimension line moving
- Rework the labelling to be more minimal
2021-03-13 17:31:15 -05:00
Tyler Goodlet 887c305d46 Allow y-label pinning on cross hair hide 2021-03-13 17:29:35 -05:00
Tyler Goodlet 9798689961 Lengthen label arrow a tad 2021-03-13 17:28:57 -05:00
Tyler Goodlet 396f6b2a0d Fix type annot 2021-03-12 07:41:47 -05:00
Tyler Goodlet 18ab81a967 Make crosshair lines a milder gray 2021-03-11 21:44:35 -05:00
Tyler Goodlet 624617d8e1 Don't run brokerds in debug mode by default 2021-03-11 21:44:10 -05:00
Tyler Goodlet d016abcd0d Adjust right axis anchor closure to include l1 label size 2021-03-11 21:43:29 -05:00
Tyler Goodlet 4a1df686a5 Update max l1 label size on chart 2021-03-11 21:42:38 -05:00
Tyler Goodlet a51d5c536e Add a couple more grays 2021-03-11 21:41:13 -05:00
Tyler Goodlet 31c14a2f9f Add l1 label size tracking to chart widget 2021-03-11 21:40:50 -05:00
Tyler Goodlet ea8120156f Add position line updating to order mode 2021-03-11 21:40:06 -05:00
Tyler Goodlet 98bfee028a Add a position line api
Add a line which shows the current average price position with and arrow
marker denoting the direction (long or short). Required some further
rewriting of the infinite line from pyqtgraph including:
- adjusting marker (arrow) placement to be offset from axis + l1 labels
- fixing the hover event to not require the `.movable` attribute to be
  set
2021-03-11 21:35:09 -05:00
Tyler Goodlet 7075a968b4 Create an order mode module 2021-03-08 09:05:37 -05:00
Tyler Goodlet fff9efe4aa Snap level line movements to tick size 2021-03-07 22:16:46 -05:00
Tyler Goodlet e71bcb363c Drop stage line cacheing; the complexity isn't worth it. 2021-03-07 16:07:23 -05:00
Tyler Goodlet de5a69c59c Add mouse drag order update support to UI 2021-03-07 16:01:42 -05:00
Tyler Goodlet 6851bacd0a Add drag start/end callback support, remove from cursor hovered on delete 2021-03-07 15:50:50 -05:00
Tyler Goodlet a1a1dec885 Move L1 labels into lone module 2021-03-01 14:48:08 -05:00
Tyler Goodlet 9f9b5480a6 More explicit private var name 2021-02-24 12:05:09 -05:00
Tyler Goodlet 948e133cae Split out ems daemon, client api and paper engine into new mods 2021-02-22 18:37:57 -05:00
Tyler Goodlet a9bbc223bb Add a new exchange subpackage 2021-02-22 17:28:34 -05:00
Tyler Goodlet e6ea053d40 Get kivy/questrade shit working again 2021-02-21 12:32:40 -05:00
Tyler Goodlet f724798336 Fix incorrect bounding rect calc 2021-02-21 12:02:20 -05:00
Tyler Goodlet 4b0e5662a5 Add default order lot sizes by asset type 2021-02-21 12:01:48 -05:00
Tyler Goodlet 6fb1945360 Fix and pass through piker loglevel correctly 2021-02-21 11:50:33 -05:00
Tyler Goodlet aa4a2ef64f Bump up font size one more time 2021-02-21 11:49:27 -05:00
Tyler Goodlet c2890b8197 Port level line to xhair methods 2021-02-21 11:48:51 -05:00
Tyler Goodlet d5b41e12c5 Add crosshair hide/show convenience methods 2021-02-21 11:45:24 -05:00
Tyler Goodlet 71745ddcd4 Even smaller text fill on axes 2021-02-21 11:44:58 -05:00
Tyler Goodlet 1ac4cc3dd3 Use new field label api for L1 2021-02-16 06:42:48 -05:00
Tyler Goodlet b794855ad3 Port order mode to new order line api 2021-02-11 23:42:57 -05:00
Tyler Goodlet d91f07c947 Drop old candlestick graphics code 2021-02-11 23:42:17 -05:00
Tyler Goodlet aec8f1d25c Hide y-label on level line mouse over 2021-02-11 23:41:40 -05:00
Tyler Goodlet bf78c13df4 Attempt px perfection on crosshair lines placement 2021-02-11 14:03:47 -05:00
Tyler Goodlet f51e503e47 Support arbitrary fields (with update) in labels
This turned into a larger endeavour then intended but now we're using our
own label system on level lines to be able to display things nicely
**pinned wherever we want in the UI**. Keep the old ``LevelLabel`` for
now for the L1 graphics but we'll likely replace this as well since i'm
pretty sure the new label type (which wraps `QGraphicsTextItem`) is more
performant anyway.
2021-02-11 13:59:50 -05:00
Tyler Goodlet cbf259f3f3 Add hidpi issue regarding it being borky 2021-02-11 11:49:33 -05:00
Tyler Goodlet ca576ca3cf Add label delete method 2021-02-11 11:49:01 -05:00
Tyler Goodlet 0edca84b3d Yet another font size tweak 2021-02-11 11:48:40 -05:00
Tyler Goodlet dd1aed627e Tidy axis code 2021-02-11 11:48:19 -05:00
Tyler Goodlet 21e1561a57 Add a sane label type..smh 2021-02-11 00:12:37 -05:00
Tyler Goodlet 386cd9404d Drop hidpi detection? it doesn't seem to yield benefits 2021-02-08 07:07:04 -05:00
Tyler Goodlet ac84087755 Fix stage line updating, size up arrow heads? 2021-02-08 07:06:00 -05:00
Tyler Goodlet 0449734c53 Drop YSticky for level lines stuff 2021-02-08 07:04:08 -05:00
Tyler Goodlet 1ef2d18a41 Try to make crosshair lines px perfect 2021-02-08 07:03:28 -05:00
Tyler Goodlet 708ed89894 Hard code font inches 2021-02-08 07:01:26 -05:00
Tyler Goodlet 890f932400 Use through lot digits, drop YSticky 2021-02-08 07:00:51 -05:00
Tyler Goodlet d7f806c57b Add arrowheads to labels
For labels that want it add nice arrow paths that point just over the
respective axis. Couple label text offset from the axis line based on
parent 'tickTextOffset' setting. Drop `YSticky` it was not enough
meat to bother with.
2021-02-08 06:40:11 -05:00
Tyler Goodlet a8c4829cb6 Start using `tick_size` throughout charting
The min tick size is the smallest step an instrument can move in value
(think the number of decimals places of precision the value can have).

We start leveraging this in a few places:
- make our internal "symbol" type expose it as part of it's api
  so that it can be passed around by UI components
- in y-axis view box scaling, use it to keep the bid/ask spread (L1 UI)
  always on screen even in the case where the spread has moved further
  out of view then the last clearing price
- allows the EMS to determine dark order live order submission offsets
2021-02-06 11:35:12 -05:00
Tyler Goodlet 03541bd368 Drop unneeded .hide(); add more comments 2021-01-26 22:16:18 -05:00
Tyler Goodlet cfc36e7928 Snap y-cursor-label to min tick 2021-01-26 22:15:45 -05:00
Tyler Goodlet 5a0612e6a8 Factor some line and label steps 2021-01-26 13:34:29 -05:00
Tyler Goodlet 8501a9be4f Lol actually fix screen wakeup lookup.. 2021-01-26 12:26:43 -05:00
Tyler Goodlet a232e8bc39 Display order size on order lines in order mode 2021-01-26 11:36:44 -05:00
Tyler Goodlet 25ec5faaef Drop removed show_label kwarg 2021-01-26 11:28:24 -05:00
Tyler Goodlet b9d9dbfc4a Support size fields on order lines; avoid overlap with L1 lines 2021-01-26 11:27:50 -05:00
Tyler Goodlet cc5af7319f Slightly lighter sell red, try to fix screen stuff... 2021-01-22 23:02:23 -05:00
Tyler Goodlet 18fafb501d Use dashed lines for dark orders 2021-01-22 23:01:12 -05:00
Tyler Goodlet f072e2551b Snap y-axis crosshair to min tick(s) 2021-01-22 22:59:00 -05:00
Tyler Goodlet 50d2d8517b Add support for dotted style level lines 2021-01-22 22:57:42 -05:00
Tyler Goodlet 5327d7be5e Add screen acquire timeout loop 2021-01-22 16:46:39 -05:00
Tyler Goodlet f82127de31 Add "live order" submission using ctl-<action key> 2021-01-19 20:48:58 -05:00
Tyler Goodlet 7811119736 Support toggling level line highlighting 2021-01-19 20:47:55 -05:00
Tyler Goodlet e6724b6559 Move order mode handling into charting code 2021-01-18 20:28:37 -05:00
Tyler Goodlet 5acd780eb6 Get live mode correct and working 2021-01-15 21:10:08 -05:00
Tyler Goodlet 3e959ec260 Add fill handler to order mode 2021-01-15 21:10:08 -05:00
Tyler Goodlet c835cc10e0 Get "live" order mode mostly workin 2021-01-15 21:10:08 -05:00
Tyler Goodlet f9d4df7378 Start higher level order mode API 2021-01-15 21:10:08 -05:00
Tyler Goodlet 53c0816c5f Add color properties for level line and label 2021-01-15 21:10:08 -05:00
Tyler Goodlet c1266a7a1d Add buy/sell colors 2021-01-15 21:10:08 -05:00
Tyler Goodlet e51670a573 Try dynamically loading screen 2021-01-15 21:10:08 -05:00
Tyler Goodlet 5503a5705a Drop old line 2021-01-15 21:10:08 -05:00
Tyler Goodlet 39e4953a6a Get order cancellation working 2021-01-07 22:08:25 -05:00
Tyler Goodlet 282cc85ba0 Create an "order mode"
Our first major UI "mode" (yes kinda like the modes in emacs) that has
handles to a client side order book api, line and arrow editors, and
interacts with a spawned `emsd` (the EMS daemon actor).

Buncha cleaning and fixes in here for various thingers as well.
2021-01-07 12:03:18 -05:00
Tyler Goodlet 8d66a17daf Add a "lines editor" api/component 2021-01-05 13:37:03 -05:00
Tyler Goodlet 24536ad769 Get roundtrip alert uuids workin; stage order book api 2021-01-05 08:02:14 -05:00
Tyler Goodlet d0a3deae09 Pass symbol type further down chart stack 2021-01-04 14:46:47 -05:00
Tyler Goodlet 267c8c6bd3 Go back to manual label contents check for now 2021-01-04 14:45:12 -05:00
Tyler Goodlet 7b5a72909e Start a "real" alert looking msg 2021-01-03 17:23:45 -05:00
Tyler Goodlet 616a74865b Better highlighted yellow 2021-01-03 17:23:23 -05:00
Tyler Goodlet 6e2328d351 More comments? 2021-01-03 17:23:06 -05:00
Tyler Goodlet 97b2f86cfe Add preliminary support for alert line management 2021-01-03 11:12:51 -05:00
Tyler Goodlet 88d48bd188 Port to `Cursor` 2021-01-03 11:10:08 -05:00
Tyler Goodlet 08aa5984ec Rename crosshair (type) to cursor
Since the "crosshair" is growing more and more UX implementation details
it probably makes sense to call it what it is; a python level mouse
abstraction. Add 2 internal sets: `_hovered` for allowing mouse hovered
objects to register themselves to other cursor aware components, and
`_trackers` for allowing scene items to "track" cursor movements via
a `on_tracked_source()` callback.
2021-01-03 10:46:28 -05:00
Tyler Goodlet 14dad08d98 Extend level line interaction
Support tracking the mouse cursor using a new `on_tracked_sources()`
callback method. Make hovered highlight a bit thicker and highlight when
click-dragged. Add a delete method for removing from the scene along
with label.
2021-01-03 10:43:53 -05:00
Tyler Goodlet edbbcbf954 Add alert yellow 2021-01-03 10:39:06 -05:00
Tyler Goodlet d492f5c35a Define our own mouse clicked handler 2021-01-01 17:49:23 -05:00
Tyler Goodlet a55d72f8d6 Create and "EMS" module for order execution/routing actor(s) 2021-01-01 17:49:02 -05:00
Tyler Goodlet 80d48e5ece Dynamically override .boundingRect() after startup 2021-01-01 13:23:05 -05:00
Tyler Goodlet e474d8c309 Remove horizontal crosshair on "a" hotkey 2021-01-01 13:05:50 -05:00
Tyler Goodlet 7a53f19eeb Highlight level line label on hover 2021-01-01 13:05:16 -05:00
Tyler Goodlet d602cbc985 Avoid active_plot race 2021-01-01 12:59:31 -05:00
Tyler Goodlet bd85214017 Add draft order actor architecture 2021-01-01 12:40:05 -05:00
Tyler Goodlet 81b10b9dfc Add initial y-axis zoom 2020-12-30 12:55:02 -05:00
Tyler Goodlet f3a0b1e91e Use pixel buffers on axis labels 2020-12-29 18:05:36 -05:00
Tyler Goodlet 1e09b0f08f Type annot paint methods 2020-12-29 18:05:36 -05:00
Tyler Goodlet 98c3bb8aee Add a pyqtgraph profiling toggle to chart CLI 2020-12-29 18:05:36 -05:00
Tyler Goodlet a68fff4139 Break specialized graphics into specific mods 2020-12-29 18:05:36 -05:00
Tyler Goodlet 575b3a0605 Adjust imports 2020-12-29 18:05:36 -05:00
Tyler Goodlet 916396fbfe Move fast curve graphics to new mod 2020-12-29 18:05:36 -05:00
Tyler Goodlet 19e3db8f61 Move OHLC items into new module 2020-12-29 18:05:36 -05:00
Tyler Goodlet b4c28cb086 Start a new graphics sub-package 2020-12-29 18:05:36 -05:00
Tyler Goodlet 5d30f351af Remove use of `tractor.run()` 2020-12-29 18:05:36 -05:00
Tyler Goodlet b467e8fd8d Try cache mode on a bunch of "static" graphics 2020-12-29 18:05:36 -05:00
Tyler Goodlet 588213a230 Add an experimental "fast appendable curve" graphic 2020-12-29 18:05:36 -05:00
Tyler Goodlet 93e76fa12c Comment some unneeded PDI optimization flags 2020-12-29 18:05:36 -05:00
Tyler Goodlet cac797a7fc Add initial pixel buffer caching usage
Leverages `QGraphicsItem.cacheMode` to speed up interactivity via
less `.paint()` calls (on mouse interaction) and redraws of the
underlying path when there are no transformations (other then a shift).
In order to keep the "flat bar on new time period" UX, a couple special
methods have to be triggered to get a redraw of the pixel buffer when
appending new data.

Use `QPainterPath.controlPointRect()` over `.boundingRect()` since
supposedly it's a lot faster. Drop all use of `QPicture` (since it seems
to conflict with the pixel buffer stuff?) and it doesn't give any
measurable speedup when drawing the "last bar" lines.

Oh, and add some profiling for now.
2020-12-29 18:05:36 -05:00
Tyler Goodlet bd73d02cfb Avoid loading volume FSPs on symbols without any data 2020-12-28 14:43:17 -05:00
Tyler Goodlet bc96c5847c Port to new tractor api 2020-12-21 13:02:43 -05:00
Tyler Goodlet 714c757e3e Add vwap back to fsp conf on feature branch 2020-12-21 13:02:43 -05:00
Tyler Goodlet c01382294e Add signal backfilling via trio task respawn 2020-12-21 13:02:43 -05:00
Tyler Goodlet 833a442ac0 Disable vwap in conf, feature delay 2020-12-19 16:57:58 -05:00
Tyler Goodlet b72d7d3085 Drop profile calls on OHLC bars for now 2020-12-19 16:52:04 -05:00
Tyler Goodlet df686755da Drop legacy "historical" QPicture cruft 2020-12-19 16:51:11 -05:00
Tyler Goodlet 618c2f8e0a More general salutation 2020-12-19 16:51:03 -05:00
Tyler Goodlet db6f77481b Stick with slightly smaller fonts 2020-12-19 16:50:54 -05:00
Tyler Goodlet 7ce27107df Fix axes for shm primary indexing 2020-12-19 16:50:49 -05:00
Tyler Goodlet c8537d59a8 Port charting to new shm primary indexing 2020-12-19 16:50:38 -05:00
Tyler Goodlet 9930430721 Close app on last window exit
Use a system triggered SIGINT on app close to tear down the streaming
stack and terminate the `trio`/`tractor` runtimes deterministically.
2020-12-19 16:50:29 -05:00
Tyler Goodlet 6d50ad75a7 Ensure right bar x index is an int 2020-12-19 16:49:57 -05:00
Tyler Goodlet 2568a2d2e9 First draft, make graphics work on shm primary index
This is a bit hacky (what with array indexing semantics being relative
to the primary index's "start" value but it works. We'll likely want
to somehow wrap this index finagling into an API soon.
2020-12-19 16:49:43 -05:00
Tyler Goodlet 9710685508 Left align yaxis label 2020-12-19 16:49:27 -05:00
Tyler Goodlet 1f8f2eb8b3 Font size tweaks for low dpi 2020-12-19 16:06:54 -05:00
Tyler Goodlet 3e16840566 Attempt to add numba typing and use `QGraphicsPathItem`
Failed at using either.

Quirks in numba's typing require specifying readonly arrays by
composing types manually.

The graphics item path thing, while it does take less time to write on
bar appends, seems to be slower in general in calculating the
``.boundingRect()`` value. Likely we'll just add manual max/min tracking
on array updates like ``pg.PlotCurveItem`` to squeeze some final juices
on this.
2020-12-19 16:06:22 -05:00
Tyler Goodlet 949e9d6cd1 Drop commented pixmap cruft
See #124 as to why we'll probably never need this.
2020-12-19 16:06:07 -05:00
Tyler Goodlet f083f537b1 Get `QPainterPath` "append" working
Pertains further to #109.

Instead of redrawing the entire `QPainterPath` every time there's
a historical bars update just use `.addPath()` to slap in latest
history. It seems to work and is fast. This also seems like it will be
a great strategy for filling in earlier data, woot!
2020-12-19 16:05:59 -05:00
Tyler Goodlet 413c703e34 Draw bars using `QPainterPath` magic
This gives a massive speedup when viewing large bar sets (think a day's
worth of 5s bars) by using the `pg.functions.arrayToQPath()` "magic"
binary array writing that is also used in `PlotCurveItem`.  We're using
this same (lower level) function directly to draw bars as part of one
large path and it seems to be painting 15k (ish) bars with around 3ms
`.paint()` latency. The only thing still a bit slow is the path array
generation despite doing it with `numba`. Likely, either having multiple
paths or, only regenerating the missing backing array elements should
speed this up further to avoid slight delays when incrementing the bar
step.

This is of course a first draft and more cleanups are coming.
2020-12-19 16:05:53 -05:00
Tyler Goodlet f9e4e9507d Tweak axis text offset and margins 2020-12-19 15:05:37 -05:00
Tyler Goodlet 9572280553 Kill the tractor tree on window close.
This makes it so you don't have to ctrl-c kill apps.
Add in the experimental openGL support even though I'm pretty sure it's
not being used much for curve plotting (but could be wrong).
2020-12-19 15:05:21 -05:00
Tyler Goodlet bfcf5170dc Add commented ex. code for line price charts 2020-12-19 15:05:14 -05:00
Tyler Goodlet daa429f7ca Put fsp plotting into a couple tasks, startup speedups.
Break the chart update code for fsps into a new task (add a nursery) in
new `spawn_fsps` (was `chart_from_fsps`) that async requests actor
spawning and initial historical data (all CPU bound work).  For multiple
fsp subcharts this allows processing initial output in parallel
(multi-core). We might want to wrap this in a "feed" like api
eventually. Basically the fsp startup sequence is now:
- start all requested fsp actors in an async loop and wait for
  historical data to arrive
- loop through them all again to start update tasks which do chart
  graphics rendering

Add separate x-axis objects for each new subchart (required by
pyqtgraph); still need to fix hiding unnecessary ones.
Add a `ChartPlotWidget._arrays: dict` for holding overlay data distinct
from ohlc. Drop the sizing yrange to label heights for now since it's
pretty much all gone to hell since adding L1 labels. Fix y-stickies to
look up correct overly arrays.
2020-12-19 15:04:51 -05:00
Tyler Goodlet 49699a16ff Skip base metrics on no basis 2020-12-17 10:50:05 -05:00
Tyler Goodlet af61611801 Add initial selection box interaction
Requires decent modification of the built-in ``ViewBox``.
We do away with the zoom functionality for now and instead just add
a label full of some simple stats on the bounded data.
2020-11-08 16:15:34 -05:00
Tyler Goodlet 1972740d0c Make salotz stop grumbling like an old man 2020-11-06 15:35:10 -05:00
Tyler Goodlet 0f458f8263 Add min tick setting to axis type 2020-11-06 15:24:01 -05:00
Tyler Goodlet c1109ee3fb Add license headers to pertinent files 2020-11-06 12:23:14 -05:00
Tyler Goodlet 043bc985df Configure L1 queue size precisions from history 2020-11-06 11:35:10 -05:00
Tyler Goodlet e27fece4e6 Add L1 queue size precision controls 2020-11-06 11:34:32 -05:00
Tyler Goodlet 205bedce85 Spec dpi aware font size in inches 2020-11-05 20:32:35 -05:00
Tyler Goodlet 1e491fb1bb Use pyqtgraph default pen for level lines 2020-11-05 13:23:29 -05:00
Tyler Goodlet cc88300ac5 Fix L1 updates to be like TWS
I think this gets us to the same output as TWS both on booktrader and
the quote details pane. In theory there might be logic needed to
decreases an L1 queue size on trades but can't seem to get it without
getting -ves displayed occasionally - thus leaving it for now.

Also, fix the max-min streaming logic to actually do its job, lel.
2020-11-05 12:08:29 -05:00
Tyler Goodlet db075b81ac Specialize `LevelLabel` for orientation-around-axis gymnastics 2020-11-05 12:08:02 -05:00
Tyler Goodlet f438139ad7 Update L1 labels in price loop 2020-11-03 22:03:49 -05:00
Tyler Goodlet 73e54a2259 Add L1 labels wrapper type
Start a simple API for L1 bid/ask labels.
Make `LevelLabel` draw a line above/below it's text (instead of the
rect fill we had before) since it looks much simpler/slicker.
Generalize the label text orientation through bounding rect
geometry positioning.
2020-11-03 19:48:27 -05:00
Tyler Goodlet a5d5208cfa Add sticky "orientation", allow overriding label draw instructions. 2020-11-03 16:21:21 -05:00
Tyler Goodlet e65f511648 Draw flat line on every new time step
Until we get a better datum "cursor" figured out just draw the flat bar
despite the extra overhead. The reason to do this in 2 separate calls is
detailed in the comment but basic gist is that there's a race between
writer and reader of the last shm index.

Oh, and toss in some draft symbol search label code.
2020-11-03 12:25:08 -05:00
Tyler Goodlet d92e02db86 Add back min window size i guess 2020-11-03 12:22:57 -05:00
Tyler Goodlet 22f1b56b36 Always update left (open) arm 2020-11-03 08:15:00 -05:00
Tyler Goodlet b23e459027 Cleanup unneeded commented stuff 2020-11-02 15:43:19 -05:00
Tyler Goodlet 119196f2ff Scale level label correctly to small(er) fonts
Not sure what fixed it exactly, and I guess we didn't need any relative
DPI scaling factor after all. Using the 3px margin on the level label
seems to make it look nice for any font size (i think) as well.

Gonna need some cleanup after this one.
2020-11-02 15:27:48 -05:00
Tyler Goodlet 96f700a762 Add level line type with custom label 2020-11-02 13:33:19 -05:00
Tyler Goodlet 9e7aa3f9bf Add a dpi aware font wrapper type 2020-11-02 12:02:05 -05:00
Tyler Goodlet 416f027c5f Flip contents label stuff into a type 2020-10-29 17:08:03 -04:00
Tyler Goodlet 68304b79bc More thematic max datums on screen 2020-10-28 09:28:37 -04:00
Tyler Goodlet 031eab28c7 Adjust contents label font for DPI 2020-10-28 08:52:08 -04:00
Tyler Goodlet 20a4aed672 Update font metrics after dpi calc; facepalm. 2020-10-28 08:12:56 -04:00
Tyler Goodlet 751cca35e1 Attempt to calculate font size by DPI 2020-10-27 15:15:31 -04:00
Tyler Goodlet 23672fc22b Rework axes types, sizing stuff
Make our own ``Axis`` and have it call an impl specific ``.resize()``
such that different axes can size to their own spec. Allow passing in a
"typical maximum value string" which will be used by default for sizing
the axis' minor dimension; a common value should be passed to all axes
in a linked split charts widget. Add size hinting for axes labels such
that they can check their parent (axis) for desired dimensions if
needed.
2020-10-27 10:50:28 -04:00
Tyler Goodlet 89d48afb6c Size axis labels based on text contents
Compute the size in pixels the label based on the label's contents.
Eventually we want to have an update system that can iterate through
axes and labels to do this whenever needed (eg. after widget is moved
to a new screen with a different DPI).
2020-10-26 23:34:48 -04:00
Tyler Goodlet 55f34dfed0 Start a profiling mod 2020-10-26 14:08:42 -04:00
Tyler Goodlet bed6a631c0 Don't pass color down to axis 2020-10-25 10:49:31 -04:00
Tyler Goodlet f32763d992 Only move x-axis sticky when we mouse-over a new index
Avoid drawing a new new sticky position if the mouse hasn't moved to the
next (rounded) index in terms of the scene's coordinates. This completes
the "discrete-ization" of the mouse/cursor UX.

Finalizing this feature helped discover and solve
pyqtgraph/pyqtgraph#1418 which masssively improves interaction
performance throughout the whole lib!

Hide stickys on startup until cursor shows up on plot.
2020-10-24 20:18:21 -04:00
Tyler Goodlet ece57b2a1d Rename our main color 2020-10-24 20:18:03 -04:00
Tyler Goodlet 94a8ee6270 Optimize axis labels using `QPicture`
This is likely a marginal improvement but is slightly less execution and
adds a coolio black border around the label. Drop all the legacy code
from quantdom which was quite a convoluted mess for "coloring".
Had to tweak sticky offsets to get the crosshair to line up right; not
sure what that's all about yet.
2020-10-24 20:12:12 -04:00
Tyler Goodlet 13f32acfdf Only update history on bar increment
With the improved update logic on `BarsItems` it doesn't seem to be
necessary. Remove y sticky for overlays for now to avoid clutter that
looks like double draws when the last overlay value is close to the last
price.
2020-10-22 21:21:14 -04:00
Tyler Goodlet 8eb4344d86 More "thematic" default view values ;) 2020-10-22 20:42:46 -04:00
Tyler Goodlet 8c25892521 Fix (really sidestep) flat bar rendering issue(s)
It seems a plethora of problems (including drawing performance) are due
to trying to hack around the strange rendering bug in Qt with `QLineF`
with y1 == y2. There was all sorts of weirdness that would show up with
trying (a hack) to just set all 4 points to the same value including
strange infinite diagonal ghost lines randomly on charts. Instead, just
place hold these flat bar's 'body' line with a `None` and filter the
null values out before calling `QPainter.drawLines()`. This results
in simply no body lines drawn for these datums. We can probably `numba`
the filtering too if it turns out to be a bottleneck.
2020-10-22 20:35:51 -04:00
Tyler Goodlet 7be624de39 Implement `tickStrings` for price axis; use float_digits() 2020-10-22 20:22:21 -04:00
Tyler Goodlet f2c4a46c94 Center bars around index, adjust curves back to match... 2020-10-21 11:19:41 -04:00
Tyler Goodlet cd828db9e9 Show 24 bars to left on startup 2020-10-21 10:51:54 -04:00
Tyler Goodlet 875bc8be24 Add line dots cursors to curves by default 2020-10-21 10:46:56 -04:00
Tyler Goodlet 1f6b5da17e Add support for curve "cursors" using a filled dot
Add a new graphic `LineDot` which is a `pg.CurvePoint` that draws
a simple filled dot over a curve at the specified index.

Add support for adding these cursor-dots to the crosshair/mouse through
a new `CrossHair.add_curve_cursor()`. Discretized the vertical line
updates on the crosshair such that it's only drawn in the middle of
the current bar in the main chart.
2020-10-21 10:40:51 -04:00
Tyler Goodlet 88583d999a Add "follow mode"
Makes the chart act like tws where each new time step increment the
chart shifts to the right so that the last bar stays in place. This
gets things looking like a proper auto-trading UX.

Added a couple methods to ``ChartPlotWidget`` to make this work:
- ``.default_view()`` to set the preferred view based on user settings
- ``.increment_view()`` to shift the view one time frame right

Also, split up the `.update_from_array()` method to be curve/ohlc
specific allowing for passing in a struct array with a named field
containing curve data more straightforwardly. This also simplifies the
contest label update functions.
2020-10-20 09:13:27 -04:00
Tyler Goodlet 1902507703 Change scroll "center" to rightmost bar on screen 2020-10-19 21:32:50 -04:00
Tyler Goodlet c57f678295 Fix contents labels issues
Lookup overlay contents from the OHLC struct array (for now / to make
things work) and fix anchoring logic with better offsets to keep
contents labels super tight to the edge of the view box. Unfortunately,
had to hack the label-height-calc thing for avoiding overlap of graphics
with the label; haven't found a better solution yet and pyqtgraph seems
to require more rabbit holing to figure out something better. Slap in
some inf lines for over[sold/bought] rsi conditions thresholding.
2020-10-19 14:18:06 -04:00
Tyler Goodlet 851104dd31 Add an inf horizontal line helper 2020-10-19 14:01:57 -04:00
Tyler Goodlet 32974a118c Add hidpi comments, 300 bars in view at startup 2020-10-19 11:37:50 -04:00
Tyler Goodlet d3dc8fb219 Differentiate array schema by close field 2020-10-19 11:37:28 -04:00
Tyler Goodlet c7d5ea6e15 Fix static yrange and last bar double draw issues 2020-10-16 12:18:14 -04:00
Tyler Goodlet fc23b2180d Pass through fonts to axes 2020-10-16 12:15:33 -04:00
Tyler Goodlet f4c38621d5 Add a default "bars from right" style setting 2020-10-15 15:08:56 -04:00
Tyler Goodlet 6f429b1104 These seem to be "faster" crosshair settings? 2020-10-15 15:08:16 -04:00
Tyler Goodlet db273e1cd7 Up the mouse re-draw rate limit 2020-10-12 09:36:46 -04:00
Tyler Goodlet 18097fc33b Scale for hidpi pixmaps too 2020-10-02 12:13:50 -04:00
Tyler Goodlet 8d9a6845c6 Add a naive maxmin calc to avoid frequent resizes
If we know the max and min in view then on datum updates we can avoid
resizing the y-range when a new max/min has not yet arrived.

This adds a very naive numpy calc in the drawing thread which we can
likely improve with a more efficient streaming alternative which can
also likely be run in a fsp subactor. Also, since this same calc is
essentially done inside `._set_yrange()` we will likely want to allow
passing the result into the method to avoid duplicate work.
2020-10-02 12:13:50 -04:00
Tyler Goodlet 6d5ccc6c3f Specify font size in pixels 2020-10-02 12:13:50 -04:00
Tyler Goodlet 8276b02f92 Further label and axis sizing tweaks for hidpi 2020-10-02 12:13:50 -04:00
Tyler Goodlet e524ee9045 Resize everything with HiDPI scaling on 2020-10-02 12:13:50 -04:00
Tyler Goodlet d4eb5ccca4 Handle vwap overlay with shm 2020-10-02 12:13:50 -04:00
Tyler Goodlet 47d4ec5985 Move _source under data package 2020-10-02 12:13:50 -04:00
Tyler Goodlet 155c3eef2a Convert timeit thing to use print() 2020-10-02 12:13:50 -04:00
Tyler Goodlet bfa7839370 Adopt official color 2020-10-02 12:13:50 -04:00
Tyler Goodlet 4383579cd0 Use shm array in chart-fsp task
Just like for the source OHLC, we now have the chart parent actor create
an fsp shm array and use it to read back signal data for plotting.
Some tweaks to get the price chart (and sub-charts) to load historical
datums immediately instead of waiting on an initial quote.
2020-10-02 12:13:50 -04:00
Tyler Goodlet ba4261f974 Add timeit prints 2020-10-02 12:13:50 -04:00
Tyler Goodlet 561cafbe55 Another black 2020-10-02 12:13:50 -04:00
Tyler Goodlet 373ff90229 Only need UTC offset hacking if time w broker is messed.. 2020-10-02 12:13:50 -04:00
Tyler Goodlet cd540fd07e Cleanups 2020-10-02 12:13:50 -04:00
Tyler Goodlet 6fa4f6e943 Port charts to new shm arrays 2020-10-02 12:13:50 -04:00
Tyler Goodlet 07beec59bf Hopefully fix datum offset on signal sub-plots
Added a comment to clarify, ish.
Add `ChartPlotWidget._overlays` as registry of curves added on top of
main graphics. Hackishly (ad-hoc-ishly?) update the curve assuming the
data resides in the same `._array` for now (which it does for historical
vwap).
2020-10-02 12:13:28 -04:00
Tyler Goodlet eb5d64ceef Add support for overlay curves and fixed y-range
Allow passing a fixed ylow, yhigh tuple to `._set_yrange()` which avoids
recomputing the range from data if desired (eg. rsi-like bounded
signals). Add support for overlay curves to the OHLC chart and add basic
support to brokers which provide a historical 'vwap`. The data array
increment logic had to be tweaked to copy the vwap from the last bar.

Oh, and hack the subchart curves with two extra prepended datums to make
them align "better" with the ohlc main chart; need to talk to
`pyqtgraph` core about how to do this more correctly.
2020-10-02 12:13:28 -04:00
Tyler Goodlet e91ba55d68 Always draw any history bars on update 2020-10-02 12:13:28 -04:00
Tyler Goodlet a4a5bff3fa Yes, even more grays 2020-10-02 12:13:28 -04:00