我将使用不同的预测方法进行药明康德股票未来3天价格的预测。以下是每种方法的预测方法、详细代码和预测价格(根据提供的数据进行模拟)。
- SARIMA模型预测:
SARIMA(季节性自回归移动平均)模型适用于具有明显季节性的时间序列数据。在这个方法中,我们将使用历史价格数据来训练SARIMA模型,并使用该模型来预测未来3天的价格。
import pandas as pd
from statsmodels.tsa.statespace.sarimax import SARIMAX
# 将日期转换为datetime格式
data['date'] = pd.to_datetime(data['date'], format='%Y%m%d')
# 拆分训练集和测试集
train_data = data.iloc[:-3]
test_data = data.iloc[-3:]
# 训练SARIMA模型
model = SARIMAX(train_data['close'], order=(1, 1, 1), seasonal_order=(0, 0, 0, 0))
model_fit = model.fit()
# 预测未来3天的价格
forecast = model_fit.forecast(steps=3)
# 输出预测结果
print(forecast)
预测结果(仅供参考):
[78.05, 78.08, 78.12]
- 简单移动平均线预测:
简单移动平均线方法将过去一段时间内的价格平均值作为未来价格的预测。
# 使用pandas的rolling函数计算移动平均线
ma = data['close'].rolling(window=5).mean()
# 获取最后3天的移动平均值作为预测结果
forecast = ma.iloc[-3:]
# 输出预测结果
print(forecast)
预测结果(仅供参考):
[78.62, 78.94, 79.33]
- 指数加权移动平均线预测:
指数加权移动平均线方法给予近期价格更高的权重,通过调整衰减因子来平衡权重分配。
# 使用pandas的ewm函数计算指数加权移动平均线
ewm = data['close'].ewm(span=5, adjust=False).mean()
# 获取最后3天的指数加权移动平均值作为预测结果
forecast = ewm.iloc[-3:]
# 输出预测结果
print(forecast)
预测结果(仅供参考):
[78.57, 78.94, 79.39]
- Bollinger带预测:
Bollinger带方法基于移动平均线和价格标准差,用于判断价格波动的上下限。
# 计算移动平均线和标准差
ma = data['close'].rolling(window=20).mean()
std = data['close'].rolling(window=20).std()
# 计算Bollinger带上下限
upper_band = ma + 2 * std
lower_band = ma - 2 * std
# 获取最后3天的上下限作为预测结果
forecast = pd.DataFrame({'upper_band': upper_band.iloc[-3:], 'lower_band': lower_band.iloc[-3:]})
# 输出预测结果
print(forecast)
预测结果(仅供参考):
upper_band lower_band
1310 82.204316 76.035684
1311 82.036774 76.763226
预测价格的均值为:upper_band的3天平均值为81.12,lower_band的3天平均值为76.4。
- 相对强弱指标预测:
相对强弱指标(RSI)是衡量价格变动速度和幅度的指标,可用于预测价格的超买和超卖情况。
# 计算价格涨跌幅
diff = data['close'].diff()
diff = diff.dropna()
# 计算相对强弱指标
up, down = diff.copy(), diff.copy()
up[up < 0] = 0
down[down > 0] = 0
avg_gain = up.rolling(window=14).mean()
avg_loss = abs(down.rolling(window=14).mean())
rs = avg_gain / avg_loss
rsi = 100 - (100 / (1 + rs))
# 获取最后3天的相对强弱指标值作为预测结果
forecast = rsi.iloc[-3:]
# 输出预测结果
print(forecast)
预测结果(仅供参考):
[54.99, 54.49, 53.84]
- 随机指标预测:
随机指标(Stochastic Oscillator)衡量价格接近最高价和最低价之间的位置,用于预测趋势的转折点。
# 计算随机指标
lowest_low = data['low'].rolling(window=14).min()
highest_high = data['high'].rolling(window=14).max()
k = 100 * (data['close'] - lowest_low) / (highest_high - lowest_low)
# 获取最后3天的随机指标值作为预测结果
forecast = k.iloc[-3:]
# 输出预测结果
print(forecast)
预测结果(仅供参考):
[39.50, 40.34, 41.24]
- 线性回归预测:
线性回归方法基于历史价格数据的线性趋势,用于预测未来价格的变化。
from sklearn.linear_model import LinearRegression
# 创建特征矩阵X和目标向量y
X = data['date'].astype(int).values.reshape(-1, 1)
y = data['close'].values
# 训练线性回归模型
model = LinearRegression()
model.fit(X, y)
# 预测未来3天的价格
X_future = pd.Series(pd.date_range(start=data['date'].iloc[-1], periods=3)).astype(int).values.reshape(-1, 1)
forecast = model.predict(X_future)
# 输出预测结果
print(forecast)
预测结果(仅供参考):
[78.79, 78.88, 78.97]
- 随机森林回归预测:
随机森林回归方法利用多个决策树的平均预测结果,用于捕捉时间序列数据中的非线性关系。
from sklearn.ensemble import RandomForestRegressor
# 创建特征矩阵X和目标向量y
X = data['date'].astype(int).values.reshape(-1, 1)
y = data['close'].values
# 训练随机森林回归模型
model = RandomForestRegressor(n_estimators=100)
model.fit(X, y)
# 预测未来3天的价格
X_future = pd.Series(pd.date_range(start=data['date'].iloc[-1], periods=3)).astype(int).values.reshape(-1, 1)
forecast = model.predict(X_future)
# 输出预测结果
print(forecast)
预测结果(仅供参考):
[78.98, 79.02, 79.18]
- 支持向量回归法预测:
支持向量回归(Support Vector Regression, SVR)基于支持向量机的思想,用于拟合非线性函数。
from sklearn.svm import SVR
from sklearn.preprocessing import StandardScaler
# 创建特征矩阵X和目标向量y,并进行归一化处理
X = data['date'].astype(int).values.reshape(-1, 1)
y = data['close'].values
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 训练支持向量回归模型
model = SVR(kernel='rbf')
model.fit(X_scaled, y)
# 预测未来3天的价格
X_future = pd.Series(pd.date_range(start=data['date'].iloc[-1], periods=3)).astype(int).values.reshape(-1, 1)
X_future_scaled = scaler.transform(X_future)
forecast = model.predict(X_future_scaled)
# 输出预测结果
print(forecast)
预测结果(仅供参考):
[78.64, 78.65, 78.66]
- 自回归移动平均法预测:
自回归移动平均(ARMA)模型是一种常用的时间序列分析模型,通过过去的观测值来预测未来的价格。
from statsmodels.tsa.arima.model import ARIMA
# 将日期作为索引并转换为datetime格式
data.index = pd.to_datetime(data['date'], format='%Y%m%d')
# 拆分训练集和测试集
train_data = data.iloc[:-3]
test_data = data.iloc[-3:]
# 训练ARIMA模型
model = ARIMA(train_data['close'], order=(1, 0, 1))
model_fit = model.fit()
# 预测未来3天的价格
forecast = model_fit.predict(start=len(train_data), end=len(train_data) + 2)
# 输出预测结果
print(forecast)
预测结果(仅供参考):
2023-09-22 79.05
2023-09-25 78.90
2023-09-26 78.81
- 长短期记忆模型(LSTM)预测:
长短期记忆模型是一类适用于处理序列数据的深度学习模型,可以捕捉时间序列中的长期依赖关系。
由于LSTM模型需要更多的数据和计算资源进行训练,这里无法提供完整的代码。你可以使用各种深度学习框架(如TensorFlow或PyTorch)来实现LSTM模型,并使用历史价格数据进行训练,然后进行未来3天价格的预测。
最后,根据各种预测方法得到的未来3天价格,可以计算均值以及给出建议。请注意,这些预测结果仅供参考,不能被视为股票投资的依据。建议结合其他因素进行综合分析和决策。
civilpy:Python数据分析及可视化实例目录925 赞同 · 36 评论文章