目录

  • 实时股票数据
  • 每笔交易详情数据
  • 绘制股票走势图与买卖盘数据

实时股票数据

接着上篇博文的内容,今天我们来实现获取与绘制实时的股票行情数据。首先,我们需要通过akshare库获取某一天的实时交易数据,具体代码如下所示:

import akshare as ak
df = ak.stock_zh_a_tick_tx(code="sh600690", trade_date="20210203")
df.to_excel("sh600690.xlsx")

获取之后,我们会得到如下数据:

其中,这里我们可以获取每3秒的股票实时交易变化的数据,同时获取当前交易是买盘还是卖盘,分别买卖多少手。当然,对于炒股新手来说,肯定有个东西很困惑,就是中性盘。在股票交易当中,按常规的逻辑我们不是卖,就是买,中性是个什么鬼?

其实,中性盘的意思是假如当前你挂委托单,卖出10手,而买盘当中,也有委托单,刚好也是10手,且两者价格一致,那么你们直接会匹配成交,这种交易叫做中性盘,可以理解为抵消掉了。

每笔交易详情数据

既然我们已经获取到了每日的股票交易详情数据,接下来要做的就是绘图,具体代码如下:

df = pd.read_excel("sh600690.xlsx")
df['成交时间'] = pd.to_datetime(df['成交时间'])
df['成交时间'] = df['成交时间'].apply(lambda x: x.strftime('%H:%M'))
fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(111)
plt.rcParams['font.sans-serif'] = ['SimHei']
ax.plot(np.arange(0, len(df["成交时间"])), df["成交价格"])
ax.xaxis.set_major_locator(ticker.MaxNLocator(20))def format_date(x, pos=None):if x < 0 or x > len(df['成交时间']) - 1:return ''return df['成交时间'][int(x)]ax.xaxis.set_major_formatter(ticker.FuncFormatter(format_date))
ax.grid(True)
plt.setp(plt.gca().get_xticklabels(), rotation=45, horizontalalignment='right')
plt.show()

运行之后,效果如下图所示:

绘制股票走势图与买卖盘数据

尽然我们已经知道了如何绘制走势图以及获取倒了买卖盘数据,那么根据上篇pyqt5的代码,我们将其加入到首页当中。具体代码如下所示:

# mian.py代码
def init_hometab(self):#第一篇代码self.mainThread = MainPlotThread()self.mainThread.setValue("sh600690")self.mainThread._signal.connect(self.mianThread_callbacklog)self.mainThread._orderList.connect(self.orderThread_callbacklog)self.mainThread.start()def mianThread_callbacklog(self, df):mpl = StockMplCanvas(self, width=5, height=4, dpi=100)mpl.start_staict_plot(df)mpl_ntb = NavigationToolbar(mpl, self)mpl_ntb.setStyleSheet("background-color:white;color:black")self.grid.addWidget(mpl, 2, 0, 12, 12)self.grid.addWidget(mpl_ntb, 2, 0, 1, 5)# 指数显示模块
def tableWidget_connect(self, item):QMessageBox.information(self, "QTableWidget", "你选择了" + item.text())def orderThread_callbacklog(self, urlList):ft = QFont()ft.setPointSize(10)ft.setBold(True)m_color = Nonej = 0if not self.isListView:self.tableWidget.clear()self.tableWidget.setHorizontalHeaderLabels(['性质', '成交量(手)', '成交额(元)'])for qlist in urlList:for index, m_dict in enumerate(qlist):if index == 0:if str(m_dict).strip() == "买盘":m_color = QColor(255, 0, 0)elif str(m_dict).strip() == "卖盘":m_color = QColor(0, 255, 0)else:m_color = QColor(255, 255, 255)newItem = QTableWidgetItem(str(m_dict))newItem.setFont(ft)newItem.setForeground(QBrush(m_color))self.tableWidget.setItem(j, index, newItem)j += 1else:# 各个板块指数self.tableWidget = QTableWidget(len(urlList), 3)self.tableWidget.setHorizontalHeaderLabels(['性质', '成交量(手)', '成交额(元)'])self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)  # 不可编辑self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Fixed)  # 禁止拖拽self.tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)  # 只能选中一行self.tableWidget.itemClicked.connect(self.tableWidget_connect)self.tableWidget.verticalHeader().setVisible(False)self.tableWidget.setShowGrid(False)  # 不显示子线条self.tableWidget.setColumnWidth(0, 70)  # 设置第一列宽self.tableWidget.setColumnWidth(1, 70)  # 设置第二列宽self.tableWidget.setColumnWidth(2, 70)  # 设置第三列宽for qlist in urlList:for index, m_dict in enumerate(qlist):if index == 0:if str(m_dict).strip() == "买盘":m_color = QColor(255, 0, 0)elif str(m_dict).strip() == "卖盘":m_color = QColor(0, 255, 0)else:m_color = QColor(255, 255, 255)newItem = QTableWidgetItem(str(m_dict))newItem.setFont(ft)newItem.setForeground(QBrush(m_color))self.tableWidget.setItem(j, index, newItem)j += 1self.grid.addWidget(self.tableWidget, 2, 12, 12, 4)self.isListView = Falseself.tableWidget.scrollToBottom()

这里我们使用FigureCanvas将matplotlib绘制的图显示到界面之上,同时使用QTableWidget将买卖盘数据显示到界面上,注意买卖盘数据永远在底部,也就是最近的时间,所以需要通过scrollToBottom移动的低端。

下面,我们来看看绘图类StockMplCanvas:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
import numpy as npfrom matplotlib import gridspec
class StockMplCanvas(FigureCanvas):def __init__(self, parent=None, width=5, height=4, dpi=100):plt.rcParams['font.sans-serif'] = ['SimHei']self.fig = Figure(figsize=(width, height), dpi=dpi)FigureCanvas.__init__(self, self.fig)spec = gridspec.GridSpec(2, 1, height_ratios=[2, 1])self.ax1 = self.fig.add_subplot(spec[0])self.ax2 = self.fig.add_subplot(spec[1])self.setParent(parent)FigureCanvas.updateGeometry(self)def start_staict_plot(self, df):df['成交时间'] = pd.to_datetime(df['成交时间'])df['成交时间'] = df['成交时间'].apply(lambda x: x.strftime('%H:%M'))self.ax1.plot(np.arange(0, len(df["成交时间"])), df["成交价格"], color='black')df_buy = np.where(df["性质"] == "买盘", df["成交量(手)"], 0)df_sell = np.where(df["性质"] == "卖盘", df["成交量(手)"], 0)self.ax1.set(ylabel=u"股价走势图")self.ax2.bar(np.arange(0, len(df)), df_buy, color="red")self.ax2.bar(np.arange(0, len(df)), df_sell, color="blue")self.ax2.set_ylim([0, df["成交量(手)"].max()/3])self.ax2.set(ylabel=u"成交量分时图")self.ax1.xaxis.set_major_locator(ticker.MaxNLocator(3))def format_date(x, pos=None):if x < 0 or x > len(df['成交时间']) - 1:return ''return df['成交时间'][int(x)]self.ax1.xaxis.set_major_formatter(ticker.FuncFormatter(format_date))self.ax1.grid(True)plt.setp(self.ax2.get_xticklabels(), visible=False)plt.setp(plt.gca().get_xticklabels(), rotation=45, horizontalalignment='right')

这里,我们绘制2个图,一个是股票交易图,一个是成交量分时图。代码很简单前面有介绍,这里就不在赘述。

接下来,我们需要获取这些数据方便其绘制:

import akshare as ak
import pandas as pd
from PyQt5 import QtCore
from PyQt5.QtCore import pyqtSignal
from pandas import DataFrameclass MainPlotThread(QtCore.QThread):_signal = pyqtSignal(DataFrame)_orderList = pyqtSignal(list)def setValue(self, shareNumber):self.share_num = shareNumberdef run(self):self.list = []df = pd.read_excel("sh600690.xlsx")self._signal.emit(df)self.list.clear()for index, row in df.iterrows():self.list.append([row['性质'], row['成交量(手)'], row['成交额(元)']])self._orderList.emit(self.list)

这里,我们是通过文件获取的数据,你也可以直接通过akshare获取,不过博主建议先获取网络数据,再获取文档数据,因为交易日15点以后,数据是没有变化的。这些免费的数据本来就延迟非常的高,保存在本地,在非交易时间段能加快获取数据的速度。

运行之后,显示的效果如下图所示:

软件资源代码下载地址:点击下载

python股票量化交易(12)---使用pyqt5构建股票交易软件主页相关推荐

  1. python股票量化交易接口是应用到股票上吗?

    python股票量化交易接口是应用到股票上吗?当然可以,而且是任何交易者都可以使用量化交易技术,股票交易数据是很容版易采集的,就是分析起来比权较麻烦,如果题主是职业散户,美股研究社更建议使用一些软件炒 ...

  2. Python进阶量化交易专栏场外篇:股票数据的除权和复权

    在行情软件中经常会看到除权.复权选项,我们选择不同的选项,软件上股票的价格回相应地转换. 在量化交易中,我们开发了一个交易策略,需要对策略在历史行情数据上进行回测,那么我们该选择除权,还是复权,哪一种 ...

  3. 分析股票量化交易实盘接口和人类操盘手的优缺点

    股票量化交易,就是将股票市场所有的股票信息,比如股票的涨跌历史数据,成交量历史数据,股票的基本面历史数据,指数涨跌历史数据等等全部输入计算机,进行大数据分析,之后根据大数据选择出炒股成功率最高的方案, ...

  4. Python实现股票量化交易学习进阶(二)之简单交易策略的定义实现

    Python实现股票量化交易学习进阶第二篇之简单交易策略的定义实现 1.backtrader回测框架知识 2.需求一自定义MACD指标 3.需求二自定义实现KDJ指标 4.需求三自定义CCI指标 1. ...

  5. python股票量化交易(1)---K线图、均线与成交量绘制

    远思扬祖宗之德,近思盖父母之愆:上思报国之恩,下思造家之福:外思济人之急,内思闲己之邪. 本文目录 前言 获取股票的数据 绘制K线图 均线图 成交量 前言 都说2020年是牛市的起点,很显然对于数据来 ...

  6. 从零开始用Python实现股票量化交易之小白笔记(7)

    传送门 本系列原创博文传送门: 从零开始用Python实现股票量化交易之小白笔记(1) 从零开始用Python实现股票量化交易之小白笔记(2) 从零开始用Python实现股票量化交易之小白笔记(3) ...

  7. Python实现股票量化交易学习进阶(一)之基础库(知识准备)搭建

    股票量化交易学习第一篇之基础搭建 1.写在前面 1.1.Numpy库的安装 1.2.Pandas库的安装 1.3.金融数据获取 1.4.talib金融库的安装及文档链接 1.5.Matplotlib ...

  8. python量化回测框架_股票量化交易回测框架pyalgotrade源码阅读(一)

    PyAlgoTrade是什么呢? 一个股票量化交易的策略回测框架. 而作者的说明如下. To make it easy to backtest stock trading strategies. 简单 ...

  9. 《Python股票量化交易从入门到实践》随书赠送“回测框架”的使用帮助

    点击:QTYX最新版本使用指南[文字版] 点击:QTYX最新版本使用指南[视频版] 点击: QTYX历史版本更新说明 赠送"回测框架"的目的 为了帮助读者再建立一座从书本知识到实战 ...

  10. python股票量化交易(8)---K线图:锤头,射击之星,早晨之星

    人之有志,如树之有根,立定此志,须念念谦虚,尘尘方便,自然感动天地,而造福由我. 目录 锤头 倒锤头 射击之星 早晨之星 锤头 本篇接着上篇介绍K线形态. 首先,我们今天介绍的第一个K线形态是锤头,T ...

最新文章

  1. 实现tap的多种方式
  2. css文件的MIME错误引发的Jquery Mobile绘制错误
  3. Oracle 把触发器说透
  4. ARM指令寻址方式之: 数据处理指令的寻址方式
  5. 教你3行代码坑崩系统(哈哈哈哈)
  6. ICCV 2019 | 旷视研究院提出行人搜索当前最佳新方法
  7. Github 开源趋势榜 TOP 1:英伟达升级发布二代 StyleGAN!
  8. 我对无服务器架构的一些看法
  9. php yield 个人小解_PHP5.5新特性之yield理解与用法实例分析
  10. android流量显示插件,安卓状态栏显示网速(安卓网速显示插件)
  11. 计算出当天零分零点对应时间戳的方法分享
  12. MAC下Apktool、dex2jar、jd-gui的安装和反编译、回编译、重新签名简单使用
  13. 中文地址 识别 切分
  14. 试卷: 【2022】小米秋招笔试-软件开发-卷2
  15. 【Spring源码】4. 自己搞个标签?~自定义标签保姆级全过程(图解向,堆图预警)
  16. 【ZZULIOJ】1053: 正弦函数
  17. 002_wz_bbk_GCC的特点
  18. 从业18年,我总结了9个最有价值的经验 9 Hard Lessons I Learned During My 18 Years
  19. 超简单VideoView播放网络视频和本地视频
  20. adb 清理内存_Android实现仿360桌面悬浮清理内存

热门文章

  1. 云原生网络利器 Cilium 总览
  2. AI算法和笔记 | 基于深度学习和传统算法的人体姿态估计
  3. 解决Excel打开csv文件乱码的问题
  4. 在线教育直播平台的简要介绍
  5. count++与++count
  6. uniapp使用字体包,更换个性化字体
  7. 由浅入深,内容详实《Python爬虫开发与项目实战》 豆瓣评分[7.10]
  8. 001.Tarjan算法:求解图的割点与桥(割边)
  9. Linux top命令的cpu使用率和内存使用率
  10. Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) C 倒序并查集