A股信号扫描 + 多 Agent 评审 + 策略回测 + 模拟仓复盘。纯 Python → SQLite → 静态 HTML。
⚠️ 仅供学习研究,不构成投资建议。回测结果不代表未来收益。
🤖 信号复盘 — 多 Agent 独立投票,资金/技术/事件/风险闸门通过才进候选 |
📈 策略回测 — 胜率/期望值/夏普比率/最大回撤/连亏笔数 |
🔺 涨停梯队金字塔 — 连板高度 / 封单 / 炸板率 / 题材共振 |
|
🎯 信号复盘 — 候选理由、Council 投票、资金等级与可交易性 |
🛡️ 大盘资金 — 市场宽度、指数状态与板块主力资金轮动 |
上述图片来自公开演示页,只展示公开市场数据和模拟交易结果,不包含真实账户或个人持仓。
| 模块 | 做什么 | 关键输出 |
|---|---|---|
| 选股引擎 | 组合动态主题、全市场资金动量、相对强弱和涨停梯队 | 候选评分、理由、买点/止损/目标区间 |
| Council 评审 | 资金、技术、事件、板块、质量与风险角色独立投票;技术面支持 MACD/RSI/KDJ/均线(可选 MyTT) | 加权共识、分歧、风险否决 |
| 策略回测 | 按 A 股 T+1、手续费、滑点和日线价格回放历史信号 | 胜率、EV、夏普比率、回撤、连亏和基准超额 |
| 模拟仓 | 使用独立虚拟资金执行信号,记录持仓、成交和净值 | T+1 状态、权益曲线、交易日志 |
| 每日复盘 | 聚合当日交易、观察信号、盈亏与风险指标 | 终端文本报告 + 静态 HTML 页面 |
| AI 研究(可选) | 调用 OpenAI-compatible API 生成候选股研究页 | 结构化研究记录与个股详情页 |
Council 核心决策是可回放的确定性规则,不配置 LLM 也能运行。
ai_research.py是可选的研究增强层,不应被当作交易指令。
flowchart LR
A[公开行情 / 问财数据] --> B[候选池与证据补全]
B --> C[Council 多角色评审]
C --> D[(本地 SQLite)]
D --> E[策略回测]
D --> F[模拟交易]
D --> G[静态雷达 / 复盘页]
E --> G
F --> G
- 静态优先:运行任务写入 SQLite,生成后的 HTML/CSS/JS 可由任意静态服务器托管。
- 证据可追溯:信号、时间、评分、Agent 观点和回测交易保存在本地数据库。
- 研究与实盘隔离:模拟仓只操作
virtual_*表,项目不提供券商下单能力。
- Python 3.12+(与 CI 环境一致)
- 无必装的第三方 Python 依赖,核心脚本只使用标准库
- 运行选股需要可用的问财 API Key;LLM 研究完全可选
- 可选:安装 MyTT 后,Council 的技术评审会自动升级为 MACD/RSI/KDJ/均线排列 多维判断;未安装时自动降级到基础涨跌幅/换手率规则
git clone https://github.com/marongwork/StockRadar.git
cd StockRadar
cp .env.example .env
# 可选:启用技术指标评审(MACD/RSI/KDJ/均线排列)
pip3 install -r requirements.txt编辑 .env,至少填写你自己的 IWENCAI_API_KEY,然后在当前 shell 加载:
set -a
source .env
set +a
.env已被 Git 忽略。不要在 Issue、PR、截图、生成页或测试代码中粘贴真实 Key。
python3 stock_picker.py首次运行会在仓库根目录创建独立的 invest.db,保存公开行情快照和选股信号,并生成雷达页面。
如果只想预览最终候选而不保存本轮选股结果:
python3 stock_picker.py --print--print 不会写入最终 stock_picks,但在行情快照过期时仍可能更新本地行情缓存和 API 用量记录。
# 初始化虚拟账户并生成页面
python3 virtual_trader.py --init --generate
# 根据已保存信号执行一轮模拟交易
python3 virtual_trader.py --run --generate
# 在终端输出当日复盘
python3 virtual_trader.py --report模拟仓遵守 T+1、仓位上限、止损/止盈和风险闸门,但不会连接券商,也不会执行真实交易。
python3 generate_stock_lab.py .
python3 -m http.server 8000打开:
雷达图表通过 CDN 加载 ECharts;断网时数据仍在生成页中,但部分图表可能不渲染。
| 变量 | 必需 | 说明 |
|---|---|---|
IWENCAI_API_KEY |
选股时是 | 问财 OpenAPI Key,仅从进程环境读取 |
IWENCAI_BASE_URL |
否 | 问财 API 根地址,默认为 https://openapi.iwencai.com |
OPENAI_API_KEY |
否 | OpenAI-compatible 研究服务 Key |
DEEPSEEK_API_KEY |
否 | 可选的 DeepSeek Key |
ZHIPU_API_KEY / BIGMODEL_API_KEY |
否 | 可选的智谱/BigModel Key |
AI_BASE_URL |
否 | OpenAI-compatible API 地址;使用非默认服务时应显式设置 |
AI_MODEL |
否 | 研究模型名,需与 AI_BASE_URL 匹配 |
可选 LLM 配置只用于 ai_research.py 等研究增强功能。不配置时,选股、Council 规则评审、回测和模拟仓仍可运行。
| 目标 | 命令 |
|---|---|
| 正常选股并写入本地库 | python3 stock_picker.py |
| 只预览候选 | python3 stock_picker.py --print |
| 盘前复核 | python3 stock_picker.py --premarket |
| 抓取公开资金流信号 | python3 public_market_scanner.py |
| 采样盘中市场异动 | python3 market_intraday_monitor.py --no-rescan |
| 回测全部已保存信号 | python3 strategy_backtest.py --strategy all |
| 指定时间窗口回测 | python3 strategy_backtest.py --start 2026-01-01 --end 2026-01-31 |
| 初始化 AI 研究表 | python3 ai_research.py ensure |
| 为单只股生成 AI 研究 | python3 ai_research.py analyze --code 600000 --name 浦发银行 |
| 输出模拟盘日报 | python3 virtual_trader.py --report |
| 重新生成雷达页 | python3 generate_stock_lab.py . |
回测需要先有已保存且足够旧的信号。新建数据库上出现 No eligible picks to backtest 是正常现象。
| 路径 | 内容 | 是否应提交 |
|---|---|---|
invest.db |
信号、行情快照、回测和模拟仓数据 | 否 |
stock-lab.html |
雷达主页 | 视发布方式而定,提交前必须脱敏 |
stock-lab/signals/ |
信号详情页 | 否 |
stock-lab/ai/ |
AI 研究页 | 否 |
virtual-account.html / virtual-account/ |
模拟仓总览与个股档案 | 否,默认作为本地运行产物 |
sector-flow.json |
页面使用的板块资金快照 | 否 |
建议为每个实验使用新的本地 invest.db。不要复制、挂载或复用任何个人资产/真实持仓数据库。
├── stock_picker.py # 候选池、证据补全与信号保存
├── public_market_scanner.py # 全市场公开资金流扫描
├── market_intraday_monitor.py # 盘中指数采样与反转监测
├── agent_council.py # 可回放的多角色共识与风险否决
├── ai_research.py # 可选 LLM 研究增强
├── strategy_backtest.py # A 股交易规则回测
├── strategy_filter_search.py # 历史规则过滤与检索
├── virtual_trader.py # 模拟账户、交易执行与每日复盘
├── generate_stock_lab.py # 雷达及个股详情静态生成器
├── assets/ # 前端样式、图表与交互
├── docs/
│ ├── ARCHITECTURE.md # 分层架构与数据流
│ └── STRATEGY.md # 策略、Council、风控与回测约束
├── test_trading_rules.py # 交易与风控回归测试
├── test_public_release_boundaries.py # 开源边界回归测试
├── .env.example # 空凭据模板
├── SECURITY.md # 安全边界与漏洞报告方式
└── TECH_DOCS.md # 详细技术手册
python3 -m compileall -q .
python3 -m unittest -v test_trading_rules.py test_public_release_boundaries.py
node --check assets/stock-lab.js
git diff --checkCI 在每个 Pull Request 和 main 推送上执行 Python 编译、39 项单元测试与前端 JavaScript 语法检查。
本仓库包含:
- 选股雷达、公开行情扫描和市场异动监测
- Council 多角色评审与可选 AI 研究
- 策略回测、模拟仓、模拟交易和每日复盘
- 静态页面生成器及前端资源
本仓库不包含:
- 真实持仓、成交、现金、成本或其他个人资产数据
- 券商账户、真实下单、用户登录、VIP/兑换码后台
- 生产数据库、服务器路径、部署凭据、聊天 ID、Token 或 API Key
问财和 LLM 密钥只从进程环境变量读取;代码不会扫描 shell 配置、用户主目录或服务器私有配置。详见 SECURITY.md。
可能原因包括非交易时段、数据源超时/API 限额、市场数据降级,或当前没有信号通过风险闸门。系统在全市场主数据源失败时会标记 degraded,不会用低质量保底候选伪装正常结果。
请确认已配置一个 LLM Key,且 AI_BASE_URL 和 AI_MODEL 与你的服务商匹配。AI 研究是可选模块,其失败不应改变核心规则引擎的结果。
不可以。本项目是研究与模拟交易工具,没有券商接口。信号也会受数据延迟、流动性、滑点、停牌和涨跌停等影响。
Issue 和 Pull Request 欢迎聚焦以下方向:
- 公开数据源稳定性与明确降级标记
- 避免未来数据的回测修复和新验收指标
- 模拟仓交易规则、风控与可解释性
- 脱敏后的界面、文档和测试改进
提交前请运行完整测试,并确认 diff 中不包含 .env、数据库、日志、生成页、真实持仓或任何凭据。安全问题请按 SECURITY.md 私下报告,不要在公开 Issue 中粘贴敏感细节。
本项目仅用于软件工程、量化研究和模拟交易学习,不构成投资建议、收益承诺或任何形式的交易邀请。回测、历史胜率和模拟盘结果均不代表未来表现。使用者应独立判断并自行承担风险。







