I am trying to built a simple moving average cross over strategy for backtesting. I have installed TTR and quantmod, quantstrat for that purpose.>From TTR package we can get functions for sma,bolinger band and otherindicators. I want to know whether any inbuilt crossover function (not greater '>' or lesser '<') is available for R. Example sma10<-SMA(close,10) sma30<-SMA(close,30) buy<-Crossover(sma10,sma30) sell<-Crossover(sma30,sma10) -- View this message in context: http://r.789695.n4.nabble.com/inbuilt-crossover-function-for-backtesting-tp4710918.html Sent from the R help mailing list archive at Nabble.com.
On Sun, Aug 9, 2015 at 3:46 AM, boredstoog via R-help <r-help at r-project.org> wrote:> I am trying to built a simple moving average cross over strategy for > backtesting. I have installed TTR and quantmod, quantstrat for that purpose. > >From TTR package we can get functions for sma,bolinger band and other > indicators. I want to know whether any inbuilt crossover function (not > greater '>' or lesser '<') is available for R. >help.search("crossover") would have lead you to quantstrat::sigCrossover. require(quantstrat) getSymbols("SPY") SPY$sma10 <- SMA(Cl(SPY),10) SPY$sma30 <- SMA(Cl(SPY),30) buy <- sigCrossover("buy", SPY, c("sma10","sma30"), "gt") sell <- sigCrossover("sell", SPY, c("sma30","sma10"), "lt")> Example > > sma10<-SMA(close,10) > sma30<-SMA(close,30) > > buy<-Crossover(sma10,sma30) > sell<-Crossover(sma30,sma10) > > > > > > > -- > View this message in context: http://r.789695.n4.nabble.com/inbuilt-crossover-function-for-backtesting-tp4710918.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.-- Joshua Ulrich | about.me/joshuaulrich FOSS Trading | www.fosstrading.com
Thanks Joshua for the quick reply to the mail and once more sorry for
bothering with another doubt. So i have modified your code :) for
backtesting and this is the code
*
library(quantmod)
library(tseries)
require(quantstrat)
library(PerformanceAnalytics)
sym <- get(getSymbols('SPY'))["2013::"]
sym$sma10 <- SMA(Cl(sym),10)
sym$sma30 <- SMA(Cl(sym),30)
buy <- sigCrossover("buy", SPY,
c("sma10","sma30"), "gt")
sell <- sigCrossover("sell", SPY,
c("sma30","sma10"), "lt")
if (buy==TRUE){
sym$pos<-1
} else if (sell==TRUE){
sym$pos<--1
}
myReturn <- lag(sym$pos) * dailyReturn(sym)
charts.PerformanceSummary(cbind(dailyReturn(sym),myReturn))*
But the above code is returing this error
*Error in if (buy == TRUE) { : missing value where TRUE/FALSE needed
In addition: Warning message:
In if (buy == TRUE) { :
the condition has length > 1 and only the first element will be
used> myReturn <- lag(sym$pos) * dailyReturn(sym)
Error in hasTsp(x) : attempt to set an attribute on NULL> charts.PerformanceSummary(cbind(dailyReturn(sym),myReturn))
Warning message:
In to_period(xx, period = on.opts[[period]], ...) :
missing values removed from data*
Any idea what is hapennning
--
View this message in context:
http://r.789695.n4.nabble.com/inbuilt-crossover-function-for-backtesting-tp4710918p4710949.html
Sent from the R help mailing list archive at Nabble.com.