[R-SIG-Finance] Writing sell rules with quantstrat

Brian G. Peterson brian at braverock.com
Wed Feb 15 12:11:50 CET 2012

On Tue, 2012-02-14 at 22:14 -0800, Sergey Pisarenko wrote:
> Hi,
> I have been working with quantstrat and for the most part have been
> able to re-write my existing code to fit within the framework. I see
> that "buy" signals work and "enter" rules are triggered.
> I currently do not grasp how to implement sell rules. I would like to
> create 2 sell rules:
>  1. when profit for a specific position reaches 15%
>  2. when a position is kept for a year
> >From what I have read from the examples the correct method to use is
> "add.rule". Here's something I have already:
> seller <- function(data, timestamp, portfolio, symbol) {
>   posn <- getPosQty(portfolio, symbol, timestamp)
>   if (posn != 0) {
>   }
> }
> It is clear that the code must go in the "seller" function. I also
> understand that sell order is created by using "addOrder" function. I
> am not sure how to check current profit inside of the function,
> though.
> What would be the correct approach to check the current profit for a
> position inside of the rule function?

In your *entry* rule, you enter at market, so you're guaranteed a

Your 'exit' rule for the profit taker order is then clear.  Enter it at
the same time as a stoplimit for 15% more than your entry signal price.
This won't be precisely 15% more than the close price on the next bar,
but is likely fine for a backtest (you could also look ahead, but I
don't recommend adding these kinds of biases).  It is certainly easier
than running all the calculation to check net profit on every bar after
entering a position.

A timed rule could certainly be done in your 'seller' function, but for
efficiency I would probably add an indicator function that would check
my entry indicator, and place a new 'signal' one year later.  Then you
put an entry rule to exit then if you have a position.

If you haven't already done so, find Guy Yollin's lecture slides on
quantstrat from UW.  He demonstrates some interesting custom order
sizing functions that could also give you ideas.


   - Brian  


Brian G. Peterson
Ph: 773-459-4973
IM: bgpbraverock

More information about the R-SIG-Finance mailing list