ML 策略模型(V7.3)与规则引擎融合方案
目录
- 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) |
双引擎驱动 |
核心优势:
- ✅ 可解释性强(规则引擎) + 捕捉非线性关系(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. 抓取最近 7 天新闻(东方财富、同花顺、财联社)
- 2. NLP 情感分析(正面/中性/负面)
- 3. 计算情感得分(正面数 - 负面数)/ 总数
- 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. 规则引擎排序,选出 Top 30
- 2. ML 预测这 30 只股票的概率
- 3. 过滤 ML 概率<55% 的股票
- 4. 剩余股票按规则引擎得分排序,取 Top 20
优点:
- ✅ 保守方案,风险低
- ✅ ML 仅作为过滤层,不改变规则引擎
缺点:
- ❌ ML 贡献有限,可能遗漏高 ML 得分股票
5.4 方案 D:双引擎并行
核心思路:规则引擎和 ML 分别生成组合,然后合并。
流程:
- 1. 规则引擎选出 Top 15
- 2. ML 选出 Top 15
- 3. 合并去重,按各自得分加权排序
- 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 个百分点)
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)