python股票量化交易(14)---使用pyqt5构建股票交易龙虎榜

简介: python股票量化交易(14)---使用pyqt5构建股票交易龙虎榜

获取龙虎榜数据


对于股市来说,那些涨幅跌幅都比较大的股票多是游资的聚集地,这些聚集地往往登上龙虎榜的几率非常的高。对于喜欢玩短期的散户来说,尤其喜欢通过该榜单搏一搏的投资者,尤其钟爱龙虎榜。所以,我们可以给我们的交易软件提供一个这样的榜单。


获取免费龙虎榜的方式如下:

df_rise = ak.stock_sina_lhb_detail_daily(trade_date="20210205", symbol="涨幅偏离值达7%的证券")
df_fall = ak.stock_sina_lhb_detail_daily(trade_date="20210205", symbol="跌幅偏离值达7%的证券")


第1个参数如日期,第2个参数为获取的龙虎榜类型。这里,我们的日期都是手动设置的,等我们到后面,通过判断工作日,将其替换掉就行。


pyqt5显示龙虎榜数据


首先,我们需要通过线程获取到龙虎榜的数据,具体代码如下:

import akshare as ak
from PyQt5 import QtCore
from PyQt5.QtCore import pyqtSignal
from pandas import DataFrame
class OtherThread(QtCore.QThread):
    _signalRise = pyqtSignal(DataFrame)
    _signalFall = pyqtSignal(DataFrame)
    def __init__(self):
        super(OtherThread, self).__init__()
    def run(self):
        df_rise = ak.stock_sina_lhb_detail_daily(trade_date="20210205", symbol="涨幅偏离值达7%的证券")
        df_fall = ak.stock_sina_lhb_detail_daily(trade_date="20210205", symbol="跌幅偏离值达7%的证券")
        self._signalRise.emit(df_rise)
        self._signalFall.emit(df_fall)


数据获取完成之后,就可以直接显示到界面上了,main.py的代码如下所示:

class MyFrom(QMainWindow):
  # 龙虎榜
    def init_otherTab(self):
        self.otherGrid = QGridLayout()
        self.otherGrid.setSpacing(5)
        ft = QFont()
        ft.setPointSize(26)
        ft.setBold(True)
        rise_label = QLabel("涨幅偏离值达7%的股票")
        rise_label.setFont(ft)
        rise_label.setStyleSheet("color:red")
        fall_label = QLabel("跌幅偏离值达7%的股票")
        fall_label.setFont(ft)
        self.otherGrid.addWidget(rise_label, 0, 0, 1, 8)
        self.otherGrid.addWidget(fall_label, 0, 8, 1, 8)
        self.otherTab.setLayout(self.otherGrid)
        self.otherThread = OtherThread()
        self.otherThread._signalRise.connect(self.otherRise_callbacklog)
        self.otherThread._signalFall.connect(self.otherFall_callbacklog)
        self.otherThread.start()
    def otherFall_callbacklog(self, df):
        ft = QFont()
        ft.setPointSize(10)
        ft.setBold(True)
        m_color = QColor(0, 255, 0)
        otherFalltableWidget = QTableWidget(len(df), 6)
        otherFalltableWidget.setHorizontalHeaderLabels(['股票名称', '股票代码', '收盘价', "对应值", "成交量", "成交额"])
        otherFalltableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)  # 不可编辑
        otherFalltableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Fixed)  # 禁止拖拽
        otherFalltableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)  # 只能选中一行
        otherFalltableWidget.itemClicked.connect(self.tableWidget_connect)
        otherFalltableWidget.verticalHeader().setVisible(False)
        otherFalltableWidget.setShowGrid(False)  # 不显示子线条
        otherFalltableWidget.setColumnWidth(0, 70)  # 设置第一列宽
        otherFalltableWidget.setColumnWidth(1, 70)  # 设置第二列宽
        otherFalltableWidget.setColumnWidth(2, 70)  # 设置第三列宽
        otherFalltableWidget.setColumnWidth(3, 70)  # 设置第三列宽
        otherFalltableWidget.setColumnWidth(4, 120)  # 设置第三列宽
        otherFalltableWidget.setColumnWidth(5, 120)  # 设置第三列宽
        for idx, row in df.iterrows():
            newItem0 = QTableWidgetItem(str(row["股票名称"]))
            newItem0.setFont(ft)
            newItem0.setForeground(QBrush(m_color))
            newItem1 = QTableWidgetItem(str(row["股票代码"]))
            newItem1.setFont(ft)
            newItem1.setForeground(QBrush(m_color))
            newItem2 = QTableWidgetItem(str(row["收盘价"]))
            newItem2.setFont(ft)
            newItem2.setForeground(QBrush(m_color))
            newItem3 = QTableWidgetItem(str(row["对应值"]))
            newItem3.setFont(ft)
            newItem3.setForeground(QBrush(m_color))
            newItem4 = QTableWidgetItem(str(row["成交量"]))
            newItem4.setFont(ft)
            newItem4.setForeground(QBrush(m_color))
            newItem5 = QTableWidgetItem(str(row["成交额"]))
            newItem5.setFont(ft)
            newItem5.setForeground(QBrush(m_color))
            otherFalltableWidget.setItem(idx, 0, newItem0)
            otherFalltableWidget.setItem(idx, 1, newItem1)
            otherFalltableWidget.setItem(idx, 2, newItem2)
            otherFalltableWidget.setItem(idx, 3, newItem3)
            otherFalltableWidget.setItem(idx, 4, newItem4)
            otherFalltableWidget.setItem(idx, 5, newItem5)
        self.otherGrid.addWidget(otherFalltableWidget, 1, 8, 10, 8)
    def otherRise_callbacklog(self, df):
        ft = QFont()
        ft.setPointSize(10)
        ft.setBold(True)
        m_color = QColor(255, 0, 0)
        otherRisetableWidget = QTableWidget(len(df), 6)
        otherRisetableWidget.setHorizontalHeaderLabels(['股票名称', '股票代码', '收盘价', "对应值", "成交量", "成交额"])
        otherRisetableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)  # 不可编辑
        otherRisetableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Fixed)  # 禁止拖拽
        otherRisetableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)  # 只能选中一行
        otherRisetableWidget.itemClicked.connect(self.tableWidget_connect)
        otherRisetableWidget.verticalHeader().setVisible(False)
        otherRisetableWidget.setShowGrid(False)  # 不显示子线条
        otherRisetableWidget.setColumnWidth(0, 70)  # 设置第一列宽
        otherRisetableWidget.setColumnWidth(1, 70)  # 设置第二列宽
        otherRisetableWidget.setColumnWidth(2, 70)  # 设置第三列宽
        otherRisetableWidget.setColumnWidth(3, 70)  # 设置第三列宽
        otherRisetableWidget.setColumnWidth(4, 120)  # 设置第三列宽
        otherRisetableWidget.setColumnWidth(5, 120)  # 设置第三列宽
        for idx, row in df.iterrows():
            newItem0 = QTableWidgetItem(str(row["股票名称"]))
            newItem0.setFont(ft)
            newItem0.setForeground(QBrush(m_color))
            newItem1 = QTableWidgetItem(str(row["股票代码"]))
            newItem1.setFont(ft)
            newItem1.setForeground(QBrush(m_color))
            newItem2 = QTableWidgetItem(str(row["收盘价"]))
            newItem2.setFont(ft)
            newItem2.setForeground(QBrush(m_color))
            newItem3 = QTableWidgetItem(str(row["对应值"]))
            newItem3.setFont(ft)
            newItem3.setForeground(QBrush(m_color))
            newItem4 = QTableWidgetItem(str(row["成交量"]))
            newItem4.setFont(ft)
            newItem4.setForeground(QBrush(m_color))
            newItem5 = QTableWidgetItem(str(row["成交额"]))
            newItem5.setFont(ft)
            newItem5.setForeground(QBrush(m_color))
            otherRisetableWidget.setItem(idx, 0, newItem0)
            otherRisetableWidget.setItem(idx, 1, newItem1)
            otherRisetableWidget.setItem(idx, 2, newItem2)
            otherRisetableWidget.setItem(idx, 3, newItem3)
            otherRisetableWidget.setItem(idx, 4, newItem4)
            otherRisetableWidget.setItem(idx, 5, newItem5)
        self.otherGrid.addWidget(otherRisetableWidget, 1, 0, 10, 8)

这里,博主为了偷懒,没有使用for循环生成pyqt5的控件。感兴趣的可以模仿量化交易第11篇,使用for循环生成QLabel的方式生成QTableWidgetItem。


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

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

相关文章
|
2月前
|
人工智能 JavaScript API
零基础构建MCP服务器:TypeScript/Python双语言实战指南
作为一名深耕技术领域多年的博主摘星,我深刻感受到了MCP(Model Context Protocol)协议在AI生态系统中的革命性意义。MCP作为Anthropic推出的开放标准,正在重新定义AI应用与外部系统的交互方式,它不仅解决了传统API集成的复杂性问题,更为开发者提供了一个统一、安全、高效的连接框架。在过去几个月的实践中,我发现许多开发者对MCP的概念理解透彻,但在实际动手构建MCP服务器时却遇到了各种技术壁垒。从环境配置的细节问题到SDK API的深度理解,从第一个Hello World程序的调试到生产环境的部署优化,每一个环节都可能成为初学者的绊脚石。因此,我决定撰写这篇全面的实
468 67
零基础构建MCP服务器:TypeScript/Python双语言实战指南
|
2月前
|
机器学习/深度学习 算法 量子技术
GQNN框架:让Python开发者轻松构建量子神经网络
为降低量子神经网络的研发门槛并提升其实用性,本文介绍一个名为GQNN(Generalized Quantum Neural Network)的Python开发框架。
52 4
GQNN框架:让Python开发者轻松构建量子神经网络
|
26天前
|
人工智能 自然语言处理 安全
Python构建MCP服务器:从工具封装到AI集成的全流程实践
MCP协议为AI提供标准化工具调用接口,助力模型高效操作现实世界。
297 1
|
3月前
|
数据采集 数据可视化 JavaScript
用Python采集CBC新闻:如何借助海外代理IP构建稳定采集方案
本文介绍了如何利用Python技术栈结合海外代理IP采集加拿大CBC新闻数据。内容涵盖使用海外代理IP的必要性、青果代理IP的优势、实战爬取流程、数据清洗与可视化分析方法,以及高效构建大规模新闻采集方案的建议。适用于需要获取国际政治经济动态信息的商业决策、市场预测及学术研究场景。
|
4月前
|
数据可视化 数据挖掘 数据安全/隐私保护
Python实现时间序列动量策略:波动率标准化让量化交易收益更平稳
时间序列动量策略(TSMOM)是一种基于资产价格趋势的量化交易方法,通过建立多头或空头头寸捕捉市场惯性。然而,传统TSMOM策略因风险敞口不稳定而面临收益波动问题。波动率调整技术通过动态调节头寸规模,维持恒定风险水平,优化了策略表现。本文系统分析了波动率调整TSMOM的原理、实施步骤及优势,强调其在现代量化投资中的重要地位,并探讨关键参数设定与实际应用考量,为投资者提供更平稳的风险管理体验。
151 4
Python实现时间序列动量策略:波动率标准化让量化交易收益更平稳
|
3月前
|
数据采集 Web App开发 自然语言处理
利用Python构建今日头条搜索结果的可视化图表
利用Python构建今日头条搜索结果的可视化图表
|
6月前
|
机器学习/深度学习 设计模式 API
Python 高级编程与实战:构建 RESTful API
本文深入探讨了使用 Python 构建 RESTful API 的方法,涵盖 Flask、Django REST Framework 和 FastAPI 三个主流框架。通过实战项目示例,详细讲解了如何处理 GET、POST 请求,并返回相应数据。学习这些技术将帮助你掌握构建高效、可靠的 Web API。
|
6月前
|
机器学习/深度学习 设计模式 测试技术
Python 高级编程与实战:构建自动化测试框架
本文深入探讨了Python中的自动化测试框架,包括unittest、pytest和nose2,并通过实战项目帮助读者掌握这些技术。文中详细介绍了各框架的基本用法和示例代码,助力开发者快速验证代码正确性,减少手动测试工作量。学习资源推荐包括Python官方文档及Real Python等网站。
|
6月前
|
机器学习/深度学习 设计模式 API
Python 高级编程与实战:构建微服务架构
本文深入探讨了 Python 中的微服务架构,介绍了 Flask、FastAPI 和 Nameko 三个常用框架,并通过实战项目帮助读者掌握这些技术。每个框架都提供了构建微服务的示例代码,包括简单的 API 接口实现。通过学习本文,读者将能够使用 Python 构建高效、独立的微服务。

热门文章

最新文章

推荐镜像

更多