From noreply at r-forge.r-project.org Thu Jul 3 20:19:59 2014 From: noreply at r-forge.r-project.org (noreply at r-forge.r-project.org) Date: Thu, 3 Jul 2014 20:19:59 +0200 (CEST) Subject: [Blotter-commits] r1618 - pkg/quantstrat/R Message-ID: <20140703181959.CA2C2186DA9@r-forge.r-project.org> Author: bodanker Date: 2014-07-03 20:19:59 +0200 (Thu, 03 Jul 2014) New Revision: 1618 Modified: pkg/quantstrat/R/ruleSignal.R Log: - Patch check for orderprice with length > 1. Thanks to Joe Dunn for the report. Modified: pkg/quantstrat/R/ruleSignal.R =================================================================== --- pkg/quantstrat/R/ruleSignal.R 2014-06-28 15:00:02 UTC (rev 1617) +++ pkg/quantstrat/R/ruleSignal.R 2014-07-03 18:19:59 UTC (rev 1618) @@ -194,7 +194,7 @@ ) # end switch if(inherits(orderprice,'try-error')) orderprice<-NULL - if(length(orderprice>1) && !pricemethod=='maker') orderprice<-last(orderprice[timestamp]) + if(length(orderprice)>1 && pricemethod!='maker') orderprice <- last(orderprice[timestamp]) if(!is.null(orderprice) && !is.null(ncol(orderprice))) orderprice <- orderprice[,1] } From noreply at r-forge.r-project.org Tue Jul 8 15:50:56 2014 From: noreply at r-forge.r-project.org (noreply at r-forge.r-project.org) Date: Tue, 8 Jul 2014 15:50:56 +0200 (CEST) Subject: [Blotter-commits] r1619 - pkg/FinancialInstrument/R Message-ID: <20140708135056.CAF451874D3@r-forge.r-project.org> Author: signori Date: 2014-07-08 15:50:56 +0200 (Tue, 08 Jul 2014) New Revision: 1619 Modified: pkg/FinancialInstrument/R/saveInstruments.R Log: In saveInstruments, 'pos' should 'FinancialInstrument:::.instrument' (reverts to r1475) Modified: pkg/FinancialInstrument/R/saveInstruments.R =================================================================== --- pkg/FinancialInstrument/R/saveInstruments.R 2014-07-03 18:19:59 UTC (rev 1618) +++ pkg/FinancialInstrument/R/saveInstruments.R 2014-07-08 13:50:56 UTC (rev 1619) @@ -75,7 +75,7 @@ "require(FinancialInstrument)\n\n", file=file.name) for (s in ls_instruments()) { sink(file.name, append=TRUE) - cat('assign("', s, '", pos=.instrument, ', + cat('assign("', s, '", pos=FinancialInstrument:::.instrument, ', 'value=\n', sep="", append=TRUE) dput(getInstrument(s)) cat(")\n\n", append=TRUE) From gsee000 at gmail.com Tue Jul 8 19:31:01 2014 From: gsee000 at gmail.com (G See) Date: Tue, 8 Jul 2014 12:31:01 -0500 Subject: [Blotter-commits] r1619 - pkg/FinancialInstrument/R In-Reply-To: <20140708135056.CAF451874D3@r-forge.r-project.org> References: <20140708135056.CAF451874D3@r-forge.r-project.org> Message-ID: You cannot do this due to CRAN policy. The FinancialInstrument::: should not be necessary because this function belongs to the FinancialInstrument namespace. On Tue, Jul 8, 2014 at 8:50 AM, wrote: > Author: signori > Date: 2014-07-08 15:50:56 +0200 (Tue, 08 Jul 2014) > New Revision: 1619 > > Modified: > pkg/FinancialInstrument/R/saveInstruments.R > Log: > In saveInstruments, 'pos' should 'FinancialInstrument:::.instrument' (reverts to r1475) > > Modified: pkg/FinancialInstrument/R/saveInstruments.R > =================================================================== > --- pkg/FinancialInstrument/R/saveInstruments.R 2014-07-03 18:19:59 UTC (rev 1618) > +++ pkg/FinancialInstrument/R/saveInstruments.R 2014-07-08 13:50:56 UTC (rev 1619) > @@ -75,7 +75,7 @@ > "require(FinancialInstrument)\n\n", file=file.name) > for (s in ls_instruments()) { > sink(file.name, append=TRUE) > - cat('assign("', s, '", pos=.instrument, ', > + cat('assign("', s, '", pos=FinancialInstrument:::.instrument, ', > 'value=\n', sep="", append=TRUE) > dput(getInstrument(s)) > cat(")\n\n", append=TRUE) > > _______________________________________________ > Blotter-commits mailing list > Blotter-commits at lists.r-forge.r-project.org > https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/blotter-commits From gsee000 at gmail.com Tue Jul 8 19:43:48 2014 From: gsee000 at gmail.com (G See) Date: Tue, 8 Jul 2014 12:43:48 -0500 Subject: [Blotter-commits] r1619 - pkg/FinancialInstrument/R In-Reply-To: References: <20140708135056.CAF451874D3@r-forge.r-project.org> Message-ID: Never mind. I didn't look close enough. This is fine. Thank you Garrett On Tue, Jul 8, 2014 at 12:31 PM, G See wrote: > You cannot do this due to CRAN policy. The FinancialInstrument::: > should not be necessary because this function belongs to the > FinancialInstrument namespace. > > On Tue, Jul 8, 2014 at 8:50 AM, wrote: >> Author: signori >> Date: 2014-07-08 15:50:56 +0200 (Tue, 08 Jul 2014) >> New Revision: 1619 >> >> Modified: >> pkg/FinancialInstrument/R/saveInstruments.R >> Log: >> In saveInstruments, 'pos' should 'FinancialInstrument:::.instrument' (reverts to r1475) >> >> Modified: pkg/FinancialInstrument/R/saveInstruments.R >> =================================================================== >> --- pkg/FinancialInstrument/R/saveInstruments.R 2014-07-03 18:19:59 UTC (rev 1618) >> +++ pkg/FinancialInstrument/R/saveInstruments.R 2014-07-08 13:50:56 UTC (rev 1619) >> @@ -75,7 +75,7 @@ >> "require(FinancialInstrument)\n\n", file=file.name) >> for (s in ls_instruments()) { >> sink(file.name, append=TRUE) >> - cat('assign("', s, '", pos=.instrument, ', >> + cat('assign("', s, '", pos=FinancialInstrument:::.instrument, ', >> 'value=\n', sep="", append=TRUE) >> dput(getInstrument(s)) >> cat(")\n\n", append=TRUE) >> >> _______________________________________________ >> Blotter-commits mailing list >> Blotter-commits at lists.r-forge.r-project.org >> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/blotter-commits From noreply at r-forge.r-project.org Fri Jul 11 03:40:10 2014 From: noreply at r-forge.r-project.org (noreply at r-forge.r-project.org) Date: Fri, 11 Jul 2014 03:40:10 +0200 (CEST) Subject: [Blotter-commits] r1620 - pkg/quantstrat/demo Message-ID: <20140711014010.68DB8180194@r-forge.r-project.org> Author: efmrforge Date: 2014-07-11 03:40:08 +0200 (Fri, 11 Jul 2014) New Revision: 1620 Modified: pkg/quantstrat/demo/00Index Log: Added faber_rebal description to index Modified: pkg/quantstrat/demo/00Index =================================================================== --- pkg/quantstrat/demo/00Index 2014-07-08 13:50:56 UTC (rev 1619) +++ pkg/quantstrat/demo/00Index 2014-07-11 01:40:08 UTC (rev 1620) @@ -1,6 +1,7 @@ bbands Build a simple Bollinger Bands strategy using one indicator, three signals, and three trade rules faber demonstrate a simple long term trend model using a 10-month SMA on a small portfolio of ETFs based on Mebane Faber paper faberMC apply the Faber 10-month SMA strategy to a three-currency index portfolio +faber_rebal apply the Faber 10-month SMA strategy, rebalance quarterly macd example of Moving Average Convergence/Divergence (MACD) used as a trend indicator maCross classic 'Golden Cross' 50/200 period moving average cross strategy, long only, with long/short extra rules commented out pair_trade simple two-instrument long-short equity strategy demonstrating custom indicator and extended order sizing functionality From noreply at r-forge.r-project.org Fri Jul 11 15:32:09 2014 From: noreply at r-forge.r-project.org (noreply at r-forge.r-project.org) Date: Fri, 11 Jul 2014 15:32:09 +0200 (CEST) Subject: [Blotter-commits] r1621 - pkg/quantstrat/R Message-ID: <20140711133209.86424187616@r-forge.r-project.org> Author: bodanker Date: 2014-07-11 15:32:09 +0200 (Fri, 11 Jul 2014) New Revision: 1621 Modified: pkg/quantstrat/R/indicators.R pkg/quantstrat/R/rules.R pkg/quantstrat/R/signals.R Log: - Check mktdata for duplicate index values in applyIndicators/Signals/Rules call make.index.unique if necessary Modified: pkg/quantstrat/R/indicators.R =================================================================== --- pkg/quantstrat/R/indicators.R 2014-07-11 01:40:08 UTC (rev 1620) +++ pkg/quantstrat/R/indicators.R 2014-07-11 13:32:09 UTC (rev 1621) @@ -141,6 +141,12 @@ # TODO check for symbol name in mktdata using Josh's code: # symbol <- strsplit(colnames(mktdata)[1],"\\.")[[1]][1] + + # ensure no duplicate index values in mktdata + if(any(diff(.index(mktdata)) == 0)) { + warning("'mktdata' index contains duplicates; calling 'make.index.unique'") + mktdata <- make.index.unique(mktdata) + } if (!is.strategy(strategy)) { strategy<-try(getStrategy(strategy)) Modified: pkg/quantstrat/R/rules.R =================================================================== --- pkg/quantstrat/R/rules.R 2014-07-11 01:40:08 UTC (rev 1620) +++ pkg/quantstrat/R/rules.R 2014-07-11 13:32:09 UTC (rev 1621) @@ -261,6 +261,12 @@ # TODO handle indicator and signal lists as well as indicators/signals that were cbound to mktdata + # ensure no duplicate index values in mktdata + if(any(diff(.index(mktdata)) == 0)) { + warning("'mktdata' index contains duplicates; calling 'make.index.unique'") + mktdata <- make.index.unique(mktdata) + } + # ported from IBrokers thanks to Jeff # environment for data to be stored/accessed during applyRules execution # an example of this functionality is for the "symbols" variable Modified: pkg/quantstrat/R/signals.R =================================================================== --- pkg/quantstrat/R/signals.R 2014-07-11 01:40:08 UTC (rev 1620) +++ pkg/quantstrat/R/signals.R 2014-07-11 13:32:09 UTC (rev 1621) @@ -78,6 +78,12 @@ # TODO handle indicator lists as well as indicators that were cbound to mktdata + # ensure no duplicate index values in mktdata + if(any(diff(.index(mktdata)) == 0)) { + warning("'mktdata' index contains duplicates; calling 'make.index.unique'") + mktdata <- make.index.unique(mktdata) + } + if (!is.strategy(strategy)) { strategy<-try(getStrategy(strategy)) if(inherits(strategy,"try-error")) From noreply at r-forge.r-project.org Fri Jul 11 15:50:34 2014 From: noreply at r-forge.r-project.org (noreply at r-forge.r-project.org) Date: Fri, 11 Jul 2014 15:50:34 +0200 (CEST) Subject: [Blotter-commits] r1622 - in pkg/quantstrat: R man Message-ID: <20140711135034.85566184928@r-forge.r-project.org> Author: bodanker Date: 2014-07-11 15:50:34 +0200 (Fri, 11 Jul 2014) New Revision: 1622 Modified: pkg/quantstrat/R/rules.R pkg/quantstrat/man/applyRules.Rd Log: - Remove Dates arg from applyRules (it was never honored); update doc file Modified: pkg/quantstrat/R/rules.R =================================================================== --- pkg/quantstrat/R/rules.R 2014-07-11 13:32:09 UTC (rev 1621) +++ pkg/quantstrat/R/rules.R 2014-07-11 13:50:34 UTC (rev 1622) @@ -234,7 +234,6 @@ #' @param symbol identfier of the instrument to find orders for. The name of any associated price objects (xts prices, usually OHLC) should match these #' @param strategy an object of type 'strategy' to add the rule to #' @param mktdata an xts object containing market data. depending on rules, may need to be in OHLCV or BBO formats, and may include indicator and signal information -#' @param Dates default NULL, list of time stamps to iterate over, ignored if \code{path.dep=FALSE} #' @param indicators if indicator output is not contained in the mktdata object, it may be passed separately as an xts object or a list. #' @param signals if signal output is not contained in the mktdata object, it may be passed separately as an xts object or a list. #' @param parameters named list of parameters to be applied during evaluation of the strategy,default NULL, only needed if you need special names to avoid argument collision @@ -248,7 +247,6 @@ symbol, strategy, mktdata, - Dates=NULL, indicators=NULL, signals=NULL, parameters=NULL, @@ -292,7 +290,7 @@ } ret <- NULL - Dates=unique(index(mktdata)) + Dates <- index(mktdata) #we could maybe do something more sophisticated, but this should work if(isTRUE(path.dep)){ #initialize the dimension reduction index (dindex) Modified: pkg/quantstrat/man/applyRules.Rd =================================================================== --- pkg/quantstrat/man/applyRules.Rd 2014-07-11 13:32:09 UTC (rev 1621) +++ pkg/quantstrat/man/applyRules.Rd 2014-07-11 13:50:34 UTC (rev 1622) @@ -2,9 +2,9 @@ \alias{applyRules} \title{apply the rules in the strategy to arbitrary market data} \usage{ -applyRules(portfolio, symbol, strategy, mktdata, Dates = NULL, - indicators = NULL, signals = NULL, parameters = NULL, ..., - path.dep = TRUE, rule.order = NULL, debug = FALSE) +applyRules(portfolio, symbol, strategy, mktdata, indicators = NULL, + signals = NULL, parameters = NULL, ..., path.dep = TRUE, + rule.order = NULL, debug = FALSE) } \arguments{ \item{portfolio}{text name of the portfolio to associate @@ -22,9 +22,6 @@ formats, and may include indicator and signal information} - \item{Dates}{default NULL, list of time stamps to iterate - over, ignored if \code{path.dep=FALSE}} - \item{indicators}{if indicator output is not contained in the mktdata object, it may be passed separately as an xts object or a list.} From noreply at r-forge.r-project.org Fri Jul 11 17:50:02 2014 From: noreply at r-forge.r-project.org (noreply at r-forge.r-project.org) Date: Fri, 11 Jul 2014 17:50:02 +0200 (CEST) Subject: [Blotter-commits] r1623 - pkg/quantstrat/R Message-ID: <20140711155002.9731718624E@r-forge.r-project.org> Author: bodanker Date: 2014-07-11 17:50:02 +0200 (Fri, 11 Jul 2014) New Revision: 1623 Modified: pkg/quantstrat/R/signals.R Log: - rename .firstThreshold to .firstCross in sigTimestamp (missed in r1572) Thanks to Jonathan Owen for the report in bug #5800 Modified: pkg/quantstrat/R/signals.R =================================================================== --- pkg/quantstrat/R/signals.R 2014-07-11 13:50:34 UTC (rev 1622) +++ pkg/quantstrat/R/signals.R 2014-07-11 15:50:02 UTC (rev 1623) @@ -353,7 +353,7 @@ # timestamp can be a time-based timestamp if(is.timeBased(timestamp)) { - after.sig <- .firstThreshold(index(data), timestamp, "lt") + after.sig <- .firstCross(index(data), timestamp, "lt") if(length(after.sig) != 0) ret$timestamp[after.sig] <- TRUE } else From noreply at r-forge.r-project.org Sat Jul 12 20:23:21 2014 From: noreply at r-forge.r-project.org (noreply at r-forge.r-project.org) Date: Sat, 12 Jul 2014 20:23:21 +0200 (CEST) Subject: [Blotter-commits] r1624 - pkg/quantstrat/R Message-ID: <20140712182321.E0F3D1853E2@r-forge.r-project.org> Author: efmrforge Date: 2014-07-12 20:23:21 +0200 (Sat, 12 Jul 2014) New Revision: 1624 Modified: pkg/quantstrat/R/tradeGraphs.R Log: Fix of 5788 thanks to Jonathan Owen Modified: pkg/quantstrat/R/tradeGraphs.R =================================================================== --- pkg/quantstrat/R/tradeGraphs.R 2014-07-11 15:50:02 UTC (rev 1623) +++ pkg/quantstrat/R/tradeGraphs.R 2014-07-12 18:23:21 UTC (rev 1624) @@ -49,10 +49,16 @@ } else { data <- subset(stats, eval(parse(text=params.filter)), select = c(var1, var2, var3)) } - x <- recast(data, as.formula(paste0(var1, " ~ ", var2)) , id.var=c(var1,var2), measure.var=c(var3))$labels[[1]][,1] - y <- recast(data, as.formula(paste0(var1, " ~ ", var2)) , id.var=c(var1,var2), measure.var=c(var3))$labels[[2]][,1] - z <- recast(data, as.formula(paste0(var1, " ~ ", var2)) , id.var=c(var1,var2), measure.var=c(var3))$data + data_r = recast(data, as.formula(paste0(var1, " ~ ", var2)), id.var=c(var1,var2), measure.var=c(var3)) + x <- data_r[, 1] + y <- as.numeric(colnames(data_r)[-1]) +z <- unlist(data_r[, -1]) + + # x <- recast(data, as.formula(paste0(var1, " ~ ", var2)) , id.var=c(var1,var2), measure.var=c(var3))$labels[[1]][,1] + # y <- recast(data, as.formula(paste0(var1, " ~ ", var2)) , id.var=c(var1,var2), measure.var=c(var3))$labels[[2]][,1] + # z <- recast(data, as.formula(paste0(var1, " ~ ", var2)) , id.var=c(var1,var2), measure.var=c(var3))$data + col <- heat.colors(length(z))[rank(z)] open3d() From noreply at r-forge.r-project.org Sun Jul 27 02:54:14 2014 From: noreply at r-forge.r-project.org (noreply at r-forge.r-project.org) Date: Sun, 27 Jul 2014 02:54:14 +0200 (CEST) Subject: [Blotter-commits] r1625 - pkg/quantstrat/R Message-ID: <20140727005415.038B918619B@r-forge.r-project.org> Author: bodanker Date: 2014-07-27 02:54:14 +0200 (Sun, 27 Jul 2014) New Revision: 1625 Modified: pkg/quantstrat/R/ruleSignal.R Log: - Revert bug accidentally introduced in r1594 Modified: pkg/quantstrat/R/ruleSignal.R =================================================================== --- pkg/quantstrat/R/ruleSignal.R 2014-07-12 18:23:21 UTC (rev 1624) +++ pkg/quantstrat/R/ruleSignal.R 2014-07-27 00:54:14 UTC (rev 1625) @@ -217,10 +217,8 @@ orderprice=as.numeric(orderprice)) } - if(!is.null(orderqty) && orderqty!=0 && length(orderprice) && is.numeric(orderprice[1])) #orderprice could have length > 1 + if(!is.null(orderqty) && orderqty!=0 && length(orderprice)) { - if(orderqty != 'all' || getPosQty(portfolio, symbol, timestamp) != 0) - { addOrder(portfolio=portfolio, symbol=symbol, timestamp=timestamp, @@ -239,7 +237,6 @@ TxnFees=TxnFees, label=label, time.in.force=time.in.force) - } } } if(sethold) hold <<- TRUE From noreply at r-forge.r-project.org Sun Jul 27 10:31:43 2014 From: noreply at r-forge.r-project.org (noreply at r-forge.r-project.org) Date: Sun, 27 Jul 2014 10:31:43 +0200 (CEST) Subject: [Blotter-commits] r1626 - pkg/blotter/R Message-ID: <20140727083144.0367318757C@r-forge.r-project.org> Author: bodanker Date: 2014-07-27 10:31:43 +0200 (Sun, 27 Jul 2014) New Revision: 1626 Modified: pkg/blotter/R/perTradeStats.R Log: - Fix bug in perTradeStats introduced during r1597 refactor Modified: pkg/blotter/R/perTradeStats.R =================================================================== --- pkg/blotter/R/perTradeStats.R 2014-07-27 00:54:14 UTC (rev 1625) +++ pkg/blotter/R/perTradeStats.R 2014-07-27 08:31:43 UTC (rev 1626) @@ -123,7 +123,7 @@ Pos.PL <- trade[,"Pos.Value"]-Pos.Cost.Basis Pct.PL <- Pos.PL/abs(Pos.Cost.Basis) # broken for last timestamp (fixed below) Tick.PL <- Pos.PL/abs(Pos.Qty)/tick_value # broken for last timestamp (fixed below) - Max.Pos.Qty.loc <- which.max(Pos.Qty) # find max position quantity location + Max.Pos.Qty.loc <- which.max(abs(Pos.Qty)) # find max position quantity location # position sizes trades$Init.Pos[i] <- Pos.Qty[1]