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
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 at 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 at 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.
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 at 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 at 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.
Duncan,
Thanks for the response. I tired the following:
> series <- getSymbols("AVB", src = "yahoo",
from = start, to = end)
> series[0]
character(0)
> nrow( series )
NULL
nrow( series ) returned NULL. I do not understand why. I am thinking
that there should be an R command to
tell me about the structure of series. I tried: typeof( series ) and
got: "character". Is there a better command for
me to use other than typeof?
I also tried this command:
c1 <- as.numeric(series[, paste0(symbol, ".Close")])
where symbol held the value "AVB" and I got:
Error in series[, paste0(symbol, ".Close")] :
incorrect number of dimensions
Please help.
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 at 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 at 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.