Changes in 0.4.25 (2023-08-21)

  1. Fix for API changes. Thanks to Ethan B. Smith for the report and patch! Also add error message for users in GDPR countries, since we cannot automatically consent to GDPR and the request fails without consent. #392 #393 #395

  2. Fix when the user only requested metrics that do not have have a value for ‘regularMarketTime’. Set the value to NA in these cases so the output remains the same regardless of whether the endpoint returns a ‘regularMarketTime’ or not. Thanks to @mehdiMBH for the report! #255

  3. Add fields to that are returned when no fields are explicitly requested. Thanks to @Courvoisier13 for the report! #335

  4. Add intraday endpoint to Thanks to @kapsner for the report and patch! Also allow suppressing the warning if more than 7 days of data are requested (@eddelbuettel). #351 #381 #399

  5. Add warning if getSymbols() is called with tickers that are reserved words because accessing them requires back-quotes (e.g. NA). #401

  6. Fix allReturns() when ‘subset’ is specified. Thanks to @Panagis1980 for the report! #402

Changes in 0.4.24 (2023-07-17)

  1. Fix getSymbols.oanda() URL. Thanks to @macray76 for the report. #387

Changes in 0.4.23 (2023-06-14)

  1. Fix error. Thanks to Ethan B. Smith for the report and patch! #382 #383

  2. Add name argument to add_TA(). Thanks to @SamoPP for the suggestion! #377 #205

Changes in 0.4.22 (2023-04-05)

  1. Move jsonlite from Suggests to Imports so it doesn’t cause a problem when a package that doesn’t also Suggest jsonlite uses getSymbols(). Thanks to Kurt Hornik for the report and fix! #380

Changes in 0.4.21 (2023-03-29)

  1. Fix S3 method issues. R-devel (83995-ish) added a check for possible S3 method issues. Register methods it found that were not registered: str.replot(), seriesHi.timeSeries(), and seriesLo.timeSeries().

    It was also confused by range.bars() and unique.formula.names(). Remove unique.formula.names() because it wasn’t exported or used internally. Rename range.bars() to rangeBars(), which isn’t exported.

    Thanks to Kurt Hornik for the report! #375

  2. Remove “^” prefix from getSymbols() return value. When the ‘Symbols’ argument has a “^” prefix and auto.assign = TRUE:

    The example below will create an object named IXIC but the value of sym will be “^IXIC”.

     sym <- getSymbols("^IXIC")

    That means x <- get(sym) will not work because an object named ^IXIC doesn’t exist. #371

  3. Add ‘from’ and ‘to’ arguments to getSymbols.FRED(). Users expect to be able to set the ‘from’ and ‘to’ arguments for FRED data like they can for Yahoo data. Those values were ignored and the entire series was always returned. #368

  4. Change interval to 1d for getDividends() and getSplits(). The “3mo” setting caused some dividends to be missing for companies that issued monthly dividends. Note that the response to this request also includes all the OHLCV data. But it’s small (less than 1MB for 60+ years of daily data). #372

  5. Handle errors in getSplits() and getDividends(). getDividends() didn’t handle cases where the download failed, or when dividends needed to be split-adjusted but there were no splits. It also tried to set colnames on the empty xts object that’s returned when there are no dividends. getSplits() had the same colnames issue. Check for no splits by testing for NULL because that’s more explicit. Thanks to Chris Cheung for the report! #366

  6. Export HL(), is.HL(), and has.HL() functions and add documentation. These were added in 0.4.18 but not exported or included in the documentation.

  7. Use Yahoo Finance v8 JSON endpoint and remove the v7 CSV endpoint. There seems to be a rate limit for the number of tickers you can request via the CSV endpoint. The yfinance python library uses the JSON endpoint and doesn’t seem to have rate limit issues. #360 #362 #364

Changes in 0.4.20 (2022-04-29)

  1. Remove check for Yahoo Finance cookies because the site no longer responds with a cookie, and that caused the connection attempt to fail. This affected getSymbols(), getDividends(), and getSplits(). Thanks to several users for reporting, and especially to @pverspeelt and @alihru for investigating potential fixes! #358

  2. Update getSymbols.yahooj() for changes to the web page. #312

  3. Add HL() and supporting functions. These are analogues to HLC(), OHLC(), etc. Thanks for Karl Gauvin for the nudge to implement them.

  4. Add adjusted close to getSymbols.tiingo() output. Thanks to Ethan Smith for the suggestion and patch! #289 #345

  5. Use a Date index for getSymbols.tiingo() daily data. Thanks to Ethan Smith for the report! #350

  6. Remove unneeded arguments to the getSymbols.tiingo() implementation. Thanks to Ethan Smith for the suggestion and patch! #343 #344

  7. Load dividends and splits data into the correct environment when the user provides a value for the env argument. The previous behavior always loaded the data into the environment the function was called from. Thanks to Stewart Wright for the report and patch! #33

  8. Make getOptionChain() return all the fields that Yahoo Finance provides. Thanks to Adam Childers (@rhizomatican) for the patch! #318 #336

  9. Add orats as a source for getOptionChain(). Thanks to Steve Bronder (@SteveBronder) for the suggestion and implementation! #325

  10. Improve the error message when getSymbols() cannot import data for a symbol because the symbol is not valid or does not have historical data. Thanks to Peter Carl for the report. #333

  11. Fix the getMetals() example in the documentation. The example section previously had an example of getFX(). Thanks to Gerhard Nachtmann
  1. for the report and patch! #330
  1. Fix getQuote() so it returns data when the ticker symbol contains an “&”. Thanks to @pankaj3009 for the report! #324

  2. Fix addMACD() when col is specified. Thanks to @nvalueanalytics for the report! #321

Changes in 0.4.18 (2020-11-29)

  1. Fix issues handling https:// in getSymbols.yahooj(). Thanks to @lobo1981 and @tchevri for the reports and @ethanbsmith for the suggestion to move from XML to xml2. #310 #312

  2. Fix, getDividends(), and getSplits() so they all handle download errors and retry again. Thanks for @helgasoft for the report on and @msfsalla for the report on getDividends() and getSplits(). #307 #314

  3. Add implied volatility and last trade date to getOptionChain() output. Thanks to @hd2581 and @romanlelek for the reports. And thanks to @rjvelasquezm for noticing the error when lastTradeDate is NULL. #224 #304

  4. Fix getOptionChain() to throw a warning and return NULL for every expiry that doesn’t have data. #299

  5. Add “Defaults” handling to getQuote() and Thanks to @ethanbsmith for the report. #291

  6. Add Bid and Ask fields to the output from getQuote(). Thanks to @jrburl for the report and PR. #302

  7. Fix “Defaults” to handle unexported function (e.g. getQuote.av(). Thanks to @helgasoft for the report. #316

  8. importDefaults() doesn’t call get() on vector with length > 1. Thanks to Kurt Hornik for the report. #319

Changes in 0.4.17 (2020-03-31)

  1. chartTheme() now works when quantmod is not attached. Thanks to Kurt Hornik for the report.

Changes in 0.4-16 (2020-03-08)

  1. Remove disk I/O from getSymbols() and getQuote(). This avoids any disk contention, and makes the implementation pattern more consistent with other functions that import data. Thanks to Ethan Smith suggestion and PR. #280 #281

  2. Make getQuote() robust to symbols without data, so it does not error if one or more symbols are not found. Also return quotes in the same order as the ‘Symbols’ argument. Thanks to Ethan Smith feature request and PR. #279 #282 #288

  3. Handle semicolon-delimited symbol string handling to main getQuote() function. This makes getQuote() consistent with getSymbols(). Thanks to Ethan Smith suggestion and PR. #284 #285

  4. Fix ex-dividend and pay date mapping. getQuote() returned the dividend pay date labeled as the ex-dividend date. Thanks to @matiasandina for the report. #287

  5. Fix Yahoo Finance split ratio. The delimiter changed from “/” to “:”. For example, a 2-for-1 split was 1/2 but is now “2:1”. Thanks to @helgasoft for the report. #292

  6. Error messages from getQuote.alphavantage() and getQuote.tiingo() no longer contain the API key when symbols can’t be found. #286

  7. Fix getQuote.alphavantage() by replacing the defunct batch quote request with a loop over the single quote request. Thanks to @helgasoft for the report and patch. #296

  8. Update getOptionChain() to handle empty volume or open interest Thank to @jrburl for the report and PR. #299 #300

Changes in 0.4-15 (2019-06-15)

  1. Add an environment variable to control whether to run tests that import from Yahoo Finance. getDividends() tests were failing because Yahoo Finance wasn’t returning all dividend history for “CF”.
  2. Write one message the first time is called. This method was added years before existed, but it should be deprecated in favor of the zoo version. The package that owns the class should also own the methods.

Changes in 0.4-14 (2019-03-23)


  1. Fix getSymbols.tiingo() so the Open and Close columns aren’t swapped. Thanks to Steve Bronder for the report and PR. #233 #234
  2. Fix for quotes in multiple timezones. Thanks to Philippe Verspeelt for the report and PR. #246 #248
  3. Update getDividends() because Yahoo Finance now provides raw dividends instead of split-adjusted dividends. Thanks to Douglas Barnard for the report. #253
  4. Fix futures.expiry(). Thanks to @pjheink for the report. #257
  5. Fix getSymbols.tiingo() to return correct columns for ticker “LOW”. Thanks to @srtg4we5gsetrgwhreyt the report. #259
  6. Fix getSymbols.yahooj() to avoid infinite loop when the requested symbol doesn’t have data. Thanks to Wouter Thielen for the review. #63
  7. Update getSplits() because Yahoo Finance now provides the actual split adjustment ratio, instead of the inverse (e.g. now 1/2 instead of 2/1). #265


  1. Extend getQuote() to support Tiingo. Thanks to Ethan Smith for the feature request and PR. #247 #250
  2. Extend getSymbols() to catch errors for individual ticker symbols and continue processing any remaining ticker symbols, instead of throwing an error. More useful error messages are also provided. Thanks to @helgasoft for testing and feedback. #135

Changes in 0.4-13 (2018-04-13)


  1. Fix when a field has no data for all requested tickers. #208
  2. Expose weekly and monthly adjusted prices from Alpha Vantage’s API. #212
  3. Fix saveChart() (it actually saves a chart now!). #154
  4. Update Oanda URL, which fixes getSymbols.oanda() and getFX(). #225


  1. Add getQuote.alphavantage(), thanks to Ethan Smith for the PR. #213 #223
  2. Add getSymbols.tiingo() to import data from Tiingo. Thanks to Steve Bronder for the PR. #220


  1. Google Finance no longer provides data for historical prices or financial statements, so all Google data sources are defunct. #221

Changes in 0.4-12 (2017-12-02)


  1. chartSeries() now honors show.grid argument. Thanks to Ethan Smith. #200
  2. uses the new JSON API. #197
  3. is more careful about converting UNIX timestamps to character when creating the query URL. #202

Changes in 0.4-11 (2017-10-06)




  1. getSymbols.av() can download data from Alpha Vantage. Thanks to Paul Teetor for the contribution. #176

Changes in 0.4-10 (2017-06-20)


  2. getSymbols() no longer warns if called with namespace (i.e. quantmod::getSymbols()). #134
  3. now ignores argument if called with #168

Changes in 0.4-9 (2017-05-29)


  1. uses the new API. #157
  2. returns NULL when there are no calls/puts instead of list(). #155


  1. gains a periodicity argument, for use by tseries::get.hist.quote(). #162

Changes in 0.4-8 (2017-04-19)


  2. Fix getSymbols.oanda().
  3. Fix add_TA() when called from a function.
  4. Remove ‘its’ package references (it was archived).
  5. Update Yahoo Finance URLs to HTTPS to avoid redirect.
  6. Update FRED URL to avoid redirect.


  1. Add split.adjust argument to getDividends().
  2. Add readme, contributing, and issue template files for GitHub.

Changes in 0.4-7 (2016-10-24)

  1. Let jsonlite::fromJSON() manage connections in
  2. Update omegahat URL at CRAN’s request.

Changes in 0.4-6 (2016-08-28)

  1. Remove unused unsetSymbolLookup().
  2. Add documentation for getPrice().
  3. Fix subsetting in addTRIX().
  4. Fix getSymbols.oanda() to use https.
  5. Fix to download JSON instead of scrape HTML.

Changes in 0.4-5 (2015-07-24)

  1. Ensure add*MA() functions use Close column by default.
  2. Correct Delt() docs (type argument default value was wrong).
  3. Ensure tempfiles are always removed.
  4. In getSymbols.csv():
  5. Fix dbConnect() call (changed in RMySQL_0.10) in getSymbols.MySQL().
  6. Automatically detect OHLC vs OHLCVA in getSymbols.yahooj().
  7. Handle long vectors in setDefaults().
  8. Fix `getSymbols.FRED() for https.
  9. Fix ` for spaces in table headers.
  10. Add importFrom for all non-base packages.

Changes in 0.4-4 (2015-03-08)

  1. Added getSymbols.yahooj() to pull data from Yahoo Finance Japan (Thanks to Wouter Thielen for the contribution. #14).
  2. Fixed to handle the new options page layout. #27
  3. Fixed getSymbols.oanda() to handle the new URL structure and CSV format. #36

Changes in 0.4-3 (2014-12-15)

  1. Change maintainer from Jeffrey Ryan to Joshua Ulrich

  2. Copy required functionality from the (archived) Defaults package into quantmod and remove dependency on Defaults.

  3. Incorporate several bug fixes and patches.

Changes in 0.4-0

Changes in 0.3-7

Changes in 0.3-6



Changes in 0.3-2




Changes in 0.3-1



Changes in 0.3-0