-
Notifications
You must be signed in to change notification settings - Fork 163
12_Tech_Actions_Operations
本篇是定时任务排障指南——"任务为什么没跑"或"跑挂了怎么查"。
当前 workflow 完整清单见 docs/ARCHITECTURE.md。
| 英文术语 | 中文释义 |
|---|---|
| Workflow | GitHub 自动任务,一组按计划或手动触发的步骤 |
| UTC cron | UTC 时区定时表达式,GitHub Actions 用它决定触发时间 |
| Secret | 密钥变量,用来存 API Key、Webhook 等敏感配置 |
| Variable | 普通配置变量,不适合放密钥 |
| Dry run | 试运行,只验证流程和输入,不执行真实副作用 |
| Artifact | 运行产物,Actions 结束后可下载的日志或报告 |
| Step | 工作流里的单个执行步骤 |
| Job | 工作流里的一组步骤,可独立运行 |
只有配置了 schedule 的 workflow 才会自动跑;只有 workflow_dispatch 的任务需要手动触发。
| 任务 | 北京时间 | UTC cron(UTC 定时表达式) | 主脚本 |
|---|---|---|---|
| Premarket Risk | 周一-周五 08:20 | 20 0 * * 1-5 |
scripts/premarket_risk_job.py |
| Wyckoff Funnel HK | 周一-周五 16:35 | 35 8 * * 1-5 |
scripts/market_funnel_job.py --market hk |
| Wyckoff Funnel | 周一-周五 17:17 | 17 9 * * 1-5 |
scripts/daily_job.py |
| Review List Replay | 周一-周五 19:25 | 25 11 * * 1-5 |
scripts/review_list_replay.py |
| Theme Radar Weekly | 周五 21:10 | 10 13 * * 5 |
scripts/theme_radar_job.py |
| Pattern Replay Reprice | 周一-周五 23:00 | 0 15 * * 1-5 |
scripts/recommendation_tracking_reprice_job.py |
| Signal Feedback | 周一-周五 23:30 | 30 15 * * 1-5 |
scripts/signal_feedback_job.py |
| Wyckoff Funnel US | 周二-周六 05:35 | 35 21 * * 1-5 |
scripts/market_funnel_job.py --market us |
| US Recommendation Performance | 周二-周六 06:15 | 15 22 * * 1-5 |
scripts/us_recommendation_performance_job.py |
| DB Maintenance | 周二-周六 06:20 | 20 22 * * 1-5 |
scripts/db_maintenance.py |
| Backtest Grid | 每月 UTC 1/15 日 20:00,北京时间次日 04:00 | 0 20 1,15 * * |
scripts/backtest_runner.py |
| 任务 | 触发方式 | 主脚本 |
|---|---|---|
| Tail Buy | workflow_dispatch |
scripts/tail_buy_intraday_job.py |
| Holding Diagnosis | workflow_dispatch |
scripts/holding_diagnosis_job.py |
| Sector Continuity Report | workflow_dispatch |
scripts/sector_continuity_report.py |
| Step4 From Supabase | workflow_dispatch |
scripts/step4_from_supabase.py |
| Web Quant Jobs | workflow_dispatch |
scripts/web_background_job.py |
| Wyckoff Input Preview | workflow_dispatch |
scripts/daily_job.py preview mode |
| Single Symbol Funnel Diagnosis | workflow_dispatch |
scripts/single_symbol_funnel_diagnosis.py |
| Backtest Grid US | workflow_dispatch |
scripts/us_backtest_strategy_replay.py |
sequenceDiagram
participant Funnel as Wyckoff Funnel 17:17
participant DB as Supabase
participant Feedback as Signal Feedback 23:30
Funnel->>DB: 读取上一轮 health / registry
Funnel->>Funnel: 跑漏斗、AI 研报、OMS
Funnel->>DB: 写 signal_observations
Feedback->>DB: 读 signal_observations
Feedback->>DB: 写 outcomes / health / registry
Note over DB,Funnel: 下一轮漏斗读取新的策略状态
这两个 workflow 是独立定时任务,不会自动互相等待。当前错峰设计是“漏斗先产样本,feedback 晚上验收,下一轮漏斗使用结果”。如果手动触发导致重叠,feedback 只处理当时已经落库的数据,漏掉的 observation 会在下一次 feedback 补上。
| Secret(密钥变量) | 用途 |
|---|---|
FEISHU_WEBHOOK_URL |
飞书推送 |
GEMINI_API_KEY |
AI 研报模型 |
TUSHARE_TOKEN |
A 股行情降级源 |
TICKFLOW_API_KEY |
TickFlow A 股 / 港股 / 美股行情 |
| Secret(密钥变量) | 用途 |
|---|---|
SUPABASE_URL / SUPABASE_SERVICE_ROLE_KEY / SUPABASE_USER_ID
|
云端持仓同步 |
TG_BOT_TOKEN / TG_CHAT_ID
|
Telegram 推送 |
RAG_SEMANTIC_PROVIDER / RAG_SEMANTIC_API_KEY / RAG_SEMANTIC_MODEL / RAG_SEMANTIC_BASE_URL
|
RAG(检索增强生成)防雷的可选语义否决模型;默认新闻检索走 akshare,无需额外 key |
OPENAI_API_KEY 或其它 *_API_KEY / *_MODEL / *_BASE_URL
|
兼容 OpenAI 协议的备用模型 |
注意:Actions 通过 Secrets 注入环境变量,和本地 .env 文件无关。
| Variable(普通配置变量) | 推荐值 | 用途 |
|---|---|---|
FUNNEL_DYNAMIC_POLICY |
shadow |
控制动态策略:off 静态、shadow 旁路观察、on 正式生效。 |
FUNNEL_DYNAMIC_POLICY 不是密钥,优先放 GitHub Variables(GitHub 普通配置变量);workflow(GitHub 自动任务)也兼容同名 Secret(密钥变量)。
日志特征:配置缺失: ... 或模型调用返回 401
处理:去 GitHub → Settings → Secrets 检查对应变量是否存在且有效。
现象:运行时间比平时长很多
处理:A 股日线有自动降级机制(tickflow → tushare → akshare → baostock → efinance),通常自愈。港股 / 美股目前依赖 TickFlow,失败时优先检查 TickFlow key、套餐权限和请求频次。
日志特征:您的IP数量超限,最大数量为2个!
原因:多个并行 job 同时访问 tushare。
处理:确保回测用两阶段架构(Phase 1 单 job 拉数据 → Phase 2 并行格读快照)。不要让多个 job 直接调 tushare。
日志特征:snapshot missing file: .../hist_full.csv.gz(快照文件缺失)
原因:Phase 1 的 upload-artifact 路径和 Phase 2 的 download-artifact 路径不一致。
处理:检查 workflow yml 里 artifact 的 path 配置。
原因:未配置 SUPABASE_USER_ID 或 Telegram 参数。Step4 按设计跳过——这不是故障。
排查顺序:
- 检查
signal_observations是否有最近样本。 - 检查
signal_outcomes.status是否仍大量为pending。 - 检查
signal_health_daily.sample_count是否低于阈值。 - 检查
signal_registry.status是否把信号置为EXPERIMENTAL或RETIRED。 - 如果漏斗没有写
signal_policy_shadow_runs,确认FUNNEL_DYNAMIC_POLICY=shadow是否已配置到 GitHub Variables / Secrets。
现象:收到的是模板格式的简报而非 AI 生成的
原因:合规简报模型未配置 / 模型调用失败 / 输出触发合规校验。降级为本地模板是正常保护行为,不影响主研报。
- 改完策略参数后,先手动触发一次 workflow(GitHub 自动任务)做 dry run(试运行)
- 关注 Actions 页面的 Artifacts(运行产物)输出,回测结果会存在那里
- 关键版本变更后,固定 snapshot(快照)跑一轮回测确认效果
- Home
- 01_Product_Overview
- 02_Finance_Wyckoff_Method
- 03_Finance_Quantitative_Metrics
- 04_Finance_Sector_Rotation_Regime
- 05_Finance_Risk_Management
- 06_Backtest_Methodology
- 07_Backtest_Simple_vs_Compound
- 08_Research_Strategy_Decay
- 09_Tech_Architecture
- 10_Tech_LLM_RAG_Integration
- 12_Tech_Actions_Operations
- 13_Tech_Python_Engineering