全自动威科夫量化分析机器人
结合传统技术指标与 LLM(大语言模型)的逻辑推理能力,自动拉取 K 线数据、绘制图表、生成威科夫分析报告,并通过 Telegram 推送。
为了解决单一数据源历史数据不足的问题,构建了强大的混合获取机制:
- BaoStock (历史):负责拉取长周期的历史 K 线(底仓数据)。
- AkShare (实时):负责补全最近期的实时数据。
- 智能清洗:自动对齐不同数据源的时间戳格式,并智能修复“手/股”成交量单位差异(100x 修正)。
- 1分钟级支持:针对超短线(1m)自动切换全量 AkShare 模式。
拒绝 429 (限流) 和 503 (过载),确保报告 100% 产出。系统按以下优先级自动切换:
- Primary: Google Official Gemini API (
gemini-3-flash-preview) - Secondary: Custom Relay API (Qiandao
gemini-3-pro-preview-h) - Fallback: OpenAI / DeepSeek (
gpt-4o兼容接口)
无需修改代码,直接在 Google Sheet 中定义每只股票的分析策略:
- 支持 自定义周期:
1m,5m,15m,30m,60m。 - 支持 自定义长度:任意指定分析的 K 线根数(如 500, 1000, 2000)。
- 防断连:HTTP 连接强制伪装 UA 并禁用 Keep-Alive,防止
RemoteDisconnected。 - 自动化:基于 GitHub Actions 定时运行,无需本地服务器。
- 推送:分析完成后自动生成 PDF 并推送到 Telegram 群组。
请在您的 Google Sheet 中设置以下列结构。程序现在支持读取 E 列和 F 列进行个性化配置。
| 列号 | 标题 (Header) | 说明 (Description) | 示例 (Example) |
|---|---|---|---|
| A | Symbol | 股票代码 (支持 A 股) | 600519 |
| B | Date | 建仓日期 (可选) | 2023-01-01 |
| C | Price | 建仓价格 (可选) | 1500.00 |
| D | Qty | 持仓数量 (可选) | 100 |
| E | Timeframe | 分析周期 (分钟) | 5, 15, 30, 60, 1 |
| F | Bars | K 线抓取数量 | 500, 1000 |
| G | Note | 个人备注 (可选,AI 分析时参考) | 突破关键压力位 |
💡 提示:如果 E、F 列留空,程序将默认使用
5m和500根 K 线。G 列为用户自定义备注,会传递给 AI 作为分析参考。
前往仓库 Settings -> Secrets and variables -> Actions,添加以下环境变量:
GEMINI_API_KEY: Google Gemini 官方 API Key。CUSTOM_API_KEY: [新增] 第三方中转 API Key (第二优先级)。OPENAI_API_KEY: OpenAI 或 DeepSeek API Key (最终兜底)。
GCP_SA_KEY: Google Service Account JSON (用于读取表格)。SHEET_NAME: Google Sheet 的文件名或 ID。TG_BOT_TOKEN: Telegram Bot Token。TG_CHAT_ID: 接收报告的 Chat ID。
WYCKOFF_PROMPT_TEMPLATE: 你的 AI 分析提示词模板。
如果您想在本地测试代码:
-
克隆仓库
git clone [https://github.com/your-username/your-repo.git](https://github.com/your-username/your-repo.git) cd your-repo -
安装依赖
pip install -r requirements.txt
注意:必须包含
baostock,akshare,pandas,mplfinance等库。 -
配置环境变量 建议创建一个
.env文件或直接在终端 export 你的 API Keys。 -
运行脚本
# 运行主程序 python main.py # 仅测试数据获取 (不消耗 Token) python test_data.py
graph TD
A[GitHub Actions Trigger] --> B{"读取 Google Sheet"};
B --> C[遍历股票列表];
C --> D{"周期 >= 5m?"};
D -- Yes --> E[BaoStock 拉取历史数据];
D -- No --> F[跳过 BaoStock];
E --> G[AkShare 拉取实时数据];
F --> G;
G --> H["数据清洗 & 单位对齐"];
H --> I["生成 K 线图 (mplfinance)"];
I --> J{"AI 分析 (Triple Fallback)"};
J -- Try 1 --> K[Gemini Official];
K -- Fail --> L[Custom API];
L -- Fail --> M["OpenAI / DeepSeek"];
M --> N[生成 PDF 报告];
K --> N;
L --> N;
N --> O[推送至 Telegram];