• 周易公众号
    • 周易APP下载

如何使用谷歌和LSTM神经网络来预测股市--

作者:佚名 来源:易经在线

2023-04-29 20:01:28

如何使用谷歌和LSTM神经网络来预测股市--

本教程的目的是向你展示如何使用谷歌和LSTM神经网络来预测股市--这是预测股市趋势最广泛使用的机器学习技术。

为了预测股市并找到可以作为自动交易机器人基础的 "圣杯",本文的灵感来自于对机器学习工具和的大量实验。目标是找到一种获得被动收入的方法,在不主动的情况下赚钱。在本文结束时,你会发现这些努力是否成功。

自1792年5月以来,无数人试图用各种方法来预测股市。技术指标和技术分析策略在华尔街交易者中很受欢迎。一些更精明的交易者利用基本面甚至是行为分析来提高他们在市场上的成功几率。随着人工智能和机器学习的发展,一种最先进的股市预测技术已经出现了。

本教程中没有讨论LSTM(长短期记忆),但你可以在维基百科上找到详细描述。我的重点将放在实际应用上,以及你如何使用它来预测未来三天的价格。

在这个实验中,我们将使用以下工具和库:

我们首先要导入必要的库。

import numpy as npimport time as tmimport datetime as dtimport tensorflow as tf# Data preparationfrom yahoo_fin import stock_info as yffrom sklearn.preprocessing import MinMaxScalerfrom collections import deque# AIfrom keras.models import Sequentialfrom keras.layers import Dense, LSTM, Dropout# Graphics libraryimport matplotlib.pyplot as plt
复制代码

"并没有包含在 Colab中奇门遁甲与股票代码预测,所以我们需要安装它:

!pip install yahoo_fin
复制代码

设置我们的神经网络 我们将设置一些设置。我将简要地解释每一项:

# SETTINGS# Window size or the sequence length, 7 (1 week)N_STEPS = 7# Lookup steps, 1 is the next day, 3 = after tomorrowLOOKUP_STEPS = [1, 2, 3]# Stock ticker, GOOGLSTOCK = 'GOOGL'# Current datedate_now = tm.strftime('%Y-%m-%d')date_3_years_back = (dt.date.today() - dt.timedelta(days=1104)).strftime('%Y-%m-%d')
复制代码

收集数据

我们必须从雅虎财经获得数据,才能使用它。对于我们的例子,我们得到了1104条,间隔为1天。

# LOAD DATA # from yahoo_fin # for 1104 bars with interval = 1d (one day)init_df = yf.get_data(    STOCK,     start_date=date_3_years_back,     end_date=date_now,     interval='1d')
复制代码

让我们来看看这些数据。网络服务在默认情况下已经检索了整组列。收盘 "栏显示收盘的市场价格,而 "开盘 "栏显示开盘的市场价格。除了股票代码外,还有其他的列。

没有必要在机器学习模型中包括所有这些列。'收盘'列告诉我们在特定时间的市场价格是多少。

# remove columns which our neural network will not useinit_df = init_df.drop(['open', 'high', 'low', 'adjclose', 'ticker', 'volume'], axis=1)# create the column 'date' based on index columninit_df['date'] = init_df.index
复制代码

让我们看看''表。

我们的新列是'收盘'和'日期'。我们将在未来使用它们。

为了显示图表如何使用谷歌和LSTM神经网络来预测股市--,让我们从我们从服务中得到的真实数据中创建一个图。

# Let's preliminary see our data on the graphicplt.style.use(style='ggplot')plt.figure(figsize=(16,10))plt.plot(init_df['close'][-200:])plt.xlabel("days")plt.ylabel("price")plt.legend([f'Actual price for {STOCK}'])plt.show()
复制代码

就我而言,该图表看起来不错。该图显示了GOOGL自去年以来的股价波动情况。我是根据 "收盘 "一栏来绘制此图的,该栏是收盘的市场价格。

LSTM神经网络在比例数据上的表现比普通数据要好,所以我们需要对'收盘'列数据进行比例处理。下面是我们需要的东西:

# Scale data for ML enginescaler = MinMaxScaler()init_df['close'] = scaler.fit_transform(np.expand_dims(init_df['close'].values, axis=1))
复制代码

新的表格是什么样子的?

这是正确的,现在的价格是在0和1之间进行缩放的。我稍后会告诉你为什么。

为处理数据做准备 现在我们已经预装和缩放了数据,我们需要为下一步做准备。我将解释。

预测未来三天的股票价格是我们的主要目标。模型的数据需要根据我们要预测的天数来安排。

作为目标列,我们将转移 "收盘 "列,并将结果存储在 "未来 "列。这就是移位。

def PrepareData(days):  df = init_df.copy()  df['future'] = df['close'].shift(-days)  last_sequence = np.array(df[['close']].tail(days))  df.dropna(inplace=True)  sequence_data = []  sequences = deque(maxlen=N_STEPS)  for entry, target in zip(df[['close'] + ['date']].values, df['future'].values):      sequences.append(entry)      if len(sequences) == N_STEPS:          sequence_data.append([np.array(sequences), target])  last_sequence = list([s[:len(['close'])] for s in sequences]) + list(last_sequence)  last_sequence = np.array(last_sequence).astype(np.float32)  # construct the X's and Y's  X, Y = [], []  for seq, target in sequence_data:      X.append(seq)      Y.append(target)  # convert to numpy arrays  X = np.array(X)  Y = np.array(Y)  return df, last_sequence, X, Y
复制代码

作为这个脚本的一部分,我们还必须计算最后一个序列,其中包含引擎的最后窗口。然后我们将根据这个序列预测未来的价格。

LSTM的X和Y数组是最后的组成部分。在X数组中,你会发现特定步骤的序列,在Y数组中,你会发现该步骤的目标价格。如果你想充分了解这个过程,我建议在谷歌Colab中玩转所有这些部分。

现在需要对机器学习模型进行设置和配置。在这种方法中使用了LSTM神经网络和一个顺序模型。除了LSTM和层之外,我们还有一个Dense层。

''是用来训练模型的数据数组;

我们的''参数提供了基于目标'close'列的训练响应;

LSTM第1和第2层各有60个神经元。在LSTM层之间有一个隐藏层,有30%的神经元被丢弃。该模型的最后一步是密集层,有20个神经元和一个神经元。

def GetTrainedModel(x_train, y_train):  model = Sequential()  model.add(LSTM(60, return_sequences=True, input_shape=(N_STEPS, len(['close']))))  model.add(Dropout(0.3))  model.add(LSTM(120, return_sequences=False))  model.add(Dropout(0.3))  model.add(Dense(20))  model.add(Dense(1))  BATCH_SIZE = 8  EPOCHS = 80  model.compile(loss='mean_squared_error', optimizer='adam')  model.fit(x_train, y_train,            batch_size=BATCH_SIZE,            epochs=EPOCHS,            verbose=1)  model.summary()  return model
复制代码

由于每个epoch的批次大小为8,我们将在80个epoch(计算)中训练我们的模型。

在这个例子中,我们使用''作为损失函数参数和'adam'优化器,这是最流行的。

我们将对训练结果进行总结,并将模型返回给股市预测程序。

这里是一个概述,但它并不详尽。我并不是要提供一个。我建议在上观看至少6个小时的相关课程,以充分了解它。

现在我们已经得到了我们所需要的一切,让我们来预测GOOGL未来3天的价格。

下面的脚本初始化了预测价格的数组。在每一步(对于我们数组中的每一天[1如何使用谷歌和LSTM神经网络来预测股市--,2,3]),我们准备数据并训练模型。在我们的设置章节中被指定为[1,2,3]的值。这是三天:第一天、第二天和第三天。

# GET PREDICTIONSpredictions = []for step in LOOKUP_STEPS:  df, last_sequence, x_train, y_train = PrepareData(step)  x_train = x_train[:, :, :len(['close'])].astype(np.float32)  model = GetTrainedModel(x_train, y_train)  last_sequence = last_sequence[-N_STEPS:]  last_sequence = np.expand_dims(last_sequence, axis=0)  prediction = model.predict(last_sequence)  predicted_price = scaler.inverse_transform(prediction)[0][0]  predictions.append(round(float(predicted_price), 2))
复制代码

运行这个循环可能需要一些时间--我估计这三天至少需要10分钟。这有点像数据挖掘。我们最终会得到 "预期的结果"。

我们的神经网络已经给了我们结果,但我们能用它们做什么?除了交易之外,还有很多可能性。这不是足够的信息来推荐交易。一个人工智能工具做出了这个预测奇门遁甲与股票代码预测,仅此而已。成功的交易不仅仅是收盘价,还有更多。

这个简单的例子可能会激励你将机器学习和递归神经网络纳入你的交易策略,因为它们已经在华尔街被使用。

从上面的图片来看,我猜这是一个扁平的市场。在这种市场条件下,我不会采取任何行动。

它有98%的准确性。这个公式是什么?准确率是指随着时间的推移,股票价格与预期结果相差多少。这是我们模型训练过程的清单。

根据列表,"损失 "约为0.0024奇门遁甲与股票代码预测,或约2%。

结果图 让我们在整个''范围内运行该模型,看看它在历史数据和预测条上的准确度如何。这里是带有注释的代码。你可以用 Colab一步一步地实验这个数据。请看最后的链接。

# Execute model for the whole history rangecopy_df = init_df.copy()y_predicted = model.predict(x_train)y_predicted_transformed = np.squeeze(scaler.inverse_transform(y_predicted))first_seq = scaler.inverse_transform(np.expand_dims(y_train[:6], axis=1))last_seq = scaler.inverse_transform(np.expand_dims(y_train[-3:], axis=1))y_predicted_transformed = np.append(first_seq, y_predicted_transformed)y_predicted_transformed = np.append(y_predicted_transformed, last_seq)copy_df[f'predicted_close'] = y_predicted_transformed# Add predicted results to the tabledate_now = dt.date.today()date_tomorrow = dt.date.today() + dt.timedelta(days=1)date_after_tomorrow = dt.date.today() + dt.timedelta(days=2)copy_df.loc[date_now] = [predictions[0], f'{date_now}', 0, 0]copy_df.loc[date_tomorrow] = [predictions[1], f'{date_tomorrow}', 0, 0]copy_df.loc[date_after_tomorrow] = [predictions[2], f'{date_after_tomorrow}', 0, 0]# Result chartplt.style.use(style='ggplot')plt.figure(figsize=(16,10))plt.plot(copy_df['close'][-150:].head(147))plt.plot(copy_df['predicted_close'][-150:].head(147), linewidth=1, linestyle='dashed')plt.plot(copy_df['close'][-150:].tail(4))plt.xlabel('days')plt.ylabel('price')plt.legend([f'Actual price for {STOCK}',             f'Predicted price for {STOCK}',            f'Predicted price for future 3 days'])plt.show()
复制代码

在下一张图表中,你可以看到对未来3天的预测(小紫线),对整个时期的预测(蓝色虚线),以及实际价格(橙色实线)。

通过 "红色实线",我强调了对未来几天的预测。

在本文结束之前,你不会知道我预测市场的尝试是否成功。根据上面的图表,我已经成功地预测了股票价格,准确率达到98%。然而,这对交易来说是不够的。你不能依靠知道未来3天的价格来进行常规交易。

除非你知道价格,否则你不能使用它。成功需要更多一点。根据我对自动交易算法的实验,你必须考虑 "止损"、"止盈"、"交易金额 "等,以便有效地进行交易。因此,你需要的不仅仅是一个目标价格来成功交易。

【版权提示】部分文章来源于网络,如有侵权请及时与我们联系。

“数字能量学”与八字预测学的预测模型是什么?

“数字能量学”与八字预测学的预测模型是什么?

一、比较“数字能量学”与八字预测学的预测模型是什么?数字能量学以天即24小时为单位进行预测,而八字预测学以时辰即2个小时为单位进行预测,其预测的准确率高低,大家应该一目了然吧!不管所谓的“数字能量学”吹的多么的高,多么神,在比较的基础上大家就明了了。二、“数字能量学”与八字预测学的预测过程如何?通过

预测模型与案例(楷楷模)瑞吉祥

预测模型与案例(楷楷模)瑞吉祥

预测模型与案例易经如何运用到实际当中?将《易经》运用在具体生活中最著名的例子有哪些?历史上存在有易学大师利用梅花易数预测的案例,这些案例的科学依据是什么?易经64卦解卦的基本方法因此,如何正确并深刻的解卦,是初学易者绕不开的一门基本功。二、准确判断哪一个爻是主爻,对于卦象分析和卦辞解析有着非常重要的

六爻预测完整步骤 预测流程

六爻预测完整步骤 预测流程

我们知道,预测未来的方法有很多,有数学模型,有统计模型,有哲学模型等等,不论什么预测模型,其预测流程几乎都是一样的。预测的流程看上图:首先要收集数据,预测是离不开数据的,预测的原始数据有很多,根据预测的需要而选定,当然一般情况而言,了解过去越详细越有利于准确判断未来。再次进行实践,反复重复以上步骤,

2020 年鼠年男孩起名指南:宜用字形解析,让宝宝名字更吉利

2020 年鼠年男孩起名指南:宜用字形解析,让宝宝名字更吉利

新的一年会有新的变化,有些家庭将会在新的一年里迎接新成员的诞生,那么该如何给自己的孩子取一个吉利的名字呢?属鼠男孩起名宜用的字形属鼠男孩吉利名字解析整个名字带有一种“书卷气”,给人一种很文艺的感觉,同时属鼠的孩子名字中适合带有“礻”偏旁的字,能够保佑孩子将来大富大贵。其他属鼠男孩吉利名字推荐

育儿

04-29

随卦解析:相征良公卓玉之寡,如孙膑破位时战得

随卦解析:相征良公卓玉之寡,如孙膑破位时战得

意思是说呀,上卦为对为则,下卦为正为雷,所以则中有雷便是随卦的卦象。元亨利贞是易经当中最高的荣誉,在这个六十四个卦当中啊,只有六个卦有这个元亨利贞,随卦就是其中之一。好,接下来我们来领悟一下这个随卦的六爻给我们什么样的智慧。随卦呢,也统推背图的第32项乙位。出行沾到随卦呢?