[R-SIG-Finance] Quantstrat using sigFormula

julien cuisinier J_Cuisinier at hotmail.com
Wed Jan 4 22:49:41 CET 2012


Hi Tim,


Welcome to R!

Another good reading is the posting guide ;-)
http://www.r-project.org/posting-guide.html

I am learning quantstrat as well so could be interested to have a  
crack at it but to be helped the community needs more info such as  
what OS you are running on, what version of R, what version of the  
packages but more importantly a self-contained & reproducible example  
explaining what you trying to do & where the error shows up. That  
would allow people to test it easily & if they do not have the error  
you have it is where OS, version or R etc can come handy...

sorry hope i do not sound lecturing, just think you will have more  
feedback & interaction by making life easier for people trying to help


HTH,
Julien



On Jan 4, 2012, at 8:49 PM, Tim Meggs wrote:

> 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]]
>
> _______________________________________________
> 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.
>



More information about the R-SIG-Finance mailing list