python 股票k线图_Python数据可视化:使用PyQtGraph绘制精美股票K线图

原标题:Python数据可视化:使用PyQtGraph绘制精美股票K线图

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!

importsys

reload(sys)

sys.setdefaultencoding( 'utf-8')

fromPyQt4 importQtCore, QtGui

importdatetime

importpyqtgraph aspg

importtushare asts

try:

_fromUtf8 = QtCore.QString.fromUtf8

exceptAttributeError:

def_fromUtf8(s):

returns

try:

_encoding = QtGui.QApplication.UnicodeUTF8

def_translate(context, text, disambig):

returnQtGui.QApplication.translate(context, text, disambig, _encoding)

exceptAttributeError:

def_translate(context, text, disambig):

returnQtGui.QApplication.translate(context, text, disambig)

classUi_MainWindow(object):

defsetupUi(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)

defretranslateUi(self, MainWindow):

MainWindow.setWindowTitle(_translate( "MainWindow", "MainWindow", None))

classDrawChart:

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

defpyqtgraphDrawChart(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)

returnself.plt

except:

returnpg.PlotWidget

defgetData(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

fordates, row inself.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

returndata_list, t

classCandlestickItem(pg.GraphicsObject):

def__init__(self, data):

pg.GraphicsObject.__init__(self)

self.data = data

self.generatePicture

defgeneratePicture(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) inself.data:

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

ifprema5 != 0:

p.setPen(pg.mkPen( 'w'))

p.setBrush(pg.mkBrush( 'w'))

p.drawLine(QtCore.QPointF(t- 1, prema5), QtCore.QPointF(t, ma5))

prema5 = ma5

ifprema10 != 0:

p.setPen(pg.mkPen( 'c'))

p.setBrush(pg.mkBrush( 'c'))

p.drawLine(QtCore.QPointF(t- 1, prema10), QtCore.QPointF(t, ma10))

prema10 = ma10

ifprema20 != 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

defpaint(self, p, *args):

p.drawPicture( 0, 0, self.picture)

defboundingRect(self):

returnQtCore.QRectF(self.picture.boundingRect)

if__name__ == "__main__":

importsys

app = QtGui.QApplication(sys.argv)

MainWindow = QtGui.QMainWindow

ui = Ui_MainWindow

ui.setupUi(MainWindow)

MainWindow.show

sys.exit(app.exec_)

运行效果如下:

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

完整代码下载:

关注Linux公社微信公众号( linuxidc_com),(见https://www.linuxidc.com/Linux/2013-12/93755.htm)发送“ 股票”即可获得本文Python代码。

本文永久更新链接地址:https://www.linuxidc.com/返回搜狐,查看更多

责任编辑:

你可能感兴趣的:(python,股票k线图)