Nothing
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Library General Public License for more details.
#
# You should have received a copy of the GNU Library General
# Public License along with this library; if not, write to the
# Free Foundation, Inc., 59 Temple Place, Suite 330, Boston,
# MA 02111-1307 USA
################################################################################
# FUNCTION: DESCRIPTION:
# yahooImport Downloads market data from chart.yahoo.com
# yahooSeries Easy to use download from chart.yahoo.com
################################################################################
yahooImport <-
function (query, file = "tempfile", source = NULL,
frequency = c("daily", "weekly", "monthly"),
from = NULL, to = Sys.timeDate(), nDaysBack = 366,
save = FALSE, sep = ";", try = TRUE)
{
# A function implemented by Diethelm Wuertz
# Description:
# Downloads market data from Yahoo's web site
# Notes:
# Requires: fields() cuts a string in fields
# Yahoo Token Description:
# s Selected Ticker-Symbol
# a First Quote starts with Month (mm): 0-11, Jan-Dec
# b First Quote starts with Day (dd)
# c First Quote starts with Year: as CCYY
# d Last Quote ends with Month (mm): 0-11, Jan-Dec
# e Last Quote ends with Day (dd)
# f Last Quote ends with Year (yy): as CCYY
# r Aggregation Level
# z Selected Ticker-Symbol [optional]
# IBM SHARES, test 19/20 century change 01-12-1999 -- 31-01-2000:
# "s=IBM&a=11&b=1&c=1999&d=0&e=31&f=2000&g=d&x=.csv"
# Examples:
# yahooImport("IBM", nDaysBack = 10)
# yahooImport(symbols = c("^DJI", "IBM"))
# yahooImport(symbols = c("^DJI", "IBM"), frequency = "weekly")
# yahooImport(frequency = "monthly", nDaysBack = 366)
# FUNCTION:
# Check:
stopifnot(length(query) == 1)
# Match Arguments:
freq <- match.arg(frequency)
aggregation <- substr(freq, 1, 1)
# Automatic Selection of From / To:
if (is.null(to)) to <- Sys.timeDate()
to <- trunc(as.timeDate(to),"days")
if (is.null(from)) {
if (is.null(nDaysBack)) {
stop("The \"from\" and \"nDaysBack\" arguments cannot be NULL at the same time.")
} else {
from <- to - nDaysBack*24*3600
}
}
from <- trunc(as.timeDate(from),"days")
from <- as.character(from)
to <- as.character(to)
# Extract Atoms - From:
yearFrom <- substring(from, 1, 4)
monthFrom <- as.character(as.integer(substring(from, 6, 7))-1)
dayFrom <- substring(from, 9, 10)
# Extract Atoms - To:
yearTo <- substring(to, 1, 4)
monthTo <- as.character(as.integer(substring(to, 6, 7))-1)
dayTo <- substring(to, 9, 10)
# Compose Query:
Query <- paste("s=", query, "&a=", monthFrom, "&b=", dayFrom,
"&c=", yearFrom, "&d=", monthTo, "&e=", dayTo, "&f=", yearTo,
"&g=", aggregation, "&q=q&y=0&z=", query, "&x=.csv", sep = "")
# Source:
if (is.null(source))
source <- "http://chart.yahoo.com/table.csv?"
# Download:
if (try) {
# First try if the Internet can be accessed:
z <- try(yahooImport(query, file, source, frequency, from, to,
nDaysBack, save, sep, try = FALSE))
if (inherits(z, "try-error") || inherits(z, "Error")) {
return("No Internet Access")
} else {
return(z)
}
} else {
# Download File:
url <- paste(source, Query, sep = "")
tmp <- tempfile()
download.file(url = url, destfile = tmp)
# Read data and revert:
mat <- read.table(tmp, header = TRUE, sep = ",")
X <- rev(as.timeSeries(mat))
colnames(X) <- paste(sub("\\^","",query), colnames(X), sep = ".")
}
# Save to file:
if (save) {
write.table(as.data.frame(X), file = file, sep = sep)
} else {
unlink(file)
}
# Result:
ans <- new("fWEBDATA",
call = match.call(),
param = c(
"Instrument" = query,
"Frequency " = freq),
data = X,
title = "Data Import from www.yahoo.com",
description = description() )
# Return Value:
ans
}
# ------------------------------------------------------------------------------
yahooSeries <-
function(symbols, from = NULL, to = Sys.timeDate(), nDaysBack = 366, ...)
{
# A function implemented by Diethelm Wuertz
# Description:
# Downloads easily time series data from Yahoo
# Arguments:
# symbols - a character vector of symbol names
# from - from date
# to - to date
# nDaysBack - number of n-days back
# ... - arguments passed to the *Import()
# Examples:
# yahooSeries("IBM", nDaysBack = 10)
# yahooSeries("IBM", frequency = "weekly")
# yahooSeries(c("^DJI", "IBM"))
# yahooSeries(c("^DJI", "IBM"), frequency = "monthly")
# FUNCTION:
# Download:
X <- yahooImport(query = symbols[1],
from = from, to = to, nDaysBack=nDaysBack, ...)@data
N <- length(symbols)
if (N > 1) {
for (i in 2:N) {
Y <- yahooImport(query = symbols[i],
from = from, to = to, nDaysBack=nDaysBack, ...)@data
X <- merge(X, Y)
}
}
# Return Value:
X
}
################################################################################
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.