Rip out all usage of `quantdom.bases.Quotes` smh.
parent
feccadc331
commit
48f266e276
|
@ -5,7 +5,7 @@ import pyqtgraph as pg
|
|||
from PyQt5 import QtCore, QtGui
|
||||
|
||||
|
||||
from .quantdom.base import Quotes
|
||||
# from .quantdom.base import Quotes
|
||||
from .quantdom.utils import fromtimestamp
|
||||
from ._style import _font
|
||||
|
||||
|
@ -36,10 +36,11 @@ class PriceAxis(pg.AxisItem):
|
|||
class FromTimeFieldDateAxis(pg.AxisItem):
|
||||
tick_tpl = {'D1': '%Y-%b-%d'}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
def __init__(self, splitter, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.splitter = splitter
|
||||
self.setTickFont(_font)
|
||||
self.quotes_count = len(Quotes) - 1
|
||||
# self.quotes_count = len(self.splitter.chart._array) - 1
|
||||
|
||||
# default styling
|
||||
self.setStyle(
|
||||
|
@ -56,10 +57,13 @@ class FromTimeFieldDateAxis(pg.AxisItem):
|
|||
# strings = super().tickStrings(values, scale, spacing)
|
||||
s_period = 'D1'
|
||||
strings = []
|
||||
quotes_count = len(self.splitter.chart._array) - 1
|
||||
|
||||
for ibar in values:
|
||||
if ibar > self.quotes_count:
|
||||
if ibar > quotes_count:
|
||||
return strings
|
||||
dt_tick = fromtimestamp(Quotes[int(ibar)].time)
|
||||
bars = self.splitter.chart._array
|
||||
dt_tick = fromtimestamp(bars[int(ibar)].time)
|
||||
strings.append(
|
||||
dt_tick.strftime(self.tick_tpl[s_period])
|
||||
)
|
||||
|
@ -140,9 +144,10 @@ class XAxisLabel(AxisLabel):
|
|||
def tick_to_string(self, tick_pos):
|
||||
# TODO: change to actual period
|
||||
tpl = self.parent.tick_tpl['D1']
|
||||
if tick_pos > len(Quotes):
|
||||
bars = self.parent.splitter.chart._array
|
||||
if tick_pos > len(bars):
|
||||
return 'Unknown Time'
|
||||
return fromtimestamp(Quotes[round(tick_pos)].time).strftime(tpl)
|
||||
return fromtimestamp(bars[round(tick_pos)].time).strftime(tpl)
|
||||
|
||||
def boundingRect(self): # noqa
|
||||
return QtCore.QRectF(0, 0, 145, 50)
|
||||
|
|
|
@ -16,7 +16,7 @@ from ._style import _xaxis_at
|
|||
from ._source import Symbol, ohlc_zeros
|
||||
|
||||
from .quantdom.charts import CenteredTextItem
|
||||
from .quantdom.base import Quotes
|
||||
# from .quantdom.base import Quotes
|
||||
# from .quantdom.const import ChartType
|
||||
from .quantdom.portfolio import Order, Portfolio
|
||||
|
||||
|
@ -101,10 +101,11 @@ class SplitterPlots(QtGui.QWidget):
|
|||
self.signals_visible = False
|
||||
self.indicators = []
|
||||
|
||||
self.xaxis = FromTimeFieldDateAxis(orientation='bottom')
|
||||
self.xaxis = FromTimeFieldDateAxis(orientation='bottom', splitter=self)
|
||||
# self.xaxis = pg.DateAxisItem()
|
||||
|
||||
self.xaxis_ind = FromTimeFieldDateAxis(orientation='bottom')
|
||||
self.xaxis_ind = FromTimeFieldDateAxis(
|
||||
orientation='bottom', splitter=self)
|
||||
|
||||
if _xaxis_at == 'bottom':
|
||||
self.xaxis.setStyle(showValues=False)
|
||||
|
@ -174,7 +175,9 @@ class SplitterPlots(QtGui.QWidget):
|
|||
self.chart.draw_ohlc(data)
|
||||
|
||||
# TODO: this is where we would load an indicator chain
|
||||
inds = [Quotes.open]
|
||||
# XXX: note, if this isn't index aligned with
|
||||
# the source data the chart will go haywire.
|
||||
inds = [data.open]
|
||||
|
||||
for d in inds:
|
||||
cv = ChartView()
|
||||
|
@ -377,8 +380,8 @@ class ChartPlotWidget(pg.PlotWidget):
|
|||
|
||||
# update view limits
|
||||
self.set_view_limits(
|
||||
data[0]['id'],
|
||||
data[-1]['id'],
|
||||
data[0]['index'],
|
||||
data[-1]['index'],
|
||||
data['low'].min(),
|
||||
data['high'].max()
|
||||
)
|
||||
|
@ -525,6 +528,7 @@ def main(symbol):
|
|||
from datetime import datetime
|
||||
|
||||
from ._exec import run_qtrio
|
||||
from ._source import from_df
|
||||
# uses pandas_datareader
|
||||
from .quantdom.loaders import get_quotes
|
||||
|
||||
|
@ -539,15 +543,28 @@ def main(symbol):
|
|||
date_from=datetime(1900, 1, 1),
|
||||
date_to=datetime(2030, 12, 31),
|
||||
)
|
||||
quotes = from_df(quotes)
|
||||
|
||||
# spawn chart
|
||||
splitter_chart = chart_app.load_symbol(symbol, quotes)
|
||||
import itertools
|
||||
nums = itertools.cycle([315., 320., 325.])
|
||||
nums = itertools.cycle([315., 320., 325., 310., 3])
|
||||
|
||||
def gen_nums():
|
||||
for i in itertools.count():
|
||||
yield quotes[-1].close + i
|
||||
yield quotes[-1].close - i
|
||||
|
||||
chart = splitter_chart.chart
|
||||
|
||||
nums = gen_nums()
|
||||
while True:
|
||||
await trio.sleep(0.05)
|
||||
splitter_chart.chart._graphics['ohlc'].update_last_bar(
|
||||
{'last': next(nums)})
|
||||
# splitter_chart.chart.plotItem.sigPlotChanged.emit(self)
|
||||
# breakpoint()
|
||||
await trio.sleep(0.1)
|
||||
new = next(nums)
|
||||
quotes[-1].close = new
|
||||
chart._graphics['ohlc'].update_last_bar({'last': new})
|
||||
|
||||
# LOL this clearly isn't catching edge cases
|
||||
chart._update_yrange_limits()
|
||||
|
||||
run_qtrio(_main, (), Chart)
|
||||
|
|
|
@ -11,7 +11,7 @@ from PyQt5 import QtCore, QtGui
|
|||
from PyQt5.QtCore import QLineF
|
||||
|
||||
from .quantdom.utils import timeit
|
||||
from .quantdom.base import Quotes
|
||||
# from .quantdom.base import Quotes
|
||||
|
||||
from ._style import _xaxis_at # , _tina_mode
|
||||
from ._axes import YAxisLabel, XAxisLabel
|
||||
|
@ -214,12 +214,12 @@ class BarItems(pg.GraphicsObject):
|
|||
# indexing here is as per the below comments
|
||||
lines[3*i:3*i+3] = (
|
||||
# high_to_low
|
||||
QLineF(q['id'], q['low'], q['id'], q['high']),
|
||||
QLineF(q['index'], q['low'], q['index'], q['high']),
|
||||
# open_sticks
|
||||
QLineF(q['id'] - self.w, q['open'], q['id'], q['open']),
|
||||
QLineF(q['index'] - self.w, q['open'], q['index'], q['open']),
|
||||
# close_sticks
|
||||
QtCore.QLineF(
|
||||
q['id'] + self.w, q['close'], q['id'], q['close'])
|
||||
q['index'] + self.w, q['close'], q['index'], q['close'])
|
||||
)
|
||||
else:
|
||||
self._last_quote = q
|
||||
|
|
Loading…
Reference in New Issue