打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用Python在6分钟内自动进行股票投资组合研究
userphoto

2023.05.23 湖北

关注

随着市场波动的加剧,密切注意您的投资非常重要。 闭眼,因为您可能想出售,但也因为要做好准备,以防成本平均并翻倍。

每个人都在尖叫:'买入逢低买进',但是何时会出现逢低买入,这将如何影响您的投资组合? 就个人而言,我一直持有股票,并一直在寻求尽可能回购被低估的股票。 筛选股票的最佳方法是跟踪新闻并跟踪历史表现。 这包括交易比率和同业比较,而不仅仅是股票价格跟踪。

对于整体选择股票或进行分析的方法,您既要在市场交易统计数据的基础上又要把损益表和资产负债表都放在一边。 从那里,您拥有所需的一切。 掌握一点Python和JSON知识,您就可以在10分钟内设置自己的自动库存跟踪器。 您将提取资产负债表和损益表项目以及其他关键信息,例如公司的首席执行官。 尽管仅要遍历几个数据点,但仍有许多其他数据点需要探索。

设定

我将向您介绍一个非常强大的免费API,用于个人投资和学习:

免费股票API和财务报表API-FMP API

继续学习,我将向您展示如何从中提取各种数据。 然后可以将此数据用于进一步分析,包括数据科学目的。 请继续关注底部,我将在此处发布最终代码。

首先,我们只需要两个库:

import requests

import pandas as pd

分享价格

接下来,我们将使用一个函数从Financial Modeling Prep中提取所有信息。

def getdata(stock): # Company Quote Group of Items company_quote = requests.get(f'https://financialmodelingprep.com/api/v3/quote/{stock}') c ompany_quote = company_quote.json() share_price = float('{0:.2f}'.format(company_quote[0]['price']))

在这种情况下,我们正在做的是从以下URL中提取股票价格:

免费股票API和财务报表API-FMP API

本文档包括财务报表API,免费股票API和历史报价API。 找到所有…

该网站分为不同的细分,我们使用了上面的Quote部分:

在报价部分中,我们可以找到交易品种,价格,dayLow,dayHigh和其他关键交易统计信息。

资产负债表项目

接下来,我们将拉动资产负债表项目。 在站点的'财务报表'部分中,它分为资产负债表,损益表和现金流量表。 确保将上面的代码保留在上述的getdata(stock)函数中,并保留缩进。

# Balance Sheet Group of Items BS = requests.get(f'https://financialmodelingprep.com/api/v3/financials/balance-sheet-statement/{stock}?period=quarter') BS = BS.json()

从这里开始,让我们将债务和现金数量拉动到十亿和小数点后两位。

> Exhibit of Balance Sheet JSON

#Total Debtdebt = float('{0:.2f}'.format(float(BS['financials'][0]['Total debt'])/10**9))#Total Cashcash = float('{0:.2f}'.format(float(BS['financials'][0]['Cash and short-term investments'])/10**9))

损益表数据

类似提取季度损益表数据的方法,我们将把URL简化为变量。

# Income Statement Group of Items IS = requests.get(f'https://financialmodelingprep.com/api/v3/financials/income-statement/{stock}?period=quarter') IS = IS.json()

现在,使用与资产负债表项目相同的方法,我们可以提取股票的最新季度收入。

# Most Recent Quarterly RevenueqRev = float('{0:.2f}'.format(float(IS['financials'][0]['Revenue'])/10**9))

定性公司数据

我将展示的最后一个示例是从'公司资料'部分提取定性数据。

同样的概念也适用,我们首先缩短URL,然后选择首席执行官。

# Company Profile Group of Items company_info = requests.get(f'https://financialmodelingprep.com/api/v3/company/profile/{stock}') company_info = company_info.json()# Chief Executive Officer ceo = company_info['profile']['ceo']

随着股价,总现金,总债务,季度收入和首席执行官项目的拉动,我们只需要返回数据即可。

return (share_price, cash, debt, qRev, ceo)

因此,到目前为止,代码如下所示:

自动化和规模

我们现在要做的最后一件事是填写我们的股票行情自动收录器,并将该功能应用于所有行情自动收录器。

tickers = ('AAPL', 'MSFT', 'GOOG', 'T', 'CSCO', 'INTC', 'ORCL', 'AMZN', 'FB', 'TSLA', 'NVDA') data = map(getdata, tickers)

通过将功能映射到代码,我们可以创建一个带有熊猫的DataFrame来存储所有信息,以便于数据操作。

df = pd.DataFrame(data, columns=['Total Cash', 'Total Debt', 'Q3 2019 Revenue', 'CEO'], index=tickers)print(df)

输出量

期待已久的输出如下:

> Expected Output of Above Code

尽管这很有用,但我一直都是Excel / CSV专家,因为我的大部分工作都涉及excel。 要输出到excel,请使用以下代码。

# Writing to Excelwriter = pd.ExcelWriter('example.xlsx')df.to_excel(writer, 'Statistics')writer.save()

> Expected Final Excel Output

对于其他数据点,只需调整要提取的内容,并确保它们来自正确的相应URL。

进一步的想法

在我的整个投资生涯中,我发现在金融中使用技术非常重要。 我们不再需要手动组合财务报表来查找最佳数据。 作为投资银行家,当我从事兼并与收购或债务/权益发行时,我仍然手动进行仔细检查,但是对于我的个人投资组合,我目前仅使用Python。

Python足够用于个人用途的原因是,许多投资者在分析业务时不会理解为专业用途融资的调整。 尽管调整可能相当重要,但是在研究大量公司时,您要做的最后一件事是花时间为多个公司进行大量调整。

在投资银行业务中,我们会调整一次性支出和其他订单项的数字。 例如,COVID-19对未来业务的经济影响问题。 为了正确查看业务,我们通常会排除COVID对其底线的影响。 由于这种情况很少发生,而且是'一次性的',因此我们认为这不是基础业务的良好代表。 因为这种影响可以看作是一次性影响,所以当我们最终考虑2020年的数字时,可以使用归一化技术来平滑过去5年的收入。

通过这种分析,无需深入了解细节,可以通过手动执行或调整代码来进行调整。

最好检查一下您提取的数字,以确保数据挖掘过程中没有错误。 这只是您可以进行此分析的冰山一角,它为分析打开了大门。

(本文翻译自Pendora的文章《Automate Your Stock Portfolio Research With Python in 6 Minutes》,参考:
https://medium.com/swlh/automating-your-stock-portfolio-research-with-python-for-beginners-912dc02bf1c2)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
python量化之路:获取历史某一时刻沪深上市公司股票代码及上市时间
我用Python爬了上市公司财务报表,跟巴菲特学习如何炒股
面面观 | 使用python dataTable 开发股票数据报表
财务报表的内容有哪些?资产负债表的数据从哪里来?
使用Python的pandas模块、mplfinance模块、matplotlib模块绘制K线图
Python3 JSON 数据解析 | 菜鸟教程
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服