这一章只做一件事:让你在约 10 分钟内,收到第一份真正属于自己的分析报告。你不需要会写代码,也不需要买服务器。
开始之前,你只需要准备三样东西
① 一个 GitHub 账号;② 一个可用的大模型 API Key(推荐 Modelflare / AIHubMix / Gemini / DeepSeek 任选其一);③ 一个你想接收消息的地方(企业微信、飞书、Telegram、Discord、邮件都行)。
三条路,先选一条
很多人卡在第一步,是因为把「体验」和「长期运行」混在了一起。先明确目标:如果你只想看看它长什么样,选 A;如果你想改代码,选 B;如果你想 7×24 稳定跑,选 C。
| 方式 | 适合谁 | 成本 | 能力边界 |
|---|---|---|---|
| GitHub Actions | 第一次体验、不想维护服务器 | 公开仓库免费;私有仓库消耗额度 | 只跑分析,不提供 Web 界面 |
| 本地 Python | 想调试、改 Prompt、加策略 | 自己的电脑 | 功能完整,可开 Web;需要装依赖 |
| Docker | 长期挂在 NAS / 云服务器 | 一台 1G 内存左右的小机器 | Web + 定时分析,环境隔离 |
第 1 步 · Fork 仓库
打开 ZhuLinsen/daily_stock_analysis,点右上角 Fork。你会得到一份完全属于自己的副本,后续改配置不会影响原作者。
第 2 步 · 配置 Secrets
进入你 Fork 后仓库的 Settings → Secrets and variables → Actions → New repository secret。最少只需要三类:
| 类别 | 最少配置 | 说明 |
|---|---|---|
| 大模型 | MODELFLARE_KEY 或 AIHUBMIX_KEY 或 GEMINI_API_KEY | 至少一个;OpenAI 兼容服务用 OPENAI_API_KEY,可另配 OPENAI_BASE_URL 与 OPENAI_MODEL |
| 通知 | WECHAT_WEBHOOK_URL 或 FEISHU_WEBHOOK_URL 或 TELEGRAM_BOT_TOKEN + TELEGRAM_CHAT_ID | 至少一个;否则报告只写进日志/产物,不会主动找你 |
| 自选股 | STOCK_LIST | 必填,逗号分隔,支持多市场 |
STOCK_LIST 可以直接复制下面这行做测试:
600519,hk00700,AAPL,7203.T,005930.KS,2330.TW
这行包含 A 股、港股、美股、日股、韩股、台股各一只。更稳妥的做法是先只放 2–3 只熟悉的股票,确认链路通了再扩容。
推荐但不是必须:新闻源
新闻质量直接影响「风险」与「催化」两栏。可加 ANSPIRE_API_KEYS 或 SERPAPI_API_KEYS;不配也能跑,只是情报部分会更薄。
第 3 步 · 启用 Actions 并手动跑一次
点击仓库顶部 Actions 标签 → 同意启用 workflows → 左侧选择「每日股票分析」→ 右侧 Run workflow。模式选 full(个股 + 大盘),需要跳过交易日检查时再勾 force_run。
大约几十秒后刷新页面,你会看到一个正在运行的 job。展开日志,关键节点包括:安装依赖、检查环境、分析个股、大盘复盘、发送通知。结束后 Artifacts 里会有 reports 和 logs,保留 30 天。
第 4 步 · 等它每天自己上班
默认 cron 是 0 10 * * 1-5(UTC),也就是北京时间周一至周五 18:00。非交易日会自动跳过;如果当天是节假日但你仍想跑,用 force_run。
Actions 环境默认把 MAX_WORKERS 设为 1、报告类型设为 simple,并用随机延迟 0–60 秒错峰启动。这些默认值是为云端环境稳定性做的取舍,不是功能缺失。
Actions 不会给你一个网站
每日工作流只执行命令行分析并推送,不会启动 Web 服务。想要浏览器里的工作台,请用本地或 Docker 方式。
第 1 步 · 装依赖
需要 Python 3.10+,推荐 3.11(与官方 CI/Actions 一致)。项目依赖较多,建议用虚拟环境:
git clone https://github.com/ZhuLinsen/daily_stock_analysis.git
cd daily_stock_analysis
python3.11 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install --upgrade pip
pip install -r requirements.txt
如果某些数据源依赖在你的平台装不上,可以先跳过它们——系统会按能力矩阵降级,不是所有源都必须可用。
第 2 步 · 写 .env
cp .env.example .env
# 用编辑器打开 .env,至少填写:
# STOCK_LIST=600519,300750
# MODELFLARE_KEY=你的key (或 AIHUBMIX_KEY / GEMINI_API_KEY)
# WECHAT_WEBHOOK_URL=你的webhook (或飞书/Telegram/Discord/邮件)
.env.example 有上千行,但绝大多数可以留空。不要被它吓到:配置是「按需增强」,不是「全部必填」。
第 3 步 · 先干跑,再真跑
# 只抓数据、不算 LLM、不推送:验证数据源与代码格式
python main.py --dry-run
# 真正分析一只股票,打开调试日志
python main.py --stocks 600519 --debug
# 只分析、不推送
python main.py --no-notify
# 启动 Web 工作台(浏览器访问 http://127.0.0.1:8000)
python main.py --webui
看到 “Frontend Not Built”?
Web 前端是 React 单页应用,需要先构建到 static/。可以进入 apps/dsa-web 执行 npm ci && npm run build,或直接使用 Docker 镜像。后端 API 本身是正常的。
第 4 步 · 本地定时
python main.py --schedule # 常驻,按配置时间执行
python main.py --serve-only # 只启动 Web/API,不跑分析
python main.py --market-review # 只做大盘复盘
注意:本地定时和 Actions 定时是两套独立入口。同时开启、又共用同一个 SQLite,系统会尽量通过「原子认领」避免重复;但多机部署且数据库不共享时,仍可能重复推送。
一条命令起服务
cp .env.example .env
# 编辑 .env:STOCK_LIST、模型 Key、通知、API_PORT
# 只跑定时分析
docker compose -f ./docker/docker-compose.yml up -d analyzer
# 只跑 Web/API
docker compose -f ./docker/docker-compose.yml up -d server
# 两个都跑(注意:只保留一个调度入口)
docker compose -f ./docker/docker-compose.yml up -d
镜像默认以非 root 用户运行,暴露 /api/health 健康检查,并挂载 data/、logs/、reports/、strategies/。完整分析建议 1G 以上内存;512M 仅适合轻量 Web 或单股低并发。
公网暴露前,先开认证
在 .env 设置 ADMIN_AUTH_ENABLED=true,并通过反向代理加 HTTPS。仅设置系统环境变量不会开启认证——认证模块是直接读取 .env 的。
第一次运行,你会在日志里看到什么
无论哪种方式,单只股票都会经历一条相似的路径。理解这条路径,后面的章节就都有落点了:
加载配置、校验股票列表、按市场判断今天是否开市。非交易日会跳过,除非 --force-run。
实时价失败会退回最近收盘价;基本面有约 8 秒预算,超时就带着缺失字段继续,而不是整轮失败。
MA / MACD / RSI / 乖离率 / 量能,输出趋势判断与 0–100 的技术信号分。
最多 5 组检索词,抓新闻、公告、舆情;没有配搜索源也能继续,只是情报为空。
模型返回结构化 JSON,再用支撑压力、资金流、市场阶段和评分刻度做二次校准。
历史报告进 SQLite,决策信号被抽取;同一份结论按渠道能力转成不同格式发出去。
五个最常见的坑
| 现象 | 大概率原因 | 处理 |
|---|---|---|
日志提示 empty_stock_list | STOCK_LIST 没配,或为空 | 在 Secrets / .env 填至少一个代码 |
| 分析成功但没收到消息 | 一个通知渠道都没配,或 Webhook 填错 | 先用 --check-notify 或 Web 设置页的「测试渠道」;至少配一个 |
| 今天没跑 | 非交易日,或 Actions 被禁用 | 勾选 force_run 手动验证;检查 Actions 状态 |
000016 被当成股票 | 裸 6 位代码默认按 A 股股票处理 | 指数必须写显式形态:sh000016、000300.CSI |
| Web 打开是空白 / Not Built | 前端静态资源未构建 | 构建 apps/dsa-web,或用 Docker 镜像 |
永远不要把 .env 提交到仓库
它包含模型 Key、Webhook、邮件密码等敏感信息。公开仓库一旦泄露,Key 可能被滥用并产生真实账单。用 GitHub Secrets,或本地 .gitignore 保护的 .env。
完成清单
只配置下面哪一组,仍然收不到任何推送?
reports/,但通知服务发现「没有任何已配置渠道」时只会告警,不会把消息送到你手上。自选股和模型 Key 是「能分析」,通知渠道才是「能触达」。源码与文档锚点
下一章,我们补上读懂分析报告所需的金融常识。如果你已经熟悉股票,可以直接跳到分析流水线。