[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