• 在庆祝海南建省办经济特区30周年大会上的讲话 2019-10-07
  • 俄罗斯世界杯F组:球迷风采 2019-09-24
  • 彭于晏廖凡曝姜文“精神洁癖” 2019-09-24
  • 苏州大学研究生支教团网上众筹资助留守儿童 2019-09-23
  • 湖北政务微信排行榜第187期出炉 交警类公号表现亮眼 2019-09-19
  • 【奋斗吧2018】风电检修工——荒原上的“听风者” 2019-08-31
  • 母亲节又送康乃馨?送这样的健康佳品才走心 2019-08-30
  • [酷]此文已经把马克思理论、边际理论、人类需求层次理论、生物学理论、心理学理论、社会管理学理论等理论在哲学层面完美融合了! 2019-08-26
  • 兰芝雪纱修颜气垫隔离霜 2019-07-27
  • “鹊桥”中继星顺利进入使命轨道运行 2019-07-27
  • 超越舆情管理的360度信息决策 2019-07-22
  • 视频陶然居变形记:从路边小饭馆到全国餐饮十强 2019-07-21
  • 防震减灾事业发展的重要理论成果 2019-07-20
  • 珠宝配美人!李冰冰大片衣着性感秀身段 2019-07-20
  • 机器人也能拥有“情商”?这个可以有 2019-07-19
  • 香港赛马会跑马图:使用PyQtGraph绘制精美的股票行情K线图的示例代码

     更新时间:2019年03月14日 11:11:45   作者:otter1010   我要评论
    这篇文章主要介绍了使用PyQtGraph绘制精美的股票行情K线图的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    香港赛马会网站惠泽社绝杀八码 www.mwcrz.tw 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 sys
    reload(sys)
    sys.setdefaultencoding('utf-8')
    from PyQt4 import QtCore, QtGui
    import datetime
    import pyqtgraph as pg
    import tushare as ts
    
    try:
      _fromUtf8 = QtCore.QString.fromUtf8
    except AttributeError:
      def _fromUtf8(s):
        return s
    
    try:
      _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, t
    
    class 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_())
    
    

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    相关文章

    • Python下载网络小说实例代码

      Python下载网络小说实例代码

      这篇文章主要介绍了Python下载网络小说实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
      2018-02-02
    • python 用for循环实现1~n求和的实例

      python 用for循环实现1~n求和的实例

      今天小编就为大家分享一篇python 用for循环实现1~n求和的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
      2019-02-02
    • Python编程实现微信企业号文本消息推送功能示例

      Python编程实现微信企业号文本消息推送功能示例

      这篇文章主要介绍了Python编程实现微信企业号文本消息推送功能,结合实例形式分析了Python微信企业号文本消息推送接口的调用相关操作技巧,需要的朋友可以参考下
      2017-08-08
    • Python数据可视化教程之Matplotlib实现各种图表实例

      Python数据可视化教程之Matplotlib实现各种图表实例

      这篇文章主要给大家介绍了关于Python数据可视化教程之利用Matplotlib实现各种图表的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
      2019-01-01
    • 跟老齐学Python之不要红头文件(2)

      跟老齐学Python之不要红头文件(2)

      在前面学习了基本的打开和建立文件之后,就可以对文件进行多种多样的操作了。请看官要注意,文件,不是什么特别的东西,就是一个对象,如同对待此前学习过的字符串、列表等一样。
      2014-09-09
    • python爬虫之爬取百度音乐的实现方法

      python爬虫之爬取百度音乐的实现方法

      今天小编就为大家分享一篇python爬虫之爬取百度音乐的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
      2019-08-08
    • Python中表达式x += y和x = x+y 的区别详解

      Python中表达式x += y和x = x+y 的区别详解

      这篇文章主要跟大家介绍了关于Python中x += y和x = x+y 的区别的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
      2017-06-06
    • Python文件右键找不到IDLE打开项解决办法

      Python文件右键找不到IDLE打开项解决办法

      这篇文章主要介绍了Python文件右键找不到IDLE打开项解决办法,本文使用注册表解决了这个问题,需要的朋友可以参考下
      2015-06-06
    • python版本坑:md5例子(python2与python3中md5区别)

      python版本坑:md5例子(python2与python3中md5区别)

      这篇文章主要介绍了python版本坑:md5例子(python2与python3中md5区别),需要的朋友可以参考下
      2017-06-06
    • OpenCV-Python实现轮廓检测实例分析

      OpenCV-Python实现轮廓检测实例分析

      这篇文章主要介绍了OpenCV-Python实现轮廓检测实例分析,具有一定借鉴价值,需要的朋友可以参考下
      2018-01-01

    最新评论

  • 在庆祝海南建省办经济特区30周年大会上的讲话 2019-10-07
  • 俄罗斯世界杯F组:球迷风采 2019-09-24
  • 彭于晏廖凡曝姜文“精神洁癖” 2019-09-24
  • 苏州大学研究生支教团网上众筹资助留守儿童 2019-09-23
  • 湖北政务微信排行榜第187期出炉 交警类公号表现亮眼 2019-09-19
  • 【奋斗吧2018】风电检修工——荒原上的“听风者” 2019-08-31
  • 母亲节又送康乃馨?送这样的健康佳品才走心 2019-08-30
  • [酷]此文已经把马克思理论、边际理论、人类需求层次理论、生物学理论、心理学理论、社会管理学理论等理论在哲学层面完美融合了! 2019-08-26
  • 兰芝雪纱修颜气垫隔离霜 2019-07-27
  • “鹊桥”中继星顺利进入使命轨道运行 2019-07-27
  • 超越舆情管理的360度信息决策 2019-07-22
  • 视频陶然居变形记:从路边小饭馆到全国餐饮十强 2019-07-21
  • 防震减灾事业发展的重要理论成果 2019-07-20
  • 珠宝配美人!李冰冰大片衣着性感秀身段 2019-07-20
  • 机器人也能拥有“情商”?这个可以有 2019-07-19
  • 时时彩对应码大全1=579 mg游戏中心 拉你玩加拿大28的是托吗 彩名堂免费计划官网4.0 澳洲f1赛车精准计划 游戏《森林》手机版 北京pk10计划在线计划 万能三码公式码 最新捕鱼游戏手机版 老重庆时时开奖号码