DSAWiki
01启程 · 上手

10 分钟,把它跑起来

不需要服务器,也不需要写代码。用 GitHub Actions 让机器人每天替你分析自选股。

约 7 分钟 零基础 第 01 章 · 启程

这一章只做一件事:让你在约 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 的。

第一次运行,你会在日志里看到什么

无论哪种方式,单只股票都会经历一条相似的路径。理解这条路径,后面的章节就都有落点了:

1
环境与交易日检查

加载配置、校验股票列表、按市场判断今天是否开市。非交易日会跳过,除非 --force-run。

2
抓行情、筹码、基本面

实时价失败会退回最近收盘价;基本面有约 8 秒预算,超时就带着缺失字段继续,而不是整轮失败。

3
算技术指标

MA / MACD / RSI / 乖离率 / 量能,输出趋势判断与 0–100 的技术信号分。

4
搜新闻与情报

最多 5 组检索词,抓新闻、公告、舆情;没有配搜索源也能继续,只是情报为空。

5
LLM 分析 + 规则守卫

模型返回结构化 JSON,再用支撑压力、资金流、市场阶段和评分刻度做二次校准。

6
落库、生成报告、推送

历史报告进 SQLite,决策信号被抽取;同一份结论按渠道能力转成不同格式发出去。

五个最常见的坑

现象大概率原因处理
日志提示 empty_stock_listSTOCK_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 是「能分析」,通知渠道才是「能触达」。

源码与文档锚点

下一章,我们补上读懂分析报告所需的金融常识。如果你已经熟悉股票,可以直接跳到分析流水线。