[R-SIG-Finance] using quantstrat with custom data

Jon Golenbock jongolenbock at gmail.com
Mon Oct 24 21:23:12 CEST 2016


ah - i shortened the dataset for brevity, didn't think about the SMA (the
actual dataset is far larger). I also see that in the add.indicator call i
used n=SMA where it should have been n=nSMA.

Thanks so much for your quick reply. I actually had a couple other bits
missing but I've got it up and running now (or at least I have it posting
transaction data on applystrategy() which is a massive step forward).

Much appreciated!!

On Mon, Oct 24, 2016 at 3:07 PM, Ilya Kipnis <ilya.kipnis at gmail.com> wrote:

> Hi Jon,
>
> First off, check the parameters on your add.indicator call for your SMA
> function.
>
> Secondly, your data is only 37 observations long and you have a setting of
> 200.
>
> Please fix these two issues.
>
> -Ilya
>
> On Mon, Oct 24, 2016 at 2:55 PM, Jon Golenbock <jongolenbock at gmail.com>
> wrote:
>
>> Hi folks,
>>
>> new to this mailing list and not very proficient with R in general yet, so
>> apologies in advance.
>>
>> all of the demos I could see were using stock data pulled from
>> yahoo/google, etc -- mine is coming from bloomberg. I did my best to
>> replicate the type of object that getsymbols() seems to create.
>>
>> everything seems to be working alright until I actually get to
>> applystrategy(), where I am getting an error that I imagine, while not
>> particularly helpful to me, will be completely obvious to somebody with a
>> bit more experience. the error i'm receiving is
>>
>> Error in n < 1 :
>>   comparison (3) is possible only for atomic and list types
>>
>> code below. Any help is greatly appreciated and apologies for all the
>> rules
>> I am surely breaking, I'll plead first-timer on this one.
>>
>>
>>
>> library(quantstrat)
>> library(quantmod)
>> library(tidyverse)
>>
>>
>> ts <- structure(list(times = structure(c(1477312980, 1477313580,
>> 1477314180,
>> 1477314780, 1477315380, 1477315980, 1477316580, 1477317180, 1477317780,
>> 1477318380, 1477318980, 1477319580, 1477320180, 1477320780, 1477321380,
>> 1477321980, 1477322580, 1477323180, 1477323780, 1477324380, 1477324980,
>> 1477325580, 1477326180, 1477326780, 1477327380, 1477327980, 1477328580,
>> 1477329180, 1477329780, 1477330380, 1477330980, 1477331580, 1477332180,
>> 1477332780, 1477333380, 1477333980, 1477334580), class = c("POSIXct",
>> "POSIXt"), tzone = "UTC"), NG1.Open = c(2.954, 2.93, 2.936, 2.947,
>> 2.951, 2.941, 2.929, 2.924, 2.893, 2.871, 2.891, 2.892, 2.898,
>> 2.89, 2.88, 2.872, 2.885, 2.884, 2.879, 2.876, 2.876, 2.859,
>> 2.864, 2.878, 2.866, 2.886, 2.892, 2.889, 2.878, 2.861, 2.859,
>> 2.851, 2.859, 2.84, 2.836, 2.844, 2.839), NG1.High = c(2.959,
>> 2.937, 2.954, 2.96, 2.957, 2.941, 2.932, 2.926, 2.902, 2.893,
>> 2.898, 2.9, 2.905, 2.893, 2.883, 2.885, 2.891, 2.889, 2.884,
>> 2.877, 2.877, 2.867, 2.878, 2.881, 2.887, 2.897, 2.893, 2.891,
>> 2.884, 2.865, 2.862, 2.861, 2.859, 2.843, 2.845, 2.845, 2.842
>> ), NG1.Low = c(2.929, 2.916, 2.931, 2.946, 2.935, 2.924, 2.924,
>> 2.886, 2.871, 2.852, 2.878, 2.889, 2.886, 2.87, 2.87, 2.866,
>> 2.882, 2.875, 2.875, 2.871, 2.857, 2.848, 2.864, 2.863, 2.864,
>> 2.884, 2.886, 2.878, 2.859, 2.851, 2.849, 2.849, 2.835, 2.829,
>> 2.827, 2.836, 2.836), NG1.Close = c(2.93, 2.936, 2.947, 2.951,
>> 2.94, 2.93, 2.924, 2.892, 2.871, 2.891, 2.892, 2.898, 2.89, 2.879,
>> 2.872, 2.884, 2.884, 2.878, 2.876, 2.876, 2.859, 2.865, 2.878,
>> 2.865, 2.886, 2.892, 2.888, 2.879, 2.862, 2.858, 2.851, 2.858,
>> 2.839, 2.836, 2.844, 2.839, 2.842), NG1.Volume = c(2347, 4491,
>> 2793, 1124, 1624, 1864, 1646, 6497, 3625, 5570, 2231, 1506, 2084,
>> 3443, 1372, 1464, 931, 906, 557, 1266, 2047, 3021, 1206, 938,
>> 1375, 1928, 582, 1203, 1810, 1309, 803, 1368, 3141, 2227, 9590,
>> 1067, 128)), row.names = c(NA, -37L), class = "data.frame", .Names =
>> c("times",
>> "NG1.Open", "NG1.High", "NG1.Low", "NG1.Close", "NG1.Volume"))
>>
>> NG1 <- xts(ts[,-1],ts[,1])
>>
>>
>> initDate <- Sys.Date()-1
>> initEq <- 5000
>> n <- 14
>> nSMA <- 200
>>
>> currency("USD")
>> Sys.setenv(TZ="UTC")
>> symbols <- "NG1"
>> stock(symbols, currency="USD", multiplier=1)
>>
>> strategy.st <- 'teststrat'
>> portfolio.st <- 'teststrat'
>> account.st <- 'teststrat'
>> initPortf(portfolio.st, symbols = symbols, initDate=initDate,currency='US
>> D')
>> initAcct(account.st, portfolios=portfolio.st, initDate=initDate,
>> initEq=initEq, currency='USD')
>> initOrders(portfolio=portfolio.st, initDate=initDate)
>>
>>
>>
>> strategy(name = strategy.st,
>>          store = TRUE)
>>
>>
>>
>>
>>
>>
>>
>> add.indicator(
>>   strategy = strategy.st,
>>   name = 'RSI',
>>   arguments = list(price=quote(Cl(mktdata)),n=n),
>>   label = "rsi")
>>
>> add.indicator(
>>   strategy = strategy.st,
>>   name = 'SMA',
>>   arguments = list(x=quote(Cl(mktdata)),n=SMA),
>>   label = 'sma'
>> )
>>
>>
>>
>> add.rule(
>>   strategy=strategy.st,
>>   name='ruleSignal',
>>   arguments=list(
>>     sigcol='RSI_long',
>>     sigval = TRUE,
>>     orderside = 'long',
>>     ordertype='market',
>>     orderqty=1,
>>     replace=FALSE
>>   ),
>>   type='enter',
>>   label='Enterlong',
>>   path.dep = TRUE
>> )
>>
>> add.rule(
>>   strategy=strategy.st,
>>   name='ruleSignal',
>>   arguments=list(
>>     sigcol='RSI_short',
>>     sigval = TRUE,
>>     orderside = 'short',
>>     ordertype='market',
>>     orderqty=1,
>>     replace=TRUE
>>   ),
>>   type='exit',
>>   label='Exitlong',
>>   path.dep = TRUE
>>
>> )
>>
>>
>> t1<-Sys.time()
>> out<-applyStrategy(strategy=strategy.st,portfolios = portfolio.st)
>> t2<-Sys.time()
>> print(t2-t1)
>>
>>         [[alternative HTML version deleted]]
>>
>> _______________________________________________
>> 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.
>>
>
>

	[[alternative HTML version deleted]]



More information about the R-SIG-Finance mailing list