国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

使用PyQtGraph繪制精美的股票行情K線圖的示例代碼

2020-01-04 13:37:06
字體:
來源:轉載
供稿:網友

pyqtgraph是Python平臺上一種功能強大的2D/3D繪圖庫,相對于matplotlib庫,由于其在內部實現方式上,使用了高速計算的numpy信號處理庫以及Qt的GraphicsView框架,因此它在大數據量的處理及快速顯示方面有著天然的優勢,非常適合于需要快速繪圖更新、視頻或實時交互性的操作場合,在數學、科學和工程領域都有著廣泛的應用。

K線圖介紹

對于股票交易者來講,K線圖是弄清股票一段時間走勢的一種最基本的圖形工具,K線分為陽線和陰線,陽線和陰線都包含了開盤價、收盤價、最高價和最低價,一般K線如下圖所示:

當收盤價大于開盤價時,稱為陽線,在圖形上一般用紅色表示,反之,當收盤價低于開盤價時,稱為陰線,在圖形上一般用綠色表示。由于其形狀頗似一根根蠟燭,K線圖有時也叫做蠟燭圖。

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'QWidget_plot.ui'## Created by: PyQt4 UI code generator 4.11.4## WARNING! All changes made in this file will be lost!import sysreload(sys)sys.setdefaultencoding('utf-8')from PyQt4 import QtCore, QtGuiimport datetimeimport pyqtgraph as pgimport tushare as tstry:  _fromUtf8 = QtCore.QString.fromUtf8except AttributeError:  def _fromUtf8(s):    return stry:  _encoding = QtGui.QApplication.UnicodeUTF8  def _translate(context, text, disambig):    return QtGui.QApplication.translate(context, text, disambig, _encoding)except AttributeError:  def _translate(context, text, disambig):    return QtGui.QApplication.translate(context, text, disambig)class Ui_MainWindow(object):  def setupUi(self, MainWindow):    MainWindow.setObjectName(_fromUtf8("MainWindow"))    MainWindow.resize(800, 600)    self.centralwidget = QtGui.QWidget(MainWindow)    self.centralwidget.setObjectName(_fromUtf8("centralwidget"))    self.verticalLayout_2 = QtGui.QVBoxLayout(self.centralwidget)    self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout"))    self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2"))    self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)    MainWindow.setCentralWidget(self.centralwidget)    self.menubar = QtGui.QMenuBar(MainWindow)    self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 31))    self.menubar.setObjectName(_fromUtf8("menubar"))    MainWindow.setMenuBar(self.menubar)    self.drawChart = DrawChart(ktype='D')    self.verticalLayout_2.addWidget(self.drawChart.pyqtgraphDrawChart())    self.retranslateUi(MainWindow)    QtCore.QMetaObject.connectSlotsByName(MainWindow)  def retranslateUi(self, MainWindow):    MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))class DrawChart():  def __init__(self, code='sz50', start=str(datetime.date.today() - datetime.timedelta(days=200)), end=str(datetime.date.today() + datetime.timedelta(days=1)), ktype='D'):    self.code = code    self.start = start    self.end = end    self.ktype = ktype    self.data_list, self.t = self.getData()  def pyqtgraphDrawChart(self):    try:      self.item = CandlestickItem(self.data_list)      self.xdict = {0: str(self.hist_data.index[0]).replace('-', '/'), int((self.t + 1) / 2) - 1: str(self.hist_data.index[int((self.t + 1) / 2)]).replace('-', '/'), self.t - 1: str(self.hist_data.index[-1]).replace('-', '/')}      self.stringaxis = pg.AxisItem(orientation='bottom')      self.stringaxis.setTicks([self.xdict.items()])      self.plt = pg.PlotWidget(axisItems={'bottom': self.stringaxis}, enableMenu=False)      self.plt.addItem(self.item)      # self.plt.showGrid(x=True, y=True)      return self.plt    except:      return pg.PlotWidget()  def getData(self):    self.start = str(datetime.date.today() - datetime.timedelta(days=150))    self.end = str(datetime.date.today() + datetime.timedelta(days=1))    self.hist_data = ts.get_hist_data(self.code, self.start, self.end, self.ktype).sort_index()[-300:-1]    data_list = []    t = 0    for dates, row in self.hist_data.iterrows():      open, high, close, low, volume, price_change, p_change, ma5, ma10, ma20 = row[:10]      datas = (t, open, close, low, high, volume, price_change, p_change, ma5, ma10, ma20)      data_list.append(datas)      t += 1    return data_list, tclass CandlestickItem(pg.GraphicsObject):  def __init__(self, data):    pg.GraphicsObject.__init__(self)    self.data = data    self.generatePicture()  def generatePicture(self):    self.picture = QtGui.QPicture()    p = QtGui.QPainter(self.picture)    p.setPen(pg.mkPen('w'))    w = (self.data[1][0] - self.data[0][0]) / 3.    prema5 = 0    prema10 = 0    prema20 = 0    for (t, open, close, min, max, volume, price_change, p_change, ma5, ma10, ma20) in self.data:      if open > close:        p.setPen(pg.mkPen('g'))        p.setBrush(pg.mkBrush('g'))      else:        p.setPen(pg.mkPen('r'))        p.setBrush(pg.mkBrush('r'))      p.drawLine(QtCore.QPointF(t, min), QtCore.QPointF(t, max))      p.drawRect(QtCore.QRectF(t - w, open, w * 2, close - open))      if prema5 != 0:        p.setPen(pg.mkPen('w'))        p.setBrush(pg.mkBrush('w'))        p.drawLine(QtCore.QPointF(t-1, prema5), QtCore.QPointF(t, ma5))      prema5 = ma5      if prema10 != 0:        p.setPen(pg.mkPen('c'))        p.setBrush(pg.mkBrush('c'))        p.drawLine(QtCore.QPointF(t-1, prema10), QtCore.QPointF(t, ma10))      prema10 = ma10      if prema20 != 0:        p.setPen(pg.mkPen('m'))        p.setBrush(pg.mkBrush('m'))        p.drawLine(QtCore.QPointF(t-1, prema20), QtCore.QPointF(t, ma20))      prema20 = ma20    p.end()  def paint(self, p, *args):    p.drawPicture(0, 0, self.picture)  def boundingRect(self):    return QtCore.QRectF(self.picture.boundingRect())if __name__ == "__main__":  import sys  app = QtGui.QApplication(sys.argv)  MainWindow = QtGui.QMainWindow()  ui = Ui_MainWindow()  ui.setupUi(MainWindow)  MainWindow.show()  sys.exit(app.exec_())

PyQtGraph,股票行情,K線圖,代碼

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临武县| 英吉沙县| 荔浦县| 白玉县| 云阳县| 龙胜| 辉南县| 沿河| 瑞安市| 会昌县| 沁源县| 通榆县| 阜南县| 闸北区| 新疆| 英德市| 武川县| 福鼎市| 宁城县| 社旗县| 呼图壁县| 田阳县| 盘锦市| 雷州市| 富川| 平谷区| 阜阳市| 车险| 延寿县| 临湘市| 阳朔县| 苍梧县| 东台市| 赣榆县| 玉环县| 清徐县| 通城县| 巴楚县| 石家庄市| 郑州市| 焦作市|