Commit Graph

4095 Commits (c8c28df62f671416d1d032be776324ed1dece915)

Author SHA1 Message Date
Tyler Goodlet 46c804db0b Support the `stream_quotes()` api in questrade backend 2020-10-02 12:13:28 -04:00
Tyler Goodlet ad519c10a9 Always just look up the current plot on mouse handling 2020-10-02 12:13:28 -04:00
Tyler Goodlet bbe02570b3 Allow for dynamically added plots
Add `ChartPlotWidget.add_plot()` to add sub charts for indicators which
can be updated independently. Clean up rt bar update code and drop some
legacy ohlc loading cruft.
2020-10-02 12:13:28 -04:00
Tyler Goodlet b4f1ec7960 Massively simplify the cross-hair monstrosity
Stop with all this "main chart" special treatment.
Manage all lines in the same way across all referenced plots.
Add `CrossHair.add_plot()` for adding new plots dynamically.

Just, smh.
2020-10-02 12:13:28 -04:00
Tyler Goodlet c56aee6347 Use array of names for lookup 2020-10-02 12:13:28 -04:00
Tyler Goodlet 788771bd75 Change name to qtractor 2020-10-02 12:13:28 -04:00
Tyler Goodlet 3aebeb5801 Standardize ohlc dtype 2020-10-02 12:13:28 -04:00
Tyler Goodlet e5bca1e089 Fix import error 2020-10-02 12:13:28 -04:00
Tyler Goodlet 88fb7a8951 Handle overloaded arg 2020-10-02 12:13:28 -04:00
Tyler Goodlet 1a1e768126 Port to new data apis 2020-10-02 12:13:28 -04:00
Tyler Goodlet 6802675637 Add kraken to backend list 2020-10-02 12:13:28 -04:00
Tyler Goodlet f9084b8650 Store lines graphics in struct array to simplify indexing 2020-10-02 12:13:28 -04:00
Tyler Goodlet 4ceffdd83f Drop kivy stuff from docs 2020-10-02 12:13:28 -04:00
Tyler Goodlet 2dd596ec6c Deps bump 2020-10-02 12:13:28 -04:00
Tyler Goodlet b9224cd396 Add WIP real-time 5s bar charting 2020-10-02 12:13:28 -04:00
Tyler Goodlet 4c5bc19ec7 Always convert to posix time 2020-10-02 12:13:28 -04:00
Tyler Goodlet 5f89a2bf08 Make run_qtrio invoke tractor at top level 2020-10-02 12:13:28 -04:00
Tyler Goodlet 2dec32e41f Move bar generation into func; support bar appends
There's really nothing coupling it to the graphics class (which frankly
also seems like it doesn't need to be a class.. Qt).

Add support to `.update_from_array()` for diffing with the input array
and creating additional bar-lines where necessary. Note, there are still
issues with the "correctness" here in terms of bucketing open/close
values in the time frame / bar range. Also, this jamming of each bar's 3
lines into a homogeneous array seems like it could be better done with
struct arrays and avoid all this "index + 3" stuff.
2020-10-02 12:13:28 -04:00
Tyler Goodlet 3c55f7c6e2 Use structure array indexing syntax 2020-10-02 12:13:28 -04:00
Tyler Goodlet 9c1d64413e Handle flat bar updates
Flat bars have a rendering issue we work around by hacking values in `QLineF`
but we have to revert those on any last bar that is being updated in
real-time. Comment out candle implementations for now; we can get back
to it if/when the tinas unite. Oh, and make bars have a little space
between them.
2020-10-02 12:13:28 -04:00
Tyler Goodlet 6b1bdbe3ea Docs the ui pkg mod 2020-10-02 12:13:28 -04:00
Tyler Goodlet 013c0fef15 Fix a bunch of scrolling / panning logic
Don't allow zooming to less then a min number of data points. Allow
panning "outside" the data set (i.e. moving one of the sequence "ends"
to the middle of the view. Start adding logging.
2020-10-02 12:13:28 -04:00
Tyler Goodlet 4c753b5ee6 Add ib 2020-10-02 12:13:28 -04:00
Tyler Goodlet ecfa6d33aa Use msgpack-numpy 2020-10-02 12:13:28 -04:00
Tyler Goodlet 16e2e27cb8 Handle high = low bars
For whatever reason if the `QLineF` high/low values are the same a weird
little rectangle is drawn (my guess is a `float` precision error of some
sort). Instead, if they're the same just use one of the values.
Also, store local vars to avoid so many lookups.
2020-10-02 12:13:28 -04:00
Tyler Goodlet 7a660b335d Make search work with ib backend 2020-10-02 12:13:28 -04:00
Tyler Goodlet 99c18abfea Add symbol search to broker api 2020-10-02 12:13:28 -04:00
Tyler Goodlet 2f1fdaf9e5 Rework charting internals for real-time plotting
`pg.PlotCurveItem.setData()` is normally used for real-time updates to
curves and takes in a whole new array of data to graphics.
It makes sense to stick with this interface especially if
the current datum graphic will originally be drawn from tick quotes and
later filled in when bars data is available (eg. IB has this option in
TWS charts for volume). Additionally, having a data feed api where the push
process/task can write to shared memory and the UI task(s) can read from
that space is ideal. It allows for indicator and algo calculations to be
run in parallel (via actors) with initial price draw instructions
such that plotting of downstream metrics can be "pipelined" into the
chart UI's render loop. This essentially makes the chart UI async
programmable from multiple remote processes (or at least that's the
goal).

Some details:
- Only store a single ref to the source array data on the
  `LinkedSplitCharts`.  There should only be one reference since the main
  relation is **that** x-time aligned sequence.
- Add `LinkedSplitCharts.update_from_quote()` which takes in a quote
  dict and updates the OHLC array from it's contents.
- Add `ChartPlotWidget.update_from_array()` method to trigger graphics
  updates per chart with consideration for overlay curves.
2020-10-02 12:13:28 -04:00
Tyler Goodlet 5e8e48c7b7 Support updating bars graphics from array
This makes a OHLC graphics "sequence" update very similar (actually API
compatible) with `pg.PlotCurveItem.setData()`. The difference here is
that only latest OHLC datum is used to update the charts last bar.
2020-10-02 12:13:28 -04:00
Tyler Goodlet 048a13dd0e Drop disk caching of quotes 2020-10-02 12:13:28 -04:00
Tyler Goodlet 6ba0692851 Revert weird bad .time access 2020-10-02 12:13:28 -04:00
Tyler Goodlet d993147f78 Factor signalling api into new module 2020-10-02 12:13:28 -04:00
Tyler Goodlet cc4b51cb17 Rip out all usage of `quantdom.bases.Quotes` smh. 2020-10-02 12:13:28 -04:00
Tyler Goodlet 14bff66ec5 Add a sane pandas.DataFrame to recarray converter 2020-10-02 12:13:28 -04:00
Tyler Goodlet 0b5af4b590 Move all Qt components into top level ui module 2020-10-02 12:13:28 -04:00
Tyler Goodlet 82a5daf91b Move all kivy ui components to subpackage 2020-10-02 12:13:28 -04:00
Tyler Goodlet 9d6dffe5ec Cleanup yrange auto-update callback
This was a mess before with a weird loop using the parent split charts
to update all "indicators". Instead just have each plot do its own
yrange updates since the signals are being handled just fine per plot.
Handle both the OHLC and plane line chart cases with a hacky `try:,
except IndexError:` for now.

Oh, and move the main entry point for the chart app to the relevant
module. I added some WIP bar update code for the moment.
2020-10-02 12:13:28 -04:00
Tyler Goodlet 36ac26cdcf Add zeroed ohlc array constructor 2020-10-02 12:13:28 -04:00
Tyler Goodlet 51f302191a Add update method for last bars graphic 2020-10-02 12:13:28 -04:00
Tyler Goodlet b82587f665 Use a single array for all lines
Speed up the lines array creation using proper slice assignment.
This gives another 10% speedup to the historical price rendering.
Drop ``_tina_mode`` support for now since we're not testing it.
2020-10-02 12:13:28 -04:00
Tyler Goodlet 45906c2729 Render plots from provided input sequence(s)
Previously graphics were loaded and rendered implicitly during the
import and creation of certain objects. Remove all this and instead
expect client code to pass in the OHLC sequence to plot. Speed up
the bars graphics rendering by simplifying to a single iteration of
the input array; gives about a 2x speedup.
2020-10-02 12:13:28 -04:00
Tyler Goodlet f77a39ceb7 Add symbol-info command 2020-10-02 12:13:28 -04:00
Tyler Goodlet 613564b0f5 Add ui package mod 2020-10-02 12:13:28 -04:00
Tyler Goodlet 507368a13a Don't scroll right after max zoom 2020-10-02 12:13:28 -04:00
Tyler Goodlet 6fa173a1c1 Factor components into more suitably named modules 2020-10-02 12:13:28 -04:00
Tyler Goodlet ac389c30d9 Move drawing and resize behavior into chart widget 2020-10-02 12:13:28 -04:00
Tyler Goodlet d8ca799504 Start grouping interactions into a ``ViewBox``
Move chart resize code into our ``ViewBox`` subtype (a ``ChartView``)
in an effort to start organizing interaction behaviour closer to the
appropriate underlying objects. Add some docs for all this and do some
renaming.
2020-10-02 12:13:28 -04:00
Tyler Goodlet fbce0334ad Lol I guess we probably need this 2020-10-02 12:13:28 -04:00
Tyler Goodlet a7fe18cba9 Factor common chart configuration 2020-10-02 12:13:28 -04:00
Tyler Goodlet 730241bb8a Add scrolling from right and cross-hair
Modify the default ``ViewBox`` scroll to zoom behaviour such that
whatever right-most point is visible is used as the "center" for
zooming. Add a "traditional" cross-hair cursor.
2020-10-02 12:13:28 -04:00