Not all entries are created equal. Can we identify higher probability entries, and apply larger position sizing to them?
Here I’ll attempt to augment a GBPJPY trend following strategy with dynamic position sizing, and backtest its performance over 18 years.
I was reading The Art of Currency Trading by Brent Donnelly, where he lists his 25 rules of forex trading.
In particular, rule #14 states: There is a time and a place to go big.
The idea is to increase your position sizing when you come across very high probability trades, thus increasing your number of outsized wins.
Sounds logical, but does it work over the long-term? Let’s program a dynamic position sizing scheme and see whether it improves trend following performance on the 30-minute GBPJPY.
Baseline Strategy with Fixed Position Sizing
To establish a performance baseline, I’ll take advantage of the Bollinger Bands and its inbuilt trailing stops.
This strategy goes long when price penetrates the upper Bollinger Band, with the lower band acting as a trailing stop loss.
With a fixed 0.1 lot size, performance has been decent from 2003-2021.
Together with its simplicity, this strategy offers a great platform for further development.
Programming a Dynamic Position Sizing Scheme
To calibrate my position sizes, I’ll add three optional conditions to the baseline strategy. If true, each of these conditions should increase the probability of a successful trade.
Since these three conditions are optional, they differ from traditional entry filters. The Bollinger Band breakout remains the only mandatory entry condition.
1. Channel Breakout Condition
For all three optional conditions, I’ll first include the Bollinger Band entry condition. This means that position sizes will only be calculated when an entry is imminent, thus reducing unnecessary EA activity.
For the first optional condition, I’ll use an 80-period SR% indicator to detect channel breakouts. It calculates the percentage of time the current close falls within the high-low range of each of the previous 80 bars.
Low SR% values mean that:
- The market is trending, or
- Prices are trading close to the top/bottom of their range.
In this case, the breakout condition is true when SR% equals 0, meaning that prices have broken out of the highest highs/lowest lows of the previous 80 periods.
Isn’t this the same as the classic Donchian breakout used by the Turtles?
Yes it is, but by using the SR% indicator and adjusting the threshold, you are also able to detect when prices are approaching (but haven’t penetrated) the boundaries of the trading range.
You can toggle the threshold to say, something in the 5-10 range, to achieve this.
For explanations on the other SR% inputs, check out my detailed guide on the SR% indicator.
2. High Volatility Condition
This high volatility condition is satisfied when the previous bar’s range (high-low) is at least twice the 14-period ATR.
The probability of a sustainable trend increases when you have an impulsive Bollinger Band penetration.
3. Moving Average Condition
This final optional condition looks for trend alignment across two timeframes. I’ll use the direction of the 30-period exponential moving average on the 4-hour timeframe.
If this EMA has been rising for at least five consecutive bars, there’s a higher probability I’ll get an uptrend on the 30-minute timeframe.
Likewise, for shorts, I’ll be looking for the 4-hour EMA to have fallen for at least five consecutive bars.
The programming structure is slightly different here, because the EMA direction has to be paired with its respective Bollinger Band breakout condition.
Calibrating Position Sizing
Position sizes will be separately calculated for every entry.
As per the baseline strategy, the default position size will be 0.1 lots.
For each of the three optional conditions that is true, I’ll add an additional 0.1 lots.
For example, if only the moving average condition is true, I’ll trade 0.2 lots. If all three optional conditions are true, I’ll trade 0.4 lots.
To program this in AlgoWizard, I’ll need a multiplier for the default 0.1 position size. This will vary from 1 to 4, thus creating lots in the 0.1 to 0.4 range.
First, I’ll need to reset the multiplier to 1. I don’t want my current position size to be affected by previous trades.
The logic tabs in AlgoWizard are executed from left to right. Next we have the three optional conditions described previously.
If any of these three conditions are satisfied, the lot multiplier is increased by 1. I’ll show the channel breakout condition as an example.
After cycling through the three optional conditions, I’ll finally compute the position size by applying the lot multiplier to the default 0.1 size.
This Lot_Size variable is then called up when programming the strategy’s market order.
That’s it for programming.
Here’s an example of a trade where the high volatility and channel breakout optional conditions were satisfied. 0.3 lots were opened as a result.
Now let’s backtest the strategy to see if the programming has paid off.
Backtesting the Dynamic Position Sizing Scheme
As per the baseline, I tested the strategy on the M30 GBPJPY, from 2003-2021.
The equity curve looks very similar because the trade sequence and profits/losses (in pips) are identical.
Here’s the breakdown of the position sizes traded:
Profit factor has increased from 1.24 to 1.30, while return/drawdown has increased from 7.13 to 11.8.
Most notably, net profit has increased 2.5x from $21200 to $55700. Is this simply the result of trading more lots, or did I successfully target the high probability trades?
To find out, I computed the average lot size of the above backtest, which came to 0.21 lots. I then retested the original strategy with a fixed 0.21 lots throughout.
The net profit was $44600 in that case. Looks like going big on the higher probability trades netted me an additional 25% profit.
Lastly, I wanted to check whether the three optional conditions were effective at picking out higher probability trades. I decided to plot the win rate for each of the four position sizes.
Indeed, entries that satisfied at least two of the optional conditions had win rates of 47%, significantly higher than the overall win rate of 41%. Despite consisting only a third of the 1640 trades, these entries accounted for 74% of the overall profits.
A dynamic position sizing scheme that increases lot sizes for higher probability trades can indeed pay dividends.
Identifying these higher probability trades is central to your success. The three optional conditions above (channel breakout, high volatility and trend alignment) adhere to traditional technical analysis principles. They are good starting points.
The lot size increments will depend on your risk appetite and account capital. If in doubt, consult your historical drawdowns and be conservative.