[R-SIG-Finance] blotter update MM & weights without recalculation all

Brian G. Peterson brian at braverock.com
Sat Feb 26 14:15:32 CET 2011

On 02/26/2011 06:50 AM, Immanuel wrote:
> Hello all,
> I just had a first glimpse at the blotter package and
> found it quite amazing. The demos are great to understand
> the basic principles but it would be great I some of the experts
> could give me advice on how to approach the following.

Note that blotter is designed to be used for trade P&L, it is really 
just a trade blotter.  Strategy creation is outside the scope of the 
blotter package.  The demos are there to demonstrate how it can be used, 
but this isn't the way I would recommend building strategies.

We are aware that some users of the package are taking trades from other 
scripts or systems and using blotter for P&L.  This makes sense, and is 
in line with its intended purpose.  I do not use blotter for strategy 
development, and hide it behind a real strategy framework. The package 
we wrote to be 'in front' of blotter for strategy testing is 
'quantstrat'. Other approaches are possible, of course, but I use 
quantstrat 'at the office', and my personal development effort in this 
direction is focused here.

> 1) use blotter to run one trading system on differed symbols
> 2) use P/L per trade to calculate optimal position size per symbol

Aren't 2> and 5> trying to accomplish the same thing?  See below.

> 3) rerun blotter with optimal position size.
> 4) use returns per symbol, to calculate weights for each symbol
> (Markowitz on trading system equity curves)
> 5) rerun blotter using weights to calculate portfolio return.
> The steps I'm not sure how to accomplish are:
> 3) do I need to run the whole trade creation process again, or can
> I somehow update the trade records to the new position size rules

You should probably run the trade creation process again.  Per the 
documentation, blotter does not allow trades to be entered out of order, 
or to be modified after the fact.  updatePortf and updateAcct may be run 
multiple times, but they throw out all prior calculations.

You can likely improve performance if you keep indicators and signals 
that would be invariant to position sizing. So think about how to 
separate that part from the rest.

> 5) I don't know how to do that at all

blotter is a transaction/P&L based framework, not a weights/returns 
framework. (there are several other packages for that in R)

You can extract returns from blotter that will be return on account 
equity.  These may be used as inputs for a more traditional returns 
based portfolio optimization.

Typically, I will backtest strategies on 'one lots', the smallest unit 
that may be reasonably bought/sold in a given 'product' (this term is 
intentionally loose, and may include synthetics).  Another approach 
which has merit is to backtest a 'neutral allocation' where all 
positions taken across products have the same notional size.  When 
converted to returns, this would create an 'equal weight' portfolio.

Now that you have returns from the 'equal weight' portfolio, you can 
apply traditional portfolio optimization. For example, with twenty 
products, each product in the equal weight portfolio would have a 
portfolio weight of 5%.  If the optimization suggests an ideal weight of 
20%, you would take your equal weight position sizing and make it four 
times larger.

I'll note that Markowitz optimization is not likely what you want.  It 
will penalize positive skew and a long right tail on the distribution, 
which are precisely the features you would want to emphasize in a 
portfolio of trading strategies or products traded in a single strategy.

> any advice is very much appreciated!

Hope this helps,

    - Brian

More information about the R-SIG-Finance mailing list