V41 统一交易系统
> V40 战术交易引擎 + skill-A 分析报告,合并为单一流水线系统。
> 已通过长期回测验证,覆盖多市场环境。
30 秒快速开始(TL;DR)
首次安装(一次性,约 5-15 分钟):
python scripts/setup.py --pull-kline
每日运行(每个交易日 15:30 后,约 2-5 分钟):
python scripts/unified_pipeline.py
查看结果:打开 reports/收盘报告_YYYY-MM-DD_V41.html(浏览器双击即可)。
设置自动定时运行(一劳永逸):
Windows 任务计划程序,每天 15:35 自动执行,不用每天手动敲命令:
schtasks /create /tn "V41DailyRun" /tr "python E:\path\scripts\unified_pipeline.py" /sc daily /st 15:35
> 以上每天 15:35 自动跑(节假日数据覆盖前一天也无妨,下次交易日恢复正常)。取消:schtasks /delete /tn V41DailyRun。
这是什么 / 不是什么
| ✅ 这是 | ❌ 这不是 |
|---|---|
| A 股短线交易决策辅助 | 长线价值投资工具 |
| 收盘后自动化复盘+明日计划 | 盘中实时交易信号 |
| 多因子量化评分系统 | 单一技术指标(MACD/KDJ 等) |
| 完整的9 章分析报告输出 | 简单的"买/卖"信号 |
| 需要联网拉取当日数据 | 离线本地分析 |
典型使用场景
场景 1:每个交易日收盘后做次日交易计划
# 15:30 收盘后执行
python scripts/unified_pipeline.py
# → 自动拉取当日数据 → 输出 final_decision.json + 9 章 HTML 报告
输出:明天买什么、买多少、止损在哪、什么时候卖。
场景 2:周末做周度复盘
# 周末跑一遍(用周五收盘数据)
python scripts/unified_pipeline.py --skip-pull
# → 跳过 K 线拉取(用已缓存数据),快速出报告
场景 3:搭建自己的量化回测
# 启用回测日志(默认开启)
# 每次运行自动追加候选到 data/backtest_log.json
# 积累 30+ 天后可统计胜率、盈亏比、最大回撤
场景 4:只想看市场环境,不输出具体标的
# 通过参数控制选股阈值(高分标的稀缺时减少推荐)
python scripts/unified_pipeline.py --limit-up 30
场景 5:作为自动化交易系统的决策上游
# 读取 data/final_decision.json
# 这是唯一的、结构化的决策输出(无矛盾版本)
{
"date": "2026-07-31",
"stage": "DIVERGE",
"candidates": [
{"code": "600xxx", "score": 87, "position": 0.15, "sl": -3.5, "tp": 8.0}
]
}
完整执行流程
[初始化 1次] [每日运行]
setup.py → unified_pipeline.py
├─ 拉股票代码 ├─ 拉K线(增量)
├─ 建板块映射 ├─ 拉板块数据
└─ 建数据骨架 ├─ L0 评分
├─ L1 环境判定
├─ L2 战术匹配
├─ L3 选股
└─ L4 风控 → final_decision.json
↓
9章 HTML 报告
执行流程详解
| 步骤 | 操作 | 脚本/模块 | 耗时 |
|---|---|---|---|
| 1 | 拉取K线数据 | scripts/build_all_market_v2.py |
1-3 分钟 |
| 2 | 组合已有数据 | 合并 V33 输出、板块映射、实时板块、外部因子 | < 1 秒 |
| 3 | L0 战术评分 | 全市场股票多维度量化评分 | 10-30 秒 |
| 4 | L1 环境判定 | 涨跌停比+跌停预警+动态风险缩放 | < 1 秒 |
| 5 | L2 战术匹配 | 按市场阶段匹配仓位/止损/止盈/持仓周期参数 | < 1 秒 |
| 6 | 选股池构建 | 按评分阈值和阶段规则过滤候选标的 | < 1 秒 |
| 7 | 日历事件叠加 | FOMC、月末效应、月度调仓等事件信号 | < 1 秒 |
| 8 | 输出决策 | 写入 final_decision.json + 追加 backtest_log.json |
< 1 秒 |
输入参数
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
--limit-up N |
int | 0(自动统计) | 涨停数(用于环境判定) |
--limit-down N |
int | 0(自动统计) | 跌停数(用于环境判定) |
--skip-pull |
flag | false | 跳过 K 线拉取(已有数据时加速) |
参数使用建议:
- 第一次跑:用默认参数(自动统计涨跌停)
- 周末复盘:加 --skip-pull(用缓存数据,秒级出报告)
- 自定义环境:手动传 --limit-up 86 --limit-down 9(系统会按你的输入判定环境)
输出文件说明
| 文件路径 | 内容 | 用途 |
|---|---|---|
data/final_decision.json |
最终决策(唯一版本,无矛盾) | 程序化消费 / 自动化交易上游 |
data/backtest_log.json |
每日候选追加 | 回测验证胜率、盈亏比 |
reports/deck_report_{date}.html |
极简报告 | 快速浏览当日决策 |
reports/收盘报告_{date}_V41.html |
完整 9 章报告 | 深度分析、人工复盘 |
9 章报告结构:
| 章 | 标题 | 关键看点 |
|---|---|---|
| 一 | 市场概览 + 阶段判定 | 当前是 7 阶段中的哪一阶段 |
| 二 | 重大事件 + 外围市场 | 隔夜美股、原油、汇率、重大新闻 |
| 三 | 板块全景扫描 | 哪些板块在涨、哪些在跌 |
| 四 | 候选目标评分排序 | TOP 20 候选标的及评分理由 |
| 五 | T+1 做T + 止损止盈方案 | 持仓股如何操作、止盈止损位 |
| 六 | 风险预案 + 日历事件 | 未来一周要规避的雷区 |
| 七 | 连板与涨停分析 | 当日涨停板梯队、连板高度 |
| 八 | 核心标的追踪 | 重点跟踪个股的近期表现 |
| 九 | 关键事件前瞻 | 下周重要事件、机构调仓窗口 |
报告怎么读
关键术语速查
| 术语 | 含义 | 通俗解释 |
|---|---|---|
| 市场阶段 | 7 种市场状态分类 | 当前是牛市/熊市/震荡/崩盘 |
| L0 评分 | 候选标的综合得分 | 0-100 分,>80 强势,<60 弱势 |
| 风险缩放 | 根据市场环境调整仓位 | 跌停潮时自动减仓 |
| T+1 做T | 持仓股的高抛低吸 | 不是加仓减仓,是降低成本 |
| 候选池 | 通过初筛的股票列表 | 通常 30-50 只,最终推荐 5-10 只 |
| 日历事件 | FOMC、CPI、月末效应等 | 影响短期波动率的关键时间点 |
报告阅读顺序建议
新手:
1. 第一章(市场阶段)→ 知道现在是什么环境
2. 第四章 TOP 5 候选 → 看推荐什么
3. 第五章 → 知道怎么买、怎么卖
进阶:
1. 第二章(重大事件)→ 理解市场为什么这么走
2. 第三章(板块全景)→ 抓主线
3. 第六章(风险预案)→ 知道哪些雷要避开
4. 第八/九章 → 跟踪前瞻
适用与不适用
✅ 适用场景
- 每个交易日 15:30 收盘后的自动化复盘
- 周末的周度策略回顾
- 积累 30+ 天数据后做策略回测验证
- 作为人工交易的决策参考
- 作为自动化交易系统的决策上游
❌ 不适用场景
- 盘中实时交易(系统设计为收盘后运行,盘中使用数据滞后)
- 长线价值投资(系统优化目标是短线,建议持仓周期 ≤ 10 个交易日)
- 港股/美股(仅支持 A 股,数据源为东方财富/通达信)
- 首次安装后立即使用(需要先跑 setup.py 完成初始化)
- 离线环境(需要联网拉取 K 线、板块、新闻等数据)
避坑指南(新手常踩的坑)
🚫 坑 1:没跑 setup.py 就直接跑流水线
症状:
FileNotFoundError: [Errno 2] No such file or directory: 'data/all_a_stocks.json'
解决:
python scripts/setup.py --pull-kline
🚫 坑 2:周末/节假日跑流水线
症状:
- 报告数据是 2-3 天前的
- 涨跌停数异常(节假日效应)
解决:
- 周末跑要加 --skip-pull,且只用于复盘
- 节假日不要跑(数据不更新)
🚫 坑 3:首次跑就启用回测
症状:
- 回测日志少于 30 天
- 统计的胜率/盈亏比毫无意义
解决:
- 至少积累 30 个交易日的 backtest_log
- 前 30 天只看不统计
🚫 坑 4:K 线数据缺失某天
症状:
- 报告中断、文件残缺
- 涨跌停数据异常
解决:
# 删除 K 线缓存重新拉
rm data/all_market_kline.json
python scripts/build_all_market_v2.py
🚫 坑 5:把"评分高"等同于"必涨"
事实:
- L0 评分是历史数据的量化结果,不预测未来
- 评分 80+ 的标的,胜率显著高于 60- 标的
- 但不是 100% 准确,单笔交易可能亏损
正确心态:
- 系统优化的是长期胜率 + 盈亏比
- 单笔交易以仓位控制 + 止损为核心
🚫 坑 6:每天追报告、频繁调仓
建议:
- 系统是日频决策,不建议日内多次调仓
- 持仓周期通常 ≥ 3 个交易日
- 频繁调仓会增加交易成本(手续费 + 滑点)
🚫 坑 7:忽视风险预案章节
重要性:
- 第六章会标注未来一周要规避的雷区
- 包含解禁、减持、业绩雷、宏观事件等
- 不读风险预案 = 裸奔
故障排查
| 错误信息 | 原因 | 解决方案 |
|---|---|---|
ModuleNotFoundError: No module named 'requests' |
缺 Python 依赖 | pip install requests |
FileNotFoundError: data/all_a_stocks.json |
未初始化 | python scripts/setup.py |
requests.exceptions.ConnectionError |
网络不通或代理问题 | ① 确认能访问 eastmoney.com;② 关闭代理/防火墙;③ 切换 Wi-Fi/热点;④ 重试 1-2 次 |
requests.exceptions.ReadTimeout |
东方财富 API 响应超时 | ① 避开 9:00-9:30 和 15:00-15:30 高峰期;② 使用 --skip-pull 跳过 K 线先用缓存;③ 15 分钟后重试 |
Connection aborted / OSError |
网络不稳定,连接被中断 | ① 重试(脚本不会破坏已有数据);② 网络情况差时使用 --skip-pull 跳过在线拉取 |
所有 API 请求均失败,已使用后备代码列表 |
setup.py 后备机制触发 | 非致命:脚本自动降级为沪深核心股(60 只)。可稍后连网重新运行 setup.py 获取全量代码 |
JSONDecodeError: Expecting value |
东方财富 API 返回异常 | 删 data/all_market_kline.json 重拉 |
K线数据日期不连续 |
增量更新失败 | 删 K 线缓存全量重拉 |
setup.py 拉股票代码失败 |
API 限流/失效 | 重试,或手动编辑 data/all_a_stocks.json |
报告生成失败 |
模板文件缺失 | 重新安装技能(可能文件损坏) |
报告内容为空 |
当日数据缺失 | 检查是否为交易日、是否联网成功 |
回测日志追加失败 |
文件权限问题 | 检查 data/ 目录写权限 |
final_decision.json 字段缺失 |
流水线未完整跑完 | 重新运行 unified_pipeline.py |
性能问题
| 症状 | 原因 | 解决方案 |
|---|---|---|
| K 线拉取超过 10 分钟 | 全量拉取 5000+ 只股票 | 等待完成;下次会增量更新 |
| L0 评分超过 1 分钟 | 数据量过大 | 检查是否有多余的全市场数据 |
| 报告生成超过 30 秒 | 浏览器渲染复杂 | 用 Chrome 打开,避免 IE |
进阶用法
1. 定时任务(Windows 任务计划程序)
# 每天 15:35 自动执行
schtasks /create /tn "V41DailyRun" /tr "python E:\path\scripts\unified_pipeline.py" /sc daily /st 15:35
2. 接入企业微信通知
# 在 unified_pipeline.py 末尾追加
import requests
with open('data/final_decision.json', 'r') as f:
decision = json.load(f)
requests.post('YOUR_WECOM_WEBHOOK', json={
"msgtype": "markdown",
"markdown": {"content": f"### V41 决策 {decision['date']}\n阶段: {decision['stage']}\n候选: {len(decision['candidates'])}只"}
})
3. 自定义评分权重
参考 scripts/unified_pipeline.py 中的 L0 评分函数,根据个人偏好调整各维度权重。
4. 多策略对比
每次运行前备份 final_decision.json 到 data/history/,可对比不同参数下的选股差异。
前置依赖
pip install requests
需要联网拉取(每个交易日 15:30-23:00 最佳):
- 全市场 A 股 K 线(东方财富 API)
- 实时板块数据
- 财经新闻(外盘、重大事件)
首次安装
# 一键初始化(自动创建 data/ 目录、拉取股票代码、生成骨架文件)
python scripts/setup.py
# 包含首次K线拉取(耗时 5-15 分钟)
python scripts/setup.py --pull-kline
初始化后会在项目根目录自动创建:
data/
├── all_a_stocks.json ← 全市场A股代码
├── chain_map.json ← 板块/题材映射骨架
├── v33_daily_output.json ← V33 输出骨架
├── external_factors.json ← 外部因子骨架
├── realtime_sectors.json ← 实时板块骨架
├── all_market_kline.json ← K线数据(自动生成/更新)
└── backtest_log.json ← 回测日志(运行时追加)
reports/
└── (每日报告输出目录)
> 骨架文件在首次运行时被真实数据填充。K线数据每日收盘后自动增量更新,仅拉取缺失日期。
常见问题(FAQ)
运行相关
Q:每天必须手动运行吗?
必须跑一次,但不需要手动。建议用上面的 schtasks 设置定时任务,每天 15:35 自动执行。
Q:错过某天还能补吗?
不能补当天的(数据源不支持历史拉取),但下个交易日正常运行即可,不影响后续决策。
Q:为什么报告里推荐的是昨天涨停的股票?
短线策略天然会跟踪强势股。系统筛选的是"趋势确认后还有空间"的标的,而非"低位埋伏"。涨停启动往往是阶段性选股算法的切入点。
Q:评分最高的为什么不一定是推荐排第一的?
最终排序综合了 L0 评分 + L1 风险缩放 + L2 仓位匹配,不是单一维度。系统会主动压制"高评分但跌停潮"中的标的。
数据相关
Q:数据来源是哪里?可靠吗?
K 线和板块数据来自东方财富公开 API,涨跌停等来自通达信。都是免费公开数据,可能存在 1-3 分钟延迟或偶发性缺失。
Q:断网了怎么办?
网络问题是该系统最常见的故障源。已有后备机制:setup.py 拉全市场代码失败时自动降级为 60 只沪深核心股;K 线拉取失败可用 --skip-pull 跳过(用缓存数据)。详见故障排查表。
Q:数据会不会越来越多,磁盘不够?
K 线缓存按日增量追加,365 天大约 50-80MB。回测日志(backtest_log.json)每月约 2-3MB。每年清理一次即可。
使用范围相关
Q:能同时用于港股或美股吗?
不能。当前仅支持 A 股,数据源和策略逻辑都按 A 股市场设计(涨跌停、T+1、涨停板制度)。
Q:能用于期货/可转债吗?
不能。数据结构和策略体系不匹配。
Q:能在 Mac/Linux 上运行吗?
Python 脚本跨平台兼容。但 Windows 任务计划程序的定时方法只在 Windows 可用,Mac 用 crontab,Linux 用 crontab 或 systemd timer。
反馈与改进
- 使用中遇到问题:检查本文档"故障排查"章节
- 发现 bug:记录错误信息、运行环境、复现步骤
- 想要新功能:在反馈中说明使用场景和预期效果