【Python实时盯盘与预警 #02】涨跌幅到 ±3% 还想自己盯?20 行 Python 加阈值告警+本地桌面通知
系列Python实时盯盘与预警 · 第 02 篇 · 适合初学 · 7 分钟读完即可跑通痛点开场#01 的脚本已经把 30 只自选股一屏看完了但人不会一直盯屏幕。真正能救命的盘中监控是到 ±3% 立刻告警、到 ±5% 加一条红色提醒——而不是手动扫一眼。本文就在 #01 基础上加两级阈值±3% 提示、±5% 提醒—— 一个分层避免噪声淹没真信号桌面原生通知Win 用win10toast、跨平台用plyer—— 开着终端写代码时也能立刻在系统托盘弹窗稳定输出 静默 fallback—— 没装桌面通知组件也能跑不报错。本文你将得到什么一段 60 行的 Python把 30 只自选股按阈值分层告警Windows / macOS / Linux 都能跑的桌面通知代码缺组件自动降级一份阈值调参指南不同风格用不同阈值。环境准备复用 #01conda 环境fastApiEnv、mairui 1.0.0、证书只读不打印路径MAIRUI_LICENCE环境变量或.secrets/mairui_licence.txt。如需桌面通知额外装非必须Windowspip install win10toast跨平台pip install plyer完整可运行脚本自验环境fastApiEnv/ Python 3.9 / mairui 1.0.030 只自选股 / 阈值 ±3% ±5% 全部 PASS。【Python实时盯盘与预警 #02】涨跌幅阈值自动告警到 ±3% 立刻本地提示from__future__importannotationsimportosimportsysfromdatetimeimportdatetime sys.path.insert(0,os.path.join(os.path.dirname(__file__),..,..,_common))frommairui_helperimportload_licence# noqa: E402frommairuiimportClient# noqa: E402WATCHLIST[000001,000002,000333,000858,002594,300750,600000,600028,600030,600276,600519,600887,601012,601318,601398,601857,601988,688981,002475,300059,600036,601166,600900,601288,601628,600585,000063,000725,002415,300760,]# 阈值表超过阈值就告警。键从下往上检查先命中提醒再提示。THRESHOLDS((提醒,5.0),(提示,3.0),)defclassify(pct:float)-tuple[str,float]:forlabel,thresholdinTHRESHOLDS:ifpctthresholdorpct-threshold:returnlabel,thresholdreturn,0.0deffetch_quotes(api:Client,codes:list[str])-list[dict]:out[]forcodeincodes:try:qapi.stock_real_time(code)exceptExceptionase:# noqa: BLE001print(f[warn]{code}取数失败{e},filesys.stderr)continueifnotisinstance(q,dict):continueout.append({code:code,price:q.get(p),change_pct:q.get(zf),amount:q.get(cje),time:q.get(t)})returnoutdefrender_alert(quotes:list[dict])-str:alerts[qforqinquotesifclassify(q[change_pct]or0)[0]]ifnotalerts:returnf[{datetime.now().strftime(%H:%M:%S)}] 当前无任何自选股触发 ±3% 阈值正常。alerts.sort(keylambdax:-(abs(x[change_pct])or0))lines[f[{datetime.now().strftime(%H:%M:%S)}] 触发阈值的自选股按涨跌幅绝对值排序,]forqinalerts:label,thrclassify(q[change_pct]or0)arrow▲if(q[change_pct]or0)0else▼amount_yi(q[amount]or0)/1e8lines.append(f [{label}]{q[code]}现价{q[price]:.2f}{arrow}{q[change_pct]:.2f}% f(阈值 ±{thr:.1f}%) 成交{amount_yi:.2f}亿 时间{q[time]})lines.append()lines.append(f共触发{len(alerts)}/{len(quotes)}只。)return\n.join(lines)defdesktop_notify(quotes:list[dict])-None:alerts[qforqinquotesifclassify(q[change_pct]or0)[0]]ifnotalerts:returntext\n.join(f{q[code]}{q[change_pct]:.2f}%forqinalerts[:5])titlef盯盘告警{len(alerts)}只try:fromwin10toastimportToastNotifier# type: ignoreToastNotifier().show_toast(title,text,duration5,threadedTrue)print([info] 已发送 Windows 桌面通知,filesys.stderr)returnexceptException:# noqa: BLE001passtry:fromplyerimportnotification# type: ignorenotification.notify(titletitle,messagetext,timeout5)print([info] 已发送 plyer 桌面通知,filesys.stderr)returnexceptException:# noqa: BLE001passprint(f[fallback] 桌面通知未启用建议安装 win10toast/plyer首条告警{text.splitlines()[0]},filesys.stderr)defmain()-int:licload_licence()print(f[info] licence present: True (value hidden, len{len(lic)}))withClient(licencelic)asapi:quotesfetch_quotes(api,WATCHLIST)print(render_alert(quotes))desktop_notify(quotes)return0if__name____main__:sys.exit(main())真实运行输出截取[fallback] 桌面通知未启用建议安装 win10toast/plyer首条告警000001 3.01% [info] licence present: True (value hidden, len36) [09:56:03] 触发阈值的自选股按涨跌幅绝对值排序 [提醒] 688981 现价 123.99 ▲ 9.19% (阈值 ±5.0%) 成交 100.61 亿 时间 2026-07-31 15:00:04 [提醒] 002415 现价 37.65 ▲ 6.85% (阈值 ±5.0%) 成交 63.30 亿 时间 2026-07-31 15:00:00 [提醒] 002475 现价 57.48 ▲ 6.55% (阈值 106.93 亿 时间 2026-07-31 15:00:00 [提示] 000725 现价 5.51 ▲ 3.92% (阈值 ±3.0%) 成交 115.97 亿 时间 2026-07-31 15:00:00 [提示] 000333 现价 87.60 ▲ 3.69% (阈值 ±3.0%) 成交 41.08 亿 时间 2026-07-31 15:00:00 [提示] 000001 现价 11.63 ▲ 3.01% (阈值 ±3.0%) 成交 23.19 亿 时间 2026-07-31 15:00:00 共触发 11 / 30 只。表中数据来源内部验证环境fastApiEnv调用/hsrl/stock_real_time接口返回脚本中所有证书出现处都用MAIRUI_LICENCE环境变量或你的麦蕊证书占位。 当前示例时间是 09:56正是开盘前几分钟所以时间戳保留上一交易日 07-31 收盘价盘中真到 09:30 / 10:00 / 14:00 等关键时点time字段会切到当天盘中时间戳。代码要点拆解阈值分层用(label, threshold)元组降序匹配命中即返回。±5% 优先于 ±3%避免噪声如果想两层都报classify里改成return 提醒提示, 5.0就能合两为一行。涨跌幅绝对值排序用abs()而不是符号排序涨最多的与跌最多的同台竞技盯盘才能最早同时看到双向异常。桌面通知三级降级win10toast → plyer → stderr任意一级不可用都不阻断主体逻辑——这正是内容龙虾代码审计里强调的鲁棒优先。告警不滥用当没有任何触发时打印一行正常避免你看屏幕又回到不知道脚本是活是死的焦虑。阈值调参指南不同人不同阈值风格提醒级提示级推荐长线持仓波段操作±8%±4%大波动才打扰短线交易看技术位±5%±3%默认本篇打板 / 套利瞬时反应±3%±1.5%噪声多、别错过信号把THRESHOLDS元组改成对应两行即可。常见坑Windows 通知中心被关闭右下角系统设置 → 通知 → 找到 Python / PowerShell / 你的终端确保通知开关打开否则win10toast调用成功也不显示气泡。收盘后还弹窗本脚本运行一次就退出不会反复弹。要盘中持续弹把main()套进while True: time.sleep(3)即可与 #01 的接入实时段拼起来就是盘中监控闭环。多终端同时跑会重复弹如果 IDE 跑一次、命令行再跑一次告警会重复建议用进程锁fcntl/file lock保证单机唯一实例。小结 下篇预告把 #01 的一屏看完加上到阈值就告警两段脚本合计 ~120 行就构成一个可用的盘中盯盘 MVP。下一篇 #03 我们换一个角度不只看自选股而是把整个市场的涨停池limit_up_pool当日拉出来排序——一类资金的共识、风口的强弱尽收眼底。合规与引导数据/接口演示仅作技术示意不构成投资建议本系列代码仅用于自验与教学请勿用于非法牟利提示脚本中所有证书出现处都用MAIRUI_LICENCE环境变量或你的麦蕊证书占位任何含真实 UUID 的版本都不应被发布。

相关新闻

Sentinel流量治理:从核心原理到Spring Cloud Gateway与Nacos生产实践

Sentinel流量治理:从核心原理到Spring Cloud Gateway与Nacos生产实践

1. 项目概述:为什么我们需要Sentinel? 在分布式系统里,服务之间的调用关系像一张复杂的蜘蛛网。一个看似简单的用户下单请求,背后可能串联了订单服务、库存服务、支付服务和物流服务。当“双十一”零点流量洪峰来袭,或…

2026/10/20 1:08:05 阅读更多 →
3步掌握B站视频下载:DownKyi完整使用秘籍与技巧

3步掌握B站视频下载:DownKyi完整使用秘籍与技巧

3步掌握B站视频下载:DownKyi完整使用秘籍与技巧 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等)…

2026/10/19 6:44:39 阅读更多 →
如何用Ryzen SMU调试工具深度优化AMD处理器性能?一文掌握硬件调优技巧

如何用Ryzen SMU调试工具深度优化AMD处理器性能?一文掌握硬件调优技巧

如何用Ryzen SMU调试工具深度优化AMD处理器性能?一文掌握硬件调优技巧 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地…

2026/10/17 2:50:03 阅读更多 →

最新新闻

Linux磁盘分区实战:从fdisk到fstab的完整指南

Linux磁盘分区实战:从fdisk到fstab的完整指南

1. 磁盘分区到底在解决什么问题很多人第一次接触 Linux 磁盘管理,都是在装系统那一刻。安装器弹出一个界面,问你要不要“自动分区”,你点了“是”,然后一路下一步,系统装好了,分区这件事就被抛到脑后。直到…

2026/10/20 14:35:47 阅读更多 →
WordPress自定义Word导入格式映射:三路径与PHP实现

WordPress自定义Word导入格式映射:三路径与PHP实现

"WordPress开发者如何自定义Word导入的格式映射规则?",说实话,遇到这个需求的开发者大多是被默认行为逼到这一步的。我在好几个内容迁移项目里都撞过同一堵墙:客户给一堆排版精致的Word文档,要求原样搬到站点…

2026/10/20 14:35:47 阅读更多 →
Matlab-MIC工具箱:工程级互信息计算与非线性依赖分析

Matlab-MIC工具箱:工程级互信息计算与非线性依赖分析

简介:Matlab-MIC工具箱是一套面向计算成像、反问题求解与数值优化领域的MATLAB开源实现,适用于高校研究生、科研人员及工程技术人员开展迭代重建与全局优化算法研究。资源聚焦Kaczmarz、ART、SIRT等经典代数重建方法,以及CG、LM等梯度类优化算…

2026/10/20 14:35:47 阅读更多 →
本地部署DeepSeek R1:Ollama+Chatbox完整教程与调优指南

本地部署DeepSeek R1:Ollama+Chatbox完整教程与调优指南

去年年底开始,不少朋友陆续问我:“你本地跑的那个 AI 是什么?看起来挺强的。”我说是本地化的 DeepSeek R1,配 Ollama 做模型管理,再用 Chatbox 做对话界面。整套组合下来,不需要云端账号,不需要…

2026/10/20 14:35:47 阅读更多 →
Scrapy集成Selenium:高效爬取豆瓣TOP250评论数据的实战方案

Scrapy集成Selenium:高效爬取豆瓣TOP250评论数据的实战方案

Scrapy 结合 Selenium 爬取豆瓣 TOP250 电影的评论数据,这个标题我第一眼看到的时候,心里就想,这兄弟八成是被豆瓣的反爬折腾过。因为但凡你只是想抓个电影列表,那纯 Scrapy 不到十分钟就能写完,根本不需要动用 Seleni…

2026/10/20 14:35:47 阅读更多 →
OSG项目GIF插件编译失败怎么办?giflib 4.1.6 64位静态库接入与避坑指南

OSG项目GIF插件编译失败怎么办?giflib 4.1.6 64位静态库接入与避坑指南

简介:面向需要在 OpenSceneGraph 3.2.1 中启用 GIF 插件编译的开发者,这份资源提供 giflib 4.1.6 的 64 位静态链接库及配套头文件,可解决 osg 的 Plugin gif 链接依赖问题,省去自行构建 giflib 的环节。压缩包共 3 个文件&#x…

2026/10/20 14:34:30 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →