Hi - I'm fairly new to R. Have been reading up a lot and am impressed with
the language's versatility and hope to spend much time getting to grips
with it. (I'd like to thank those that have built out the really useful
Quantmod, Quantstrat, TTR, PerformanceAnalytics, Blotter packages for all
their hard work meaning I, and those with similar interests, dont have to
reinvent the wheel!)
Having a problem with my understanding of how to use sigFornula, as my code
has started to throw an error after I'd tried to implement it - any help or
guidance would be greatly appreciated - thanks!:
Getting the following error:
> out <- try(applyStrategy(strategy=stratRSI4, portfolios="RSI4"))
Error in .xts(e, .index(e1), .indexCLASS = indexClass(e1),
.indexFORMAT = indexFormat(e1), :
index length must match number of observations
> updatePortf("RSI4")
[1] "RSI4"
when running the following adaption of one of the Quantstrat demos:
# This code is an attempt to backtest Connor's RSI(4) filter for long trades
#http://forums.stockfetcher.com/sfforums/?q=view&tid=93830&start=0
#install.packages(c("quantstrat","blotter","FinancialInstrument"), repos="
http://r-forge.r-project.org")
require(quantstrat)
require(PerformanceAnalytics)
# Set initial values
initDate <- "2006-07-31"
endDate <- "2011-10-31"
initEq <- 100000
# Pull Yahoo Finance data
symbols <- c("SPY")
getSymbols(symbols, from=initDate, to=endDate,
index.class=c("POSIXt","POSIXct"))
# Set up instruments with FinancialInstruments package
currency("USD")
for(symbol in symbols) {
stock(symbol, currency="USD", multiplier=1)
}
# Delete portfolio, account, and order book if they already exist
suppressWarnings(rm("account.RSI4","portfolio.RSI4",pos=.blotter))
suppressWarnings(rm("order_book.RSI4",pos=.strategy))
# Initialize portfolio and account
initPortf("RSI4", symbols=symbols, initDate=initDate)
initAcct("RSI4", portfolios="RSI4", initDate=initDate, initEq=initEq)
initOrders(portfolio="RSI4", initDate=initDate)
# Initialize a strategy object
stratRSI4 <- strategy("RSI4")
####INDICATORS####
# Add the 200-day SMA indicator
stratRSI4 <- add.indicator(strategy=stratRSI4, name="SMA", arguments =
list(x=quote(Cl(mktdata)), n=200), label="SMA200")
# Add the RSI4 indicator
stratRSI4 <- add.indicator(strategy=stratRSI4, name="RSI", arguments =
list(price = quote(getPrice(mktdata)), n=4), label="RSI")
####SIGNALS####
# There are two signals:
# The first is when close price is above the 200 day moving average and
RSI4 is below 25
stratRSI4 <- add.signal(stratRSI4, name="sigFormula", arguments = list(data
= columns=c("Close","SMA200","RSI"), formula = "(Close > SMA200) & (RSI <
25)", label="trigger"), cross=TRUE), label="Cl.gt.SMA")
# The second is when the RSI4 closes above 55
stratRSI4 <- add.signal(stratRSI4,
name="sigThreshold",arguments=list(threshold=55, column="RSI",
relationship="lt", cross=TRUE), label="Cl.lt.RSI")
####RULES####
# There are two rules:
# The first is to buy when the price is above the SMA and RSI4 below 25
(the first signal)
stratRSI4 <- add.rule(stratRSI4, name="ruleSignal",
arguments=list(sigcol="Cl.gt.SMA", sigval=TRUE, orderqty=1000,
ordertype="market", orderside="long", pricemethod="market", TxnFees=-5,
osFUN=osMaxPos), type="enter", path.dep=TRUE)
# The second is to sell when the RSI climbs above 55
stratRSI4 <- add.rule(stratRSI4, name="ruleSignal",
arguments=list(sigcol="Cl.lt.RSI", sigval=TRUE, orderqty="all",
ordertype="market", orderside="long", pricemethod="market", TxnFees=-5),
type="exit", path.dep=TRUE)
# Set position limits so we don't add to the position every month Close >
SMA10
addPosLimit("RSI4", "SPY", timestamp=initDate, maxpos=1000, minpos=0)
# Process the indicators and generate trades
out <- try(applyStrategy(strategy=stratRSI4, portfolios="RSI4"))
updatePortf("RSI4")
# Evaluate results
portRet <- PortfReturns("RSI4")
portRet$Total <- rowSums(portRet, na.rm=TRUE)
charts.PerformanceSummary(portRet$Total)
tradeStats("RSI4")[,c("Symbol","Num.Trades","Net.Trading.PL<http://net.trading.pl/>
","maxDrawdown")]
[[alternative HTML version deleted]]
_______________________________________________
[email protected] 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.