算法交易中的Python - 页 24

 

如何使用 Python、NumPy 和 Pandas 计算股票投资组合波动性


如何使用 Python、NumPy 和 Pandas 计算股票投资组合波动性

在本视频中,演示者演示了如何使用 Python 计算投资组合的波动性,并包含其背后的数学方程。重点是两种证券的投资组合,因为它很容易在手持计算器上计算。然而,演讲者提到,对于超过三种证券的投资组合,矩阵乘法用于计算波动性。演示者利用 NumPy 库和其他支持库来执行计算。

视频首先设置 Python 环境并导入必要的模块。然后演示者定义将在整个过程中使用的变量。

为了获取投资组合的实时数据,演示者提到了 API 的使用,并具体演示了如何使用日终历史数据。他们解释说,访问数据需要 API 密钥,并提供有关如何注册和获取密钥的说明。数据的起始日期设置为大约一年前。演示者设置投资组合,为每种证券分配相同的权重,并创建一个空列表来存储下载的数据。

使用 for 循环,演示者对投资组合中的每个品种进行 API 调用并检索数据。他们演示了如何通过从数据提供商的网站获取端点 URL 并进行必要的修改来构建 API 调用。数据以 JSON 字符串形式检索,并转换为 pandas DataFrame 以供进一步处理。收盘价从 DataFrame 中提取并添加到数据列表中。

完成 for 循环后,演示者将数据列表转换为 DataFrame,对其进行转置,用符号名称重命名列,并将索引更改为日期。然后,他们显示包含每种证券收盘价的结果数据帧。

演讲者解释说,为了计算波动性,需要计算瞬时收益率。他们使用 NumPy 的对数函数对收盘价创建一个新的 DataFrame,然后计算连续值之间的差异。生成的 DataFrame 代表每种证券的瞬时回报率。演示者删除了 DataFrame 的第一行来处理任何 NaN 值,并演示了每种证券的方差计算。

为了计算每种证券的波动性,演示者使用方差的平方根。它们将产生的波动率显示为百分比。

对于投资组合波动性,演讲者解释说,它可以计算为每种证券波动性的加权平均值。由于示例中的证券具有相同的权重,因此演示者只需要波动率的平均值。他们将其格式化为百分比。

接下来,演示者介绍了协方差矩阵的概念,并演示了如何使用返回的 DataFrame 来计算它。他们将每日协方差调整为年度协方差并显示生成的协方差矩阵。

最后,演示者使用矩阵乘法计算投资组合波动率。他们将权重乘以协方差矩阵并取结果的平方根。投资组合波动率显示为百分比,代表标准差。

总之,该视频分步演示了如何使用 Python 计算投资组合波动性。演讲者解释了必要的计算,介绍了 NumPy 等相关库,并强调了多元化在降低投资组合波动性方面的好处。

How to Calculate Stock Investment Portfolio Volatility with Python, NumPy & Pandas
How to Calculate Stock Investment Portfolio Volatility with Python, NumPy & Pandas
  • 2021.08.18
  • www.youtube.com
#python #numpy #pandaslearn how to use Python and NumPy to calculate investment portfolio volatilityhttps://alphabench.com/data/python-portfolio-volatil...
 

Steamlit for Python 入门 - 在几分钟内构建一个可正常运行的 Web 应用程序



Steamlit for Python 入门 - 在几分钟内构建一个可正常运行的 Web 应用程序

在本视频中,我将演示如何使用 Streamlit for Python 创建 Web 应用程序。 Streamlit 是一个基于 Web 的 UI,可以免费使用,让您无需任何前端开发经验即可构建和共享高质量的应用程序。我们将构建一个简单的应用程序,允许我们使用 API 下载股票价格数据并绘制图表。让我们开始吧!

首先,我将使用 PyCharm 作为我的 IDE,但您可以使用您选择的任何 IDE。如果您不熟悉 PyCharm,我在视频说明中提供了“PyCharm 入门”视频的链接。如果您想了解更多信息,请随时查看。

我已经在 PyCharm 中建立了一个名为“Streamlit Demo”的新项目,并添加了一个 Python 文件。由于我们是从一个全新的虚拟环境开始的,因此我们需要安装一些依赖项。我们需要 Pandas、Requests 库和 Streamlit。根据您的 PyCharm 配置,您可能已经安装了 Pandas 和 Requests,但您肯定需要安装 Streamlit。此外,我们将为我们的应用程序使用“日终历史数据”API,该 API 允许免费 API 调用,每天的限制约为 20 次。如果您需要更多,他们在其网站上提供订阅选项。

安装 Streamlit 后,让我们看一下它们的示例应用程序。我将打开终端并通过从命令行调用 Python 来运行 Streamlit,然后执行 Streamlit 命令。他们的示例应用程序位于名为“hello”的文件中。几秒钟后,应用程序将启动,您将看到一个带有标题、一些文本和超链接的网页。左侧有各种演示可供您探索。他们的演示的好处是他们提供了用于生成输出的代码。例如,有一个带有图表的演示,在其下方,您可以看到用于生成该图表的代码。 Streamlit 负责格式化并将内容放置在网页上,因此您只需专注于编写代码即可产生所需的输出。

一旦您对您的应用程序感到满意,您可以请求 Streamlit 的许可来实时发布它。他们仍然提供免费出版,但您需要联系他们进行设置。之后,您可以将文件推送到 GitHub 并在几秒钟内共享您的实时应用程序。

现在让我们继续创建我们自己的应用程序。在开始编写应用程序代码之前,我将演示 Streamlit 的一些功能。 Streamlit 提供了各种可供您使用的元素,例如按钮、颜色选择器、侧边栏、文本框和日期选择器。最常用的元素是“写入”功能,它允许您在网页上显示文本。您还可以在“write”函数中使用 markdown 语法来格式化文本。此外,如果您想显示自由格式的文本,您可以简单地使用文档字符串,Streamlit 会将其呈现为 markdown。

让我们通过编写一个基本应用程序来测试其中一些功能。我将定义一些依赖项,然后向您展示如何使用 Streamlit 元素。我们将从“st”函数开始,探索它的不同功能。例如,我们可以使用“st.button”来显示按钮,“st.color_picker”用于颜色选择器,以及“st.sidebar”来创建侧边栏。 “write”函数对于显示文本也非常有用,您可以在其中使用 markdown 语法。我将演示这些常见功能,但请记住 Streamlit 提供了更多选项。

为了运行该应用程序,我将停止当前的 Streamlit 服务器,然后通过执行具有名称的 Python 命令来重新启动它。

以下是一个简单的 Streamlit 应用程序示例,可让您下载股票价格数据并绘制图表:

import streamlit as st
import pandas as pd
import requests

# Set the title and page layout
st.title( "Stock Price Data" )
st.sidebar.header( "Settings" )

# Create input fields in the sidebar
symbol = st.sidebar.text_input( "Enter a stock symbol (e.g., AAPL)" , value= "AAPL" )
start_date = st.sidebar.text_input( "Enter the start date (YYYY-MM-DD)" , value= "2022-01-01" )
end_date = st.sidebar.text_input( "Enter the end date (YYYY-MM-DD)" , value= "2022-12-31" )

# Create a button to trigger the data retrieval
if st.sidebar.button( "Get Data" ):
     # Make an API request to retrieve the stock price data
    url = f " https://api.example.com/stock/ {symbol}/history?start_date={start_date}&end_date={end_date}"
    response = requests.get(url)
    
     # Check if the API request was successful
     if response.status_code == 200 :
        data = response.json()
        df = pd.DataFrame(data)
        
         # Display the downloaded data
        st.write(df)
        
         # Create a line chart of the stock prices
        st.line_chart(df[ "close" ])
     else :
        st.write( "Error retrieving data from the API" )

# Add some additional information to the sidebar
st.sidebar.info( "This is a simple app to download and graph stock price data." )
st.sidebar.info( "Enter the stock symbol and date range, then click 'Get Data' to retrieve the data." )

在此示例中,我们首先导入必要的库:Streamlit、Pandas 和 Requests。然后,我们使用 st.title() 和 st.sidebar.header() 函数设置标题和页面布局。

接下来,我们使用 st.sidebar.text_input() 函数在侧边栏中创建输入字段。用户可以在这些字段中输入股票代码、开始日期和结束日期。

然后我们使用 st.sidebar.button() 函数创建一个按钮。单击该按钮时,将触发数据检索过程。我们使用输入的符号、开始日期和结束日期构建 API 请求 URL。我们使用 requests.get() 函数向 API 发出 GET 请求。

如果 API 请求成功(状态代码 200),我们会从响应中检索数据并创建一个 Pandas DataFrame。我们使用 st.write() 函数显示下载的数据,然后使用 st.line_chart() 函数创建股票价格的折线图。

如果 API 请求失败,我们将使用 st.write() 函数显示错误消息。

最后,我们使用 st.sidebar.info() 函数向侧边栏添加一些附加信息。

要运行此应用程序,您可以将其保存在Python 文件(例如stock_app.py)中,并在终端中使用命令streamlit run stock_app.py 来执行它。

这只是一个基本示例,您可以根据您的需求进一步定制。 Streamlit 提供了更多用于创建交互式 Web 应用程序的功能,包括下拉菜单、复选框、滑块等。您可以浏览 Streamlit 文档 ( https://docs.streamlit.io/ ) 以获取更多信息和示例。

Getting Started with Steamlit for Python - Build a Functioning Web App in Minutes
Getting Started with Steamlit for Python - Build a Functioning Web App in Minutes
  • 2021.10.18
  • www.youtube.com
#python #streamlitHow to use streamlit - full-featured GUI for Pythonhttps://alphabench.com/data/python-streamlit-app.html*Please SUBSCRIBE:https://www.yo...
 

使用日终 (EOD) 历史数据 API 查找每日高点/低点时间



使用日终 (EOD) 历史数据 API 查找每日高点/低点时间

在本视频中,我们将探索日终历史数据 API,它使我们能够提取股票的每日最高和最低交易价格。该 API 是金融数据免费增值模型的一部分,每天提供 20 次免费 API 调用。该 API 的优点是可以访问来自 70 多个全球交易所的数据。您可以在视频说明中找到他们网站的链接和特价。

首先,我们需要设置我们的环境。我们将使用 datetime 模块来操作日期,使用帮助程序库来访问历史数据,使用 pandas 来操作和过滤数据,并使用请求来进行 API 调用。接下来,我们需要获取 API 密钥,为了简单起见,可以将其存储在文件中或直接存储在笔记本中。

我们还将定义数据的开始日期,通常可追溯到 10 天左右。根据数据类型的不同,API有不同的限制,按分钟的数据限制为120天,五分钟间隔的数据限制为600天。 API 使用 Unix 时间戳对数据进行索引,该时间戳表示自 1970 年 1 月 1 日以来经过的秒数。我们将所需的开始日期转换为 API 请求的 Unix 时间戳。

完成必要的设置后,我们可以使用 API 密钥创建“日终历史数据”对象的实例。这个对象允许我们检索我们需要的数据。帮助程序库提供了可以探索不同类型数据的各种端点。在此示例中,我们将重点关注从指定的开始日期开始,使用一分钟间隔检索 Tesla 的日内价格。

为了可视化数据,我们可以将 API 调用包装在 Pandas DataFrame 的构造函数中。这使得数据的处理和可视化变得更加容易。我们显示 DataFrame 的前几行来验证检索到的数据,包括 Unix 时间戳、日期和时间。

如果您不想使用帮助程序库,视频提供了另一种方法,使用请求库直接访问 API 端点并检索 JSON 数据。

接下来,我们执行一些数据清理。我们用数据中的日期和时间替换基于整数的索引。我们为时间和日期添加单独的列,并删除不必要的列,例如 GMT 偏移量和原始日期时间。生成的 DataFrame 显示了修改后的结构以及添加的列。

为了关注正常交易时间,我们创建原始数据的副本。由于索引是日期时间对象,因此我们可以使用 Between_time 方法来过滤所需的时间。正如视频中提到的,该数据的时区是 GMT-5,因此我们相应地调整时间。我们还将时间转换为东部时间 (ET) 以便于解释。

为了仅过滤日期时间列中的时间,我们执行一些额外的步骤。由于我们已经执行了计算,因此在应用日期时间方法提取时间之前,我们需要再次格式化数据。生成的 DataFrame 显示纽约市调整后的时间。

最后,我们解决最初的问题:交易日中何时出现高点和低点。我们首先使用 groupby 函数以及 min 和 max 方法检索每天的总体最高价和最低价。为了确定这些高点和低点的具体时间,我们分别找到 DataFrame 中最小值和最大值的索引。这提供了对这些价格点的时间安排的洞察,使我们能够观察任何模式或趋势。

总的来说,该视频提供了使用日终历史数据 API、检索股票价格数据以及分析高交易价格和低交易价格的时间的分步指南。

Use End of Day (EOD) Historical Data API to Find Time of Daily High/Low
Use End of Day (EOD) Historical Data API to Find Time of Daily High/Low
  • 2021.11.22
  • www.youtube.com
@MattMacarty #python #pandas #EODHistoricalDataUse a financial services API to find the time a stock trades at it lowest or highest each dayUse a financi...
 

如何使用 Python 和 QuantStats 回测交易算法和投资组合指标



如何使用 Python 和 QuantStats 回测交易算法和投资组合指标

今天,我将带您全面了解定量统计,这是一个作为投资组合分析工具构建的广泛的金融指标库。借助定量统计,您只需使用简单的一行语句即可轻松生成详细的报告。该工具可让您有效衡量投资组合表现并回测交易算法。

定量统计依赖于您可能已经熟悉和使用的著名数据科学库。对于此演示,我正在 PyCharm 中工作并启动了一个新项目。如果您按照步骤操作,请确保安装了必要的依赖项。我使用的是稍旧版本的 Pandas,因为定量统计数据在大约六个月内没有更新,并且最新的 Pandas 版本可能存在一些兼容性问题。

为了确保您拥有所需的依赖项,您可以将它们添加到requirements.txt 文件中并使用Pip 安装它们。此外,定量统计由三个模块组成:统计、绘图和报告。由于功能广泛,我无法在这个视频中涵盖所有内容。不过,我将为您提供概述并指导您如何开始。然后,您可以根据您的具体需求和兴趣进一步探索。

在我们深入了解细节之前,让我们花点时间听听赞助商的意见。如果您有兴趣学习如何使用 Python 创建交易算法,请让 Looming Wealth 帮助您完成他们的算法交易课程。在本课程中,您将学习创建代表您自动交易的机器人、实施和利用技术和财务指标,以及使用机器学习来开发独特的交易算法。您可以按照自己的节奏学习或参加实时课程以获得协作学习体验。点击下面的链接了解有关 Looming Wealth 的更多信息,并在其任何交易课程上获得 15% 的折扣。

现在,让我们回到定量统计。在新的空白文件中,首先导入 Quant stats 库。接下来,设置要分析的股票代码。在本例中,我将使用 S&P 500 ETF (SPY)。我们将使用定量统计来检查其过去三年的表现。

要下载回报数据,我们将使用 Quant stats utils,它依赖于雅虎财经数据。您可以使用您喜欢的任何数据源;这里没有魔法。让我们打印出来看看我们得到了什么。输出将是一个 Pandas 系列,其每日收益跨越指定时间段。

一旦我们获得了回报数据,我们就可以使用定量统计来计算各种统计数据。有许多可用的功能,远远超出我们在本视频中所能涵盖的范围。您可以通过打印 available_stats 属性来获取可用统计信息的列表。让我们显示可用统计信息的列表理解,不包括私有函数。

我将注释掉一些列表理解以保持简洁。我们将继续打印过去三年中标准普尔 500 指数的一些常见统计数据。让我们使用 qs.stats.sharpe_ratio() 计算夏普比率。此外,我们将通过分别调用 qs.stats.best_day() 和 qs.stats.best_month() 来找到最佳日期和月份。如果需要,您可以修改这些调用以以不同的方式聚合数据。

或者,Quant stats 为 Pandas 提供了一个包装器,允许您直接在投资组合对象上进行方法调用。通过扩展 Pandas,您可以使用单行语句来访问各种统计数据。例如,您可以调用 Quant stats.extend_pandas(),然后使用投资组合对象检索统计数据,例如复合年度总回报和最大回撤。

除了统计之外,定量统计还提供构建投资组合的功能。

接下来,我将根据移动平均交叉策略计算信号。如果快速移动平均线高于慢速移动平均线,则为买入信号。否则,这是一个卖出信号。我会将这些信号添加到数据框中。

之后,我将根据信号计算位置。如果是买入信号,我会将仓位设置为 1(表示多头仓位),如果是卖出信号,我会将仓位设置为 -1(表示空头仓位)。所有其他情况将设置为 0(表示没有位置)。

现在我们有了头寸,我将计算策略回报。为此,我将头寸乘以资产的每日回报。这将为我们提供每日策略回报。

接下来,我将通过每日收益的累积乘积来计算该策略的累积收益。随着时间的推移,这将使我们的战略不断发展。

最后,我将使用 quantstats.reports.html 函数生成报告。该函数获取累积回报数据并生成包含各种绩效指标和可视化效果的 HTML 报告。我会将报告另存为 HTML 文件。

要自动查看报告,我将使用 Web 浏览器打开该文件。这就是代码。

现在,当您使用所选参数运行此代码时,它将生成移动平均交叉策略、计算性能指标并生成包含结果的 HTML 报告。您可以自定义策略参数,例如移动平均周期或时间窗口,以满足您的需求。

How to Backtest Trading Algorithms and Portfolio Metrics with Python and QuantStats
How to Backtest Trading Algorithms and Portfolio Metrics with Python and QuantStats
  • 2022.12.07
  • www.youtube.com
​@MattMacarty #python #trading #algotrading How to Backtest Trading Strategies and Algorithms, Generate Portfolio Metrics✅ Please SUBSCRIBE:https://w...