接下来,我将使用自回归移动平均模型(ARMA)、Bollinger带、随机森林回归(Random Forest Regression)、自回归移动平均法(ARIMA)和长短期记忆模型(LSTM)来预测汇川技术未来3天的股票价格。
以下是每种模型的预测方法、详细代码以及预测价格的结果:
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带是一种基于移动平均线和标准差的技术指标。它通过计算价格的中间轨和上下轨,可以判断价格的高低水平以及趋势的变化。
- 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]
随机森林是一种集成学习方法,使用多个决策树进行预测并取其平均值。在这里,我们将使用其他特征来预测未来的股票价格。
- 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模型是一种常用的时间序列模型,结合了自回归(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是一种适用于处理时间序列数据的深度学习模型。它可以学习和记忆时间序列数据中的长期依赖关系,并进行预测。
- 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])
综合以上模型的预测结果,可以参考预测价格的均值来制定交易策略。然而,股票市场具有很高的风险和不确定性,仅依靠预测模型并不能完全准确地预测未来股票价格。建议结合其他因素(例如市场趋势、公司基本面等)进行综合分析,并谨慎投资。