# 📖 完整配置与部署指南 本文档包含 A股智能分析系统的完整配置说明,适合需要高级功能或特殊部署方式的用户。 > 💡 快速上手请参考 [README.md](../README.md),本文档为进阶配置。 ## � 项目结构 ``` daily_stock_analysis/ ├── main.py # 主程序入口 ├── src/ # 核心业务逻辑 │ ├── analyzer.py # AI 分析器 │ ├── config.py # 配置管理 │ ├── notification.py # 消息推送 │ └── ... ├── data_provider/ # 多数据源适配器 ├── bot/ # 机器人交互模块 ├── api/ # FastAPI 后端服务 ├── apps/dsa-web/ # React 前端 ├── docker/ # Docker 配置 ├── docs/ # 项目文档 └── .github/workflows/ # GitHub Actions ``` ## 📑 目录 - [项目结构](#项目结构) - [GitHub Actions 详细配置](#github-actions-详细配置) - [环境变量完整列表](#环境变量完整列表) - [Docker 部署](#docker-部署) - [本地运行详细配置](#本地运行详细配置) - [定时任务配置](#定时任务配置) - [通知渠道详细配置](#通知渠道详细配置) - [数据源配置](#数据源配置) - [高级功能](#高级功能) - [回测功能](#回测功能) - [本地 WebUI 管理界面](#本地-webui-管理界面) --- ## GitHub Actions 详细配置 ### 1. Fork 本仓库 点击右上角 `Fork` 按钮 ### 2. 配置 Secrets 进入你 Fork 的仓库 → `Settings` → `Secrets and variables` → `Actions` → `New repository secret`
GitHub Secrets 配置示意图
#### AI 模型配置(二选一) | Secret 名称 | 说明 | 必填 | |------------|------|:----:| | `GEMINI_API_KEY` | [Google AI Studio](https://aistudio.google.com/) 获取免费 Key | ✅* | | `OPENAI_API_KEY` | OpenAI 兼容 API Key(支持 DeepSeek、通义千问等) | 可选 | | `OPENAI_BASE_URL` | OpenAI 兼容 API 地址(如 `https://api.deepseek.com/v1`) | 可选 | | `OPENAI_MODEL` | 模型名称(如 `deepseek-chat`) | 可选 | > *注:`GEMINI_API_KEY` 和 `OPENAI_API_KEY` 至少配置一个 #### 通知渠道配置(可同时配置多个,全部推送) | Secret 名称 | 说明 | 必填 | |------------|------|:----:| | `WECHAT_WEBHOOK_URL` | 企业微信 Webhook URL | 可选 | | `FEISHU_WEBHOOK_URL` | 飞书 Webhook URL | 可选 | | `TELEGRAM_BOT_TOKEN` | Telegram Bot Token(@BotFather 获取) | 可选 | | `TELEGRAM_CHAT_ID` | Telegram Chat ID | 可选 | | `TELEGRAM_MESSAGE_THREAD_ID` | Telegram Topic ID (用于发送到子话题) | 可选 | | `DISCORD_WEBHOOK_URL` | Discord Webhook URL([创建方法](https://support.discord.com/hc/en-us/articles/228383668)) | 可选 | | `DISCORD_BOT_TOKEN` | Discord Bot Token(与 Webhook 二选一) | 可选 | | `DISCORD_CHANNEL_ID` | Discord Channel ID(使用 Bot 时需要) | 可选 | | `EMAIL_SENDER` | 发件人邮箱(如 `xxx@qq.com`) | 可选 | | `EMAIL_PASSWORD` | 邮箱授权码(非登录密码) | 可选 | | `EMAIL_RECEIVERS` | 收件人邮箱(多个用逗号分隔,留空则发给自己) | 可选 | | `EMAIL_SENDER_NAME` | 发件人显示名称(默认:daily_stock_analysis股票分析助手) | 可选 | | `PUSHPLUS_TOKEN` | PushPlus Token([获取地址](https://www.pushplus.plus),国内推送服务) | 可选 | | `SERVERCHAN3_SENDKEY` | Server酱³ Sendkey([获取地址](https://sc3.ft07.com/),手机APP推送服务) | 可选 | | `CUSTOM_WEBHOOK_URLS` | 自定义 Webhook(支持钉钉等,多个用逗号分隔) | 可选 | | `CUSTOM_WEBHOOK_BEARER_TOKEN` | 自定义 Webhook 的 Bearer Token(用于需要认证的 Webhook) | 可选 | > *注:至少配置一个渠道,配置多个则同时推送 #### 推送行为配置 | Secret 名称 | 说明 | 必填 | |------------|------|:----:| | `SINGLE_STOCK_NOTIFY` | 单股推送模式:设为 `true` 则每分析完一只股票立即推送 | 可选 | | `REPORT_TYPE` | 报告类型:`simple`(精简) 或 `full`(完整),Docker环境推荐设为 `full` | 可选 | | `ANALYSIS_DELAY` | 个股分析和大盘分析之间的延迟(秒),避免API限流,如 `10` | 可选 | | `MARKDOWN_TO_IMAGE_CHANNELS` | 将 Markdown 转为图片发送的渠道(用逗号分隔):telegram,wechat,custom,email,需安装 wkhtmltopdf | 可选 | | `MARKDOWN_TO_IMAGE_MAX_CHARS` | 超过此长度不转图片,避免超大图片(默认 15000) | 可选 | #### 其他配置 | Secret 名称 | 说明 | 必填 | |------------|------|:----:| | `STOCK_LIST` | 自选股代码,如 `600519,300750,002594` | ✅ | | `TAVILY_API_KEYS` | [Tavily](https://tavily.com/) 搜索 API(新闻搜索) | 推荐 | | `BOCHA_API_KEYS` | [博查搜索](https://open.bocha.cn/) Web Search API(中文搜索优化,支持AI摘要,多个key用逗号分隔) | 可选 | | `BRAVE_API_KEYS` | [Brave Search](https://brave.com/search/api/) API(隐私优先,美股优化,多个key用逗号分隔) | 可选 | | `SERPAPI_API_KEYS` | [SerpAPI](https://serpapi.com/baidu-search-api?utm_source=github_daily_stock_analysis) 备用搜索 | 可选 | | `TUSHARE_TOKEN` | [Tushare Pro](https://tushare.pro/weborder/#/login?reg=834638 ) Token | 可选 | #### ✅ 最小配置示例 如果你想快速开始,最少需要配置以下项: 1. **AI 模型**:`GEMINI_API_KEY`(推荐)或 `OPENAI_API_KEY` 2. **通知渠道**:至少配置一个,如 `WECHAT_WEBHOOK_URL` 或 `EMAIL_SENDER` + `EMAIL_PASSWORD` 3. **股票列表**:`STOCK_LIST`(必填) 4. **搜索 API**:`TAVILY_API_KEYS`(强烈推荐,用于新闻搜索) > 💡 配置完以上 4 项即可开始使用! ### 3. 启用 Actions 1. 进入你 Fork 的仓库 2. 点击顶部的 `Actions` 标签 3. 如果看到提示,点击 `I understand my workflows, go ahead and enable them` ### 4. 手动测试 1. 进入 `Actions` 标签 2. 左侧选择 `每日股票分析` workflow 3. 点击右侧的 `Run workflow` 按钮 4. 选择运行模式 5. 点击绿色的 `Run workflow` 确认 ### 5. 完成! 默认每个工作日 **18:00(北京时间)** 自动执行。 --- ## 环境变量完整列表 ### AI 模型配置 | 变量名 | 说明 | 默认值 | 必填 | |--------|------|--------|:----:| | `GEMINI_API_KEY` | Google Gemini API Key | - | ✅* | | `GEMINI_MODEL` | 主模型名称 | `gemini-3-flash-preview` | 否 | | `GEMINI_MODEL_FALLBACK` | 备选模型 | `gemini-2.5-flash` | 否 | | `OPENAI_API_KEY` | OpenAI 兼容 API Key | - | 可选 | | `OPENAI_BASE_URL` | OpenAI 兼容 API 地址 | - | 可选 | | `OPENAI_MODEL` | OpenAI 模型名称 | `gpt-4o` | 可选 | > *注:`GEMINI_API_KEY` 和 `OPENAI_API_KEY` 至少配置一个 ### 通知渠道配置 | 变量名 | 说明 | 必填 | |--------|------|:----:| | `WECHAT_WEBHOOK_URL` | 企业微信机器人 Webhook URL | 可选 | | `FEISHU_WEBHOOK_URL` | 飞书机器人 Webhook URL | 可选 | | `TELEGRAM_BOT_TOKEN` | Telegram Bot Token | 可选 | | `TELEGRAM_CHAT_ID` | Telegram Chat ID | 可选 | | `TELEGRAM_MESSAGE_THREAD_ID` | Telegram Topic ID | 可选 | | `DISCORD_WEBHOOK_URL` | Discord Webhook URL | 可选 | | `DISCORD_BOT_TOKEN` | Discord Bot Token(与 Webhook 二选一) | 可选 | | `DISCORD_CHANNEL_ID` | Discord Channel ID(使用 Bot 时需要) | 可选 | | `EMAIL_SENDER` | 发件人邮箱 | 可选 | | `EMAIL_PASSWORD` | 邮箱授权码(非登录密码) | 可选 | | `EMAIL_RECEIVERS` | 收件人邮箱(逗号分隔,留空发给自己) | 可选 | | `EMAIL_SENDER_NAME` | 发件人显示名称 | 可选 | | `STOCK_GROUP_N` / `EMAIL_GROUP_N` | 股票分组发往不同邮箱(Issue #268),如 `STOCK_GROUP_1=600519,300750` 与 `EMAIL_GROUP_1=user1@example.com` 配对 | 可选 | | `CUSTOM_WEBHOOK_URLS` | 自定义 Webhook(逗号分隔) | 可选 | | `CUSTOM_WEBHOOK_BEARER_TOKEN` | 自定义 Webhook Bearer Token | 可选 | | `PUSHOVER_USER_KEY` | Pushover 用户 Key | 可选 | | `PUSHOVER_API_TOKEN` | Pushover API Token | 可选 | | `PUSHPLUS_TOKEN` | PushPlus Token(国内推送服务) | 可选 | | `SERVERCHAN3_SENDKEY` | Server酱³ Sendkey | 可选 | #### 飞书云文档配置(可选,解决消息截断问题) | 变量名 | 说明 | 必填 | |--------|------|:----:| | `FEISHU_APP_ID` | 飞书应用 ID | 可选 | | `FEISHU_APP_SECRET` | 飞书应用 Secret | 可选 | | `FEISHU_FOLDER_TOKEN` | 飞书云盘文件夹 Token | 可选 | > 飞书云文档配置步骤: > 1. 在 [飞书开发者后台](https://open.feishu.cn/app) 创建应用 > 2. 配置 GitHub Secrets > 3. 创建群组并添加应用机器人 > 4. 在云盘文件夹中添加群组为协作者(可管理权限) ### 搜索服务配置 | 变量名 | 说明 | 必填 | |--------|------|:----:| | `TAVILY_API_KEYS` | Tavily 搜索 API Key(推荐) | 推荐 | | `BOCHA_API_KEYS` | 博查搜索 API Key(中文优化) | 可选 | | `BRAVE_API_KEYS` | Brave Search API Key(美股优化) | 可选 | | `SERPAPI_API_KEYS` | SerpAPI 备用搜索 | 可选 | ### 数据源配置 | 变量名 | 说明 | 必填 | |--------|------|:----:| | `TUSHARE_TOKEN` | Tushare Pro Token | 可选 | ### 其他配置 | 变量名 | 说明 | 默认值 | |--------|------|--------| | `STOCK_LIST` | 自选股代码(逗号分隔) | - | | `MAX_WORKERS` | 并发线程数 | `3` | | `MARKET_REVIEW_ENABLED` | 启用大盘复盘 | `true` | | `SCHEDULE_ENABLED` | 启用定时任务 | `false` | | `SCHEDULE_TIME` | 定时执行时间 | `18:00` | | `LOG_DIR` | 日志目录 | `./logs` | --- ## Docker 部署 Dockerfile 使用多阶段构建,前端会在构建镜像时自动打包并内置到 `static/`。 如需覆盖静态资源,可挂载本地 `static/` 到容器内 `/app/static`。 ### 快速启动 ```bash # 1. 克隆仓库 git clone https://github.com/ZhuLinsen/daily_stock_analysis.git cd daily_stock_analysis # 2. 配置环境变量 cp .env.example .env vim .env # 填入 API Key 和配置 # 3. 启动容器 docker-compose -f ./docker/docker-compose.yml up -d server # Web 服务模式(推荐,提供 API 与 WebUI) docker-compose -f ./docker/docker-compose.yml up -d analyzer # 定时任务模式 docker-compose -f ./docker/docker-compose.yml up -d # 同时启动两种模式 # 4. 访问 WebUI # http://localhost:8000 # 5. 查看日志 docker-compose -f ./docker/docker-compose.yml logs -f server ``` ### 运行模式说明 | 命令 | 说明 | 端口 | |------|------|------| | `docker-compose -f ./docker/docker-compose.yml up -d server` | Web 服务模式,提供 API 与 WebUI | 8000 | | `docker-compose -f ./docker/docker-compose.yml up -d analyzer` | 定时任务模式,每日自动执行 | - | | `docker-compose -f ./docker/docker-compose.yml up -d` | 同时启动两种模式 | 8000 | ### Docker Compose 配置 `docker-compose.yml` 使用 YAML 锚点复用配置: ```yaml version: '3.8' x-common: &common build: context: .. dockerfile: docker/Dockerfile restart: unless-stopped env_file: - ../.env environment: - TZ=Asia/Shanghai volumes: - ../data:/app/data - ../logs:/app/logs - ../reports:/app/reports - ../.env:/app/.env services: # 定时任务模式 analyzer: <<: *common container_name: stock-analyzer # FastAPI 模式 server: <<: *common container_name: stock-server command: ["python", "main.py", "--serve-only", "--host", "0.0.0.0", "--port", "8000"] ports: - "8000:8000" ``` ### 常用命令 ```bash # 查看运行状态 docker-compose -f ./docker/docker-compose.yml ps # 查看日志 docker-compose -f ./docker/docker-compose.yml logs -f server # 停止服务 docker-compose -f ./docker/docker-compose.yml down # 重建镜像(代码更新后) docker-compose -f ./docker/docker-compose.yml build --no-cache docker-compose -f ./docker/docker-compose.yml up -d server ``` ### 手动构建镜像 ```bash docker build -f docker/Dockerfile -t stock-analysis . docker run -d --env-file .env -p 8000:8000 -v ./data:/app/data stock-analysis python main.py --serve-only --host 0.0.0.0 --port 8000 ``` --- ## 本地运行详细配置 ### 安装依赖 ```bash # Python 3.10+ 推荐 pip install -r requirements.txt # 或使用 conda conda create -n stock python=3.10 conda activate stock pip install -r requirements.txt ``` ### 命令行参数 ```bash python main.py # 完整分析(个股 + 大盘复盘) python main.py --market-review # 仅大盘复盘 python main.py --no-market-review # 仅个股分析 python main.py --stocks 600519,300750 # 指定股票 python main.py --dry-run # 仅获取数据,不 AI 分析 python main.py --no-notify # 不发送推送 python main.py --schedule # 定时任务模式 python main.py --debug # 调试模式(详细日志) python main.py --workers 5 # 指定并发数 ``` --- ## 定时任务配置 ### GitHub Actions 定时 编辑 `.github/workflows/daily_analysis.yml`: ```yaml schedule: # UTC 时间,北京时间 = UTC + 8 - cron: '0 10 * * 1-5' # 周一到周五 18:00(北京时间) ``` 常用时间对照: | 北京时间 | UTC cron 表达式 | |---------|----------------| | 09:30 | `'30 1 * * 1-5'` | | 12:00 | `'0 4 * * 1-5'` | | 15:00 | `'0 7 * * 1-5'` | | 18:00 | `'0 10 * * 1-5'` | | 21:00 | `'0 13 * * 1-5'` | ### 本地定时任务 ```bash # 启动定时模式(默认 18:00 执行) python main.py --schedule # 或使用 crontab crontab -e # 添加:0 18 * * 1-5 cd /path/to/project && python main.py ``` --- ## 通知渠道详细配置 ### 企业微信 1. 在企业微信群聊中添加"群机器人" 2. 复制 Webhook URL 3. 设置 `WECHAT_WEBHOOK_URL` ### 飞书 1. 在飞书群聊中添加"自定义机器人" 2. 复制 Webhook URL 3. 设置 `FEISHU_WEBHOOK_URL` ### Telegram 1. 与 @BotFather 对话创建 Bot 2. 获取 Bot Token 3. 获取 Chat ID(可通过 @userinfobot) 4. 设置 `TELEGRAM_BOT_TOKEN` 和 `TELEGRAM_CHAT_ID` 5. (可选) 如需发送到 Topic,设置 `TELEGRAM_MESSAGE_THREAD_ID` (从 Topic 链接末尾获取) ### 邮件 1. 开启邮箱的 SMTP 服务 2. 获取授权码(非登录密码) 3. 设置 `EMAIL_SENDER`、`EMAIL_PASSWORD`、`EMAIL_RECEIVERS` 支持的邮箱: - QQ 邮箱:smtp.qq.com:465 - 163 邮箱:smtp.163.com:465 - Gmail:smtp.gmail.com:587 **股票分组发往不同邮箱**(Issue #268,可选): 配置 `STOCK_GROUP_N` 与 `EMAIL_GROUP_N` 可实现不同股票组的报告发送到不同邮箱,例如多人共享分析时互不干扰。大盘复盘会发往所有配置的邮箱。 ```bash STOCK_GROUP_1=600519,300750 EMAIL_GROUP_1=user1@example.com STOCK_GROUP_2=002594,AAPL EMAIL_GROUP_2=user2@example.com ``` ### 自定义 Webhook 支持任意 POST JSON 的 Webhook,包括: - 钉钉机器人 - Discord Webhook - Slack Webhook - Bark(iOS 推送) - 自建服务 设置 `CUSTOM_WEBHOOK_URLS`,多个用逗号分隔。 ### Discord Discord 支持两种方式推送: **方式一:Webhook(推荐,简单)** 1. 在 Discord 频道设置中创建 Webhook 2. 复制 Webhook URL 3. 配置环境变量: ```bash DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/xxx/yyy ``` **方式二:Bot API(需要更多权限)** 1. 在 [Discord Developer Portal](https://discord.com/developers/applications) 创建应用 2. 创建 Bot 并获取 Token 3. 邀请 Bot 到服务器 4. 获取频道 ID(开发者模式下右键频道复制) 5. 配置环境变量: ```bash DISCORD_BOT_TOKEN=your_bot_token DISCORD_CHANNEL_ID=your_channel_id ``` ### Pushover(iOS/Android 推送) [Pushover](https://pushover.net/) 是一个跨平台的推送服务,支持 iOS 和 Android。 1. 注册 Pushover 账号并下载 App 2. 在 [Pushover Dashboard](https://pushover.net/) 获取 User Key 3. 创建 Application 获取 API Token 4. 配置环境变量: ```bash PUSHOVER_USER_KEY=your_user_key PUSHOVER_API_TOKEN=your_api_token ``` 特点: - 支持 iOS/Android 双平台 - 支持通知优先级和声音设置 - 免费额度足够个人使用(每月 10,000 条) - 消息可保留 7 天 ### Markdown 转图片(可选) 配置 `MARKDOWN_TO_IMAGE_CHANNELS` 可将报告以图片形式发送至不支持 Markdown 的渠道(telegram, wechat, custom, email)。 **依赖安装**: 1. **imgkit**:已包含在 `requirements.txt`,执行 `pip install -r requirements.txt` 时会自动安装 2. **wkhtmltopdf**:系统级依赖,需手动安装: - **macOS**:`brew install wkhtmltopdf` - **Debian/Ubuntu**:`apt install wkhtmltopdf` 未安装或安装失败时,将自动回退为 Markdown 文本发送。 --- ## 数据源配置 系统默认使用 AkShare(免费),也支持其他数据源: ### AkShare(默认) - 免费,无需配置 - 数据来源:东方财富爬虫 ### Tushare Pro - 需要注册获取 Token - 更稳定,数据更全 - 设置 `TUSHARE_TOKEN` ### Baostock - 免费,无需配置 - 作为备用数据源 ### YFinance - 免费,无需配置 - 支持美股/港股数据 --- ## 高级功能 ### 港股支持 使用 `hk` 前缀指定港股代码: ```bash STOCK_LIST=600519,hk00700,hk01810 ``` ### 多模型切换 配置多个模型,系统自动切换: ```bash # Gemini(主力) GEMINI_API_KEY=xxx GEMINI_MODEL=gemini-3-flash-preview # OpenAI 兼容(备选) OPENAI_API_KEY=xxx OPENAI_BASE_URL=https://api.deepseek.com/v1 OPENAI_MODEL=deepseek-chat ``` ### 调试模式 ```bash python main.py --debug ``` 日志文件位置: - 常规日志:`logs/stock_analysis_YYYYMMDD.log` - 调试日志:`logs/stock_analysis_debug_YYYYMMDD.log` --- ## 回测功能 回测模块自动对历史 AI 分析记录进行事后验证,评估分析建议的准确性。 ### 工作原理 1. 选取已过冷却期(默认 14 天)的 `AnalysisHistory` 记录 2. 获取分析日之后的日线数据(前向 K 线) 3. 根据操作建议推断预期方向,与实际走势对比 4. 评估止盈/止损命中情况,模拟执行收益 5. 汇总为整体和单股两个维度的表现指标 ### 操作建议映射 | 操作建议 | 仓位推断 | 预期方向 | 胜利条件 | |---------|---------|---------|---------| | 买入/加仓/strong buy | long | up | 涨幅 ≥ 中性带 | | 卖出/减仓/strong sell | cash | down | 跌幅 ≥ 中性带 | | 持有/hold | long | not_down | 未显著下跌 | | 观望/等待/wait | cash | flat | 价格在中性带内 | ### 配置 在 `.env` 中设置以下变量(均有默认值,可选): | 变量 | 默认值 | 说明 | |------|-------|------| | `BACKTEST_ENABLED` | `true` | 是否在每日分析后自动运行回测 | | `BACKTEST_EVAL_WINDOW_DAYS` | `10` | 评估窗口(交易日数) | | `BACKTEST_MIN_AGE_DAYS` | `14` | 仅回测 N 天前的记录,避免数据不完整 | | `BACKTEST_ENGINE_VERSION` | `v1` | 引擎版本号,升级逻辑时用于区分结果 | | `BACKTEST_NEUTRAL_BAND_PCT` | `2.0` | 中性区间阈值(%),±2% 内视为震荡 | ### 自动运行 回测在每日分析流程完成后自动触发(非阻塞,失败不影响通知推送)。也可通过 API 手动触发。 ### 评估指标 | 指标 | 说明 | |------|------| | `direction_accuracy_pct` | 方向预测准确率(预期方向与实际一致) | | `win_rate_pct` | 胜率(胜 / (胜+负),不含中性) | | `avg_stock_return_pct` | 平均股票收益率 | | `avg_simulated_return_pct` | 平均模拟执行收益率(含止盈止损退出) | | `stop_loss_trigger_rate` | 止损触发率(仅统计配置了止损的记录) | | `take_profit_trigger_rate` | 止盈触发率(仅统计配置了止盈的记录) | --- ## FastAPI API 服务 FastAPI 提供 RESTful API 服务,支持配置管理和触发分析。 ### 启动方式 | 命令 | 说明 | |------|------| | `python main.py --serve` | 启动 API 服务 + 执行一次完整分析 | | `python main.py --serve-only` | 仅启动 API 服务,手动触发分析 | ### 功能特性 - 📝 **配置管理** - 查看/修改自选股列表 - 🚀 **快速分析** - 通过 API 接口触发分析 - 📊 **实时进度** - 分析任务状态实时更新,支持多任务并行 - 📈 **回测验证** - 评估历史分析准确率,查询方向胜率与模拟收益 - 🔗 **API 文档** - 访问 `/docs` 查看 Swagger UI ### API 接口 | 接口 | 方法 | 说明 | |------|------|------| | `/api/v1/analysis/analyze` | POST | 触发股票分析 | | `/api/v1/analysis/tasks` | GET | 查询任务列表 | | `/api/v1/analysis/status/{task_id}` | GET | 查询任务状态 | | `/api/v1/history` | GET | 查询分析历史 | | `/api/v1/backtest/run` | POST | 触发回测 | | `/api/v1/backtest/results` | GET | 查询回测结果(分页) | | `/api/v1/backtest/performance` | GET | 获取整体回测表现 | | `/api/v1/backtest/performance/{code}` | GET | 获取单股回测表现 | | `/api/health` | GET | 健康检查 | | `/docs` | GET | API Swagger 文档 | **调用示例**: ```bash # 健康检查 curl http://127.0.0.1:8000/api/health # 触发分析(A股) curl -X POST http://127.0.0.1:8000/api/v1/analysis/analyze \ -H 'Content-Type: application/json' \ -d '{"stock_code": "600519"}' # 查询任务状态 curl http://127.0.0.1:8000/api/v1/analysis/status/ # 触发回测(全部股票) curl -X POST http://127.0.0.1:8000/api/v1/backtest/run \ -H 'Content-Type: application/json' \ -d '{"force": false}' # 触发回测(指定股票) curl -X POST http://127.0.0.1:8000/api/v1/backtest/run \ -H 'Content-Type: application/json' \ -d '{"code": "600519", "force": false}' # 查询整体回测表现 curl http://127.0.0.1:8000/api/v1/backtest/performance # 查询单股回测表现 curl http://127.0.0.1:8000/api/v1/backtest/performance/600519 # 分页查询回测结果 curl "http://127.0.0.1:8000/api/v1/backtest/results?page=1&limit=20" ``` ### 自定义配置 修改默认端口或允许局域网访问: ```bash python main.py --serve-only --host 0.0.0.0 --port 8888 ``` ### 支持的股票代码格式 | 类型 | 格式 | 示例 | |------|------|------| | A股 | 6位数字 | `600519`、`000001`、`300750` | | 港股 | hk + 5位数字 | `hk00700`、`hk09988` | ### 注意事项 - 浏览器访问:`http://127.0.0.1:8000`(或您配置的端口) - 分析完成后自动推送通知到配置的渠道 - 此功能在 GitHub Actions 环境中会自动禁用 --- ## 常见问题 ### Q: 推送消息被截断? A: 企业微信/飞书有消息长度限制,系统已自动分段发送。如需完整内容,可配置飞书云文档功能。 ### Q: 数据获取失败? A: AkShare 使用爬虫机制,可能被临时限流。系统已配置重试机制,一般等待几分钟后重试即可。 ### Q: 如何添加自选股? A: 修改 `STOCK_LIST` 环境变量,多个代码用逗号分隔。 ### Q: GitHub Actions 没有执行? A: 检查是否启用了 Actions,以及 cron 表达式是否正确(注意是 UTC 时间)。 --- 更多问题请 [提交 Issue](https://github.com/ZhuLinsen/daily_stock_analysis/issues)