算法交易中的Python - 页 23

 

平衡 RNN 序列数据 - 使用 Python、TensorFlow 和 Keras 进行深度学习 p.10



平衡 RNN 序列数据 - 使用 Python、TensorFlow 和 Keras 进行深度学习 p.10

大家好,欢迎观看另一个使用 Python、TensorFlow 和 Keras 进行深度学习的教程视频。在本视频中,我们将使用循环神经网络 (RNN) 继续构建未来的加密货币价格走势预测器。”

该教程视频的重点是使用深度学习技术构建加密货币价格变动的预测器。

演示者提到他们已经执行了预处理步骤,包括构建顺序数据和分离出验证数据。他们还对数据进行了标准化。

该过程的下一步是平衡数据。数据集中具有相同数量的购买和销售实例非常重要。如果存在不平衡,就会影响模型的性能。演讲者建议,即使存在轻微的不平衡,最好平衡数据,以避免模型偏向某一类而不是另一类。

为了平衡数据,演示者创建两个列表:买入和卖出。它们迭代顺序数据并检查目标是 0(卖出)还是 1(买入)。如果是销售,他们会将序列附加到销售列表中。如果是购买,他们会将其添加到购买列表中。之后,他们对两个列表进行洗牌。

接下来,他们找到两个列表(买入和卖出)之间的最小长度。他们更新买卖列表,使其仅包含较短列表长度以内的元素。这可确保两个列表具有相同数量的实例。

然后,演示者将买入和卖出列表合并到equential_data 列表中。他们再次打乱顺序数据列表,以进一步随机化数据的顺序。

下一步是将顺序数据拆分为特征 (X) 和标签 (Y)。他们创建空列表 x 和 y 来分别存储特征和标签。它们迭代顺序数据并将序列附加到 x 列表,将目标附加到 y 列表。

最后,它们返回 x 和 y 的数组作为预处理数据。

然后,演示者继续打印一些有关数据的统计信息,例如训练和验证数据集的大小,以及买卖实例之间的平衡。

在下一个视频中,他们计划使用预处理的数据构建和训练模型。
Balancing RNN sequence data - Deep Learning w/ Python, TensorFlow and Keras p.10
Balancing RNN sequence data - Deep Learning w/ Python, TensorFlow and Keras p.10
  • 2018.09.17
  • www.youtube.com
Welcome to the next part of our Deep Learning with Python, TensorFlow, and Keras tutorial series. In this tutorial, we're going to continue building our cryp...
 

加密货币预测 RNN 模型 - 使用 Python、TensorFlow 和 Keras 进行深度学习 p.11



加密货币预测 RNN 模型 - 使用 Python、TensorFlow 和 Keras 进行深度学习 p.11

大家好,欢迎来到另一个使用 Python、TensorFlow 和 Keras 的深度学习教程。在本教程中,我们将从上一个教程中停止的地方继续。我们的目标是根据特定加密货币的历史价格、交易量和其他主要加密货币来预测其未来价格走势。我们将使用循环神经网络(RNN)来实现这一目标。

首先,我们需要导入必要的库。我们将导入时间库供以后使用。接下来,我们定义一些常量。第一个常数是我们想要训练模型的时期数。我们最初将批量大小设置为 64,但如果需要,我们可以稍后调整它。最后,我们使用 F 字符串定义模型的名称。为模型和 TensorBoard 日志提供唯一的名称非常重要,以便于比较和识别。

现在,我们导入所需的 TensorFlow 模块。我们将 TensorFlow 导入为 tf 以及所需的子模块:tf.keras.models、tf.keras.layers、tf.keras.optimizers、tf.keras.callbacks 和 tf.keras.backend。我们还导入 numpy 和 matplotlib 进行数据处理和可视化。

接下来,我们开始构建模型。我们使用 model = tf.keras.models.Sequential() 创建一个顺序模型。在模型内部,我们使用 model.add() 函数添加层。我们的第一层是具有 128 个节点的 LSTM 层。我们设置 return_sequences=True 因为我们想将输出传递到下一层。我们将输入形状指定为train_X.shape[1:],其中train_X是输入数据。我们还添加了一个率为 0.2 的 dropout 层和一个批量归一化层。

我们再重复这个过程两次,添加两个 LSTM 层,每个层有 128 个节点。我们删除最后一个 LSTM 层的 return_sequences=True ,因为它后面是一个密集层。我们还在每个 LSTM 层中添加了 dropout 和批量归一化层。

在 LSTM 层之后,我们添加了一个具有 32 个节点的密集层和一个修正的线性激活函数。我们添加了一个率为 0.2 的 dropout 层,最后添加了具有两个节点和一个 softmax 激活函数的输出层。

现在,我们为我们的模型指定优化器。我们使用 Adam 优化器,学习率为 0.001,衰减率为 1e-6。我们使用 model.compile() 编译模型,并将损失函数指定为稀疏分类交叉熵,将指标指定为准确性。

接下来,我们定义模型的回调。我们创建一个 TensorBoard 回调,并将日志目录设置为“logs”。我们还创建了一个 ModelCheckpoint 回调来在训练期间保存最佳模型。我们使用字符串格式指定保存检查点的文件路径。

最后,我们使用 model.fit() 训练模型。我们传递训练数据(train_X 和 train_Y)、批量大小、纪元数和验证数据(validation_X 和validation_Y)。我们还传递了之前定义的回调。

训练后,我们可以使用 model.save() 保存模型以供将来使用。

就是这样!我们已经成功构建并训练了一个循环神经网络模型,用于预测加密货币的未来价格走势。我们还使用 TensorBoard 可视化了训练进度。

Cryptocurrency-predicting RNN Model - Deep Learning w/ Python, TensorFlow and Keras p.11
Cryptocurrency-predicting RNN Model - Deep Learning w/ Python, TensorFlow and Keras p.11
  • 2018.09.18
  • www.youtube.com
Welcome to the next tutorial covering deep learning with Python, Tensorflow, and Keras. We've been working on a cryptocurrency price movement prediction recu...
 

Python 算法交易策略


Python 算法交易策略

在今天的教程中,我们将使用 Python 实现算法股票交易策略。让我们深入探讨一下。

在开始之前,我想强调的是,该视频无意作为投资或财务建议。我不是股票专业人士、投资专家或金融专业人士。该视频的目的是演示如何使用 Python 实施算法交易策略。您是否选择将其用于投资完全是您的决定和责任。我将只关注编程方面。

首先,我们需要安装两个库:“pandas-datareader”用于获取股票数据,“matplotlib”用于数据可视化。打开命令提示符 (CMD) 并安装这些库。安装完成后,我们就可以继续编码了。

首先,我们导入必要的模块:“datetime”用于处理日期和时间,“matplotlib.pyplot”用于绘制图表,“pandas_datareader”作为“web”用于检索股票数据。

接下来,我们定义将使用的移动平均线 (MA)。移动平均线代表指定时间段内(例如 30 天或 100 天)的平均股票价格。我们创建两个变量“ma1”和“ma2”,分别设置为 30 和 100。这些值决定了我们将分析的移动平均线的长度。

现在,让我们设置分析的时间范围。我们使用当前日期和 3 年的时间增量定义开始日期和结束日期。该时间范围将用于获取股票数据。

使用“datareader”库,我们从 Yahoo Finance API 检索特定公司(在本例中为 Facebook)的股票数据。我们通过开始日期和结束日期来获取相关数据。

为了计算移动平均值,我们向数据 DataFrame 添加两个新列。我们使用“滚动”函数来计算“ma1”和“ma2”周期的移动平均线。 “调整后的收盘价”栏代表股票分割调整后的收盘价。我们将移动平均线存储在相应的列中。

在继续之前,让我们将数据和移动平均线可视化。我们将调整后的收盘价绘制为股票价格,并将移动平均线绘制在同一张图表上。我们将图形样式设置为使用深色背景,并给出适当的标签和颜色来区分线条。最后,我们添加一个图例来识别绘制的线条并显示图形。

现在,让我们继续实施算法交易策略。我们创建两个空列表“buy_signals”和“sell_signals”,分别存储买入和卖出信号。此外,我们引入了一个“触发”变量,它将帮助我们跟踪策略的变化。

使用 for 循环,我们迭代数据 DataFrame。在循环内部,我们检查两个条件:第一个移动平均线(“ma1”)是否大于第二个移动平均线(“ma2”),以及触发器是否不等于 1。如果两个条件都满足,我们添加将买入信号添加到“buy_signals”列表中,并将“NaN”(不是数字)附加到“sell_signals”列表中。我们还将触发器更新为 1。

在相反的情况下,“ma1”小于“ma2”并且触发不等于-1,我们将卖出信号添加到“sell_signals”列表中,并将实际股票价格附加到“buy_signals”列表中。我们将触发器更新为-1。

如果没有满足任何条件,我们会将“NaN”值附加到两个列表以保持一致的长度。

最后,我们在数据 DataFrame 中再添加两列来存储买入和卖出信号。

我们还将分散卖出信号,因此我们将使用 plt.scatter 添加另一个散点图。这次,我们将把卖出信号分散在 data.index 上作为 x 值,并将相应的卖出信号价格分散为 y 值。我们将此散点图标记为“卖出信号”,以将其与买入信号区分开来。

最后,我们将使用 plt.legend 在图中添加图例,以显示不同元素的标签。然后,我们将调用 plt.show() 来显示绘图。

代码:

plt.plot(data.index, data[ 'Adj Close' ], label= 'Share Price' , color= 'lightgray' )
plt.plot(data.index, data[ 'sma_{}' .format(ma1)], label= 'SMA {}' .format(ma1), linestyle= '--' )
plt.plot(data.index, data[ 'sma_{}' .format(ma2)], label= 'SMA {}' .format(ma2), linestyle= '--' )
plt.scatter(data.index, data[ 'Buy Signal' ], label= 'Buy Signal' )
plt.scatter(data.index, data[ 'Sell Signal' ], label= 'Sell Signal' )
plt.legend(loc= 'upper left' )
plt.show()
现在,当您运行代码时,您应该看到一个显示股票价格、移动平均线以及买入和卖出信号的图。

请记住,这只是用 Python 实现的简单算法交易策略,并不意味着将其视为财务或投资建议。在做出任何投资决定之前,进行彻底的研究并咨询专业人士非常重要。

Algorithmic Trading Strategy in Python
Algorithmic Trading Strategy in Python
  • 2021.07.04
  • www.youtube.com
In this video we learn how to implement an algorithmic trading strategy in Python.DISCLAIMER: This is not investing advice. I am not a professional who is qu...
 

使用 Python 进行算法交易简介 - 如何创建和测试交易算法


使用 Python 进行算法交易简介 - 如何创建和测试交易算法

在本视频中,我们将探讨算法交易策略的开发。需要注意的是,该视频的内容纯粹用于教育目的,不应被视为投资建议。我们将重点关注的策略通常被称为动量策略,尽管它可以有多种解释。一般来说,该策略涉及识别正在朝特定方向发展的证券。例如,我们可能会首先筛选高于 50 日移动平均线或我们研究的任何其他指标的证券。

这种方法通常被称为趋势跟踪策略,因为我们可以从证券的上涨和下跌走势中获利。然而,进行彻底的研究以确定可能有利可图的潜在交易信号至关重要。理想情况下,这些信号应该适用于多种证券,使它们更具普遍性。

首先,我们将导入必要的库并下载相关数据。在本例中,我们将使用雅虎财经 API 检索黄金 ETF (GLD) 的数据。下载数据后,我们将检查前几行以确保其准确性。

接下来,我们将向数据框添加列。我们要添加的第一列是日计数器,它将帮助我们跟踪时间序列中的位置。我们还将重新排列列,以确保这一天紧接在日期之后。我们可以删除不必要的列,例如“调整后的收盘价”和“成交量”,尽管它们可能对其他证券或特定分析有用。

接下来,我们将计算两个移动平均线:快速移动平均线(9 天)和慢速移动平均线(21 天)。这些移动平均线将作为我们进入和退出交易的信号。当快速移动平均线高于慢速移动平均线时,我们将进入多头交易,而当快速移动平均线低于慢速移动平均线时,我们将退出交易甚至做空。但是,请注意,该策略假设我们可以访问当天的收盘价数据,这在实时交易中是不现实的。为了解决这个问题,我们将使用 Pandas 中的移位方法将移动平均线向前滚动一天。

接下来,我们将添加一个“信号”列,该列将指示我们是否应该根据移动平均线信号进行多头或空头交易。值为 1 表示多头交易,而 -1 表示空头交易。为了计算此列,我们将使用 np.where 函数来比较快速移动平均线和慢速移动平均线。

由于移动平均线需要一定数量的观测值来计算,因此我们将删除没有足够数据的行。此步骤将删除移动平均线不可用的初始行。

然后,我们将添加一个“回报”列,以根据收盘价计算瞬时回报率。此外,我们将计算取决于信号和返回的“系统返回”列。此栏将为我们提供特定于我们交易系统的回报。

为了可视化数据并理解交易信号,我们将绘制收盘价、快速移动平均线和慢速移动平均线的折线图。我们还将用绿色向上箭头标记进入点,以指示交易方向何时发生变化。

此外,我们还将把我们的交易系统的性能与买入并持有策略进行比较。我们将绘制这两种方法在五年期间的累积回报。蓝线代表买入并持有策略,而橙线代表我们的系统。从图中我们可以观察到,该系统的表现仍然相对平稳,表明其表现并未优于买入并持有策略。

总之,该视频提供了使用基于动量的方法开发算法交易策略的教育演练。

  • 00:00:00 在本部分中,视频教程重点介绍使用 Python 开发算法交易策略。本教程仅用于教育目的,研究旨在识别朝特定方向移动的证券的动量策略,也称为趋势跟踪策略。该视频介绍了研究单一证券的潜在交易信号、使用雅虎财经 API 和 pandas 数据读取器下载数据、向数据帧添加列以及使用两个移动平均线(慢速和快速)来识别信号的过程。本教程提供了代码示例来帮助观看者创建他们的交易算法。

  • 00:05:00 在本节中,演讲者解释了如何将移动平均线添加到算法中。他们添加了 9 天移动平均线和 21 天移动平均线的列,两者均基于收盘价。然而,移动平均线存在一个问题,这意味着该算法具有某种前瞻信息。为了解决这个问题,他们使用 pandas 中的移位方法将移动平均线向前滚动一天。然后,他们添加一个信号列来告诉算法何时进行多头交易或空头交易。最后,他们添加一个回报列来计算系统回报并将其与买入并持有回报进行比较。

  • 00:10:00 在视频的这一部分中,演讲者解释了如何设置系统来模拟多头头寸时的买入并持有策略、如何添加入场栏以显示方向变化以及如何可视化系统使用线图来表现。橙线为系统回报,蓝线为买入持有;该系统的表现相当平淡,类似于买入并持有,这表明该系统不起作用。发言人还提到,公开入场并不会带来更好的回报。

  • 00:15:00 在本节中,演讲者解释了如何评估交易算法的整体回报。通过从最后一天的回报中减去一,他能够比较买入并持有的回报与算法的回报。买入并持有的结果约为 36%,而算法的损失为 6%。然后,演讲者建议在向前滚动移动平均线和操纵数据时要小心,因为它可能会产生隐含的前瞻性,从而歪曲算法的性能。最后,他鼓励观众探索不同的移动平均线长度,以开发一种优于买入并持有的算法交易策略。
Introduction to Algorithmic Trading Using Python - How to Create & Test Trading Algorithm
Introduction to Algorithmic Trading Using Python - How to Create & Test Trading Algorithm
  • 2021.04.12
  • www.youtube.com
#python #algorithmic #trading How to create a Trading Algorithm - Algorithmic Trading Using Pythonhttps://alphabench.com/data/python-algorithm-trading...
 

如何使用 Alpha Vantage 免费实时股票 API 和 Python 提取每日高点和低点的时间


如何使用 Alpha Vantage 免费实时股票 API 和 Python 提取每日高点和低点的时间

在本视频中,我们将使用 Jupyter Notebook 探索 Alpha Vantage API,并使用一分钟交易数据提取股票的最高交易价格和最低交易价格。 Alpha Vantage 是可用于获取实时交易数据的多个 API 之一,并以免费增值模式运行。首先,我们需要注册一个免费帐户并从 Alpha Vantage 网站获取 API 密钥。

我们将使用名为“alpha_vantage”的 Alpha Vantage 帮助程序库,它简化了 API 调用的过程。如果您尚未安装该库,可以通过在命令行中运行命令“pip install alpha_vantage”来安装。

首先,我们通过导入必要的第三方库来设置我们的环境。完成后,我们将 API 密钥存储在一个变量中。如果您希望将 API 密钥保密,可以将其存储在单独的文本文件中并将其读入笔记本中。接下来,我们通过指定 API 密钥和所需的输出格式来创建时间序列对象。在本例中,我们选择使用 pandas 库,因为它提供了一种更简单的方法来处理输出数据,默认情况下为 JSON 格式。

为了检索交易数据,我们使用“get_intraday”函数调用 Alpha Vantage API。该函数允许我们指定股票的代码和所需的时间间隔,例如一分钟、五分钟或一小时。我们还可以设置输出大小,这决定了我们要检索的历史数据量。对于该视频,我们将其设置为“完整”,这为我们提供了大约十天的数据。

获取数据后,我们可以通过访问“meta”属性来检查与其关联的元数据。元对象提供有关下载数据的信息,例如数据的间隔、日期及其包含的列。然后,我们可以通过调用“info”方法来检查数据本身,该方法显示列名称和日期时间索引。

为了获得数据的直观表示,我们可以绘制其中一列,例如收盘价。但是,Alpha Vantage 返回的列名称可能不方便使用,因此我们可以将它们重命名为更有意义的名称。

接下来,我们提取与正常交易时间相对应的数据,不包括盘后交易,这可能会造成扭曲。我们通过对数据应用基于时间的过滤器来创建一个名为“市场”的新变量。 Pandas 提供了一个方便的函数“ Between_time ”,它允许我们指定市场的开始和结束时间。

此时,我们已准备好提取高点和低点的日期和时间。我们通过两种方式做到这一点。首先,我们按交易日期对数据进行分组,并使用“ag”方法分别计算低列和高列的最小值和最大值。这种方法为我们提供了每个交易日的实际低值和高值。

其次,我们采取不同的方法,关注低点和高点出现的那一刻。我们使用“loc”函数来定位每个交易日内出现低点和高点的特定行。然后,我们分别提取最小值和最大值的索引(日期和时间)。这使我们能够确定达到最低价和最高价的确切时间。

通过检查结果,我们可以观察到有趣的模式,例如整个交易日中低点和高点的时间。

该视频提供了使用 Alpha Vantage API 检索每分钟交易数据并提取高点和低点进行分析的基本概述。它可以作为在您自己的项目中探索和使用 Alpha Vantage API 的起点。

总之,本视频教程演示了如何在 Jupyter Notebook 中使用 Alpha Vantage API 和 Alpha Vantage 帮助程序库,使用一分钟交易数据提取股票的最高和最低交易价格。通过遵循视频中概述的步骤,您可以检索实时交易数据,使用 pandas 进行分析,并深入了解给定交易日内高点和低点的时间。

值得注意的是,Alpha Vantage API 提供了超出本视频介绍的各种功能和数据选项。您可以探索不同的时间间隔,例如五分钟或一小时的数据,以及不同类型的数据,包括每日或历史数据。该API还提供附加功能,例如技术指标和基本数据。

为了进一步增强您的分析,您可以结合其他数据操作和可视化技术。例如,您可以根据提取的最高价和最低价计算其他指标、执行统计分析或创建交互式可视化以更直观的方式呈现数据。

请记住参阅 Alpha Vantage 文档,了解有关可用 API 调用、参数和选项的详细信息。此外,请确保遵守 Alpha Vantage API 的条款和条件,包括与您的免费帐户相关的任何限制或使用限制。

通过利用 Alpha Vantage API 并将其与 Jupyter Notebook 和 pandas 库的功能相结合,您可以解锁大量交易数据并探索各种策略和见解,以支持您的投资决策和定量分析。

How to Use Alpha Vantage Free Real Time Stock API & Python to Extract Time of Daily Highs and Lows
How to Use Alpha Vantage Free Real Time Stock API & Python to Extract Time of Daily Highs and Lows
  • 2021.01.11
  • www.youtube.com
#alphavantage #pythonUsing the free API to download minute by minute trading data and extract daily highs and lowsTutorial demonstrates using downloaded d...
 

用于数据科学的 matplotlib Python 散点图简介


用于数据科学的 matplotlib Python 散点图简介

这是我的 Matplotlib 介绍系列中的第二个视频。在本视频中,我们将重点关注散点图。散点图是一种视觉辅助工具,可以帮助我们确定两个变量之间关系的强度和性质。我们将介绍创建散点图的基础知识,包括设置主题、添加颜色图、创建气泡图和添加维度。

首先,让我们通过导入必要的库来设置我们的环境。我们将导入 NumPy、Matplotlib 和 Pandas 数据读取器。 Pandas 数据读取器将允许我们下载真实数据以供使用。在这种情况下,我们将下载谷歌、亚马逊和黄金 ETF 的三到四个月的数据。

获得数据后,我们可以查看前几行来熟悉数据集。我们可以看到数据从8月1日开始,包括收盘价。

现在,让我们使用 Matplotlib 的散点方法创建一个基本的散点图。我们可以从数据集中选择两列并绘制它们。然而,这个基本的散点图并没有提供有关变量之间关系的太多信息。

为了进一步研究,我们可以计算每种证券的瞬时回报率。这将使我们更好地了解价格变化如何相互关联。我们删除绝对价格并将其减少为百分比变化。从前几个观察结果来看,我们可以看到所有证券都下跌,其中亚马逊和谷歌的跌幅超过 1%,而黄金则相对保持不变。

接下来,我们删除第一个观察值(它不是数字),并绘制散点图以查看 Google 的变化是否与 Amazon 的变化相关。这个散点图讲述了一个与前一个不同的故事。我们可以观察到一个总体趋势:随着谷歌的上涨,亚马逊也会上涨,这表明这两个变量之间存在很强的正相关关系。

现在我们有了基线散点图,我们可以添加一些功能来增强它。首先,让我们更改绘图的大小以使其更加可见。我们可以通过从 Matplotlib 导入参数模块来做到这一点。

我们还可以通过添加引导线来显示点在不同方向上的移动,从而为散点图添加视觉吸引力。通过在 X 轴和 Y 轴上绘制穿过零的线,我们可以快速识别这些点何时一起移动、分开或沿相反方向移动。

为了提高引导线的可见性,我们可以使用 RGB 表示法将其颜色设置为灰色阴影。此外,我们可以将线条样式设置为虚线以获得不同的视觉效果。

为了进一步增强散点图,我们可以添加配色方案。尽管我们没有第三个变量来表示,但我们仍然可以向散点图添加颜色图。我们修改散点图代码以包含亚马逊退货的颜色,并选择光谱颜色图。该颜色图根据返回值向点分配不同的颜色,红色代表最负值,紫色代表最正值。

然而,由于颜色渐变,中间范围内的某些点可能难以看到。为了解决这个问题,我们可以将点的边缘颜色更改为黑色,使它们更加清晰。

为了提供有关颜色渐变的附加信息,我们可以添加颜色条。颜色条绘制一个图例,指示基于返回的颜色映射。

此外,我们可以通过应用主题来改善情节的整体外观。我们可以使用 Seaborn 作为主题,它是 Matplotlib 的包装,提供了视觉上吸引人的风格。该主题更改背景并添加网格线,而不会影响绘制的数据。

最后,我们可以调整绘图的限制以使引导线居中。

最后,我们可以调整绘图的限制以使引导线居中并使散点图在视觉上更加平衡。我们可以将 x 轴和 y 轴限制设置为收益的最小值和最大值,以确保引导线在图的中心相交。这种调整有助于我们更有效地可视化点相对于引导线的移动。

现在我们已经进行了这些增强,我们的散点图信息更丰富且视觉上更有吸引力。我们可以清楚地看到谷歌和亚马逊的回报之间的关系,以及基于颜色图的回报分布。引导线为解释点在不同方向上的移动提供了视觉参考。

除了基本的散点图之外,我们还可以使用 Matplotlib 创建气泡图。气泡图通过根据第三个变量改变标记的大小,向绘图添加第三个维度。在我们的例子中,我们可以使用每种证券的交易量作为第三个变量。

为了创建气泡图,我们通过指定大小参数并将每个证券的交易量作为标记大小来修改散点图代码。这会创建大小与每种证券的交易量成正比的圆圈,使我们能够直观地看到回报、交易量和点数变动之间的关系。

通过将第三个维度添加到散点图中,我们可以更深入地了解变量之间的关系。我们可以看到,较大的圆圈代表较高的交易量,并且点的变动可以与回报和交易量相关。

总之,散点图和气泡图是强大的可视化工具,可以帮助我们理解变量之间的关系。我们可以使用它们来分析和解释数据,识别模式和趋势,并做出明智的决策。借助 Matplotlib,我们可以创建自定义且具有视觉吸引力的散点图,并通过各种功能(例如彩色图、引导线和主题)增强它们。

Introduction to Scatter Plots with matplotlib Python for Data Science
Introduction to Scatter Plots with matplotlib Python for Data Science
  • 2019.11.18
  • www.youtube.com
#scatterplot #matplotlib #python‡‡‡Learn how to use matplotlib with examples of scatter plots Please SUBSCRIBE:https://www.youtube.com/subscription_cente...
 

Python 算法交易简介:创建均值回归交易算法


Python 算法交易简介:创建均值回归交易算法

在本视频中,我们将探索一种仅用于教育目的的均值回归交易算法。需要注意的是,该视频不提供投资建议。该算法将使用 Jupyter Notebook 来实现,视频描述中将提供下载该 Notebook 的链接。该视频是前面讨论的动量交易策略的配套视频,并且还将提供该视频的链接。

均值回归交易策略假设,当证券偏离平均值太远时,它就会回到平均值。有多种方法可以实现此策略,例如使用线性回归或移动平均线。 “太远”的判定和所使用的测量可能会有所不同。有些人使用绝对美元价值,而在本视频中,我们将使用百分位数。此外,将使用移动平均值来确定平均值。

首先,我们导入必要的库,包括用于数据操作的 Pandas、用于下载实时数据的 Pandas DataReader(也可以使用其他服务)、用于数值运算的 NumPy、用于绘图的 Matplotlib 以及用于设置绘图样式的 Seaborn。通过运行相应的代码单元导入所需的库。

接下来,我们获取数据进行分析。虽然良好的交易算法应该适用于多种证券,但本视频重点关注单一证券:黄金 ETF。 Pandas DataReader 用于下载黄金 ETF 大约五年的数据。由于仅关注收盘价,因此我们将下载限制为该列。获得数据后,我们会检查前几行以确保正确检索。

获取数据后,我们向数据框中添加一些列。添加的第一列用于移动平均线。我们设置一个变量来定义移动平均周期,该变量可以很容易地操纵。计算前一天收盘价的瞬时回报率并将其存储在新列中。创建名为“移动平均线”的另一列,用于使用 21 天(或一个交易月)平均值跟踪基于收盘价的平均值。此外,还添加了“比率”列,表示收盘价除以移动平均线。此列有助于确定价格何时与平均值相差太远。

计算“比率”列的描述性统计数据以深入了解数据分布。正如预期的那样,价格总体上仍接近平均值。第 25 个和第 75 个百分位数定义了数据的下限和上限,而最小值和最大值表示与平均值的极端偏差。选择其他价格点进行分析,例如第 5 个、第 10 个、第 90 个和第 95 个百分位,以确定与平均值的显着偏差。 numpy 百分位数函数用于根据“黄金比率”列计算相应的值。在执行计算之前,缺失值将被删除。

为了可视化比率列围绕平均值的移动,将生成一个绘图。不相关的值被删除,比率列用图例绘制。添加水平线来表示选定百分位数(第 5、50 和 95)处的价格突破。这种视觉表示有助于观察比率列围绕平均值的循环运动,表明纠正偏差的趋势。

接下来,定义特定阈值来确定何时做空或做多。空头头寸定义为第 95 个百分位,而多头头寸定义为第 5 个百分位。数据框中添加了一个新列,指示头寸是多头还是空头。 Numpy 的“where”函数用于根据黄金比率列分配值。当比率小于空头阈值时,分配值-1,表示空头头寸;当比率大于多头阈值时,分配值1,表示多头头寸。最后,生成一个图来可视化位置。该图显示比率列并用不同颜色突出显示多头和空头头寸。

确定仓位后,下一步就是计算每日收益。这是通过将头寸列乘以每日回报率列来完成的,这会根据持有的头寸给出每天的回报。数据框中添加了一个名为“策略”的新列来存储每日收益。

为了评估策略的绩效,需要计算累积收益。累积回报是通过策略回报的累积乘积,将结果加1,再乘以100以百分比表示而得到的。生成一个图来可视化随时间推移的累积收益。

接下来,计算额外的绩效指标来评估策略的绩效。计算总回报、平均日回报、日回报标准差、夏普比率和最大回撤。这些指标可以深入了解该策略的盈利能力、风险和风险调整后的回报。打印这些值以方便参考。

最后,生成一个图来比较均值回归策略与买入并持有策略的累积回报。买入并持有策略假设在整个时期内持有资产,而无需做出任何交易决策。该图可以对两种策略进行直观比较。

总之,该视频演示了使用 Python 和 Jupyter Notebook 实施均值回归交易策略。它涵盖数据检索、移动平均线计算、阈值确定、头寸可视化、每日收益计算、绩效指标评估以及与买入并持有策略的比较。随附的 Jupyter Notebook 提供了重新创建策略并进一步探索其实施的分步指南。请记住,该视频仅用于教育目的,不提供投资建议。

Introduction to Algorithmic Trading with Python: Create a Mean Reverting Trading Algorithm
Introduction to Algorithmic Trading with Python: Create a Mean Reverting Trading Algorithm
  • 2021.05.14
  • www.youtube.com
#python #stocktrading #algorithmHow to create a Trading Algorithm - Algorithmic Trading Using Pythonhttps://alphabench.com/data/python-algorithm-trading...
 

Python 熊猫 ||股票价格的移动平均线和滚动窗口统计


Python 熊猫 ||股票价格的移动平均线和滚动窗口统计

在本视频教程中,我将演示如何使用 pandas 滚动方法,该方法可自动计算移动平均值和滚动标准差。滚动方法是执行滚动窗口聚合的强大工具,可以使用 pandas 0.21 版本轻松实现。我将提供本教程中使用的 Jupyter Notebook 的链接以供参考。

首先,我们需要设置环境。我们导入 numpy 库,因为 pandas 依赖它。虽然我们不会直接广泛使用 numpy,但这是 pandas 正常运行所必需的。此外,我们还导入 pandas 数据读取器来获取数据,并导入 matplotlib 来进行绘图。通过使用魔术函数,我们确保绘图显示在 Jupyter Notebook 中。

接下来,我们获取数据进行分析。我将从雅虎财经下载黄金 ETF(交易所交易基金)的数据。为了指定所需的时间范围,我将开始日期设置为总统选举之日,大约一年前。为了确认数据已正确获取,我显示了数据集的前几行。由于我们主要对此演示的收盘价感兴趣,因此我删除了其他列。此外,由于下载的数据框是一系列系列并且缺乏我需要的某些属性,因此我将其转换为数据框。

现在我们准备演示滚动方法。我将在数据框中添加一个名为“MA9”的新列来表示九日移动平均线。使用滚动方法,我计算指定数量的周期或行的平均值。我在 21 天的较长时间内重复此过程。这两列新列代表我们计算的移动平均线。为了可视化数据,我绘制了收盘价、9 天移动平均线和 21 天移动平均线。

有时滞后移动平均线很有用。通过在使用滚动方法时添加参数“center=True”,我们可以将21天窗口的移动平均线向后移动十天。这将创建一条与相应数据对齐的滞后线。我们可以在绘制的图表中观察到这种变化。

我应该注意,在计算移动平均线时,当前观察值包含在平均值中。如果您想将其用作传统的预测工具,您可能需要将移动平均线向前移动。通过使用移位方法并指定一个正整数,我们可以将移动平均线向前移动所需的周期数。这可确保当前观测值不包含在平均值中。

此外,滚动方法还提供其他参数,例如设置任何滞后值的能力,甚至使用负整数将移动平均线移至第一天的能力。

此外,我还演示了如何计算期权定价中常用的历史波动率。为此,我们需要向数据框中添加另一列。使用 numpy,我通过将收盘价除以前一天的收盘价来计算对数回报。绘制这些回报会显示一个以零为中心的嘈杂图表。

为了获得历史波动率,我们采用窗口为 21 天的滚动标准差,因为一个月通常有 21 个交易日。该计算包括第二十一次观测,因此为了准确反映波动性,我们将结果向前移动一天。这避免暗示我们拥有未来的知识。绘制波动率图可以更清晰地表示数据,并揭示金价波动的高低时期。

在以后的视频中,我将介绍使用 pandas 的其他价格分析技术。我希望本教程对使用 pandas 中的滚动方法进行移动平均值和滚动标准差提供了有用的介绍。

Python Pandas || Moving Averages and Rolling Window Statistics for Stock Prices
Python Pandas || Moving Averages and Rolling Window Statistics for Stock Prices
  • 2017.12.21
  • www.youtube.com
#pandas #python #rollingPlease SUBSCRIBE:https://www.youtube.com/subscription_center?add_user=mjmacartyTry my Hands-on Python for Finance course on Udemy...
 

使用 Python、pandas、NumPy matplotlib 和 SciPy 进行定量股票价格分析


使用 Python、pandas、NumPy matplotlib 和 SciPy 进行定量股票价格分析

在本视频中,演讲者介绍了分析股票价格变化的定量分析方法。主要目标是确定股票价格变化是否遵循正态分布,识别每日变化中的任何方向性偏差,并评估价格变动是否可以描述为随机游走。演讲者提到使用 Jupyter 笔记本并提供了下载该笔记本的链接。

演讲者首先搭建环境并导入NumPy、Pandas、Matplotlib等数据分析库。他们还提到使用 Pandas Data Reader 库从 Yahoo API 下载实时数据。然后,演讲者检索亚马逊的股票数据,指定开始日期和结束日期,默认为过去五年的价格数据。

获得数据后,演讲者检查前几行以验证可用信息。他们指出了代表最高价、最低价、开盘价、收盘价、成交量和调整后收盘价的栏。由于他们主要对收盘价感兴趣,因此他们讨论使用“收盘价”或“调整收盘价”栏的选项,后者对于已进行分割的股票很有用。在这种情况下,由于亚马逊上次拆分是在 1999 年,因此这两栏之间的选择并不重要。

接下来,演讲者将收盘价列提取到一个单独的变量中,并使用连续收盘价之间的差值的对数来计算瞬时收益率。它们显示结果值,并指出第一行包含 NaN(不是数字)值,因为无法计算第一天的回报。

然后,演讲者使用 Matplotlib 将数据绘制为折线图,从而可视化每日价格变化。他们观察到,价格变化幅度很大,并集中在零附近,在整个五年期间偶尔会发生不可预测的重大事件。为了分析特定的时间范围,他们绘制了去年的数据,显示密度较低,但保留了相同的整体模式。

价格变动的描述性统计数据是使用 Pandas 的“描述”功能获得的。发言者提到了单独获取统计数据或使用其他工具的可能性,但发现 Pandas 方法足以满足其目的。他们还介绍了 SciPy 库,并演示了使用 SciPy stats 中的“describe”函数计算描述性统计的另一种方法。他们提到,由于在 NumPy 和 SciPy 中处理缺失值,某些值显示为“NaN”。

为了使数字更易于理解,演讲者将这些值乘以 100 以将其转换为百分比。此更改在不更改数据的情况下提高了输出的可读性。

接下来,演讲者将每日价格变化的分布与从正态分布中抽取的样本进行比较。他们绘制了亚马逊退货数据的直方图,并观察到它在中心周围显示出显着的活动,退货向左和向右扩散,表明与正态分布相比,尾部更肥。然后,他们使用 SciPy stats 模块从正态分布生成相同大小的样本,并将其与 Amazon 返回数据一起绘制为直方图。正态分布样本看起来比亚马逊数据更分散且分布更均匀。

接下来,演讲者对正态变量和亚马逊收益进行统计测试,特别是峰度测试。峰度检验检查分布是否可以被视为正态分布,原假设假设为正态分布。获得检验统计量和 p 值,演讲者解释结果的解释。对于正态变量,检验统计量略为负,表明没有强有力的证据反对原假设。相比之下,对于亚马逊的回报,检验统计量要大得多,这表明拒绝原假设并得出亚马逊的价格变化不能被描述为正态分布的结论。

为了进一步可视化差异,说话者通过显示比例而不是频率以及它与分布的拟合程度来修改直方图。为此,我将对初始直方图进行一些更改。我将显示比例,而不是显示频率。这样,我可以在直方图上叠加一条理论正态曲线,看看它的拟合程度如何。

让我们继续用正态曲线绘制直方图。我将使用 scipy.stats 中的范数模块生成正态曲线,然后将其绘制在与直方图相同的图表上。

import matplotlib.pyplot as plt

# Plot histogram
plt.hist(amazon_return, bins= 50 , density=True, alpha= 0.5 , label= 'Amazon Returns' )

# Generate normal curve
x = np.linspace(amazon_return.min(), amazon_return.max(), 100 )
normal_curve = norm.pdf(x, mu, sigma)

# Plot normal curve
plt.plot(x, normal_curve, 'r-' , label= 'Normal Distribution' )

# Add labels and legend
plt.xlabel( 'Daily Price Change' )
plt.ylabel( 'Proportion' )
plt.title( 'Histogram of Amazon Returns with Normal Distribution' )
plt.legend()

# Show the plot
plt.show()
现在,我们就来看看剧情吧。我们有亚马逊回报的直方图以及理论正态分布曲线的叠加。这种视觉比较使我们能够评估每日价格变化与正态分布的吻合程度。

通过观察该图,我们可以看到亚马逊回报的直方图明显偏离正态分布的形状。该分布具有较肥尾,表明与我们对正态分布的预期相比,极端价格波动的发生率更高。这与我们之前对峰度的分析一致,表明亚马逊退货数据中峰度过高。

综上所述,根据我们所采用的定量分析方法,我们可以确定亚马逊的股价变化不能描述为正态分布现象。数据表现出偏度和超峰度等特征,表明与正态分布的偏差。每日价格变化更多地集中在零附近,经常发生较大的、不可预测的波动。这些信息对于了解亚马逊股价行为的本质非常有价值,并且有助于制定投资策略或风险管理方法。

Quantitative Stock Price Analysis with Python, pandas, NumPy matplotlib & SciPy
Quantitative Stock Price Analysis with Python, pandas, NumPy matplotlib & SciPy
  • 2021.06.07
  • www.youtube.com
#pythonprogramming #Stock #DataAnalysishttps://alphabench.com/data/pandas-quantitative-analysis-tutorial.html✅ Please SUBSCRIBE:https://www.youtube...
 

使用 Python、NumPy、pandas 和 Seaborn 的线性回归模型技术


使用 Python、NumPy、pandas 和 Seaborn 的线性回归模型技术

在本视频中,我们将探讨 Python 中的一些简单回归技术。有多种工具可用于在 Python 中实现回归,但我们将重点关注其中的几个,特别是使用 NumPy。请注意,本教程并不详尽,我们不会运行任何统计测试。我们将简单地拟合一条线并可视化输出。

您可以从 GitHub 上的视频说明中提供的链接下载笔记本并继续操作。让我们首先设置环境并导入必要的库。我们将使用 NumPy、pandas、Yahoo Finance API 来获取实时数据,使用 matplotlib 进行可视化,并使用 seaborn 将主题应用于我们的绘图。

接下来,我们需要检索数据。我们将获得大约一年前谷歌和标准普尔 500 ETF 的数据。为此,我们将使用 pandas 数据读取器和雅虎财经 API。一旦我们有了数据,我们就可以快速查看它。由于我们只对分析中的“收盘”价格感兴趣,因此我们将相应地调整数据。

为了进行回归,我们将计算 Google 和 S&P 500 ETF 的瞬时回报率。删除所有无效值后,我们准备计算两个变量之间的相关性。我们发现它们密切相关,但在此分析中我们不会尝试确定因果关系。相反,我们将把标准普尔 500 指数视为自变量。

为了使可视化更容易,我们将对较小的数据点子集进行采样。在本例中,我们随机抽取 60 个回报并观察相关性,该相关性与整个数据集保持相似。然后,我们通过绘制散点图来可视化数据,其中 X 轴为 S&P 500,Y 轴为 Google。

继续回归,我们将使用 NumPy 的 polyfit 函数拟合线性模型。我们传递样本数据,其中 S&P 500 作为自变量,Google 作为因变量,以及多项式的次数(1 表示简单线性回归)。这为我们提供了最佳拟合线的斜率和 y 截距,可以将其解释为 beta 值。

为了绘制趋势线,我们使用 NumPy 的 polyval 函数,传入回归和自变量。我们可以将这条趋势线叠加在散点图上。此外,回归可以用作预测未来价格的技术指标。在此示例中,我们将标准普尔 500 指数收盘价与时间进行回归。

获得回归系数后,我们可以计算未来时间点的预测值。我们根据时间绘制实际数据,添加趋势线,并通过在线性模型中添加和减去一个标准差来创建通道。该通道提供预测置信区间的直观表示。

最后,我们演示如何使用回归模型对特定时间点进行预测。通过使用回归系数创建一个poly1d对象,我们可以插入一个值(代表未来的时间点)并获得预测值。我们还简要提到 Seaborn 的 regplot,它提供了另一种用趋势线和置信区间可视化散点图的方法。

通过学习本教程,您可以开始使用 Python 中的线性回归并探索各种分析和预测技术。

现在我们已经介绍了 Python 中线性回归的基础知识,让我们探索一些其他技术和概念。

回归分析的一个重要方面是评估模型的拟合优度。换句话说,线性回归线能否很好地表示变量之间的关系?有多种统计测量可用于评估拟合度,例如 R 平方值,它表示因变量中可由自变量解释的方差比例。

为了计算 R 平方值,我们可以使用 Python 中的 statsmodels 库。我们将导入必要的模块并将线性回归模型拟合到我们的数据。然后,我们可以使用模型的 rsquared 属性提取 R 平方值。

让我们用一个例子来演示这一点。假设我们有一个包含两个变量 X 和 Y 的数据集,并且我们想要拟合一个线性回归模型来根据 X 预测 Y。我们将使用 statsmodels 库中的 sm.OLS(普通最小二乘法)函数来执行回归分析。

首先,我们导入所需的模块:

import statsmodels.api as sm
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
接下来,我们将数据加载到 pandas DataFrame 中并提取 X 和 Y 变量:

data = pd.read_csv( 'data.csv' )
X = data[ 'X' ]
Y = data[ 'Y' ]
然后,我们向自变量 X 添加一个常数项。这对于 statsmodels 库在回归模型中包含截距项是必要的:

X = sm.add_constant(X)
现在,我们可以拟合线性回归模型并计算 R 平方值:

model = sm.OLS(Y, X).fit()
r_squared = model.rsquared
最后,我们可以打印 R 平方值来评估拟合优度:

print( "R-squared:" , r_squared)
R 平方值的范围为 0 到 1,其中 1 表示完美拟合。一般来说,R 平方值越高表明模型与数据的拟合效果越好。

除了 R 平方值之外,检查残差图以检查是否存在可能表明违反线性回归假设的任何模式或趋势也很重要。残差是因变量的观测值和预测值之间的差异。一个好的线性回归模型应该具有随机且均匀分布在零附近的残差。

为了可视化残差,我们可以绘制预测值与残差的散点图。如果该图显示出某种模式或任何与随机性的系统偏差,则表明线性回归模型可能不适合该数据。

要创建残差图,我们可以使用 Python 中的 matplotlib 库:

predicted_values = model.predict(X)
residuals = Y - predicted_values

plt.scatter(predicted_values, residuals)
plt.axhline(y= 0 , color= 'r' , linestyle= '-' )
plt.xlabel( 'Predicted Values' )
plt.ylabel( 'Residuals' )
plt.title( 'Residual Plot' )
plt.show()
预测值与残差的散点图应显示云状图案,没有清晰的结构或趋势。如果我们观察到任何明显的模式,例如弯曲形状或增加/减少的价差,则表明线性回归假设可能不成立。

总之,线性回归是一种强大且广泛使用的用于对变量之间关系进行建模的技术。通过对数据拟合回归线,我们可以根据自变量进行预测并深入了解因变量。使用 R 平方值等度量来评估拟合优度并检查残差图以评估回归模型的有效性非常重要。

Linear Regression Model Techniques with Python, NumPy, pandas and Seaborn
Linear Regression Model Techniques with Python, NumPy, pandas and Seaborn
  • 2021.07.05
  • www.youtube.com
#Python #Regression #NumPyhttps://alphabench.com/data/python-linear-regression.html✅ Please SUBSCRIBE:https://www.youtube.com/subscription_center?add...