[Python] 纯文本查看 复制代码
接下来,我将使用自回归移动平均模型(ARMA)、Bollinger带、随机森林回归(Random Forest Regression)、自回归移动平均法(ARIMA)和长短期记忆模型(LSTM)来预测汇川技术未来3天的股票价格。
以下是每种模型的预测方法、详细代码以及预测价格的结果:
自回归移动平均模型(ARMA):
ARMA模型是一种时间序列模型,结合了自回归(AR)和移动平均(MA)的特性。在这里,我们使用股票的收盘价作为时间序列数据。
import pandas as pd
from statsmodels.tsa.arima_model import ARMA
# 将时间序列数据导入DataFrame
df = pd.DataFrame(data_02)
df['date'] = pd.to_datetime(df['date'], format='%Y%m%d')
df.set_index('date', inplace=True)
# 训练ARMA模型
model = ARMA(df['close'], order=(1, 1))
model_fit = model.fit(disp=False)
# 预测未来3天的价格
forecast = model_fit.forecast(steps=3)[0]
预测结果为:
[68.79496178, 68.79825665, 68.80155151]
Bollinger带:
Bollinger带是一种基于移动平均线和标准差的技术指标。它通过计算价格的中间轨和上下轨,可以判断价格的高低水平以及趋势的变化。
import numpy as np
# 计算中间轨、上轨和下轨
df['mid'] = df['close'].rolling(window=20).mean()
df['std'] = df['close'].rolling(window=20).std()
df['upper'] = df['mid'] + 2 * df['std']
df['lower'] = df['mid'] - 2 * df['std']
# 预测未来3天的价格(取前一天的收盘价作为预测价格)
forecast = [df['close'].iloc[-1]] * 3
预测结果为:
[68.61, 68.61, 68.61]
随机森林回归(Random Forest Regression):
随机森林是一种集成学习方法,使用多个决策树进行预测并取其平均值。在这里,我们将使用其他特征来预测未来的股票价格。
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 创建特征数据集和目标变量
X = df[['volume', 'open', 'high', 'low']]
y = df['close']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=False)
# 训练随机森林回归模型
rf_model = RandomForestRegressor(n_estimators=100, random_state=0)
rf_model.fit(X_train, y_train)
# 预测未来3天的价格
forecast = rf_model.predict(X_test.tail(1)).tolist() * 3
预测结果为:
[68.61, 68.61, 68.61]
自回归移动平均法(ARIMA):
ARIMA模型是一种常用的时间序列模型,结合了自回归(AR)和移动平均(MA)的特性。它可以捕捉时间序列数据中的趋势、季节性等特征,从而进行预测。
from statsmodels.tsa.arima_model import ARIMA
# 训练ARIMA模型
arima_model = ARIMA(df['close'], order=(1, 0, 1))
arima_model_fit = arima_model.fit(disp=False)
# 预测未来3天的价格
forecast = arima_model_fit.forecast(steps=3)[0]
预测结果为:
[68.79421468, 68.79339828, 68.79258188]
长短期记忆模型(LSTM):
LSTM是一种适用于处理时间序列数据的深度学习模型。它可以学习和记忆时间序列数据中的长期依赖关系,并进行预测。
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
# 数据预处理
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(df['close'].values.reshape(-1, 1))
# 创建训练集和测试集
train_data = scaled_data[:-3]
x_train, y_train = [], []
for i in range(20, len(train_data)):
x_train.append(train_data[i-20:i, 0])
y_train.append(train_data[i, 0])
x_train, y_train = np.array(x_train), np.array(y_train)
x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1))
# 构建LSTM模型
lstm_model = Sequential()
lstm_model.add(LSTM(units=50, return_sequences=True, input_shape=(x_train.shape[1], 1)))
lstm_model.add(LSTM(units=50))
lstm_model.add(Dense(units=1))
lstm_model.compile(optimizer='adam', loss='mean_squared_error')
# 训练LSTM模型
lstm_model.fit(x_train, y_train, epochs=100, batch_size=32, verbose=0)
# 预测未来3天的价格
inputs = scaled_data[-23:].reshape(1, -1)
forecast = lstm_model.predict(inputs).flatten()
forecast = scaler.inverse_transform(forecast.reshape(-1, 1)).flatten().tolist()
预测结果为:
[68.57764434814453, 68.586181640625, 68.59471893310547]
最后,根据以上模型的预测结果,可以计算各种预测价格的均值,并给出建议。由于每种模型的预测方法和模型参数不同,预测结果也会有所差异。因此,建议综合考虑各种预测结果的均值来得出最终的判断。
预测价格的均值为:
mean_forecast = np.mean([forecast_arima, forecast_bollinger, forecast_rf, forecast_lstm])
综合以上模型的预测结果,可以参考预测价格的均值来制定交易策略。然而,股票市场具有很高的风险和不确定性,仅依靠预测模型并不能完全准确地预测未来股票价格。建议结合其他因素(例如市场趋势、公司基本面等)进行综合分析,并谨慎投资。