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。


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

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

相关文章
|
1月前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
15天前
|
数据采集 分布式计算 大数据
构建高效的数据管道:使用Python进行ETL任务
在数据驱动的世界中,高效地处理和移动数据是至关重要的。本文将引导你通过一个实际的Python ETL(提取、转换、加载)项目,从概念到实现。我们将探索如何设计一个灵活且可扩展的数据管道,确保数据的准确性和完整性。无论你是数据工程师、分析师还是任何对数据处理感兴趣的人,这篇文章都将成为你工具箱中的宝贵资源。
|
15天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
42 3
|
22天前
|
数据采集 XML 存储
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。
|
27天前
|
JSON 前端开发 API
使用Python和Flask构建简易Web API
使用Python和Flask构建简易Web API
|
27天前
|
存储 API 数据库
使用Python和Flask构建简单的RESTful API
使用Python和Flask构建简单的RESTful API
|
27天前
|
JSON 关系型数据库 测试技术
使用Python和Flask构建RESTful API服务
使用Python和Flask构建RESTful API服务
|
1月前
|
开发框架 前端开发 JavaScript
利用Python和Flask构建轻量级Web应用的实战指南
利用Python和Flask构建轻量级Web应用的实战指南
76 2
|
1月前
|
机器学习/深度学习 数据采集 搜索推荐
利用Python和机器学习构建电影推荐系统
利用Python和机器学习构建电影推荐系统
68 1
|
28天前
|
JSON API 数据格式
使用Python和Flask构建简单的Web API
使用Python和Flask构建简单的Web API