皮下脂肪瘤治疗

首页 » 常识 » 预防 » 使用Streamlit构建您自己的股票投
TUhjnbcbe - 2025/6/22 9:10:00

在应用程序中输入股票代码并让它完成工作,还可以在线部署网络应用程序

在之前的文章中,我详细解释了如何轻松获取股票数据,对其进行分析并使用PyPortfolioOpt库优化投资组合以获得最大夏普比率。今天,我们将扩展那篇文章并将所有内容放在一个网络应用程序中。我鼓励您阅读这篇文章,以了解有关一切工作原理的更多详细信息。

照片由

ChrisLiverani

Unsplash上拍摄

在本文中,我们将使用Streamlit从用户输入的股票代码构建一个投资组合优化仪表板Web应用程序。它还将在仪表板上显示其性能。然后,如果您愿意,我们将介绍如何将其部署到云中。最终产品部署在此处,部分屏幕截图如下所示。

股票优化器仪表板Web应用程序的部分屏幕截图。图片由作者提供。

所有必需的代码都在这个GitHub存储库中。在里面,您会找到一个JupyterNotebook(可选),其中详细介绍了我在文章中解释的投资组合优化步骤和股票分析。如果你愿意,可以随意玩弄它。StreamlitWeb应用程序的完整代码位于“portfolio_optimization_streamlit”文件夹中。让我们潜入水中!

1.进口

首先,您需要创建一个app.py文件并添加导入。在此之前,请为PyPortfolioOpt库进行pip安装:pipinstallPyPortfolioOpt

这些库用于处理股票数据或在Web应用程序上显示数据。例如,该pandas_datareader库允许我们提取股票价格数据。该PyPortfolioOpt库(作为pypfopt导入)使我们能够轻松优化股票投资组合并执行数据可视化。Plotly允许我们创建交互式图表以放入我们的应用程序。

接下来,我们在下面添加2个函数:

第一个函数允许我们获取股票价格的DataFrame并绘制它们的累积回报。

与其他随机生成的投资组合相比,第二个功能允许我们沿有效边界可视化投资组合的风险和回报。此代码取自PyPortfolioOpt文档。随意浏览我的GitHub存储库中的JupyterNotebook或文章以查看他们的输出。

2.用户输入

代码的下一部分设置用户输入字段。我们让用户输入要包含在投资组合中的股票代码列表,以及分析投资组合的开始和结束日期。

投资组合优化器应用程序的屏幕截图。图片由作者提供。

开始日期和结束日期的输入字段分为2列,默认开始日期为/01/01(随意更改),默认结束日期为当前日期。这些分别存储在变量start_date中end_date。我们还要求用户输入一串用逗号分隔的股票代码,然后将其存储tickers_string并拆分为tickers列表。

3.错误处理

代码的下一部分是try,except处理错误的循环。如果用户输入了错误的股票代码,或者输入的符号格式错误(没有用逗号等分隔),try循环内的代码将不会运行。我们想要的最后一件事是在页面上显示一大块python错误输出。

相反,我们会显示一个漂亮的小提示,让用户以正确的格式输入正确的股票代码。这是在except下面的循环中完成的,如果在循环的任何部分遇到错误,该try循环就会运行。

4.获取股票价格并生成图

应用程序的主要功能在try循环内。首先,我们获取股票价格并生成信息图来显示个股的表现。

代码的第2行使用该pandas_datareader库方便地从网络上获取相关股票价格。

第4行负责绘制每只股票的价格与时间的关系。

第6行绘制了每只股票的累积收益,这样可以更公平地比较股票随时间的变化。

然后第8行和第9行计算并绘制所有股票之间的相关矩阵。

请注意,我们实际上并没有像在JupyterNotebook中那样显示绘图。我们将绘图存储在变量中,这些变量稍后将传递给相关的Streamlit函数,以便在Web应用程序上显示。

5.优化投资组合

这就是PyPortfolioOpt库的魔力所在。下一段代码允许我们优化投资组合,获得每个成分股的权重,并在图表上可视化其风险和回报。如果您遇到以下任何想要详细探索的术语,请随时参考我之前的文章。否则,只要知道优化的投资组合是最大化预期回报风险比的投资组合就足够了。

代码的第2行计算每只股票的平均年回报率,而第3行计算股票的协方差矩阵。不要太担心数学问题,这两个变量只是稍后需要作为投资组合优化器函数的输入。

第6行使用我们之前从文档中获得的函数,与其他随机生成的投资组合相比,沿着有效前沿曲线绘制和可视化我们的投资组合的风险和回报。

第7行和第8行将上面的图保存为png图像,以便Web应用程序稍后显示。

第11行和第12行显示了使用api找到优化的投资组合是多么容易。PyPortfolioOpt只需创建一个EfficientFrontier对象并应用该max_sharpe方法即可找到具有最佳风险回报率的投资组合。我们还传入了无风险利率,它对应于我们在没有任何风险的情况下可以获得的回报率。我们通常使用美国国债收益率,目前约为2%。请查看PyPortfolioOpt文档中的其他优化方法。

第13到16行允许我们提取单个股票的权重并将它们存储在DataFrame中,以及投资组合绩效的度量,例如平均年回报率、波动率和夏普比率。

6.生成优化的投资组合

现在我们有了投资组合权重,我们将每个权重与其对应的股票价格相乘,并将优化的投资组合作为附加列存储在我们之前创建的股票价格数据框中。这为我们提供了投资组合在该时间段内的历史表现。这是在下面代码的第2到4行中完成的。

如果我们一开始投资美元,第7行绘制了优化投资组合随时间的回报表现。

7.在Streamlit上显示所有内容

在这里,我们将所有图表和信息显示到Web应用程序中。下面的代码几乎是不言自明的。然而,我们正相反,因为用户可能希望先查看最终结果(即优化的投资组合回报和权重),然后再深入了解其他细节(股票之间的相关性,以及每只股票的表现)。

测试Streamlit应用程序

仅使用app.py文件,您可以通过在终端(在您的相关文件夹中)运行此命令,在浏览器上本地启动Streamlit应用程序。

流式运行app.py

如果一切正常,您将看到以下输出。您现在可以在浏览器中输入本地URL来玩您的应用程序!

您还可以公开部署此应用程序供任何人使用。

将您的应用程序部署到HerokuappCloud

我们将在终端中使用一些命令将您的应用程序部署到Herokuapp云。在此之前,您需要将3个文件添加到与app.py文件相同的文件夹中。它们也在GitHub存储库中。

创建一个“setup.sh”文件

这是一个shell文件,您需要在文件中添加以下shell命令。它基本上告诉Herokuapp在运行应用程序时要配置和设置什么。

mkdir-p~/.streamlit/echo"\[server]\n\headless=true\n\port=$PORT\n\enableCORS=false\n\\n\"~/.streamlit/config.toml

创建一个“requirements.txt”文件

该文件告诉Herokuapp在运行我们的应用程序之前要安装哪些库。这些是我们之前使用的库导入,当然也需要streamlit!

streamlitpandaspandas-datareaderPyPortfolioOptplotlymatplotlibseaborngunicorn

创建一个“Procfile”文件

此文件没有文件扩展名。此文件指定Heroku在部署应用程序时运行的命令。我们指定这是一个以shell文件为配置的web应用,并调用Streamlit运行app.py。

web:shsetup.shstreamlitrunapp.py

接下来,您需要执行以下操作。

从此链接安装git。

在此处创建一个Herokuapp帐户。

从此链接安装Heroku命令行界面(CLI)。

现在,输入以下命令来初始化您的git存储库并进行第一次提交。

混帐初始化混帐添加。git

1
查看完整版本: 使用Streamlit构建您自己的股票投