量化金融——利用RNN和LSTM预测开盘价

量化金融——利用RNN和LSTM预测开盘价

第一期

本期利用茅台以2020.6.1 号到2020.12.31号的开盘价为数据,总共
116+15+15=146组数据,其中训练集(train)116组数据,测试集(test)15组数据,验证集(prediction)15组数据

数据生成

三组数据打包成三个csv文件

导入相关包和库

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM

数据预处理

#导入训练集train_set
training_set=pd.read_csv('maotai_train.csv',encoding='gbk')
#extract open value from the trainng data
training_set=training_set.iloc[:,1:2].values
train=training_set
#特征值进行极差标准化/归一化
sc=MinMaxScaler()
training_set=sc.fit_transform(training_set)
X_train= training_set[:]
Y_train= training_set[:]
#reshape
X_train=np.reshape(X_train,(116,1,1))

搭建RNN模型

#初始化RNN
regressor=Sequential()
regressor.add(LSTM(units=50,activation='sigmoid', input_shape=(1,1)))
regressor.add(Dense(units=1))
#LSTM
regressor.compile(optimizer='adam',loss='mean_squared_error')
#fit
regressor.fit(X_train,Y_train,batch_size=1,epochs=20)

预测

#测试集
test_set=pd.read_csv('maotai_test.csv',encoding='gbk')
real_stock_price=test_set.iloc[:,1:2].values
real_stock_price1=test_set.iloc[:,1:2].values
#预测集
inputs=real_stock_price
inputs=sc.transform(inputs)
inputs=np.reshape(inputs,(15,1,1))  #scaling the values
predicted_stock_price = regressor.predict(inputs)
predicted_stock_price = sc.inverse_transform(predicted_stock_price) #scaling to input values

可视化

x1=np.linspace(1,117,num=116,endpoint=False)
x2=np.linspace(117,131,num=15,endpoint=False)
x3=np.linspace(117,131,num=15,endpoint=False)
plt.plot(x1,train,'b-',color='blue',label='train')
plt.plot(x2,real_stock_price1,'b-',color='red',label='Real')
plt.plot(x3,predicted_stock_price,'b-',color='green',label='Predicted')
plt.title('Stock Price Prediction')
plt.xlabel('Time')
plt.ylabel('Stock Price')
plt.legend()
plt.show()

评估模型

import math
from sklearn.metrics import mean_squared_error
rmse=math.sqrt(mean_squared_error(real_stock_price, predicted_stock_price))
#expressing RMSE in percentage
rmse=rmse/120       # 800 becasue it is average value
print(rmse)

运行结果

在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以,下面是一个基于RNN算法的股票预测的代码示例,您可以根据需要进行调整和修改: ```python import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.preprocessing import MinMaxScaler from keras.models import Sequential from keras.layers import Dense, LSTM # 读取股票数据 df = pd.read_csv('stock_data.csv') # 取出开盘价和收盘价数据 data = df.filter(['Open', 'Close']) # 将数据归一化处理 scaler = MinMaxScaler(feature_range=(0, 1)) scaled_data = scaler.fit_transform(data) # 定义训练集和测试集 train_size = int(len(scaled_data) * 0.7) train_data = scaled_data[0:train_size, :] test_data = scaled_data[train_size:len(scaled_data), :] # 定义X和y def create_dataset(dataset, look_back=1): X, y = [], [] for i in range(len(dataset) - look_back - 1): a = dataset[i:(i + look_back), :] X.append(a) y.append(dataset[i + look_back, 0]) return np.array(X), np.array(y) look_back = 10 train_X, train_y = create_dataset(train_data, look_back) test_X, test_y = create_dataset(test_data, look_back) # 定义RNN模型 model = Sequential() model.add(LSTM(units=50, return_sequences=True, input_shape=(train_X.shape[1], train_X.shape[2]))) model.add(LSTM(units=50)) model.add(Dense(units=1)) # 编译模型 model.compile(loss='mean_squared_error', optimizer='adam') # 训练模型 model.fit(train_X, train_y, epochs=100, batch_size=64, verbose=1) # 测试模型 predicted_stock_price = model.predict(test_X) predicted_stock_price = scaler.inverse_transform(predicted_stock_price) # 绘制预测结果 plt.plot(df['Open'][train_size + look_back + 1:], label='Real Stock Price') plt.plot(predicted_stock_price, label='Predicted Stock Price') plt.legend() plt.show() ``` 需要注意的是,该代码示例仅供参考,实际应用中还需要根据股票的特点和市场情况进行调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值