研究型系统
不做实盘下单
v1.0
A股研究型量化交易系统
价值因子选股 × 多维度择时打分 × 胜率统计 × 双周回测
2026-08-21
Wallstreet小白 × Sniper的AI实验室
📁 /root/quant-research/
🐍 Python 3.8+
📊 12个模块
⏱️ 4个定时任务
一、系统架构总览
模块1: 价值因子选股池
→
模块2: 多维度择时打分
→
模块3: 每日胜率统计
→
模块4: 双周回测评估
| 模块 | 频率 | 输入 | 输出 | 核心文件 |
| 价值因子选股池 | 每月1日 | 全A股行情+财报 | 80只候选股 | pool_builder.py |
| 多维度择时打分 | 工作日16:10 | 股票池+K线+消息 | BUY/HOLD/SELL信号 | signal_engine.py |
| 每日胜率统计 | 工作日16:30 | 历史信号记录 | 5/10/20日胜率 | stats_tracker.py |
| 双周回测评估 | 每14个交易日 | 2年历史数据 | 年化/回撤/夏普 | backtester.py |
/root/quant-research/
├── config.py # 全局配置(权重/阈值/参数)
├── pool_builder.py # 模块1:价值因子股票池
├── signal_engine.py # 模块2:多维度择时打分
├── macro_scorer.py # 模块2:宏观面评分
├── news_scorer.py # 模块2:消息面评分
├── stats_tracker.py # 模块3:每日胜率统计
├── backtester.py # 模块4:双周回测
├── main.py # 主调度入口(CLI)
├── utils/
│ ├── data_fetcher.py # 数据获取(腾讯API海外可用)
│ ├── factor_utils.py # 因子标准化工具
│ └── technical_utils.py # 技术指标计算(12项)
└── data/
├── value_pool.json # 当前价值股票池
├── daily_signals.json # 当日择时信号
├── signal_log.json # 全量信号记录
├── macro_daily.json # 每日宏观得分
└── backtest_result.json # 最新回测结果
二、模块1:价值因子初选股票池
| # | 条件 | 阈值 | 说明 |
| F1 | 市场范围 | 沪深主板+科创+创业 | 仅A股 |
| F2 | ST/*ST | 全部剔除 | 排除风险股 |
| F3 | 上市天数 | ≥120个交易日 | 排除次新股 |
| F4 | 日均成交额 | ≥1亿元 | 流动性保障 |
| F5 | 资产负债率 | ≤90% | 排除高负债 |
| F6 | 扣非净利润 | 非连续两年为负 | 排除持续亏损 |
| F7 | 停牌/无报价 | 当日无有效报价 | 排除停牌 |
价值综合得分 = EP×0.30 + PB×0.25 + 股息率×0.20 + FCF_Yield×0.15 + ROE×0.10
| 因子 | 计算公式 | 方向 | 标准化 |
| EP | 1 / PE_TTM | 越高越好 | 截面百分位排名0-100 |
| PB | 总市值 / 归属净资产 | 越低越好 | 反向百分位排名 |
| 股息率 | 近12月每股分红 / 股价 | 越高越好 | 截面百分位排名 |
| FCF Yield | 自由现金流 / 总市值 | 越高越好 | 截面百分位排名 |
| ROE | 归属净利润 / 加权净资产 | 越高越好 | 截面百分位排名 |
📌 行业约束:单一申万一级行业不超过候选池总数×20%(80只→每行业最多16只)
三、模块2:多维度交易择时打分
综合交易得分 = 技术面×0.55 + 宏观面×0.25 + 消息面×0.20
技术面得分 = T1×0.25 + T2×0.20 + T3×0.15 + T4×0.15 + T5×0.15 + T6×0.10
| 子指标 | 权重 | 核心计算 | 评分逻辑 |
| T1 均线系统 | 25% | MA5/MA18/MA60/MA120/MA250 | MA18站稳(+25) + 多头排列(+15) + MA18方向(±8) |
| T2 量价配合 | 20% | 量比 + OBV趋势 | 放量上涨(+20) / 缩量回调(+5) / 放量下跌(-15) |
| T3 波动率/布林 | 15% | 布林位置 + RSI(14) | 超卖区(+10) / 超买区(-8) |
| T4 K线形态 | 15% | 7种反转形态 + MACD | 早晨之星(+12) / MACD金叉(+10) / 黄昏之星(-12) |
| T5 支撑压力 | 15% | 52周分位 + 风险收益比 + 斐波那契 | 低位(+12) / RR>3(+15) / 0.618回撤(+8) |
| T6 趋势结构 | 10% | 趋势强度 + 加速度 + ADX | 强上升趋势(+8) / 趋势加速(+8) |
宏观得分 = M1×0.30 + M2×0.25 + M3×0.20 + M4×0.15 + M5×0.10
| 指标 | 权重 | 数据源 | 评分标准 |
| M1 沪深300估值分位 | 30% | 沪深300 PE_TTM历史 | <20%→95分 / >80%→15分 |
| M2 北向资金流向 | 25% | 近20日累计净流入 | >300亿→90分 / <-300亿→10分 |
| M3 国债收益率变化 | 20% | 10年期国债60日Δ | Δ<-30bp→85分 / Δ>+30bp→20分 |
| M4 PMI | 15% | 制造业PMI | >52→85分 / <48→15分 |
| M5 市场情绪 | 10% | 成交额活跃度 | 比值1.5-2.0→75分 |
| 类型 | 事件 | 分值 | 衰减 |
| 正向 | 业绩预增/扭亏 | +12 | 5日衰减50% |
| 重大中标/战略合作 | +10 | 10日衰减50% |
| 股份回购 | +8 | 10日衰减50% |
| 行业重大利好 | +8 | 15日衰减50% |
| 高管增持 | +6 | 5日衰减50% |
| 分红预案(股息率>3%) | +6 | 永久 |
| 机构密集调研 | +5 | 永久 |
| 负向 | 业绩预减/首亏/续亏 | -15 | 10日衰减50% |
| 财报非标审计意见 | -15 | 永久 |
| 限售股解禁(30天内) | -12 | 解禁日后恢复 |
| 监管处罚/立案 | -12 | 永久 |
| 大股东减持 | -10 | 10日衰减50% |
| 行业重大利空 | -10 | 15日衰减50% |
| 质押比例>70% | -8 | 永久 |
消息面得分 = max(0, min(100, 50 + Σ(单次分值 × 衰减系数)))
衰减系数 = max(0.5, 1 - 距今天数 / 衰减周期)
四、模块3:每日胜率统计
| 字段 | 说明 |
| total_signals | 历史信号总数 |
| buy_signals | 历史看多信号数 |
| open_positions | 当前持仓中信号数 |
| win_rate_5d / 10d / 20d | N日上涨概率(%) |
| avg_return_5d / 10d / 20d | N日平均收益(%) |
| profit_loss_ratio_Nd | N日盈亏比 |
| sample_count_Nd | N日有效样本数 |
| score_groups | 按得分分组统计(high/mid/low) |
五、模块4:双周回测评估
| 参数 | 值 | 说明 |
| 回测周期 | 最近2年 | 约500个交易日 |
| 初始资金 | 100万元 | 虚拟资金 |
| 单票仓位上限 | 5% | 最多20只 |
| 最大持仓天数 | 60天 | 超期强制平仓 |
| 止损线 | 8% | 单票浮亏>8%平仓 |
| 手续费 | 万三(单边) | 买卖各收 |
| 印花税 | 千一(卖出) | 仅卖出 |
| 滑点 | 万二 | 每笔 |
附加:信号质量分析 / 维度归因(IC值) / 失效场景识别 / 权重调整建议
六、Cron定时任务
| 任务 | 频率 | 时间 | Job ID |
| 月度股票池更新 | 每月1日 | 09:00 BJT | f39d9eac0fe6 |
| 每日全流程 | 工作日 | 16:10 BJT | 4b8e43bdb12d |
| 双周回测 | 每14天 | 10:00 BJT | 922fb0e54928 |
📌 所有任务输出通过飞书推送
七、系统潜在缺陷与风险
⚠️ 已知限制
1截面百分位排名的行业偏差 — PB/EP跨行业统一排序,银行股天然PB低会霸榜。缓解:行业约束20%上限。
2消息面量化精度有限 — 关键词匹配无法准确判断消息力度和预期差。缓解:衰减机制+正负标签分离。
3宏观指标滞后性 — PMI月度发布,宏观面变化缓慢。缓解:权重仅25%,不主导个股决策。
4价值因子的周期性 — 成长股行情中价值因子可能持续失效。缓解:价值池仅提供候选,择时信号可过滤。
5回测过拟合风险 — 2年数据可能过度拟合特定环境。缓解:每两周滚动回测+样本外验证。
6海外服务器数据源限制 — akshare的SSE/SZSE API不可用。缓解:已用腾讯API替代,部分宏观数据用默认值。
7单票5%仓位的局限 — A股涨跌停限制下,5%仓位贡献有限。缓解:通过信号阈值自然控制集中度。
8流动性冲击未建模 — 小市值股票实际建仓有冲击成本。缓解:F4过滤日均成交额≥1亿。
八、使用指南
cd /root/quant-research
# 查看帮助
python3 main.py --help
# 构建价值股票池(月度)
python3 main.py pool
# 每日全流程(宏观→信号→统计)
python3 main.py daily
# 单独运行各模块
python3 main.py macro # 宏观面评分
python3 main.py signal # 择时打分
python3 main.py stats # 胜率统计
python3 main.py backtest # 双周回测
python3 main.py list # 查看股票池
python3 main.py status # 系统状态