[R-SIG-Finance] Potential bug in quantstrat in how it handles "F" symbol

Sergey Pisarenko drseergio at gmail.com
Thu Mar 1 18:47:11 CET 2012


Hi,

Just a follow-up. When I step through applyStrategy with a debugger
and I get to the lines:

    for (symbol in symbols) {
        if (isTRUE(load.mktdata))
            mktdata <- get(symbol)


"get(symbol)" returns FALSE

"get(symbol, envir=.GlobalEnv)" returns market data for Ford.

/Sergey

On Thu, Mar 1, 2012 at 6:35 PM, Sergey Pisarenko <drseergio at gmail.com> wrote:
> Hi Brian and rex,
>
> Thank you for looking into this. This is strange because that's
> exactly what's happening. Here's how I load the data:
>
> watched   <- c('F')
>
> symbols <- vector()
> for (symbol in watched) {
>  ubars    <- tryCatch(getSymbols(symbol, src='MySQL',
> auto.assign=FALSE), error=function(e) NULL)
>  # skip if we don't have enough data
>  if (is.null(ubars) || nrow(ubars) < startDay) next
>  symbols  <- c(symbols, symbol)
>  bars     <- ubars[index(ubars) >= as.Date(from)]
>  assign(symbol, bars)
> }
>
> When I do:
>> F
>
> I get the data but "get" inside of applyStrategy still fails with an
> error. It fails with:
> Error in mktdata[, keep] : incorrect number of dimensions
>
> I attach a sample runnable script to this e-mail.
>
> --
> Kind Regards,
> Sergey Pisarenko.
>
> On Thu, Mar 1, 2012 at 3:04 PM, Brian G. Peterson <brian at braverock.com> wrote:
>> On Wed, 2012-02-29 at 23:53 -0800, rex wrote:
>>> Sergey Pisarenko <drseergio at gmail.com> [2012-02-29 22:29]:
>>> >
>>> >The issue here is that get('F') will return FALSE because F is defined
>>> >as FALSE in R. This will obviously cause a failure down the road where
>>> >market data is read and manipulated.
>>>
>>> Hello Sergey,
>>>
>>> Easy fix:
>>>
>>> > if (F == FALSE) print('F == FALSE')
>>> [1] "F == FALSE"
>>> > F <- 'F'
>>> > if (F == FALSE) print('F == FALSE')
>>> >
>>
>> According to the R FAQ[1]:
>> "In R, T and F are just variables being set to TRUE and FALSE,
>> respectively, but are not reserved words as in S and hence can be
>> overwritten by the user. (This helps e.g. when you have factors with
>> levels "T" or "F".) Hence, when writing code you should always use TRUE
>> and FALSE."
>>
>> I think you'll find that blotter, quantstrat, FinancialInstrument all
>> use TRUE and FALSE correctly.
>>
>> If you are trying to load data for Ford, you would already have locally
>> overwritten the F variable with your data for Ford.
>>
>>> require(quantmod, quietly=TRUE)
>>> getSymbols('F')
>> [1] "F"
>>> head(F)
>>           F.Open F.High F.Low F.Close F.Volume F.Adjusted
>> 2007-01-03   7.56   7.67  7.44    7.51 78652200       7.48
>> 2007-01-04   7.56   7.72  7.43    7.70 63454900       7.67
>> 2007-01-05   7.72   7.75  7.57    7.62 40562100       7.59
>> 2007-01-08   7.63   7.75  7.62    7.73 48938500       7.70
>> 2007-01-09   7.75   7.86  7.73    7.79 56732200       7.76
>> 2007-01-10   7.79   7.79  7.67    7.73 42397100       7.70
>>> head(get('F'))
>>           F.Open F.High F.Low F.Close F.Volume F.Adjusted
>> 2007-01-03   7.56   7.67  7.44    7.51 78652200       7.48
>> 2007-01-04   7.56   7.72  7.43    7.70 63454900       7.67
>> 2007-01-05   7.72   7.75  7.57    7.62 40562100       7.59
>> 2007-01-08   7.63   7.75  7.62    7.73 48938500       7.70
>> 2007-01-09   7.75   7.86  7.73    7.79 56732200       7.76
>> 2007-01-10   7.79   7.79  7.67    7.73 42397100       7.70
>>
>> so, get('F') will only return FALSE if you don't have any data loaded.
>>
>> That is a problem on your end, I think, and not a problem in the
>> package.
>>
>> Regards,
>>
>>   - Brian
>>
>> Ref:
>> [1]
>> http://sites.stat.psu.edu/~dhunter/R/doc/manual/R-FAQ.html#What-are-the-differences-between-R-and-S_003f
>> (see section 3.3.3)
>>
>> --
>> Brian G. Peterson
>> http://braverock.com/brian/
>> Ph: 773-459-4973
>> IM: bgpbraverock
>>
>> _______________________________________________
>> R-SIG-Finance at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
>> -- Subscriber-posting only. If you want to post, subscribe first.
>> -- Also note that this is not the r-help list where general R questions should go.



More information about the R-SIG-Finance mailing list