[R-SIG-Finance] stoptrailing mechanics question in MACD example - Quantstrat

Derek Wong treydog999 at gmail.com
Wed Feb 17 09:22:46 CET 2016


Hello All,

I am using Quantstrat 0.9.1709 with Microsoft R Open 3.2.3 on Rstudio.

I am having a problem understanding the trailing methodology of the
stoptrailing order type in Quantstrat. It seems to me that the
trailing stop is not replaced as frequently as it should. Only for
larger price changes (threshold value?) it moves but for smaller
increments it remains the same. Is this the intended result?

I am using the MACD example and commenting out the original exit rule
and un-commenting the trailing exit.

<snip>
#alternatives for risk stops:
# simple stoplimit order, with threshold multiplier
#add.rule(strat.st,name='ruleSignal', arguments =
list(sigcol="signal.gt.zero",sigval=TRUE, orderqty='all',
ordertype='stoplimit', orderside='long', threshold=-.05,tmult=TRUE,
orderset='exit2'),type='chain', parent='enter',
label='risk',storefun=FALSE)
# alternately, use a trailing order, also with a threshold multiplier
add.rule(strat.st,name='ruleSignal',
         arguments = list(sigcol="signal.gt.zero",
                          sigval=TRUE,
                          orderqty='all',
                          ordertype='stoptrailing',
                          orderside='long',
                          threshold=-1,
                          tmult=FALSE,
                          orderset='exit2'),
         type='chain',
         parent='enter',
         label='trailingexit')

# # exit
# add.rule(strat.st,name='ruleSignal',
#          arguments = list(sigcol="signal.lt.zero",
#                           sigval=TRUE,
#                           orderqty='all',
#                           ordertype='market',
#                           orderside='long',
#                           threshold=NULL,
#                           orderset='exit2'),
#          type='exit',
#          label='exit'
# )

<snip>


I am looking at the orderbook and comparing it to the portfolio and
price of AAPL. I can see that the trailing stop moves but not on every
new high created during the trade. The first trade is an example.

<output>
> AAPL["2007-03-15/2007-03-26"]
           AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted
2007-03-15     89.96     90.36    89.31      89.57   139874700      11.84997
2007-03-16     89.54     89.99    89.32      89.59   142926000      11.85262
2007-03-19     90.24     91.55    89.59      91.13   178240300      12.05636
2007-03-20     91.35     91.84    91.06      91.48   122229100      12.10266
2007-03-21     91.99     94.00    91.65      93.87   171724000      12.41886
2007-03-22     93.73     94.36    93.00      93.96   140373100      12.43076
2007-03-23     93.35     94.07    93.30      93.52   112721000      12.37255
2007-03-26     93.99     95.90    93.30      95.85   216246800      12.68081
> obook$macd$AAPL["2007-03-15/2007-03-26"]
           Order.Qty Order.Price Order.Type     Order.Side
Order.Threshold Order.Status Order.StatusTime      Prefer
2007-03-15 "100"     "89.570001" "market"       "long"     NA
    "closed"     "2007-03-16 00:00:00" ""
2007-03-16 "all"     "88.590001" "stoptrailing" "long"     "-1"
    "replaced"   "2007-03-19 00:00:00" ""
2007-03-19 "all"     "90.549999" "stoptrailing" "long"     "-1"
    "replaced"   "2007-03-21 00:00:00" ""
2007-03-21 "all"     "93.000002" "stoptrailing" "long"     "-1"
    "replaced"   "2007-03-26 00:00:00" ""
2007-03-26 "all"     "94.899999" "stoptrailing" "long"     "-1"
    "closed"     "2007-03-28 00:00:00" ""
           Order.Set Txn.Fees Rule           Time.In.Force
2007-03-15 NA        "0"      "enter"        ""
2007-03-16 "exit2"   "0"      "trailingexit" ""
2007-03-19 "exit2"   "0"      "trailingexit" ""
2007-03-21 "exit2"   "0"      "trailingexit" ""
2007-03-26 "exit2"   "0"      "trailingexit" ""

<output>

You can see that for the date 2007-03-15 to 2007-03-21 we would have
what I would believe to be the expected behavior. However at
2007-03-22 we have a new high of 94.36 so i thought the new
Order.Price would be at 93.36 given a threshold =-1 but the order is
not adjusted. The order is however adjusted to the correct value on
2007-03-26 after a new AAPL.High at 95.90 and Order Price is 94.899999

I am very curious if the threshold works not only as the distance
between price but also the threshold of a new high price change in
order for the new Order.Price to be changed. I was expecting every new
AAPL.high to generate a new Order.Price for a stoptrailing order type.

If someone could explain this to me or tell me the expected behavior
and mechanics of the trailing methodology I would very much appreciate
it.

Thank you

Derek



More information about the R-SIG-Finance mailing list