コード例 #1
0
 def update(self, ohlc):
     if self._active:
         data = getattr(ohlc, self.name, None)
         if data:
             for p in self.plts:
                 self._update(p, ohlc, data)
                 V_logger.info(f'G↑更新{self.name}图表至{p}')
         else:
             for p in self.plts:
                 self._update(p, ohlc)
                 V_logger.info(f'G↑更新{self.name}图表至{p}')
コード例 #2
0
 def set_info_text(self, p, *args, **kwargs):
     try:
         if p in self.plt_texts:
             plt = self.plts[p]
             textitem = self.plt_texts[p]
             vbr = plt.vb.viewRange()
             info_text = self.info_text(p, *args, **kwargs)
             textitem.setHtml(info_text)
             p = self.text_pos[p]
             Pos = (vbr[p[0]][p[1]], vbr[p[2]][p[3]])
             textitem.setPos(*Pos)
     except Exception as e:
         V_logger.debug(f'set_info_text设置信息错误->{p}')
コード例 #3
0
 def init(self, ohlc):
     if not self._active:
         data = getattr(ohlc, self.name, None)
         self.text_pos = {}
         self.plt_texts = {}
         self.plt_items = {p_name: {} for p_name in self.plts}
         if data:
             for p in self.plts:
                 self._init(p, ohlc, data)
                 V_logger.info(f'G+初始化{self.name}图表至{p}')
         else:
             for p in self.plts:
                 self._init(p, ohlc)
                 V_logger.info(f'G+初始化{self.name}图表至{p}')
         self._active = True
コード例 #4
0
 def __init__(self, name, date_xaxis):
     super(plt_base, self).__init__(viewBox=pg.ViewBox(), name=name, axisItems={'bottom': date_xaxis})
     # vb = CustomViewBox()
     self.setMenuEnabled(False)
     # self.setClipToView(True)
     self.hideAxis('left')
     self.showAxis('right')
     self.setDownsampling(mode='peak')
     # # self.setRange(xRange=(0, 1), yRange=(0, 1))
     self.getAxis('right').setWidth(30)
     self.getAxis('right').setStyle(tickFont=QFont("Roman times", 6, QFont.Bold))
     self.getAxis('right').setPen(color=(255, 255, 255, 255), width=0.8)
     self.showGrid(True, True)
     self.hideButtons()
     V_logger.info(f'初始化{name}画布')
コード例 #5
0
    def _update(self, p, ohlc, trade_data):
        x = ohlc.x
        U = self.long_symbol
        D = self.short_symbol
        item = self.plt_items[p]
        try:
            item['open'].setData(
                x=x.reindex(trade_data.open.index.floor(ohlc.ktype)),
                y=trade_data['OpenPrice'],
                symbol=[U if t == 0 else D for t in trade_data['Type']],
                brush=trade_data['Status'].map({
                    2:
                    pg.mkBrush(QBrush(QColor(0, 0, 255))),
                    1:
                    pg.mkBrush(QBrush(QColor(255, 0, 255))),
                    0:
                    pg.mkBrush(QBrush(QColor(255, 255, 255)))
                }).tolist(),
                size=5)
        except Exception as e:
            V_logger.error(f'初始化交易数据标记TradeDataScatter-open失败')
        try:
            item['close'].setData(
                x=x.reindex(trade_data.close.index.floor(ohlc.ktype)),
                y=trade_data['ClosePrice'],
                symbol=[D if t == 0 else U for t in trade_data['Type']],
                brush=trade_data['Status'].map({
                    2:
                    pg.mkBrush(QBrush(QColor(255, 255, 0))),
                    1:
                    pg.mkBrush(QBrush(QColor(255, 0, 255))),
                    0:
                    pg.mkBrush(QBrush(QColor(255, 255, 255)))
                }).tolist(),
                size=5)
        except Exception as e:
            V_logger.error(f'初始化交易数据标记TradeDataScatter-open失败')

        # -------------------------------------------------------------------------------------------------------------
        def link_line(a, b):
            trade_data = ohlc.Trade_Data
            if a is item['open']:
                for i, d in enumerate(item['open'].data):
                    if b[0].pos().x() == d[0] and b[0].pos().y() == d[1]:
                        index = i
                        break
            elif a is item['close']:
                for i, d in enumerate(item['close'].data):
                    if b[0].pos().x() == d[0] and b[0].pos().y() == d[1]:
                        index = i
                        break

            open_x = item['open'].data[index][0]
            open_y = item['open'].data[index][1]
            open_symbol = item['open'].data[index][3]  # open_symbol来区别开仓平仓
            if trade_data["Status"].iloc[index] == 2:
                close_x = item['close'].data[index][0]
                close_y = item['close'].data[index][1]
            else:
                close_x = item['close'].data[index][0]
                close_y = ohlc._last_tick.Price if ohlc._last_tick else ohlc.data.iloc[
                    -1]['close']
            profit = round(close_y -
                           open_y, 2) if open_symbol == "t1" else round(
                               open_y - close_y, 2)
            pen_color_type = ((open_symbol == 't1') << 1) + (open_y < close_y)
            pen_color_map_dict = {0: 'r', 1: 'g', 2: 'g', 3: 'r'}
            item['link_line'].setData([[open_x, open_y], [close_x, close_y]],
                                      pen_color_map_dict[pen_color_type])
            self.set_info_text(p, trade_data, open_y, close_y, open_symbol,
                               profit, index)

        item['open'].sigClicked.connect(link_line)
        item['close'].sigClicked.connect(link_line)
コード例 #6
0
 def deinit(self):
     if self._active:
         for p in self.plts:
             self._deinit(p)
         V_logger.info(f'G-反初始化{self.name}图表')
         self._active = False