[R] Trying to Generalize a Function in R
Joshua Ulrich
jo@h@m@u|r|ch @end|ng |rom gm@||@com
Fri Aug 10 01:15:58 CEST 2018
Peter was on the right track. getSymbols() allows you to specify that
you want the value returned as an object instead of load()ed by
setting auto.assign = FALSE.
I've also made other changes to your function:
- Use requireNamespace() so you don't alter the search() path
- Use TTR::ROC() to calculate returns, instead of a loop
- Use more meaningful names for the mean and standard deviation objects
- Use isTRUE() to ensure 'norm' is 'TRUE' and not '1' or '"true"' or
anything else that could be coerced to TRUE
getReturns <-
function(symbol,
start = "2015-01-01",
end = Sys.Date(),
norm = FALSE)
{
stopifnot(requireNamespace("quantmod"))
Data <- quantmod::getSymbols(symbol, src = "yahoo",
from = start, to = end, auto.assign = FALSE)
cat("length = ", NROW(Data), "\n")
ret <- TTR::ROC(quantmod::Cl(Data), type = "discrete")
mu <- mean(ret, na.rm = TRUE)
sigma <- sd(ret, na.rm = TRUE)
cat("stdDev = ", sigma, "\n")
if (isTRUE(norm)) {
ret <- (ret - mu)
ret <- ret / sigma
}
return(ret)
}
x <- getReturns("IBM")
length = 907
stdDev = 0.01245428
head(x)
IBM.Close
2015-01-02 NA
2015-01-05 -0.015734932
2015-01-06 -0.021565971
2015-01-07 -0.006535554
2015-01-08 0.021734892
2015-01-09 0.004355530
On Thu, Aug 9, 2018 at 4:24 PM, rsherry8 <rsherry8 using comcast.net> wrote:
> Peter,
>
> Thanks for the response. I tired the following command:
> AVB[["AVB.Close"]]
> and I got:
> Error in AVB[["AVB.Close"]] : subscript out of bounds
> Are you assuming that AVB is a data frame? I do not think AVB is a data
> frame. Is there a way
> for me to check?
> Thanks,
> Bob
>
>
> On 8/9/2018 3:46 PM, Peter Langfelder wrote:
>>
>> If I understand it correctly, the function getSymbols creates a
>> variable with the name being the stock symbol. Then use the function
>> get(symbol) to retrieve the value of the variable whose name is
>> contained in the character string `symbol'. Assign that to a variable
>> (e.g. AVB). You may also have to modify the names of the components
>> you retrieve from the list AVB. For that, you can use
>> AVB[["AVB.Close"]] instead of AVB$AVB.Close. You can them use
>> something like AVB[[paste0(symbol, ".Close"]] to generalize the
>> retrieval of list components.
>>
>> HTH,
>>
>> Peter
>> On Thu, Aug 9, 2018 at 12:40 PM rsherry8 <rsherry8 using comcast.net> wrote:
>>>
>>>
>>> I wrote the following function:
>>>
>>> # This method gets historical stock data for the stock Avalon Bay whose
>>> symbol is AVB.
>>> getReturns <- function(norm = FALSE)
>>> {
>>> library(quantmod)
>>>
>>> getSymbols("AVB", src = "yahoo", from = start, to = end)
>>> length = length( AVB$AVB.Close )
>>> close = as.numeric( AVB$AVB.Close )
>>> cat( "length = ", length(close ), "\n" )
>>> for( i in 1:length-1 )
>>> diff[i] = ((close[i+1] - close[i]) ) / close[i]
>>> u = mean(diff)
>>> stdDev = sd(diff)
>>> cat( "stdDev = ", stdDev, "\n" )
>>>
>>> if ( norm == TRUE ) {
>>> diff = (diff - u)
>>> diff = diff / stdDev
>>> }
>>> return (diff)
>>> }
>>>
>>> I would like to generalize it to work for any stock by passing in the
>>> stock symbol. So the header for the
>>> function would be:
>>>
>>> getReturns <- function(symbol, norm = FALSE)
>>>
>>> Now how do I update this line:
>>> length = length( AVB$AVB.Close )
>>> This statement will not work:
>>> length = length( symbol$AVB.Close )
>>> because the name that holds the closing price is a function of the stock
>>> symbol.
>>>
>>> Thanks,
>>> Bob
>>>
>>> ______________________________________________
>>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide
>>> http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
--
Joshua Ulrich | about.me/joshuaulrich
FOSS Trading | www.fosstrading.com
R/Finance 2018 | www.rinfinance.com
More information about the R-help
mailing list