当前位置: 首页 > news >正文

【Python量化实战】—— 基于Qteasy的Fama-French三因子选股策略构建与回测【附源码】

1. Fama-French三因子模型基础与选股逻辑

在量化投资领域,Fama-French三因子模型是构建多因子选股策略的经典框架。这个模型在传统CAPM模型基础上,增加了市值因子(SMB)和账面市值比因子(HML),能更准确地解释股票收益差异。简单来说,它认为除了市场风险外,小市值股票和高账面市值比股票往往能带来超额收益。

我第一次用这个模型时,发现它最吸引人的地方在于逻辑清晰:通过回归分析计算出每只股票的alpha值,这个alpha可以理解为股票实际收益与模型预测收益的差值。如果alpha为负,意味着市场可能低估了这只股票。就像超市里标错价的商品,聪明的投资者自然会抓住这种定价错误的机会。

实际操作中,我们需要三类关键数据:

  • 市场收益率(通常用沪深300指数代表)
  • 市值因子(小市值股票组合收益减去大市值股票组合收益)
  • 账面市值比因子(高账面市值比组合收益减去低账面市值比组合收益)

2. Qteasy环境准备与数据获取

Qteasy是我近年来发现的最顺手的Python量化工具之一,它的API设计非常符合Pythonic风格,安装只需要一行命令:

pip install qteasy

但安装后有个关键步骤经常被新手忽略——历史数据下载。我建议首次使用时运行以下代码初始化数据:

import qteasy as qt qt.refill_data_source(tables=['stock_daily', 'index_daily'])

这里有个坑要注意:数据默认保存在用户目录下的.qteasy文件夹,如果C盘空间紧张,可以通过配置QT_DATA_PATH环境变量修改存储路径。我习惯把数据放在D盘,这样重装系统时不会丢失。

获取沪深300成分股列表也很简单:

shares = qt.filter_stock_codes(index='000300.SH', date='20230101')

3. 策略核心代码实现

完整的策略实现需要继承qt.FactorSorter类,这是Qteasy专门为多因子选股设计的基类。下面这段代码是我经过多次优化后的版本,关键点都加了注释:

class MultiFactors(qt.FactorSorter): def __init__(self): super().__init__( pars=(0.5, 0.3, 0.7), # 分类阈值参数 strategy_run_freq='m', # 每月调仓 strategy_data_types='pb, total_mv, close', max_sel_count=10, # 选10只股票 sort_ascending=True, # 选alpha最小的 lbound=0, ubound=0 # 只选alpha<0的 ) def realize(self, h, r=None, t=None, pars=None): # 解析历史数据 pb = h[:, -1, 0] # 市净率 mv = h[:, -1, 1] # 市值 close = h[:, -1, 2] # 收盘价 # 计算账面市值比(book-to-market) bp = 1 / pb # 按市值和BP分类 size_gate = np.nanquantile(mv, pars[0]) mv_cat = (mv > size_gate).astype(int) + 1 bp_30 = np.nanquantile(bp, pars[1]) bp_70 = np.nanquantile(bp, pars[2]) bp_cat = np.ones_like(bp) bp_cat += (bp > bp_30).astype(int) bp_cat += (bp > bp_70).astype(int) # 计算三因子 market_return = r[-1, 0] / r[-2, 0] - 1 smb, hml = self.calc_factors(close, mv, mv_cat, bp_cat) # 回归计算alpha alphas = [] stock_returns = (h[:, -2, 2] / h[:, -1, 2] - 1) for ret in stock_returns: X = np.array([[market_return, smb, hml, 1]]) y = np.array([[ret]]) alpha = np.linalg.lstsq(X, y, rcond=None)[0][3][0] alphas.append(alpha) return np.array(alphas)

4. 回测执行与结果分析

策略回测需要创建Operator对象,这是Qteasy的执行引擎。我的标准配置如下:

alpha = MultiFactors() op = qt.Operator(alpha, signal_type='PT') op.set_blender('1.0*s0', "close") # 等权重配置 # 运行回测 op.run( mode=1, invest_start='20190101', invest_end='20221231', asset_pool=shares, trade_batch_size=100 )

回测结果通常会包含几个关键指标:

  • 年化收益率:好的策略应该在30%以上
  • 最大回撤:最好控制在30%以内
  • 夏普比率:大于1说明风险收益比不错

我最近一次回测(2019-2022)的结果显示:

  • 总收益152.94%(年化36.48%)
  • 最大回撤28.83%
  • 夏普比率1.51

这个结果跑赢同期沪深300指数27个百分点,说明策略确实有效。但要注意,不同时间段表现会有差异,我在2016-2021年测试时年化收益高达44%,但回撤也扩大到35%。

5. 策略优化与实盘建议

经过多次实盘测试,我总结出几个改进方向:

  1. 参数优化:用网格搜索寻找最佳分类阈值
from sklearn.model_selection import ParameterGrid param_grid = { 'size_gate': [0.3, 0.5, 0.7], 'bp_small': [0.2, 0.3, 0.4], 'bp_large': [0.6, 0.7, 0.8] }
  1. 组合优化:改用风险平价模型分配权重
op.set_blender('risk_parity', "close")
  1. 止损机制:加入20%的移动止损
self.stop_loss = 0.2

实盘运行时,建议先用模拟盘测试1-2个月。我遇到过的典型问题包括:

  • 月末调仓时流动性不足
  • 小市值股票买卖价差过大
  • 财务数据更新滞后导致的指标失真

最后提醒一点:任何量化策略都会经历失效期,建议每季度重新评估策略表现,当连续三个月跑输基准时就要考虑暂停或调整了。

http://www.jsqmd.com/news/840991/

相关文章:

  • 原材料价格智能预警系统,落地实操与采购时机推荐:基于实在Agent Claw-Matrix的端到端自动化实践
  • 【信息科学与工程学】计算机科学与自动化———第六十四篇 内存 系列一 内存算法02
  • 中国500万医生的新AI:顶刊独家联手,卷的就是证据源
  • 扩散模型也有「Skills」了!魔搭开源11个现成模板,风格、修图、超清一键搞定
  • 微信小程序开发- 位置API 学习笔记
  • GESP考级通关秘籍:从一级到四级,这份保姆级备考路线图请收好(含真题解析)
  • 手把手教你用FANUC ROBOGUIDE搭建第一个涂胶仿真工作站(附模型导入避坑指南)
  • Docker部署SpringBoot项目(图文详解)——从零到上线保姆级教程
  • [实战] 制造业全尺寸报告(Full Dimension Report)编制规范与数字化处理流程详解
  • 制造业采购商务谈判智能助手,落地方法与授权规则设置:2026企业级智能体(Agent)实操全指南
  • 从零移植ry_key按键驱动到ESP32:教你用C语言为物联网设备添加组合键和手势识别
  • Warcraft Helper技术实现:解决魔兽争霸3在现代Windows系统上的兼容性问题
  • 黑马SpringBoot3+Vue3(实战篇)学习记录 一:新建数据库、新建项目
  • 5分钟掌握Alas:碧蓝航线智能助手的完整指南
  • 告别臃肿!这个只有两个文件的单片机GUI库,让你的51单片机也能玩图形界面
  • 为什么AI的错误毫无价值?如何理解AI的理解?
  • VirtualWife项目解析:基于LLM与向量数据库构建可长期记忆的AI智能体框架
  • 偏向性调节:解锁白细胞介素-2(IL-2)免疫治疗潜力的新钥匙
  • 银行证券业智能财务Agent技术选型:信创适配+私有化部署方案深度对比
  • 三步搞定Windows和Office永久激活:KMS_VL_ALL_AIO智能激活脚本终极指南
  • 2026年收藏指南:手把手攻克降AI率难题 - 降AI实验室
  • Perplexity学术搜索失效预警:当LLM幻觉遇上实证研究,3类高危误判场景及实时校验SOP
  • 批量处理二维码图片,真的需要联网吗?这款离线高效工具给你答案!
  • 瑞萨工业MPU集成认证PROFINET协议栈,加速伺服与网关开发
  • 基于C/S架构的远程控制工具设计与实现:以Vibe遥控器为例
  • Cursor使用指南
  • 2026 消费级激光雕刻机源头厂家推荐:小型 / 家用 / 便携式 / 高精度选择指南 - 海棠依旧大
  • 2026 南京租车深度测评 TOP5:本土老牌领跑,全场景靠谱之选 - 小艾信息发布
  • e2b安全沙箱实战:构建AI Agent代码执行环境与数据分析助手
  • 手把手教你用Nuclei检测Confluence CVE-2023-22527漏洞(附完整YAML配置)