使用 Alpha Vantage API 计算 ROIC 代码帮助

问题描述

我正在尝试使用 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 = 税后净营业利润 /(总权益 + 总有息债务)

  1. 计算 nopAT(计算税率并乘以营业收入)
  2. 计算投资资本
  3. 计算投资回报率

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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...