quantmod icon indicating copy to clipboard operation
quantmod copied to clipboard

How to add expense ratio to the list of fields we can source from yahoo

Open Courvoisier13 opened this issue 3 years ago • 2 comments

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 

Courvoisier13 avatar Jun 11 '21 22:06 Courvoisier13

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
            }
        ]
    }
}

joshuaulrich avatar Jun 12 '21 15:06 joshuaulrich

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.

Courvoisier13 avatar Jun 12 '21 23:06 Courvoisier13