WIP add non-working m4 ds code to ohlc graphic
parent
6d1a3dfdc5
commit
a3817d7644
|
@ -25,6 +25,7 @@ from typing import (
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import pyqtgraph as pg
|
import pyqtgraph as pg
|
||||||
|
from numpy.lib import recfunctions as rfn
|
||||||
from numba import njit, float64, int64 # , optional
|
from numba import njit, float64, int64 # , optional
|
||||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||||
from PyQt5.QtCore import QLineF, QPointF
|
from PyQt5.QtCore import QLineF, QPointF
|
||||||
|
@ -35,7 +36,7 @@ from .._profile import pg_profile_enabled
|
||||||
from ._style import hcolor
|
from ._style import hcolor
|
||||||
from ..log import get_logger
|
from ..log import get_logger
|
||||||
from ._curve import FastAppendCurve
|
from ._curve import FastAppendCurve
|
||||||
from ._compression import hl2mxmn
|
from ._compression import hl2mxmn, ds_m4
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from ._chart import LinkedSplits
|
from ._chart import LinkedSplits
|
||||||
|
@ -226,7 +227,6 @@ class BarItems(pg.GraphicsObject):
|
||||||
# that mode?
|
# that mode?
|
||||||
self.setCacheMode(QtWidgets.QGraphicsItem.DeviceCoordinateCache)
|
self.setCacheMode(QtWidgets.QGraphicsItem.DeviceCoordinateCache)
|
||||||
|
|
||||||
|
|
||||||
self._pi = plotitem
|
self._pi = plotitem
|
||||||
self.path = QtGui.QPainterPath()
|
self.path = QtGui.QPainterPath()
|
||||||
# not sure if this is actually impoving anything but figured it
|
# not sure if this is actually impoving anything but figured it
|
||||||
|
@ -320,24 +320,47 @@ class BarItems(pg.GraphicsObject):
|
||||||
|
|
||||||
# determine current potential downsampling value (based on pixel
|
# determine current potential downsampling value (based on pixel
|
||||||
# scaling) and return any existing curve for it.
|
# scaling) and return any existing curve for it.
|
||||||
curve, ds = self.get_ds_line(ds=ds)
|
curve, ds = self.get_ds_line(ds=0)
|
||||||
|
|
||||||
# curve = self._ds_lines.get(ds)
|
# curve = self._ds_lines.get(ds)
|
||||||
# if current and current != curve:
|
# if current and current != curve:
|
||||||
# current.hide()
|
# current.hide()
|
||||||
|
|
||||||
# if no curve for this downsample rate yet, allowcate a new one
|
# if no curve for this downsample rate yet, allowcate a new one
|
||||||
|
|
||||||
|
# if not self.linked.chart:
|
||||||
|
# return None, None
|
||||||
|
|
||||||
|
index = ohlc['index']
|
||||||
|
flat = rfn.structured_to_unstructured(
|
||||||
|
ohlc[['open', 'high', 'low', 'close']]
|
||||||
|
).flatten()
|
||||||
|
xpts = np.linspace(start=index[0] - 0.5, stop=index[-1] + 0.5, num=4*len(ohlc))
|
||||||
|
|
||||||
|
# bins, x, ds = ds_m4(
|
||||||
|
# xpts,
|
||||||
|
# flat,
|
||||||
|
# # px_width=self.linked.chart.curve_width_pxs()
|
||||||
|
# px_width=self.getViewBox().width(),
|
||||||
|
# )
|
||||||
|
# breakpoint()
|
||||||
|
|
||||||
|
mxmn, x = hl2mxmn(ohlc)
|
||||||
|
|
||||||
|
# if self._ds_line:
|
||||||
|
# self._pi.removeItem(self._ds_line)
|
||||||
|
|
||||||
if not curve:
|
if not curve:
|
||||||
mxmn, x = hl2mxmn(ohlc, downsample_by=ds)
|
|
||||||
curve = FastAppendCurve(
|
curve = FastAppendCurve(
|
||||||
|
# y=ds.flatten(),
|
||||||
y=mxmn,
|
y=mxmn,
|
||||||
x=x,
|
x=x,
|
||||||
name='ohlc_ds_line',
|
name='ds',
|
||||||
color=self._color,
|
color=self._color,
|
||||||
# color='dad_blue',
|
# color='dad_blue',
|
||||||
# use_polyline=True, # pretty sure this is slower?
|
# use_polyline=True, # pretty sure this is slower?
|
||||||
)
|
)
|
||||||
# self._pi.addItem(curve)
|
self._pi.addItem(curve)
|
||||||
self._ds_lines[ds] = curve
|
self._ds_lines[ds] = curve
|
||||||
self._ds_line = curve
|
self._ds_line = curve
|
||||||
|
|
||||||
|
@ -350,12 +373,24 @@ class BarItems(pg.GraphicsObject):
|
||||||
# can just be read and rendered to graphics on events of our
|
# can just be read and rendered to graphics on events of our
|
||||||
# choice.
|
# choice.
|
||||||
# diff = do_diff(ohlc, new_bit)
|
# diff = do_diff(ohlc, new_bit)
|
||||||
mxmn, x = hl2mxmn(ohlc, downsample_by=ds)
|
# mxmn, x = hl2mxmn(ohlc, downsample_by=ds)
|
||||||
|
|
||||||
|
# always refresh data bounds until we get diffing
|
||||||
|
# working properly, see below..
|
||||||
|
# curve._xrange = curve.dataBounds(ax=0)
|
||||||
|
|
||||||
|
# TODO: we need to do a diff here to determine
|
||||||
|
# which ohlc samples have not yet been converted
|
||||||
|
# to tracer lines.
|
||||||
|
# index = ohlc['index']
|
||||||
|
# istart, istop = curve._xrange
|
||||||
|
# curve.path = None
|
||||||
|
# print(x[-10:])
|
||||||
curve.update_from_array(
|
curve.update_from_array(
|
||||||
y=mxmn,
|
y=mxmn,
|
||||||
x=x,
|
x=x,
|
||||||
)
|
)
|
||||||
|
# curve.update()
|
||||||
self._ds = ds
|
self._ds = ds
|
||||||
|
|
||||||
return curve, ds
|
return curve, ds
|
||||||
|
@ -380,9 +415,8 @@ class BarItems(pg.GraphicsObject):
|
||||||
|
|
||||||
'''
|
'''
|
||||||
# XXX: always do this?
|
# XXX: always do this?
|
||||||
if self._in_ds:
|
if self._ds_line:
|
||||||
curve, ds = self.update_ds_line(ohlc)
|
curve, ds = self.update_ds_line(ohlc)
|
||||||
return
|
|
||||||
|
|
||||||
# index = self.start_index
|
# index = self.start_index
|
||||||
istart, istop = self._xrange
|
istart, istop = self._xrange
|
||||||
|
|
Loading…
Reference in New Issue