多因子选股策略代码
时间: 2023-07-02 13:22:36 浏览: 82
以下是一个简单的基于Python的多因子选股策略代码示例:
```python
# 导入必要的库
import numpy as np
import pandas as pd
import scipy.stats as st
from sklearn.linear_model import LinearRegression
# 获取股票数据
df = pd.read_csv('stock_data.csv', index_col=0)
# 定义因子
df['ROE'] = df['net_profit'] / df['total_equity']
df['PB'] = df['market_cap'] / df['total_equity']
df['PS'] = df['market_cap'] / df['revenue']
# 定义排名函数
def rank(df):
return df.rank(pct=True)
# 对因子进行排名
df['ROE_R'] = rank(df['ROE'])
df['PB_R'] = rank(df['PB'])
df['PS_R'] = rank(df['PS'])
# 定义因子权重
weights = {'ROE': 0.4, 'PB': 0.3, 'PS': 0.3}
# 计算综合得分
df['Score'] = df['ROE_R'] * weights['ROE'] + df['PB_R'] * weights['PB'] + df['PS_R'] * weights['PS']
# 根据得分进行排名
df['Rank'] = df['Score'].rank(ascending=False)
# 构建股票池
stock_pool = df[df['Rank'] <= 50]
# 定义回归函数
def reg(factor, ret):
model = LinearRegression()
model.fit(factor, ret)
return model.coef_
# 计算因子收益率
factor_ret = []
for factor in ['ROE', 'PB', 'PS']:
X = stock_pool[[factor]].values
y = stock_pool['return'].values
factor_ret.append(reg(X, y)[0])
# 计算综合因子收益率
factor_ret = np.array(factor_ret)
weights = np.array(list(weights.values()))
portfolio_ret = np.dot(factor_ret, weights)
# 输出综合因子收益率
print('Portfolio Return:', portfolio_ret)
```
这个示例代码演示了如何使用三个因子(ROE、PB和PS)来进行多因子选股,并计算股票组合的综合因子收益率。首先,我们从CSV文件中读取股票数据,并计算每个因子的值。然后,我们对每个因子进行排名,并根据权重计算股票的综合得分。接下来,我们将股票按得分进行排名,并选择排名前50的股票作为股票池。然后,我们使用简单线性回归模型计算每个因子的收益率,并使用权重计算股票组合的综合因子收益率。最后,我们输出综合因子收益率。请注意,这只是一个简单的示例代码,实际应用中可能需要更多的因子和更复杂的模型。