PanWatch APScheduler 调度体系:cron 解析、交易日历与 Agent 定时触发
PanWatch APScheduler 调度体系cron 解析、交易日历与 Agent 定时触发【免费下载链接】PanWatchPanWatch — AI stock monitoring for A-shares, HK US markets, powered by TradingAgents. Portfolio insights, real-time alerts automated reports.盯盘侠覆盖 A股/港股/美股的 AI 盯盘、持仓分析、实时提醒与自动报告。项目地址: https://gitcode.com/GitHub_Trending/pa/PanWatchPanWatch盯盘侠是一款覆盖 A股、港股、美股的 AI 股票监控系统它的心脏是一套基于 APScheduler 的定时调度体系统一解析 cron 表达式、用交易日历判断当天是否开市再按时自动触发 AI Agent 完成盘前分析、盘中盯盘和盘后总结。本文带你快速读懂这套体系的四大核心模块——cron 解析器、交易日历、时区处理与 Agent 定时触发帮助新手理解为什么它的提醒总是准点、且从不在节假日打扰你。调度体系全景一个平台层 多个业务调度器PanWatch 把所有和定时有关的公共能力集中在 src/platform/scheduling/ 目录形成四件套模块职责schedule_parser.py解析 cron / interval 表达式生成 APScheduler 触发器trading_calendar.py回答这一天开不开市含 A 股节假日timezone.py统一时区存储与显示默认 Asia/Shanghaischeduler_registry.py调度器健康注册表供系统自检读取在此之上各业务模块挂载自己的 APScheduler 实例Agent 调度器、价格提醒调度器、模拟盘调度器、上下文维护调度器。每个调度器启动时都会把自己注册进注册表系统自检时据此判断调度器是否在跑——无调度的 CLI 进程注册表为空则优雅跳过。cron 表达式解析解决周日到底是不是 0PanWatch 在界面和配置里接受标准的 5 段 cron分 时 日 月 周。但这里藏着一个经典陷阱POSIX cron0或7都表示周日APScheduler0表示周一6表示周日如果直接把用户的 cron 丢给 APScheduler每周一执行就可能变成每周日执行。PanWatch 的 normalize_cron_day_of_week_field() 专门做了三层处理先把字段展开成具体数字集合支持*、区间a-b、步长*/s、逗号列表再按POSIX → APScheduler映射0 变 6其余减 1最后把集合压缩回简洁的 cron 区间字符串若字段含mon-fri这类字母写法则原样透传。解析失败时不做任何改动宁可保守也不改变语义。除 cron 外还支持更简单的间隔表达式如interval:30s、interval:3m、interval:2h由 parse_schedule() 统一分派。还有一个很贴心的能力preview_schedule() 可以预览接下来 N 次触发时间让你配置完立即验证调度是否符合预期避免上线后才发现原来它每天 22:00 才跑。交易日历定时任务触发前先问一句今天开市吗这是 PanWatch 调度体系最有市场味道的部分。trading_calendar.py 回答的问题是这一天开不开市与市场定义里的is_trading_time()回答当下是否在交易时段内互补——盘前计划、日终摘要这类任务本身就发生在交易时段之外只能靠是不是交易日来守卫。它的数据策略非常务实A 股使用 akshare 交易日历tool_trade_date_hist_sina含法定节假日权威可靠结果缓存在内存启动预热 每日凌晨刷新。港股 / 美股没有等价的公开日历源只判断周末注释里称为诚实降级不假装支持节假日。降级原则拿不到日历时退回只判周末。作者的注释写得很直白——少发一条是遗憾漏发一整天是事故宁可多发一条通知也不能把交易日误判为休市。日历每天凌晨 03:00 由上下文维护调度器自动刷新context_scheduler.py特意安排在各类盘前通知之前保证当天的判断用的都是新日历。交易类定时任务如模拟盘的盘前计划、日终摘要在执行开头都会先调用any_market_trading_day()paper_trading_scheduler.pyCN/HK/US 任一市场开市才继续否则安静跳过。Agent 定时触发从一行 cron 到一次 AI 执行真正让 AI Agent 跑起来的入口是 AgentScheduler。注册一个 Agent 只需要三样东西Agent 实例、调度表达式cron 或 interval、执行模式batch整批执行 /single逐只股票执行。每次触发时的执行链路_run_agent()生成唯一trace_id开启 OTel 追踪 span把日志、追踪、执行记录串成一条线通过context_builder动态构建上下文——每次执行都拿到最新配置而不是注册时的快照single模式下逐只遍历自选股遇到所在市场非交易时段直接跳过并计数执行结束后由 record_agent_run() 落库本次运行状态、耗时、trace_id、触发来源、是否发出通知失败也记录便于回溯。配套的 AI 提示词模板分别放在 prompts/premarket_outlook.txt、prompts/daily_report.txt 和 prompts/intraday_monitor.txt对应盘前展望、每日报告和盘中监控三类定时任务。除了定时触发trigger_now() 还支持手动立即执行方便调试。高频扫描价格提醒与模拟盘的错峰设计除了低频的 cron 任务PanWatch 还有两类每 60 秒跑一次的高频扫描价格提醒调度器price_alert_scheduler.py每 60 秒扫描一次自选股价格是否触及提醒线触发告警才是 INFO 级业务事件否则只是 DEBUG 心跳日志不吵人。模拟盘调度器paper_trading_scheduler.py60 秒扫描建仓/平仓信号另挂每天 09:00 盘前计划、15:30 日终摘要两个 cron 任务非交易日自动跳过。细节上能看到很多工程巧思jitter 抖动错峰高频扫描加 20 秒随机抖动cron 任务加 120 秒抖动避免多个调度器在同一秒并发写 SQLitecoalesce max_instances1上一轮没跑完时合并丢弃积压、不并发重入防止任务堆积重入保护_running标志位在扫描开始前拦截重叠执行。上下文维护调度器还负责机会池的每日三次刷新09:15 盘前 / 13:30 午盘 / 22:00 晚间与 04:15 的历史数据清理context_scheduler.py时间点按调度器时区默认 Asia/Shanghai可用TZ环境变量覆盖解释与 Agent 的 cron 语义完全一致。小结PanWatch 的 APScheduler 调度体系可以概括为三层分工平台层src/platform/scheduling/cron 解析含星期语义归一化、交易日历含节假日与诚实降级、时区统一、健康注册表触发层Agent 调度器把分 时 日 月 周变成一次次带追踪、带记录的 AI 执行业务层价格提醒、模拟盘、上下文维护各挂独立调度器用 jitter、coalesce、max_instances 保证高频扫描互不打架。对新手而言这套体系最值得借鉴的经验是定时任务上线前先 preview 触发时间、用交易日历而不是时段判断守卫盘前/盘后任务以及降级策略永远偏向多发一条而不是漏掉一天。【免费下载链接】PanWatchPanWatch — AI stock monitoring for A-shares, HK US markets, powered by TradingAgents. Portfolio insights, real-time alerts automated reports.盯盘侠覆盖 A股/港股/美股的 AI 盯盘、持仓分析、实时提醒与自动报告。项目地址: https://gitcode.com/GitHub_Trending/pa/PanWatch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

YOLOv8+ONNXRuntime+OpenCV:CPU实现目标检测与实例分割

YOLOv8+ONNXRuntime+OpenCV:CPU实现目标检测与实例分割

简介:面向有一定深度学习基础的开发者,这套资源提供了基于YOLOv8的目标检测与实例分割实战项目,使用ONNXRuntime完成高效推理,借助OpenCV处理图像输入输出,覆盖模型加载、预处理、推理到结果可视化的完整链路。压缩包内…

2026/10/1 12:55:00 阅读更多 →
AI就业风口真相:五大热门岗位与零基础转行路线全解析

AI就业风口真相:五大热门岗位与零基础转行路线全解析

这一两年,后台问AI就业的人明显多了。有人看到大模型公司应届生薪资倒挂老员工,有人说自己所在的传统岗位正在被AI工具一点点吞掉,还有一些完全零基础、现在做运营做设计做行政的朋友,也想趁2025到2030这波AI产业周期换一条职业赛…

2026/10/1 12:55:00 阅读更多 →
Hadoop+Django热点新闻分析系统:从环境搭建到可视化完整实战

Hadoop+Django热点新闻分析系统:从环境搭建到可视化完整实战

每年毕设季,我总会收到大量和这个题目高度雷同的消息:老师,我选了基于Hadoop的热点新闻分析系统,Django做后端,但Hadoop怎么装?Django到底怎么跟Hadoop打通?热点新闻的热度到底怎么算&#xff1…

2026/10/1 12:55:00 阅读更多 →

最新新闻

基于2500张COVID肺部感染图像的分割模型训练全流程指南

基于2500张COVID肺部感染图像的分割模型训练全流程指南

简介:这份医学图像分割数据集面向医学影像分析、深度学习分割算法实践者与相关课程学习者,聚焦肺部感染(COVID)区域的像素级分割任务,可用于训练与评估U-Net等分割网络。数据统一为256256分辨率,前景为感染…

2026/10/1 13:44:26 阅读更多 →
显示面板测试工程师TE岗位详解:职责、核心技能与成长路径

显示面板测试工程师TE岗位详解:职责、核心技能与成长路径

我叫陈工,在显示面板行业摸爬滚打了近十年。这些年走过Array、Cell、Module三个段的产线,做过工艺、干过设备,最后在测试工程师(TE)这个岗位上扎了根。经常有新入职的同事或者跨行来的朋友问我:TE到底是干什…

2026/10/1 13:44:26 阅读更多 →
AI驱动CBB级PPA优化:从RTL修改到综合闭环

AI驱动CBB级PPA优化:从RTL修改到综合闭环

1. 这不是“让AI写代码”,而是让AI做综合决策:CBB设计中PPA权衡的范式转移“让 AI 带着综合结果改 RTL”——这个标题乍看像一句技术口号,但拆开每个词,它指向的是数字芯片设计流程中一个长期被忽视、却正在被彻底重构的断层。我带…

2026/10/1 13:44:26 阅读更多 →
目标检测arxiv周报:从论文筛选到可复现技术资产

目标检测arxiv周报:从论文筛选到可复现技术资产

1. 这份arxiv论文周报不是“下载合集”,而是目标检测研究者的动态情报站你点开这份标题为“arxiv论文整理20260920-0926(目标检测方向)”的文档时,第一反应可能是:又一份PDF打包?又一堆没读完的paper堆在桌…

2026/10/1 13:44:26 阅读更多 →
Appium移动自动化测试从入门到实战:环境搭建、元素定位与脚本编写

Appium移动自动化测试从入门到实战:环境搭建、元素定位与脚本编写

刚接触移动端自动化测试的时候,我绕了不小的弯路才真正把Appium用起来。这工具在业内的口碑很分裂:一方面它是移动应用自动化测试领域的“标配”,另一方面新手上路时,光是环境搭建和元素定位就能把热情消磨殆尽。今天这篇不整那些…

2026/10/1 13:44:26 阅读更多 →
从Agent训练场到防作弊:构建可规模化的沙箱评测体系

从Agent训练场到防作弊:构建可规模化的沙箱评测体系

1. Agent训练场的核心逻辑与规模背后做Agent开发这段时间,我越来越清楚一件事:真正难的不是把模型接进工具链,而是怎么在一个可控环境里反复验证它“能不能干正事”。DeepSeek把Agent训练场公开出来,我第一反应是终于有人把这件事…

2026/10/1 13:43:26 阅读更多 →

日新闻

我发现了一个新思路:用 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/1 0:00:30 阅读更多 →
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/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练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/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 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/1 0:00:30 阅读更多 →
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/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练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/1 1:01:17 阅读更多 →