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 __init__(self, parent=None):
        super().__init__(parent)
        self.series = QtChart.QCandlestickSeries()
        self.series.setUseOpenGL(True)
        self.chart = QtChart.QChart()
        self.chart.addSeries(self.series)
        self.setChart(self.chart)

        # x axis
        self.x_scrolling = QtChart.QValueAxis()  # x axis used for scrolling
        self.x_scrolling.setTickType(QtChart.QValueAxis.TicksFixed)
        self.x_scrolling.setLabelsVisible(False)
        self.x_scrolling.setVisible(False)
        self.chart.setAxisX(self.x_scrolling, self.series)

        # y axis
        self.y = QtChart.QValueAxis()
        self.y.setTitleText("price")

        self.chart.setAxisY(self.y, self.series)
        self.chart.legend().hide()
        self.chart.setTitle("BarData")

        # visual control
        self.days_to_show = 20
        self.price_window_scale = 1.1
        self.showing_index_end = 0  # 非正数表示数组最末尾的第n个,正数表示除了显示最新的数据以外还额外显示空白数据

        self.indicator: Optional[Indicator] = None
        self.crosshair_h: Optional[QGraphicsLineItem] = None
        self.crosshair_v: Optional[QGraphicsLineItem] = None
        self.indicator_index = None  # index in self.showing_records

        # config
        self.x_zoom_scale_ratio = 0.5
        self.max_padding_days = 3  # 最多显示的空白数据数量,也就是限制self.showing_index_end的最大值
        self.y_label_count = 30
        self.y_scale_threshold = 1.1

        # status variables
        self.dragging = False
        self.dragging_info: Optional[DraggingInfo] = None

        self.showing_records: List["InternalData"] = []

        # data record(use model/view to reduce memory if necessary)
        self.datas: List["InternalData"] = []

        # intermediate variables to speed up calculation
        self.y_range = 1  # used in redraw_indicator
        self.y_min = 1  # used in redraw_indicator
        self.y_max = 1  # used in redraw_indicator

        # redraw
        self.redraw_lock = Lock()
        self.redraw_scheduled = False
        self.redraw_y_lock = Lock()
        self.redraw_y_scheduled = False
Ejemplo n.º 3
0
    def __init__(self):
        super(CandleChart, self).__init__()

        # set margins, colors and font
        self.setBackgroundBrush(QtGui.QBrush(QtGui.QColor(0, 0, 0)))
        self.setBackgroundRoundness(0)
        self.layout().setContentsMargins(0, 0, 0, 0)
        self.setMargins(QtCore.QMargins(0, 0, 0, 0))
        self.legend().hide()
        chartFont = QtGui.QFont(self.font())
        chartFont.setPixelSize(9)
        self.setFont(chartFont)

        self.candlestickSeries = QtChart.QCandlestickSeries()
        self.candlestickSeries.setIncreasingColor(QtCore.Qt.black)
        self.candlestickSeries.setDecreasingColor(QtCore.Qt.red)
        self.addSeries(self.candlestickSeries)

        # add hover line and price tag
        self.setAcceptHoverEvents(True)
        self.hoverLinePriceTag = QtWidgets.QGraphicsSimpleTextItem(self)
        self.hoverLinePriceTag.setBrush(
            QtGui.QBrush(QtGui.QColor(255, 255, 255)))
        self.hoverLinePriceTag.setOpacity(1.0)
        self.hoverLine = QtChart.QLineSeries()
        hoverPen = QtGui.QPen(QtCore.Qt.DashLine)
        hoverPen.setColor(QtCore.Qt.white)
        hoverPen.setWidthF(0.5)
        hoverPen.setDashPattern([5, 10])
        self.hoverLine.setPen(hoverPen)
        self.hoverLineAxisX = QtChart.QValueAxis()
        self.hoverLineAxisX.hide()
        self.hoverLineAxisX.setRange(0, 1)
        self.addSeries(self.hoverLine)
        self.addAxis(self.hoverLineAxisX, QtCore.Qt.AlignBottom)
        self.hoverLine.attachAxis(self.hoverLineAxisX)