[R-SIG-Finance] Fwd: quantstrat chain rule type
stergios marinopoulos
stergenator at gmail.com
Fri Aug 22 23:19:48 CEST 2014
(I mistakenly did not include r-sig-finance at r-project.org 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 <ilya.kipnis at gmail.com> 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
> <stergenator at gmail.com> 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]]
> >
> > _______________________________________________
> > 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.
>
[[alternative HTML version deleted]]
More information about the R-SIG-Finance
mailing list