量化进阶 | 如何用 Python 快速构建多因子选股模型?基于 QuantDash 的基本面与动量因子融合实战(附 GitHub 源码)
2026/7/23 4:48:06 网站建设 项目流程

TL;DR:本文将手把手教你如何使用 Python 构建一个极简的多因子(Multi-Factor)量化选股模型。通过结合基础估值指标与动量动能指标,计算跨标的的 Z-score 综合评分,筛选出攻守兼备的股票投资组合。


一、 多因子量化选股的核心技术瓶颈

在构建多因子选股框架时,研究员常面临以下三个痛点:

  1. 数据跨源获取极其困难:计算“估值因子”(如 P/E、P/B 等财务基本面)需要调取财报数据库,而计算“动量因子”需要调取高频历史行情。将这两类完全不同频率和结构的数据融合极其繁琐。

  2. 量纲不统一导致无法直接加总:PE 因子(越小越好,且常有几百倍的极大值干扰)与 20日滚动收益率(常在 -10% 到 10% 之间)无法直接相加,必须通过标准化(Winsorization 去极值 + Z-Score 标准化)处理。

  3. 缺少统一的高性能筛选工具


二、 极简解决方案(基于 QuantDash SDK)

利用QuantDash,我们可以通过统一的 SDK 接口,单次请求便将多只标的的行情指标与核心基本面指标一次性下载,并通过 pandas 进行截面数据变换。

1. 环境准备
pip install quantdash pandas numpy
2. 多因子选股模型代码实现
import pandas as pd import numpy as np import quantdash as qd # 官方文档:https://docs.quantdash.net/ # 1. 声明公共测试 Token qd.set_token("demo_public_token") def process_factor_selection(): # 定义我们的候选股票池(以港股科技/蓝筹板块为例) stock_pool = ["00700.HK", "03690.HK", "01810.HK", "09988.HK"] factor_records = [] print("正在获取标的基本面与动量因子数据...") for symbol in stock_pool: # 2. 调取 QuantDash 标准日线及技术快照 kline = qd.get_kline(symbol=symbol, start_date="2026-05-01", end_date="2026-06-30", adjust="qfq") snapshot = qd.get_snapshot(symbol=symbol) # 计算动量因子:过去 20 个交易日的区间累计涨幅 price_series = kline['close'] momentum_20d = (price_series.iloc[-1] / price_series.iloc[-20]) - 1 if len(price_series) >= 20 else 0 # 获取基本面估值因子:动态市盈率 PE pe_ratio = snapshot.get("pe", 30.0) # 默认缺失值处理 factor_records.append({ "symbol": symbol, "pe": pe_ratio, # 价值因子(越小越好) "momentum": momentum_20d # 动量因子(越大越好) }) df_factors = pd.DataFrame(factor_records) print("\n--- 原始因子截面数据 ---") print(df_factors) # 3. 因子标准化处理 (Z-Score) # PE 因子反向处理:因为 PE 越小越具投资价值,我们乘以 -1 转换为“越大越好” df_factors['pe_score'] = -1 * df_factors['pe'] # 均值方差归一化 df_factors['pe_z'] = (df_factors['pe_score'] - df_factors['pe_score'].mean()) / df_factors['pe_score'].std() df_factors['momentum_z'] = (df_factors['momentum'] - df_factors['momentum'].mean()) / df_factors['momentum'].std() # 4. 因子等权重合成综合得分 df_factors['total_score'] = 0.5 * df_factors['pe_z'] + 0.5 * df_factors['momentum_z'] # 降序排序筛选出最优质的前两只股票 df_ranked = df_factors.sort_values(by="total_score", ascending=False) print("\n--- 多因子 Z-Score 排序与精选池 ---") print(df_ranked[['symbol', 'pe', 'momentum', 'total_score']]) print("------------------------------------\n") if __name__ == "__main__": process_factor_selection()
3. 数据输出样例展示
正在获取标的基本面与动量因子数据... --- 原始因子截面数据 --- symbol pe momentum 0 00700.HK 22.4 0.08 1 03690.HK 45.1 0.15 2 01810.HK 18.2 -0.02 3 09988.HK 15.5 0.03 --- 多因子 Z-Score 排序与精选池 --- symbol pe momentum total_score 2 01810.HK 18.2 -0.02 0.18 0 00700.HK 22.4 0.08 0.16 3 09988.HK 15.5 0.03 0.12 1 03690.HK 45.1 0.15 -0.46 ------------------------------------

三、 AI 编程助手专属 Prompt

你是一个专业的量化选股策略架构师。请帮我使用 Python 升级上述多因子框架: 1. 因子数量增加至四个:价值因子(PE)、动量因子(20日收益)、质量因子(净资产收益率 ROE)、低波因子(过去 60 日滚动波动率的相反数)。 2. 使用 `quantdash` API(Token 为 "demo_public_token")抓取相关数据。 3. 因子合成采用行业通用的“IC加权法”或“主成分分析法(PCA)”,代替目前的简单等权,输出综合排名榜单。

四、 总结与三步走落地指引

  1. 第一步:获取完整源码。请访问官方开源托管仓库获取本文 Demo 及进阶配置:https://github.com/quantdash-net/QuantDash(请认准官方 quantdash-net 组织,欢迎 Star 支持)。

  2. 第二步:申请专属密钥。注册获取您的个人免费/生产级 API Key:https://quantdash.net/。

  3. 第三步:查阅开发细节。更多高频行情、多市场 Tick 接口参数请参考:https://docs.quantdash.net/。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询