quantmod
quantmod copied to clipboard
How to add expense ratio to the list of fields we can source from yahoo
Description
For a fund or ETF, SPY for example: I would like to add the Expense Ratio (net) (under Summary) or Annual Report Expense Ratio (net) (under profile) to the list of fields that can be scraped. Using my best guess and looking at the html, I added
"Expense Ratio (net)", "Expense Ratio (net)", "annualReportExpenseRatio"
to the end of the variable .yahooQuoteFields
in the file getQuote.R
. After building the package and try it out, unfortunately I get the following error:
Error in `[.data.frame`(sq, , "regularMarketTime") :
undefined columns selected
Called from: `[.data.frame`(sq, , "regularMarketTime"
Is it possible to get some help on rules for .yahooQuoteFields
and is it possible to add new fields to extract new info?
Expected behavior
I expect to get the expense ratio for a fund, SPY for example.
Minimal, reproducible example
syms <- "SPY"
what_metrics <- yahooQF(c("Name", "Expense Ratio (net)"))
getQuote(syms, what=what_metrics)
Session Info
R version 4.0.5 (2021-03-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19041)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] quantmod_0.4.18.1 TTR_0.24.2 xts_0.12.1 zoo_1.8-9
loaded via a namespace (and not attached):
[1] compiler_4.0.5 tools_4.0.5 yaml_2.2.1 curl_4.3.1 grid_4.0.5 jsonlite_1.7.2 lattice_0.20-41 fortunes_1.5-4
I don't know how to do this. It doesn't look like it's returned by the quote API. You can hit the API in your browser: https://query1.finance.yahoo.com/v7/finance/quote?symbols=SPY&fields=annualReportExpenseRatio
Here's the result:
{
"quoteResponse": {
"error": null,
"result": [
{
"esgPopulated": false,
"exchange": "PCX",
"exchangeDataDelayedBy": 0,
"exchangeTimezoneName": "America/New_York",
"exchangeTimezoneShortName": "EDT",
"firstTradeDateMilliseconds": 728317800000,
"fullExchangeName": "NYSEArca",
"gmtOffSetMilliseconds": -14400000,
"language": "en-US",
"market": "us_market",
"marketState": "CLOSED",
"priceHint": 2,
"quoteSourceName": "Delayed Quote",
"quoteType": "ETF",
"region": "US",
"sourceInterval": 15,
"symbol": "SPY",
"tradeable": false,
"triggerable": true
}
]
}
}
Ah I see. Where can I see the endpoints of this API? I went on Rapid API and found that it is on get-profile
endpoint. But that is a different API to the one you use.