**Classic sizing algorithms**

Perhaps the simplest money management strategy is the percent-risk approach. Many traders have heard the adage that you should risk no more than 2% on a given trade. This theory makes sense for large traders with multimillion dollar accounts. However, it is unrealistic for small traders. If you are trading T-bonds, for example, and have a $25,000 account and limit risk to 2%, that is $500. A $500 stop in T-bonds simply does not give the market room to move and most likely will turn any winning system into a losing one by prematurely stopping out any potential winning trade.

“Simple channel breakout” (below) shows the logic for a 20-day channel breakout strategy. We can view trade risk as the difference between the highest-high and lowest-low over the look-back period. For example, as of Jan. 25, the difference between the 20-day highest and lowest price is 4.75 points. This implies a risk of $4,750. If we use the 2% rule, then we would trade only one contract for every $237,500 in our account.

*Click here to download the following code as text*

A more realistic method of position sizing is volatility based. A volatility-based method would use the dollar value of each market’s average daily range or true range over a given period. We could use some multiple of this measure to size trades. Roughly 3.5 times the 40-day average daily range is a good estimate of a constant leverage. You could create a buffer by doubling that to seven times. This is referred to as a dynamic margin strategy. Using 25% to 40% of capital in a dynamic margin is a reasonable strategy.

There are two parts to this strategy. The first calculates dynamic margin on a market-by-market basis. Here’s the function in TradersStudio code:

**Function DynamicMargin(mkt As TSProcessor.IMarket,LBPeriod,MARGINEST)**

**Dim Arr As Array**

**Dim SummVal**

**Dim I**

**Arr =mkt.DataArray(0, “TrueRange”)**

**SummVal=0**

**For I = 0 To LBPeriod-1**

**SummVal=Arr[I]+SummVal**

**Next**

**DynamicMargin=((SummVal/LBPeriod)*mkt.BigPointValue)*MARGINEST**

**End Function**

In this function, we first pass an object for each market to this function. We then multiply the average true range by the big point value for this market (“bigpointvalue”) and our margin multiplier (“marginest”), which is seven in this case.