第三篇:拓宽能力边界——Tushare多因子模型与机器学习
完成了初阶的数据获取和进阶的策略构建,我们已经具备了量化投资工作流中80%的能力。但如何让策略更优、收益更稳、风险更低?这就涉及到了多因子模型、Alpha因子挖掘和机器学习预测。
今天我们从Tushare获取的财务数据出发,构建基本面多因子体系,并基于历史数据训练价格预测模型,为智能投资决策提供更强的数据支撑。
一、基本面数据获取:多因子数据准备
多因子模型的核心是获取上市公司多维度数据。Tushare提供了丰富的财务数据接口:
python
import tushare as ts
import pandas as pd
import numpy as np
pro = ts.pro_api('/你的Token/')
# 1. 股票列表
stock_basic = pro.stock_basic(exchange='', list_status='L')
# 2. 日线行情
daily_data = pro.daily(ts_code='600519.SH', start_date='20230101', end_date='20241231')
# 3. 财务指标
fina_indicator = pro.fina_indicator(ts_code='600519.SH',
start_date='20230101', end_date='20241231')
# 4. 现金流量表(如果需要更细的因子拆解)
cashflow = pro.cashflow(ts_code='600519.SH', start_date='20230101', end_date='20241231')
二、Alpha因子构建
WorldQuant 101 Alpha因子是现代量化研究中广泛使用的特征体系。以Alpha3和Alpha13为例:
python
def calc_alpha3(df):
"""Alpha#3: 衡量开盘价排名与成交量排名的负相关关系"""
rank_open = df['open'].rank()
rank_volume = df['volume'].rank()
alpha3 = -1 * rank_open.corr(rank_volume, method='spearman')
return alpha3
def calc_alpha13(df, window=5):
"""Alpha#13: 收盘价排名与成交量排名间的协方差"""
rank_close = df['close'].rank()
rank_volume = df['volume'].rank()
alpha13 = -1 * rank_close.cov(rank_volume)
return alpha13
定义好因子函数后,我们可以为全市场股票计算各因子的历史表现:
python
def generate_alpha_factors(ts_code, start_date, end_date):
df = pro.daily(ts_code=ts_code, start_date=start_date, end_date=end_date)
factors_df = pd.DataFrame(index=df.index)
factors_df['ts_code'] = ts_code
factors_df['trade_date'] = df['trade_date'].values
factors_df['alpha3'] = calc_alpha3(df)
factors_df['alpha13'] = calc_alpha13(df)
factors_df['future_return_5d'] = df['close'].pct_change(periods=5).shift(-5)
return factors_df
为什么要用Alpha因子? 技术指标和基本面指标覆盖的信息维度相对有限,很难适应快速变化的市场环境。而Alpha因子的显著优势在于高度的策略多样性、丰富的特征交叉以及优秀的策略回测。简而言之,它能让你捕捉到更多市场上隐秘的交易信号。
三、机器学习价格预测
有了Alpha因子作为特征,接下来就可以构建预测模型:
python
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 特征工程:构建完整特征集
def prepare_features_process(factors_df):
# 添加技术指标补充
factors_df['momentum_20d'] = factors_df['close'].pct_change(20)
factors_df['volatility_20d'] = factors_df['close'].rolling(20).std()
factors_df['rsi'] = compute_rsi(factors_df['close'], 14)
factors_df['volume_ratio'] = factors_df['volume'] / factors_df['volume'].rolling(20).mean()
return factors_df.dropna()
def compute_rsi(series, period=14):
delta = series.diff()
gain = (delta.where(delta > 0, 0)).rolling(window=period).mean()
loss = (-delta.where(delta < 0, 0)).rolling(window=period).mean()
rs = gain / loss
rsi = 100 - (100 / (1 + rs))
return rsi
# 模型训练
X = features[features.columns.difference(['ts_code', 'trade_date', 'future_return_5d'])]
y = features['future_return_5d']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
rf_model = RandomForestRegressor(n_estimators=100, max_depth=10, random_state=42)
rf_model.fit(X_train, y_train)
y_pred = rf_model.predict(X_test)
print(f"均方根误差(RMSE): {np.sqrt(mean_squared_error(y_test, y_pred)):.4f}")
四、与AI工具集成
随着AI编程的普及,Tushare也在快速适配新生态。目前,已有开发者基于FastMCP框架构建了Tushare MCP服务器,通过HTTP协议为AI助手(如DeepSeek、Claude等)提供金融数据接口。这意味着未来你可以直接借助AI来辅助策略开发和因子分析,将精力从数据处理进一步解放到策略创新上。
回顾与展望
到此,我们通过三篇文章,完整地走过了从数据获取到量化策略构建再到高阶AI预测的全链路:
| 阶段 | 核心能力 | 产出物 |
|---|---|---|
| 初阶 | 环境配置、数据获取、基础可视化 | 单只股票行情数据集 |
| 进阶 | 多股票采集、策略构建、本地存储 | 可运行的量化策略框架 |
| 高阶 | 多因子体系、Alpha建模、机器学习 | 智能预测模型体系 |
量化投资是一场无限游戏。这个系列只是起点,当你掌握了数据处理、策略构建和模型预测之后,还可以不断尝试新的因子组合、优化模型参数、引入深度学习算法,甚至搭建自动化交易系统。希望这个系列文章能成为你量化之旅的加速器。🚀
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)