Skip to content

精准把握低买高卖时机:LSTM模型助力股票预测分析(附完整源码)

作者:老余捞鱼

原创不易,转载请标明出处及原作者。

写在前面的话:在我此前的文章中,我已经多次探讨LSTM模型在股票价格预测中的应用。不少读者反馈,希望能看到一个更加易于理解的实战教程。应大家的需求,本文将手把手带你深入LSTM的世界,从数据抓取、清洗处理,到模型的搭建与训练,每一步都是我实战经验的总结,旨在让你轻松掌握股票价格预测的精髓。

《揭秘:如何用思想增强型LSTM网络精准预测股价?》

在这篇文章中,我详细介绍了什么是 LSTM ,兴趣的读者可以去了解,在本文中就不再累述了。

一、实战指南:6步预测 META 股票价格 

为了展示 LSTM 模型在股票交易领域实现低买高卖的实用性,我们将以Meta Platforms Inc.(股票代码:META)为例进行实操演示。通过6步将构建并训练一个LSTM模型来预测META的未来股价走势,并对预测结果进行直观的可视化展示。

步骤一:获取和准备数据

首先,我们下载 META 的历史股价数据,并对其进行归一化处理。

import yfinance as yf
import numpy as np
from sklearn.preprocessing import MinMaxScaler

# Fetch historical data for META
data = yf.download('META', start='2020-01-01', end='2024-07-21')
data = data[['Close']]

# Normalize the data
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data)

步骤二:为 LSTM 准备数据 

将规范化数据转换成适合 LSTM 模型的格式。

def create_dataset(data, time_step=1):
    X, Y = [], []
    for i in range(len(data) - time_step - 1):
        a = data[i:(i + time_step), 0]
        X.append(a)
        Y.append(data[i + time_step, 0])
    return np.array(X), np.array(Y)

time_step = 100
X, Y = create_dataset(scaled_data, time_step)

步骤三:分割数据并重塑

我们把数据分为训练集和测试集,并为 LSTM 模型重塑数据。

train_size = int(len(X) * 0.65)
test_size = len(X) - train_size
X_train, X_test = X[0:train_size], X[train_size:len(X)]
Y_train, Y_test = Y[0:train_size], Y[train_size:len(Y)]

X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1)
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)

步骤四:构建和训练 LSTM 模型

通过 L2 正则化创建并训练 LSTM 模型,以避免过度拟合。

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
from tensorflow.keras.regularizers import l2

model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(time_step, 1), kernel_regularizer=l2(0.01)))
model.add(LSTM(50, return_sequences=False, kernel_regularizer=l2(0.01)))
model.add(Dense(25, kernel_regularizer=l2(0.01)))
model.add(Dense(1))

model.compile(optimizer='adam', loss='mean_squared_error')
model.fit(X_train, Y_train, batch_size=1, epochs=1)

步骤五:预测和评估

进行预测并评估其性能。

from sklearn.metrics import mean_squared_error
import math

train_predict = model.predict(X_train)
test_predict = model.predict(X_test)

train_predict = scaler.inverse_transform(train_predict)
test_predict = scaler.inverse_transform(test_predict)

train_rmse = math.sqrt(mean_squared_error(Y_train, train_predict))
test_rmse = math.sqrt(mean_squared_error(Y_test, test_predict))
print(f'Train RMSE: {train_rmse}, Test RMSE: {test_rmse}')

步骤六:结果可视化

最后,我们将实际价格与预测价格进行可视化对比。请注意,X 轴代表的是日期数,而不是实际日历日期。

import matplotlib.pyplot as plt

look_back = time_step
train_predict_plot = np.empty_like(scaled_data)
train_predict_plot[:, :] = np.nan
train_predict_plot[look_back:len(train_predict) + look_back, :] = train_predict

test_predict_plot = np.empty_like(scaled_data)
test_predict_plot[:, :] = np.nan
test_predict_plot[len(train_predict) + look_back:len(train_predict) + look_back + len(test_predict), :] = test_predict

plt.figure(figsize=(14, 8))
plt.plot(scaler.inverse_transform(scaled_data), label='Actual Stock Price')
plt.plot(train_predict_plot, label='Train Predict')
plt.plot(test_predict_plot, label='Test Predict')
plt.legend()
plt.xlabel('Number of Dates')
plt.ylabel('Stock Price')
plt.title('Stock Price Prediction with LSTM')
plt.show()

可运行代码和 Google Colab 笔记本地址如下:
https://colab.research.google.com/drive/1qorTenNGaOCrcxhAQEYkUi46FWhRGkng?usp=sharing


二、观点总结

预测模型在股票交易中的重要性:通过使用LSTM模型进行股票价格预测,交易者可以更好地判断买卖时机,从而提高交易效率。

实用性和操作性:本文内容具有很强的实用性,通过具体的代码示例和步骤指导,使得读者能够清晰地理解如何实施股票价格预测。

模型评估与风险管理:强调了模型评估的重要性,通过计算RMSE来衡量模型的预测准确性,希望交易者在实际交易中结合风险管理策略,比如纳入止损订单等风险管理策略,以防范意外的市场波动。

持续学习与模型更新:利用最新数据定期更新模型,以保持其在股票市场中的预测能力。

感谢您阅读到最后,希望本文能给您带来新的收获。祝您投资顺利!如果对文中的内容有任何疑问,请给我留言,必复。


本文内容仅限技术探讨和学习,不构成任何投资建议。

Published inAI&Invest专栏

Be First to Comment

    发表回复