跳到主内容
研究主线资产定价与组合构建 · 第30–36讲3/7 · 配套练习模块导览 →
练习

第32讲:基本面因子模型 (Fundamental Factor Models) · 练习

按市值对股票分组并构造 SMB 收益,计算月度统计与显著性,再检查历史股本、调仓日期和累计收益口径。

← 返回本讲讲义
完成状态保存在当前浏览器,可随时取消。

A股市值因子构建#

题目要求

使用yfinance获取沪深300成分股数据(代码示例:600519.SS代表贵州茅台),完成以下任务:

  1. 计算每只股票的总市值(收盘价×流通股本)

  2. 每月末按市值将股票分为大/中/小三组

  3. 构建SMB因子(小市值组合收益 - 大市值组合收益)

数据准备代码

code
import yfinance as yf
import pandas as pd

# 获取沪深300成分股列表(示例)
hs300 = ['600519.SS', '601398.SS', '000001.SZ'] # 实际需完整成分股
start_date = '2020-01-01'
end_date = '2023-12-31'

# 下载行情数据
price_data = yf.download(hs300, start=start_date, end=end_date)['Close']
shares_data = yf.download(hs300, start=start_date, end=end_date)['Shares Outstanding']

因子有效性检验#

题目要求

基于6.1题构建的SMB因子序列,完成以下分析:

  1. 计算因子收益的月均值、标准差和夏普比率(假设无风险利率为0)

  2. 进行 t 检验判断因子收益是否显著大于0

  3. 绘制因子收益累计曲线图

分析代码框架

code
from scipy import stats
import matplotlib.pyplot as plt

# 计算月频因子收益
monthly_smb = smb_factor.resample('M').last()

# 收益分析
mean_return = monthly_smb.mean()
std_return = monthly_smb.std()

# 统计检验
t_stat, p_value = stats.ttest_1samp(monthly_smb, 0)

# 可视化
cumulative_return = (1 + monthly_smb).cumprod()
plt.plot(cumulative_return)
plt.title('SMB因子累计收益')
plt.show()

完成练习后,自评一次

建议先独立作答,再展开参考答案进行核对。