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 __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
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)