python - 使用 Alpha Vantage API 计算投资回报率
问题描述
我正在尝试使用Alpha Vantage API计算投资资本回报率。谁能帮我验证下面的代码?
其他来源
我不确定我得到了正确的结果,因为我什至找不到 2 个股票分析网站来就这些值达成一致。
资源 | 2016 年 | 2017 | 2018 | 2019 | 2020 |
---|---|---|---|---|---|
晨星:DAVA | 35.34 | 27.77 | 23.38 | 18.70 | 8.77 |
MSN:达瓦 | 9.90 | ||||
大师焦点:DAVA | 28.57 | 26.01 | 20.76 | 23.07 | 11.86 |
规则 1 投资:DAVA | 56.0 | 34.5 | 27.3 | 14.4 | 9.1 |
下面的算法结果(与其他结果有点远) | 53.65 | 36.70 | 28.16 | 15.80 | 7.84 |
公式
ROIC = 税后净营业利润 /(总股本 + 总有息债务)
- 计算 NOPAT(计算税率并乘以营业收入)
- 计算投资资本
- 计算投资回报率
Alpha Vantage 响应属性
获取资产负债表(来自 alpha vantage)。我从这里得到了“totalShareholderEquity”和“currentDebt”。
获取损益表。我计算了 NOPAT = "operatingIncome" * (1 - "incomeTaxExpense" / "incomeBeforeTax")
代码
import requests
import json
import pandas as pd
ALPHA_KEY = '________'
symbol = 'DAVA'
def request_function(func: str, symbol: str, key: str):
url = f'https://www.alphavantage.co/query?function={func.upper()}&symbol={symbol.upper()}&apikey={key.upper()}'
response = requests.request("GET", url)
return response.json()
data_income_statement = request_function('income_statement', symbol, ALPHA_KEY)
data_balance_sheet = request_function('balance_sheet', symbol, ALPHA_KEY)
## Income statement
# tax rate = "incomeTaxExpense" / "incomeBeforeTax"
# NOPAT = "operatingIncome" * (1 - tax rate)
# NOPAT = "operatingIncome" * (1 - "incomeTaxExpense" / "incomeBeforeTax")
inc_stmt = pd.json_normalize(data_income_statement['annualReports'])
inc_stmt['operatingIncome'] = pd.to_numeric(inc_stmt['operatingIncome'], downcast="float")
inc_stmt['incomeTaxExpense'] = pd.to_numeric(inc_stmt['incomeTaxExpense'], downcast="float")
inc_stmt['incomeBeforeTax'] = pd.to_numeric(inc_stmt['incomeBeforeTax'], downcast="float")
inc_stmt['nopat'] = inc_stmt['operatingIncome'] * (1 - inc_stmt['incomeTaxExpense'] / inc_stmt['incomeBeforeTax'])
inc_stmt['nopat'] = pd.to_numeric(inc_stmt['nopat'])
## Balance sheet
# "interestAndDebtExpense" ? "currentDebt" ?
# "totalAssets" - "totalLiabilities"
bs = pd.json_normalize(data_balance_sheet['annualReports'])
# bs['equity'] = pd.to_numeric(bs['totalAssets']) - pd.to_numeric(bs['totalLiabilities'])
bs['equity'] = pd.to_numeric(bs['totalShareholderEquity'])
bs.replace('None', '0', inplace=True)
bs['currentDebt'] = pd.to_numeric(bs['currentDebt'])
df = pd.merge(bs, inc_stmt, on='fiscalDateEnding')
df['returnOnCapitalInvested'] = df['nopat'] / (df['equity'] - df['currentDebt'])
帮助
那么我的计算与现实相差多远?我尝试了在网上找到的不同公式,但由于我缺乏财务经验,我无法将它们与我从 Alpha Vantage 获得的值完美匹配。
解决方案
推荐阅读
- python - 从另一个字符串中删除所有出现的字符串时的 TimeLimitError
- python - 使用 Python Ray 库运行程序时 Redis 无法启动 - RuntimeError: Couldn't start Redis
- c - Doom 如何从现有的正弦查找表中确定其余弦查找表?
- python - 带有按钮的 Tkinter 退出循环
- google-apps-script - 允许脚本编辑锁定的单元格
- java - 从服务中第二次打开意图不起作用
- asp.net-core - 使用环境变量为 VS Code MVC Core 设置端口不适用于端口号
- node.js - 带有 Promise 和回调的猫鼬
- c# - Razor Pages - 重新加载 ajax 成功的部分视图
- android - 为什么我的操作栏不显示在片段中?