针对汇川技术 300124.SZ进行股票量化分析

image.png

对股票进行三天内的价格预测,使用自回归移动平均模型(ARMA)、Bollinger带、随机森林回归(Random Forest Regression)、自回归移动平均法(ARIMA)和长短期记忆模型(LSTM)来预测汇川技术未来3天的股票价格

具体代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
接下来,我将使用自回归移动平均模型(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])


综合以上模型的预测结果,可以参考预测价格的均值来制定交易策略。然而,股票市场具有很高的风险和不确定性,仅依靠预测模型并不能完全准确地预测未来股票价格。建议结合其他因素(例如市场趋势、公司基本面等)进行综合分析,并谨慎投资。