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

Jon Golenbock jongolenbock at gmail.com
Mon Oct 24 20:55:45 CEST 2016


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='USD')
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]]



More information about the R-SIG-Finance mailing list