A股市值因子构建#
题目要求:
使用yfinance获取沪深300成分股数据(代码示例:600519.SS代表贵州茅台),完成以下任务:
-
计算每只股票的总市值(收盘价×流通股本)
-
每月末按市值将股票分为大/中/小三组
-
构建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因子序列,完成以下分析:
-
计算因子收益的月均值、标准差和夏普比率(假设无风险利率为0)
-
进行 t 检验判断因子收益是否显著大于0
-
绘制因子收益累计曲线图
分析代码框架:
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()