首页 > 解决方案 > 使用 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 = 税后净营业利润 /(总股本 + 总有息债务)

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

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 获得的值完美匹配。

标签: pythonalpha-vantage

解决方案


推荐阅读