def __init__(self, data): self.data = data self.app = QApplication(sys.argv) self.series = QtChart.QCandlestickSeries() self.series.setDecreasingColor(Qt.red) self.series.setIncreasingColor(Qt.green) self.ma5 = qc.QLineSeries() self.tm = [] for num, o, h, l, c, m in self.data: self.series.append(QtChart.QCandlestickSet(o, h, l, c)) self.ma5.append(QPointF(num, m)) self.tm.append(str(num)) self.chart = QtChart.QChart() self.chart.addSeries(self.series) # candle self.chart.addSeries(self.ma5) # ma5 line self.chart.createDefaultAxes() self.chart.legend().hide() self.chart.axisX(self.series).setCategories(self.tm) self.chart.axisX(self.ma5).setVisible(False) self.chartview = QtChart.QChartView(self.chart) self.ui = QMainWindow() self.ui.setGeometry(50, 50, 500, 300) self.ui.setCentralWidget(self.chartview) self.ui.show() sys.exit(self.app.exec_())
def to_qt_data(self, x): qt_data = QtChart.QCandlestickSet() qt_data.setOpen(self.open) qt_data.setClose(self.close) qt_data.setHigh(self.high) qt_data.setLow(self.low) qt_data.setTimestamp(x) return qt_data
def append_data_and_plot(self, d): '''Append and update the plot''' num, o, h, l, c, m = d self.series.append(QtChart.QCandlestickSet(o, h, l, c)) self.ui.show()
def updateCandleChart(self, data, N): """Update candle chart display. :param data: numpy array representing candles :param N: number of candles in the array """ if data is None or data == []: return timestamps = data[0, -N:].astype(int).tolist() open = data[1, -N:].tolist() high = data[2, -N:].tolist() low = data[3, -N:].tolist() close = data[4, -N:].tolist() # remove candlestick data if self.candlestickSeries.count() > 0: self.candlestickSeries.remove(self.candlestickSeries.sets()) # add new candlestick data for i, ts in enumerate(timestamps): candle_set = QtChart.QCandlestickSet(open[i], high[i], low[i], close[i], timestamp=ts) self.setCandleColors(candle_set) self.candlestickSeries.append(candle_set) # set candlestick time axes (hidden) axisXtime = QtChart.QBarCategoryAxis() axisXtime.setCategories([str(int(x / 1000)) for x in timestamps]) axisXtime.setGridLineVisible(False) axisXtime.hide() self.ax = QtChart.QValueAxis() self.ax.setRange(0, len(axisXtime)) self.ax.setGridLineVisible(False) self.ax.hide() # set pen for lines and grid lines line_pen = QtGui.QPen(QtGui.QColor(0, 0, 0), 0.5) grid_line_pen = QtGui.QPen(QtGui.QColor(80, 80, 80), 0.5) # set visible time axes with selected time ticks axisXticks = QtChart.QCategoryAxis() axisXticks.setLabelsPosition( QtChart.QCategoryAxis.AxisLabelsPositionOnValue) for ts, index in self.extractNiceCategories(timestamps): axisXticks.append(ts, index) axisXticks.setGridLineVisible(True) axisXticks.setGridLinePen(grid_line_pen) axisXticks.setLinePen(line_pen) axisXticks.setStartValue(-1) # set y axes (prices) max_val = max(high) min_val = min(low) self.ay = QtChart.QValueAxis() self.ay.setGridLinePen(grid_line_pen) self.ay.setLinePen(line_pen) self.ay.setMax(max_val) self.ay.setMin(min_val) self.ay.applyNiceNumbers() # set y axes font font = self.ay.labelsFont() font.setPointSize(8) self.ay.setLabelsFont(font) # remove old axes for axis in self.candlestickSeries.attachedAxes(): self.candlestickSeries.detachAxis(axis) self.removeAxis(axis) # add updated axes self.addAxis(axisXtime, QtCore.Qt.AlignTop) self.addAxis(axisXticks, QtCore.Qt.AlignBottom) self.addAxis(self.ax, QtCore.Qt.AlignBottom) self.addAxis(self.ay, QtCore.Qt.AlignRight) # attach updated axes to data series self.candlestickSeries.attachAxis(axisXtime) self.candlestickSeries.attachAxis(axisXticks) self.candlestickSeries.attachAxis(self.ay) # update hover line x axes for axis in self.hoverLine.attachedAxes(): self.hoverLine.detachAxis(axis) self.hoverLine.attachAxis(self.ay)