大A跌宕起伏?代码预测下大盘收盘价格(纯属娱乐)

大家好,我最近写了个预测股价的代码,主要是为了好玩,毕竟最近大A跌宕起伏,大家心情都不太好, 今天分享出来大家娱乐下。代码主要用了随机森林模型, 并基于上证指数历史数据进行训练。当然,需要强调的是,股市预测本身是极其复杂的,受到各种因素的影响,模型的预测结果仅供娱乐参考,不构成任何投资建议。

结果展示

预策对比

可以看到收盘价格相关性还是挺强的, 除了最后一天有点辣眼睛~

预策结果

当前收盘价: 3267.19
下一个交易日预测收盘价: 3273.34
预测变化: 6.15 (0.19%)

哈哈, 周一是微涨!!!

如何使用

1. 下载上证指数数据

通过akshare很方便取得数据

import akshare as ak
# 获取上证指数历史数据
shanghai_index_data = ak.stock_zh_index_daily(symbol="sh000001")
# 将数据保存到Excel文件
shanghai_index_data.to_excel("上证指数历史数据.xlsx", index=True, sheet_name="历史行情")

取得的数据格式:

2. 预测程序流程

大致流程是:

  1. 读取数据

  2. 处理数据

  3. 创建特征

  4. 训练模型

  5. 预测价格

3. 处理数据

处理数据时,提取出了很多指标, 如:

...
# 移动平均线
df['MA5'] = df['close'].rolling(window=5).mean()
df['MA10'] = df['close'].rolling(window=10).mean()
df['MA20'] = df['close'].rolling(window=20).mean()
df['MA60'] = df['close'].rolling(window=60).mean()

# 移动平均线差值
df['MA5_diff'] = df['close'] - df['MA5']
df['MA10_diff'] = df['close'] - df['MA10']
df['MA20_diff'] = df['close'] - df['MA20']

# 计算成交量指标
df['volume_MA5'] = df['volume'].rolling(window=5).mean()
df['volume_MA10'] = df['volume'].rolling(window=10).mean()
df['volume_ratio'] = df['volume'] / df['volume_MA5']

# 波动率指标
df['volatility_5'] = df['close'].rolling(window=5).std()
df['volatility_10'] = df['close'].rolling(window=10).std()
....

4.创建特征

把特征选出来当做训练因子:

features = [
 'open', 'high', 'low', 'close', 'volume',
 'price_range', 'price_change', 'price_return',
 'MA5', 'MA10', 'MA20', 'MA60',
 'MA5_diff', 'MA10_diff', 'MA20_diff',
 'volume_MA5', 'volume_MA10', 'volume_ratio',
 'volatility_5', 'volatility_10',
 'prev_close', 'prev_volume',
 'close_5d_mean', 'close_5d_std'
]

5.训练模型

使用随机森林模型训练

# 分割训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_size, shuffle=False)

# 标准化特征
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 训练模型
model = RandomForestRegressor(
    n_estimators=200,
    max_depth=20,
    min_samples_split=5,
    min_samples_leaf=2,
    random_state=42
)
model.fit(X_train_scaled, y_train)

# 预测
y_pred = model.predict(X_test_scaled)

6.安装依赖库

pip install pandas numpy scikit-learn ta openpyxl matplotlib akshare

7.运行程序

python stock_prediction.py

结语

再次提醒,股市有风险,投资需谨慎,代码仅供学习娱乐,切勿盲目跟风! 如果预测准确了,纯属巧合,请不要过于激动;如果预测不准,也请不要失望,毕竟预测股价本来就是一件很难的事情嘛。最后,祝大家周一股票大涨!预测代码 点我 获得。


推荐阅读