【发布时间】:2021-07-12 21:22:20
【问题描述】:
我有几个包含来自纳斯达克的高频数据(限价单)的数据集。
对于任何对此类数据感兴趣的人,我强烈建议您查看 https://github.com/martinobdl/ITCH 以获取 Book Constructor 和一些示例数据(无论如何,这比您在其他任何地方得到的都多)
我想使用 LSTM 网络来尝试预测下一个出价和下一个要价,同时使用一些其他功能,例如订单簿中的交易量和交易量不平衡。
这是我的火车数据的前五列的样子(来自 AAPL 的数据,数据点之间为 1):
Bid Ask 1_bid_vol 1_ask_vol 2_bid_vol 2_ask_vol
162.49 162.52 300.0 200.0 500.0 200.0
162.48 162.51 300.0 600.0 800.0 500.0
162.49 162.51 100.0 10.0 1000.0 500.0
162.48 162.52 469.0 600.0 618.0 500.0
除了规范化数据外,我还创建了固定长度的序列,因为它适用于 LSTM,如下所示:
def slicing(df,history_size):
data = []
labels = []
tmp_df=np.array(df)
start_index = history_size
for i in range(start_index, len(df)):
indices = range(i-history_size, i)
data.append(tmp_df[indices,:])
labels.append(tmp_df[i,:2])
return np.array(data), np.array(labels)
这样输入数据的形状 = (n_samples, history_size, n_features)
我目前的架构如下:
callback = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=5)
LSTM = tf.keras.models.Sequential([
tf.keras.layers.LSTM(128,input_shape=
(X_train.shape[1],X_train.shape[2]),activation='relu',return_sequences=True),
tf.keras.layers.LSTM(62,input_shape=(X_train.shape[1],X_train.shape[2]),activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(2)
])
opt = tf.keras.optimizers.Adam(learning_rate=0.001)
LSTM.compile(optimizer=opt, loss='mse')
LSTM.fit(x=X_train,y=y_train, epochs=50, validation_data=(X_val,y_val),callbacks=[callback])
这些是我在使用 14k 数据点进行训练的验证集上得到的结果(我会让你们都想象一下它在测试集上的样子):
如您所见,该模型在验证集上的开始很好,而不是它基本上开始预测随机异常值/峰值。
请注意,即使在更改超参数、模型架构甚至更改数据(例如使用其他股票)并使用更小的时间窗之后,此结果也会始终出现,以便我可以使用更多数据进行训练。鉴于此,我怀疑这一定是某种常见问题,如果有经验/精通 RNN/LSTM 的人提供任何帮助/资源,我们将不胜感激。
【问题讨论】:
-
您是否期望该模型能够预测未来 2000 个时间单位的股票价值?
标签: python tensorflow lstm stock