我创建了tensorflow程序,以获取外汇的收盘价。我已经成功创建了前提条件,但未能理解预测未来价值的方法。看到以下是我的预测函数:
$settings = SettingUser::where('user_id', Auth::user()->id)->get();
这是用于测试和训练的完整jupyter和数据集:
My repository with code。
请帮我如何预测未来的收盘价。请不要分享我尝试过的与预测有关的内容。亲爱的,让我知道一些只是在训练我所提供的基础上,无需任何支持就能预测的东西。
希望很快能听到。
答案 0 :(得分:2)
如果我正确理解您的问题,则通过预测您的意思是预测未来的多个收盘价(例如,当前状态下的下5个收盘价)。我浏览了您的Jupyter笔记本。简而言之,您不能轻易做到这一点。
现在,您的代码处于由多个期货定义的最后三个头寸(开盘价/低价/高价/收盘价和一些指标值)。基于此,您可以预测下一个收盘价。如果您想预测更多头寸,则必须根据预测的收盘价创建一个“人造”头寸。在这里,您可以近似地认为开盘价与之前的收盘价相同,但是您只能猜测高价和低价。然后,您将计算其他期货/价值(来自指标),并将其与前两个头寸一起使用以预测下一个收盘价。您可以像这样继续进行下一步操作。
问题出在开/低/高价格上,因为您只能估算它们。您可以从数据中删除它们,重新训练模型,并在没有它们的情况下进行预测,但是它们对于指标计算可能是必需的。
我以某种方式在此处压缩了代码,以展示预测所有OHLC价格的方法:
# Data
xTrain = datasetTrain[
["open", "high", "low", "close", "k",
"d", "atr", "macdmain", "macdsgnal",
"bbup", "bbmid", "bblow"]].as_matrix()
yTrain = datasetTrain[["open", "high", "low", "close"]].as_matrix()
# Settings
batch_size = 1
num_batches = 1000
truncated_backprop_length = 3
state_size = 12
num_features = 12
num_classes = 4
# Graph
batchX_placeholder = tf.placeholder(
dtype=tf.float32,
shape=[None, truncated_backprop_length, num_features],
name='data_ph')
batchY_placeholder = tf.placeholder(
dtype=tf.float32,
shape=[None, num_classes],
name='target_ph')
cell = tf.contrib.rnn.BasicRNNCell(num_units=state_size)
states_series, current_state = tf.nn.dynamic_rnn(
cell=cell,
inputs=batchX_placeholder,
dtype=tf.float32)
states_series = tf.transpose(states_series, [1,0,2])
last_state = tf.gather(
params=states_series,
indices=states_series.get_shape()[0]-1)
weight = tf.Variable(tf.truncated_normal([state_size, num_classes]))
bias = tf.Variable(tf.constant(0.1, shape=[num_classes]))
prediction = tf.matmul(last_state, weight) + bias
loss = tf.reduce_mean(tf.squared_difference(last_label, prediction))
train_step = tf.train.AdamOptimizer(learning_rate=0.001).minimize(loss)
# Training
for batch_idx in range(num_batches):
start_idx = batch_idx
end_idx = start_idx + truncated_backprop_length
batchX = xTrain[start_idx:end_idx,:].reshape(batch_size, truncated_backprop_length, num_features)
batchY = yTrain[end_idx].reshape(batch_size, truncated_backprop_length, num_classes)
feed = {batchX_placeholder: batchX, batchY_placeholder: batchY}
_loss, _train_step, _pred, _last_label,_prediction = sess.run(
fetches=[loss, train_step, prediction, last_label, prediction],
feed_dict=feed)
我认为编写整个代码并不重要,而且我不知道指标是如何计算的。另外,您应该更改数据馈送的方式,因为现在它仅适用于大小为1的批处理。
答案 1 :(得分:0)
我不确定您的问题是否已解决。我面临着类似的问题,这就是我解决的方法-
这行得通。
让我知道您是否需要进一步的帮助。