前言

偶然一次打开炒股软件,发现了这么一个下面这么一个区域

我的第一反应是:天呐,竟然还能这么玩?简单粗暴!所以我立马想到写一个涨停板监控程序,一旦监控到股票涨停并且有大量买单则立马通知我,当然还可以自动执行挂涨停买入的操作,接着在第二天挂跌停卖出(挂跌停可以保证优先卖出,但不一定以跌停价成交,这样子可以避免遇到多个核按钮,并且总体盈利更加平稳)。

我的程序在实操过程中,打板进入的成功率一般有 80% 及其以上,说明在市场上,手动打板的人还是比较多,否则即使让程序自动挂单也很难买进去。

考虑到很久没有更新文章了,今天就以监控涨停股为主题,分享我基于 Python 写的监控涨停股,以及时打板的程序。程序化挂单代码则省略,有能力的自行接入自动下单接口。

开始之前

Python 版本要求

python 3.7 及其以上

需要安装的库

efinance>=0.4.2

注意: 一定要保证 efinance版本至少为0.4.2

库的安装方法是:打开 cmd(命令提示符或者其他终端工具),输入以下代码

pip install efinance --upgrade

正文

多余的话不说了,直接上代码,代码中有详细注释

import multitasking
import pandas as pd
from typing import List
from typing import Dict
import efinance as ef
from dataclasses import dataclass
from datetime import datetime
import rich@dataclass()
class StockQuoteInfo:# * 股票代码stock_code: str# * 股票名称stock_name: str# * 行情时间dt: datetime# * 最新价price: float# * 涨停价top_price: float# * 跌停价bottom_price: float# * 最新涨停时间latest_zt_dt: datetime# * 最新非涨停时间latest_nzt_dt: datetime@propertydef zt_keep_seconds(self) -> int:"""涨停保持秒数Returns-------int"""return (self.latest_zt_dt - self.latest_nzt_dt).secondsclass Clock:def __init__(self) -> None:self.dt = datetime.now()def next(self) -> bool:"""是否在 09:15:00 - 15:00:00Returns-------bool"""dt = datetime.now()st = '09:15:00'et = '15:00:00'self.dt = dtreturn st <= dt.strftime('%H:%M:%S') <= etdef get_snapshot_fast(stock_codes: List[str]) -> Dict[str, pd.DataFrame]:"""获取多只股票的最新行情快照Parameters----------stock_codes : List[str]股票代码列表Returns-------Dict[str, DataFrame]股票代码为键,行情快照为值的字典"""sns: Dict[str, pd.DataFrame] = {}@multitasking.taskdef start(stock_code: str) -> None:sns[stock_code] = ef.stock.get_quote_snapshot(stock_code)for stock_code in stock_codes:start(stock_code)multitasking.wait_for_tasks()return sns@dataclass()
class Strategy:clock: Clockdef __post_init__(self) -> None:self.stock_code_info: Dict[str, StockQuoteInfo] = {}def next(self) -> None:dt = self.clock.dtquotes = ef.stock.get_realtime_quotes()quotes.index = quotes['股票代码'].valuesquotes = quotes[quotes['涨跌幅'] != '-']# * 初步选出即将涨停的股票quotes = quotes[quotes['涨跌幅'] > 7]if len(quotes) == 0:returnsns = get_snapshot_fast(quotes.index.values)for row in quotes.iloc:stock_code = row['股票代码']stock_name = row['股票名称']# * 最新行情快照sn = sns[stock_code]# * 涨停价top_price = sn['涨停价']# * 跌停价bottom_price = sn['跌停价']# * 最新价格current_price = sn['最新价']# * 上一次刷新时的行情pre_info = self.stock_code_info.get(stock_code)# * 该股是不是第一次被检测first = pre_info is Noneif first:pre_info = StockQuoteInfo(stock_code=stock_code,stock_name=stock_name,dt=dt,price=current_price,top_price=top_price,bottom_price=bottom_price,latest_nzt_dt=dt,latest_zt_dt=None)self.stock_code_info[stock_code] = pre_infobuy_list = []for i in range(1, 6):buy_list.append(f'买 {i}: {sn[f"买{i}数量"]}')# * 买单情况buy_str = '\n'.join(buy_list)tip: str = None# * 检测是否刚涨停或者打开涨停if abs(top_price-current_price) <= 1e-2:# * 刚涨停则更新最新涨停时间if first or current_price > pre_info.price:tip = ZT_TIPpre_info.latest_zt_dt = dt# * 保持涨停则更新最新涨停时间elif current_price == pre_info.price:tip = ZT_KEEP_TIPpre_info.latest_zt_dt = dt# * 炸板后更新最新的不涨停时间else:tip = ZT_BREAK_TIPpre_info.latest_nzt_dt = dt# * 非涨停 更新价格else:pre_info.latest_nzt_dt = dt# * 不管有没有涨停均更新pre_info.price = current_pricepre_info.dt = dt# * 在这里根据涨停状况做通知# * 如果需要推送到微信,可查看我写的 wechat_work 这个库# * 地址为 https://github.com/Micro-sheep/wechat_workif tip == ZT_TIP or (tip == ZT_KEEP_TIP and pre_info.zt_keep_seconds <= ZT_NOTICE_MAX_SECONDS):msg = f'股票代码: {stock_code}\n股票名称: {stock_name}\n  封单情况  \n{buy_str}\n  {tip}  \n  涨停保持秒数: {pre_info.zt_keep_seconds}  'rich.print(msg)# * 是否为测试模式 如果是 True 则不管是否在 09:15:00 - 15:00:00 都会执行
# * 如果是 False 则只有在 09:15:00 - 15:00:00 才会执行
TEST_MODE = TrueZT_TIP = '刚涨停'
ZT_KEEP_TIP = '保持涨停'
ZT_BREAK_TIP = '涨停炸板'
# * 保持涨停通知超时时间 涨停保持秒数超过它则不做通知
ZT_NOTICE_MAX_SECONDS = 60clock = Clock()
strategy = Strategy(clock)
while clock.next() or TEST_MODE:dt = clock.dtrich.print(f'[{dt.strftime("%m-%d %H:%M:%S")}] 刷新')strategy.next()
print('今日监控结束')

在终端(对于 Windows 不建议使用 cmd,建议使用 Windows Terminal 或者 PowerShell)运行上面的代码之后,得到的输出形式如下

我给的程序中,通知方式是仅仅把消息输出到终端上,这样子显然是不合理的,毕竟不可能一直去盯着屏幕。而实际上,我选择的是推送到微信上,毕竟手机总是在身旁的,且微信通知总处于打开状态,收到消息了,也可以手动在手机交易软件上挂单。

为此,我特地基于企业微信 API,封装了一个发通知的库,链接如下

https://github.com/Micro-sheep/wechat_work

里面有详细使用说明,大家自行考虑是否接入吧!

写在最后

欢迎大家踊跃尝试,在学编程,学Python的小伙伴们,一个人摸黑学会很难,博主也是过来人, 这里新建了一个扣群:1020465983,给大家准备了学习资源、好玩的项目,欢迎大家加入一起交流。

基于 Python 监控股票涨停情况相关推荐

  1. 基于python的股票程序化交易软件_tushare开源股票交易接口基于python实现技术

    tushare开源股票交易接口基于python实现技术 怎样在tushare中完成股票实盘交易 其实,如何使用实盘交易功能接口,与通过tushare获取数据一样简单,先看一下几个关键接口的使用方法: ...

  2. 基于python的股票程序化交易论文_基于Python工具的股票量化投资策略研究

    2019 年第 07 期 20 世 纪 80 年代, 一 些 投 资 者 开 始 利用 计 算 机 研究金 融 数据 , 并 初显 成 效 . 20 世 纪 末 , 投 资 者 把 计 算 机 技术 ...

  3. 基于python 的股票行情查询系统开发(一)

    基于python 的股市行情查询系统开发(一) 一.前言 1.开发背景 二.开发计划 1.开发语言 2.数据api获取 3.后续计划 今日进度 1.前期准备 2.获取股票代码 一.前言 1.开发背景 ...

  4. python 自动交易接口是什么_基于Python的股票实盘交易接口的实现与应用

    概在半个多月前,一个朋友联系我,让我帮忙实现一个程序自动下单交易的功能.按照以往对待用户的习惯,很愉快的就答应了,也抽时间研究了一下,起初并没有太多精力和时间去开发,直到迎来了祖国妈妈的生日,本来也不 ...

  5. 基于python的股票客户流失数据分析模型

    目录 1.案例背景 2 2. 读取数据 2 3. 划分特征变量和目标变量 3 4. 模型的搭建和使用 3 5. 模型的使用 4 6. ROC曲线对模型的评估 7 7.总结 10 8.参考文献 10 9 ...

  6. python股票策略_基于python的股票自动盯盘程序

    不是每个人都有时间时刻盯盘的,而且股票那么多,往往挂一漏万,错过很多好的股票和买入机会.笔者尝试用python实现了一个可以自动盯盘的程序,调用了一个免费的股票数据接口baostock提供的历史行情数 ...

  7. Python监控股票实时价格并发邮件通知

    最近玩起了股票,但是由于要上班,没办法实时盯盘,有时候比较忙也没办法做到每个交易日都挂单,因此突发奇想自己搞了个python程序来实时盯盘,有什么风声邮件接收即可,废话不多说直接上代码: 环境需求:W ...

  8. 基于python的股票程序化交易软件_程序化交易(三):基于 Python 的股票程序化交易/量化框架 easyquant...

    续前贴,在前面的基础上弄了一个简单的程序化交易框架 easyquant 开源在 github 上,欢迎大家 star & fork.下面是简单介绍: 交易模块 easytrader 支持 华泰 ...

  9. 基于python的股票数据的读取及可视化(K线图)

    文章目录 1.读取数据 2.绘制股票走势图 3.绘制K线图 1.读取数据 TuShare是一个免费.开源的python财经数据接口包.主要实现对股票等金融数据从数据采集.清洗加工 到 数据存储的过程, ...

最新文章

  1. 【Web Service】Apache Tuscany发布SOAP
  2. mysql修改主键生成策略信息_常用Hibernate 主键生成策略
  3. c语言关于计算的函数,问个c语言题目,关于一个计算器的有参有返回函数!!!...
  4. Nginx多进程高并发、低时延、高可靠机制在缓存(redis、memcache)twemproxy代理中的应用...
  5. MMS 协议学习笔记
  6. DbVisualizer的Driver连接Oracle Thin选项不可选
  7. [ 淘宝商城 ] 商城SEO
  8. 品优影视建站系统1.3.6.5开源绿色版
  9. 红盟云卡-开源的发卡网源码
  10. NVIDIA发布新驱动,支持RTX 4090,性能飞起!
  11. 2022春季数据结构期中考试总结
  12. 汉语语句的计算机分析,(计算机专业毕业论文)汉语语法自动分析.doc
  13. Asp.net 路由详解
  14. 论文阅读《No bot expects the DeepCAPTCHA》
  15. macOS下载【转载】
  16. Python学习笔记--文件操作
  17. Oracle - 锁
  18. 解决nuxt项目转为spa打包部署报错问题
  19. 【游戏开发实战】(完结)使用Unity制作像天天酷跑一样的跑酷游戏——第七篇:游戏界面的基础UI
  20. 计算机中丢失ubiorbitapi,我的刺客信条出现无法启动此程序,因为计算机中丢失ubiorbitapi_r2_loader.dll,,怎么处理。。...

热门文章

  1. 图论最短路径算法——Dijkstra
  2. 内存管理 浅析 内存管理/内存优化技巧
  3. 实战分布式之电商高并发秒杀场景总览
  4. Linux文件格式详解
  5. 通过java springboot实现阿里云dns动态解析
  6. 通过蛋白结构分析、同源建模、分子对接、虚拟筛选、构效关系分析、药效团靶点抑制剂筛选预测、全新药物设计,先导化合物发现等方法对靶点药物进行全方位设计及分析
  7. 国内有哪些大型的药物筛选中心?
  8. 亚马逊注册买家账号复杂吗?
  9. ES6 Generator函数 深入应用
  10. 《不如吃茶去》许嵩新专辑封面首曝光 传达简适生活态度