问题描述
我正在尝试使用 Alpha Vantage API 计算投资资本回报率。 谁能帮我验证下面的代码?
其他来源
我不确定我得到了正确的结果,因为我什至找不到 2 个股票分析网站来同意这些值。
来源 | 2016 | 2017 | 2018 | 2019 | 2020 |
---|---|---|---|---|---|
Morning star: DAVA | 35.34 | 27.77 | 23.38 | 18.70 | 8.77 |
MSN: DAVA | 9.90 | ||||
GuruFocus: DAVA | 28.57 | 26.01 | 20.76 | 23.07 | 11.86 |
Rule 1 investing: DAVA | 56.0 | 34.5 | 27.3 | 14.4 | 9.1 |
以下算法结果(与其他算法有点远) | 53.65 | 36.70 | 28.16 | 15.80 | 7.84 |
公式
ROIC = 税后净营业利润 /(总权益 + 总有息债务)
Alpha Vantage 响应属性
获取balance sheet (from alpha vantage)。我从这里得到了“totalShareholderEquity”和“currentDebt”。
获取income statement。我计算了 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',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 获得的价值完美匹配。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)