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

Sergey Pisarenko drseergio at gmail.com
Thu Mar 1 18:35:48 CET 2012


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.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: tainted_2.R
Type: application/octet-stream
Size: 2989 bytes
Desc: not available
URL: <https://stat.ethz.ch/pipermail/r-sig-finance/attachments/20120301/fc757d2a/attachment.obj>


More information about the R-SIG-Finance mailing list