日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python绘制k线图的步骤_Python使用PyQtGraph绘制股票行情K线图

發布時間:2025/3/19 python 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python绘制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!

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

運行效果如下:

以上就是本文的全部內容,希望對大家的學習有所幫助。

Ubuntu 18.04 + Python3 下完整代碼下載:

------------------------------------------分割線------------------------------------------

下載Linux公社1號FTP服務器

FTP地址:ftp://ftp1.linuxidc.com

用戶名:ftp1.linuxidc.com

密碼:www.linuxidc.com

在 2019年LinuxIDC.com/6月/Python使用PyQtGraph繪制股票行情K線圖/

------------------------------------------分割線------------------------------------------

總結

以上是生活随笔為你收集整理的python绘制k线图的步骤_Python使用PyQtGraph绘制股票行情K线图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。