(I mistakenly did not include [email protected] on the response.)
Hi Ilya, I switched the orderqty as you suggested, but nothing changed. That's usually something I try when I question the total position quantity and in my experience even if I had the wrong sign, it would still change the quantity. But in this case, nothing changed. I do have the macd.R demo from the source working, which has a commented-out stoptrailing chaining rule. I'll check out your example closely, and since it uses a limit order hopefully it should apply more directly to my case. Thanks for the ideas, BTW, I was reading http://quantstrattrader.wordpress.com/ earlier in day looking for clues to my problem. That's a nice site. Good work. -- sm Stergios Marinopoulos On Fri, Aug 22, 2014 at 1:38 PM, Ilya Kipnis <[email protected]> wrote: > Stergios, > > Can you rerun your code with orderqty set to -1 for your chain rule > and see if that solves it? > > -Ilya > > On Fri, Aug 22, 2014 at 4:08 PM, stergios marinopoulos > <[email protected]> wrote: > > Hi, I am having trouble getting a simple profit taking order to work via > a > > chaining rule. In the contrived example below, I force a long entry of 2 > > shares. Then I expect 1 share to be sold after a 1 point move (i.e. the > > "profit taker"), and then I expect the final share to be sold when price > > falls below the SMA50. > > > > While I do not see the profit taker order get executed, the price falling > > below the SMA50 works as expected for all remaining shares. > > > > I would appreciate it if someone could point out what I am doing wrong > with > > the chaining rule. > > > > Thank you, > > -- > > sm > > Stergios Marinopoulos > > > > > > library(quantstrat) > > > > # Boiler Plate > > tickerSymbol = "GE" > > strategyStr = 'TwoUnits' > > GE = getSymbols(tickerSymbol, from = "2012-01-01", to = "2012-11-15", > > auto.assign = FALSE) > > GE$SMA50 = SMA(Cl(GE), n = 50) > > GE$CrossBack = Cl(GE) - GE$SMA50 > > GE = GE["2012-07-15/"] > > magicGoLongDay = "2012-07-23" > > > > currency("USD") > > stock(tickerSymbol, currency="USD", multiplier=1) > > rm.strat(strategyStr) > > initDate = index(GE[1]) - 1 > > initPortf(name=strategyStr, symbols=tickerSymbol, initDate=initDate, > > currency="USD") > > initAcct(name=strategyStr, portfolios=strategyStr, initDate=initDate, > > initEq=1e4, currency="USD") > > initOrders(portfolio=strategyStr, initDate=initDate) > > strategy(strategyStr, store=TRUE) > > > > zeros = xts(rep(0,nrow(GE)), order.by=index(GE)) > > chartSeries(GE, TA="addTA(GE$SMA50, on=1, col=6);addTA(GE$CrossBack, > > col=6);addTA(zeros, on=2, col=7);") > > > > # The indicator function. Force a TRUE value on 6/5/2012 > > myIndicator <- function(n=2) > > { > > indicator = xts(x=rep(0, nrow(GE)), order.by=index(GE) ) > > names(indicator) = "indValue" > > indicator[magicGoLongDay, "indValue"] = 1 > > return( indicator[, "indValue"] ) > > } > > > > add.indicator(strategy=strategyStr, name="myIndicator", > > arguments=list(n=2), label="indLabel") > > > > add.signal( > > strategy=strategyStr, > > name="sigThreshold", > > arguments=list( > > column = "CrossBack", > > relationship = "lt", > > threshold = 0, > > cross = TRUE > > ), > > label="sig.price.lt.sma50" > > ) > > > > add.signal( > > strategy=strategyStr, > > name="sigThreshold", > > arguments=list( > > column = "indValue.indLabel", > > relationship = "eq", > > threshold = 1, > > cross = TRUE > > ), > > label="goLong" > > ) > > > > > > # Exit remaining when price crosses below on SMA50 > > add.rule(strategy=strategyStr, name='ruleSignal', > > arguments = list( > > sigcol = "sig.price.lt.sma50", > > sigval = TRUE, > > replace = FALSE, > > orderside = 'long', > > ordertype = 'market', > > orderqty = 'all', > > prefer = 'Open' > > ), > > type = 'exit', > > label = 'ExitPriceLTSMA50' > > ) > > > > # Exit 1 unit as an initial profit target > > add.rule(strategy=strategyStr, name='ruleSignal', > > arguments = list( > > sigcol = 'goLong', > > sigval = TRUE, > > replace = FALSE, > > orderside = 'long', > > ordertype = 'limit', > > # ruletype = 'exit', # Is this order ambiguous? > > tmult = FALSE, > > threshold = 1.00, > > orderqty = 1, > > prefer = 'Open' > > ), > > type = 'chain', > > parent = 'EnterLong', > > label = 'TakeProfit' > > ) > > > > # Go long 2 shares when we have long signal > > add.rule(strategy=strategyStr, name = 'ruleSignal', > > arguments = list( > > sigcol = 'goLong', > > sigval = TRUE, > > orderside = 'long' , > > ordertype = 'market', > > orderqty = 2, > > prefer = 'Open' > > ), > > type = 'enter', > > label = 'EnterLong' > > ) > > > > out = applyStrategy(strategy=strategyStr, portfolios=strategyStr, > > verbose=TRUE, debug=TRUE) > > > > # Calculate P&L and resulting equity with blotter > > dateRange=paste( > > as.character(index(first(GE))-1), > > '::', > > as.character(index(last(GE))+1), > > sep='') > > > > updatePortf(strategyStr, Dates = dateRange) > > updateAcct(strategyStr, Dates = dateRange) > > updateEndEq(strategyStr, Dates = dateRange) > > > > obook = getOrderBook(portfolio=strategyStr) > > transactions = getTxns(Portfolio=strategyStr, Symbol=tickerSymbol) > > > > [[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. > [[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.
