目录

  • 1. 执行摘要
  • 2. quant_pro 规则引擎详解
  •    2.1 四维分析体系
  •    2.2 技术面因子体系(70%)
  •    2.3 基本面因子体系(30%)
  •    2.4 资金流向因子(16%)
  •    2.5 新闻情感分析(±5%)
  •    2.6 风险控制系统
  • 3. ML 策略模型(V7.3)
  • 4. 架构对比分析
  • 5. ML 集成方案(4 种方案)
  • 6. 代码示例
  • 7. 性能对比与预期效果

1. 执行摘要

本文档详细描述将机器学习模型集成到 quant_pro 规则引擎的完整方案。通过"规则 + ML"双引擎驱动,实现以下目标:

当前架构

集成后架构

quant_pro 规则引擎(v6.0)
- 技术面因子 70%
- 基本面因子 30%
- 资金流向 16%
- 新闻情感 ±5%

双引擎驱动
- quant_pro 规则引擎(60% 权重)
- ML 策略 V7.3(40% 权重)
- 动态权重优化
- 风险控制系统

核心优势:

  • ✅ 可解释性强(规则引擎) + 捕捉非线性关系(ML)
  • ✅ 稳定可靠(规则) + 自适应学习(ML)
  • ✅ 人工经验(规则权重) + 数据驱动(ML 特征交互)

2. quant_pro 规则引擎详解

quant_pro 是我编写的一个 A 股量化分析系统(v6.0),采用四维分析体系,综合评估股票投资价值。

2.1 四维分析体系

四维分析体系架构图:

维度

权重

核心功能

技术面分析

70%

趋势、动量、位置、突破、成交量、回调、资金流向

基本面分析

30%

估值、盈利能力、成长性、财务健康

资金流向

16%

主力动向、超大单/大单/中单/小单净流入

新闻情感

±5%

正面/负面新闻情感调整

总分计算公式:

总分 = (技术面×70% + 基本面×30%) × (1 + 资金流向调整) + 新闻情感调整

2.2 技术面因子体系(70%)

技术面因子包含 7 个子因子,总权重 70%:

因子

权重

核心指标

计算逻辑

趋势因子

20%

MA5/10/20/60, EMA

多头排列得分 +15, 空头排列 -15, 均线斜率

动量因子

15%

RSI, MACD, KDJ

RSI>70 超买 -10, RSI<30 超卖 +10, MACD 金叉 +10

位置因子

15%

52 周位置,布林带

低位 (0-30%) +15, 高位 (70-100%) -15

突破因子

12%

平台突破,成交量放大

突破平台 +15, 成交量>200% +10

成交量因子

8%

量比,成交量 MA

量比>2 +10, 成交量 MA 金叉 +8

回调因子

10%

回调幅度,支撑位

回调至支撑位 +15, 跌破支撑 -10

资金流向因子

20%

主力净流入,超大单

主力净流入>0 +20, 超大单买入 +15

技术面得分计算:

技术面得分 = Σ(子因子得分 × 子因子权重) / 100 × 70

2.3 基本面因子体系(30%)

基本面因子包含 4 个子因子,总权重 30%:

因子

权重

核心指标

评分标准

估值因子

25%

PE-TTM, PB, PS-TTM

PE<20 +25, 20-40 +15, >40 -10

盈利能力

30%

ROE, 毛利率,净利率

ROE>15% +30, 10-15% +20, <10% +10

成长性

25%

营收增长率,净利润增长

增长>30% +25, 15-30% +20, <15% +10

财务健康

20%

资产负债率,流动比率

负债率<50% +20, 流动比率>2 +15

基本面得分计算:

基本面得分 = Σ(子因子得分 × 子因子权重) / 100 × 30

2.4 资金流向因子(16%)

资金流向因子独立计算,作为调整项:

指标

计算公式

调整幅度

主力净流入率

主力净流入/流通市值

>5% +16%, 2-5% +10%, 0-2% +5%

超大单买入比

超大单买入/总买入

>30% +15%, 20-30% +10%, <20% +5%

大单净流入

大单买入 - 大单卖出

>0 +10%, 持续 3 日 +15%

中单/小单比

中单净流入/小单净流入

>1 +5%, 主力 vs 散户对比

资金流向调整:

调整后得分 = (技术面 + 基本面) × (1 + 资金流向调整系数)

2.5 新闻情感分析(±5%)

新闻情感分析基于最近 7 天新闻,进行±5% 的调整:

  • 情感评分标准:
  • 正面新闻(业绩预增、中标、政策利好):+3% 到 +5%
  • 中性新闻(日常经营、行业分析):0%
  • 负面新闻(业绩预减、监管处罚、诉讼):-3% 到 -5%

情感分析流程:

  1. 1. 抓取最近 7 天新闻(东方财富、同花顺、财联社)
  2. 2. NLP 情感分析(正面/中性/负面)
  3. 3. 计算情感得分(正面数 - 负面数)/ 总数
  4. 4. 应用调整(得分 × 5%)

2.6 风险控制系统

quant_pro 包含完整风险控制系统:

风险控制类型

具体措施

仓位管理

单只股票≤10%, 行业集中度≤30%, 总仓位≤95%

止损止盈

止损 -8%, 止盈 +20%, 移动止盈 +15% 回撤 5%

最大回撤监控

组合回撤>15% 触发减仓,>20% 触发清仓

VaR 计算

95% 置信度,日 VaR<3%

流动性过滤

日成交量<10 万手排除,ST 股排除

组合优化

均值 - 方差优化,最大化夏普比率

3. ML 策略模型(V7.3)

ML 策略采用集成学习方法,预测 T+5日涨跌概率。

在上一篇文章中有介绍,多策略集成学习选股模型技术实现(V7.3)-CSDN博客,这里简单回顾一下:

  • 模型架构:
  • 特征工程:28 个特征(技术面 + 资金流)
  • 模型集成:Random Forest + Gradient Boosting + XGBoost + LightGBM + CatBoost
  • 输出:涨跌概率(0-100%)

V7.3 特征列表:

  • RSI(6), RSI(12), RSI(24)
  • MACD 差离值,MACD 讯号线,MACD 柱
  • MA5/10/20 交叉信号
  • 布林带位置,布林带宽度
  • 成交量比,成交量 MA 比
  • 资金流比率(5 日平均)
  • net_mf_ratio_5d_avg(主力净流入比率)
  • lg_net_ratio_5d_avg(大单净流入比率)
  • elg_buy_ratio_5d_avg(超大单买入比率)
  • sm_net_ratio_5d_avg(小单净流入比率)
  • md_net_ratio_5d_avg(中单净流入比率)
  • 高阶统计(偏度、峰度)

模型性能(历史回测):

指标

V7.3

AUC-ROC

0.6131

准确率

59.07%

特征数

28

训练股票

3,067

4. 架构对比分析

quant_pro 规则引擎 vs ML 策略模型对比:

维度

quant_pro 规则引擎

ML 策略模型

可解释性

⭐⭐⭐⭐⭐(因子权重清晰)

⭐⭐(黑盒模型)

稳定性

⭐⭐⭐⭐⭐(不受数据偏差影响)

⭐⭐⭐(依赖训练数据)

非线性捕捉

⭐⭐(线性加权)

⭐⭐⭐⭐⭐(自动学习交互)

自适应能力

⭐⭐(需手动调整)

⭐⭐⭐⭐⭐(自动学习)

执行速度

⭐⭐⭐⭐⭐(~25 秒)

⭐⭐⭐⭐(~1 分钟)

覆盖股票

5,000+ 只

3,000 只(过滤后)

结论:两者优势互补,适合融合使用。

5. ML 集成方案(4 种方案)

初步拟定 4 种集成方案,从保守到激进:

5.1 方案 A:ML 作为独立因子

核心思路:将 ML 预测概率转换为因子得分,作为技术面的第 8 个子因子。

权重分配:

  • 原技术面 7 因子总权重 70% → 调整为 8 因子总权重 70%
  • ML 因子权重:10%(占技术面的 1/8)
  • 其他 7 因子权重:60% / 7 = 8.57% 每个

计算公式:

技术面得分 = (原 7 因子得分×60% + ML 因子得分×10%) × 70%

ML 因子得分 = (ML 概率 - 0.5) × 2 × 100(映射到 -100 到 100)

优点:

  • ✅ ML 作为独立因子,权重清晰可控
  • ✅ 保持规则引擎完整性
  • ✅ 易于调试和优化

5.2 方案 B:ML 加权融合

核心思路:规则引擎和 ML 分别评分,然后加权融合。

权重分配:

  • 规则引擎得分权重:60%
  • ML 得分权重:40%

计算公式:

融合得分 = 规则引擎得分 × 60% + ML 概率得分 × 40%

优点:

  • ✅ 充分发挥两者优势
  • ✅ 权重可动态调整(根据市场状态)

缺点:

  • ❌ 规则引擎因子权重需重新校准

5.3 方案 C:ML 过滤层

核心思路:规则引擎排序后,用 ML 概率过滤低置信度股票。

流程:

  1. 1. 规则引擎排序,选出 Top 30
  2. 2. ML 预测这 30 只股票的概率
  3. 3. 过滤 ML 概率<55% 的股票
  4. 4. 剩余股票按规则引擎得分排序,取 Top 20

优点:

  • ✅ 保守方案,风险低
  • ✅ ML 仅作为过滤层,不改变规则引擎

缺点:

  • ❌ ML 贡献有限,可能遗漏高 ML 得分股票

5.4 方案 D:双引擎并行

核心思路:规则引擎和 ML 分别生成组合,然后合并。

流程:

  1. 1. 规则引擎选出 Top 15
  2. 2. ML 选出 Top 15
  3. 3. 合并去重,按各自得分加权排序
  4. 4. 取 Top 20 作为最终组合

优点:

  • ✅ 充分利用两者独立性
  • ✅ 分散风险

缺点:

  • ❌ 组合可能过于分散
  • ❌ 需处理重合股票权重分配

6. 代码示例

6.1 方案 A 实现示例


# 方案 A:ML 作为独立因子

def calculate_ml_factor(ml_probability):
    """
    将 ML 概率转换为因子得分(-100 到 100)
    """
    ml_score = (ml_probability - 0.5) * 2 * 100
    return ml_score

def calculate_technical_score_with_ml(stock_data, ml_probabilities):
    """
    计算包含 ML 因子的技术面得分
    """
    # 原 7 因子得分
    trend_score = calculate_trend_factor(stock_data)  # 20%
    momentum_score = calculate_momentum_factor(stock_data)  # 15%
    position_score = calculate_position_factor(stock_data)  # 15%
    breakout_score = calculate_breakout_factor(stock_data)  # 12%
    volume_score = calculate_volume_factor(stock_data)  # 8%
    pullback_score = calculate_pullback_factor(stock_data)  # 10%
    moneyflow_score = calculate_moneyflow_factor(stock_data)  # 20%
    
    # ML 因子得分(10%)
    ml_score = calculate_ml_factor(ml_probabilities[stock_data['ts_code']])
    
    # 加权计算(原 7 因子总权重 60%,ML 因子 10%)
    technical_score = (
        trend_score * 0.20 * 0.60 +
        momentum_score * 0.15 * 0.60 +
        position_score * 0.15 * 0.60 +
        breakout_score * 0.12 * 0.60 +
        volume_score * 0.08 * 0.60 +
        pullback_score * 0.10 * 0.60 +
        moneyflow_score * 0.20 * 0.60 +
        ml_score * 0.10  # ML 因子独立权重
    )
    
    return technical_score * 0.70  # 技术面总权重 70%

6.2 方案 B 实现示例


# 方案 B:ML 加权融合

def fusion_score(rule_score, ml_probability, rule_weight=0.6, ml_weight=0.4):
    """
    规则引擎和 ML 加权融合
    """
    # 将 ML 概率映射到 0-100
    ml_score = ml_probability * 100
    
    # 加权融合
    final_score = rule_score * rule_weight + ml_score * ml_weight
    
    return final_score

def dynamic_weight_adjustment(market_state):
    """
    根据市场状态动态调整权重
    """
    if market_state == 'bull':
        # 牛市:增加 ML 权重(趋势更明显)
        return 0.5, 0.5
    elif market_state == 'bear':
        # 熊市:增加规则权重(防守为主)
        return 0.7, 0.3
    else:
        # 震荡市:均衡配置
        return 0.6, 0.4

6.3 方案 C 实现示例


# 方案 C:ML 过滤层

def ml_filter_layer(rule_top30, ml_probabilities, threshold=0.55):
    """
    使用 ML 概率过滤规则引擎选出的 Top 30
    """
    filtered_stocks = []
    
    for stock in rule_top30:
        ts_code = stock['ts_code']
        ml_prob = ml_probabilities.get(ts_code, 0.5)
        
        if ml_prob >= threshold:
            stock['ml_probability'] = ml_prob
            filtered_stocks.append(stock)
    
    # 按规则引擎得分重新排序
    filtered_stocks.sort(key=lambda x: x['rule_score'], reverse=True)
    
    return filtered_stocks[:20]  # 返回 Top 20

7. 性能对比与预期效果

基于历史回测和理论分析,预期集成方案性能提升:

方案

预期 AUC-ROC

预期准确率

风险等级

纯规则引擎

0.60

58%

纯 ML(V7.3)

0.6131

59.07%

方案 A(ML 因子)

0.64-0.65

61-63%

低 - 中

方案 B(加权融合)

0.65-0.66

62-64%

方案 C(过滤层)

0.62-0.63

60-61%

方案 D(并行)

0.64-0.65

61-63%

关键指标提升预期:

  • 夏普比率:1.2 → 1.5(+25%)
  • 最大回撤:-18% → -15%(改善 3 个百分点)
  • 年化收益:15% → 20%(+5 个百分点)
  • 胜率:58% → 62%(+4 个百分点)

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐