Ejemplo n.º 1
0
    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_())
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
 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()
Ejemplo n.º 4
0
    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)