Using Machine Learning to Improve Your Strategy

Using Machine Learning to Improve Your Strategy

23 September 2015, 21:38
Inovance
1
3 641
Machine learning is a powerful tool for not only coming up with new strategies (like we do in TRAIDE) but also for improving your existing strategies.


In this article, we’ll cover adjusting your position size using a random forest algorithm and turning your strategy on an off using a Hidden Markov Model. You can copy and paste the R code to try it yourself on your own strategies. This article assumes you already have a strategy. You can download the historical data set from my strategy here. If you are looking for a new strategy, you can quickly build one in TRAIDE and copy the trades from the trade table on the Dashboard to a csv. Just make sure you use the same format as the csv above.


Improving Position Sizing

Position sizing is an important, often overlooked aspect of trading. Many traders look at position sizing as a way to decrease downside risk without seeing it as a tool to increase performance. While it is important not to risk too much of your total account on each trade (usually around 2%), there are far better ways than just using a fixed lot, or fixed percentage, position size for each trade.

One logical train of thought would be to enter a larger position when your trade has a higher probability of success and a smaller position when you are less sure about the trade. Using a random forest, a popular machine-learning algorithm, we can estimate the probability of success for each trade and size accordingly (never risking more than 2% per trade of course).

I went into greater detail on using a random forest to build a Bollinger Band-based strategy for the GBP/USD and we can use a similar approach to help us determine the optimal position size.

Given my data set of historical trades (you can download it here to play around with it yourself), first we classify each trade into three categories based on its return:

  • Winning trades
    • Returns >= 10 pips
    • Ideally we want to enter into larger positions for these trades
  • Neutral trades
    • Returns < 10 pips and Returns >= -10 pips
    • We can use this as our default position size
  • Losing trades
    • Returns < -10 pips
    • We want to enter into smaller positions for these trades

Next we have to decide what information we want to use to make our decision, otherwise known as the inputs to the model. This is an area where you should use your experience with your own strategy to make a decision. A couple different options:

  • Current market conditions
    • Inputs: Volatility, trending or sideways market, etc.
    • This is appropriate if your strategy tends to perform well in certain market conditions
  • Recent performance
    • Inputs: the returns of the last “n” trades
    • If you notice your strategy goes through periods when it performs well and periods when it underperforms, this is probably the way you want to go.
  • External factors
    • Inputs: major news announcements, holidays, Mondays/Fridays, etc.
    • While some traders will avoid trading around these “external factors”, testing to see if this is justified is usually a good idea.

Let’s try using the returns of the last 3 trades to determine the position size of our next trade (you can download the R code here). We will double our position size if the model predicts the next trade will be a “Winning trade” (defined as a return over 10 pips) and cut it in half if it predicts a “Losing trade” (a return of less than -10 pips) and keep the default position size for all “Neutral trades” (returns less than 10 pips but greater than -10 pips). We train the model on the first two thirds of the data set (our historical trades) and then test it on the final third of the trades, our out-of-sample test:

TRAIDE_1

Wow! We were able to get a 20% increase in total return and increase our return per trade from 2.8 pips to over 3.3 pips just by using this fairly basic model. Not bad at all!


Turning On/Off Your Strategy


Knowing when to start and stop trading can mean the difference between success and failure. However, determining when to “turn off” your strategy is a non-trivial task. Once again we can use a popular machine-learning algorithm, known as a Hidden Markov Model (HMM), to determine market regimes where our strategy underperforms and we should stop trading. (Check out my post on using an HMM to identify market conditions).

First we have to decide what we want to use to identify the different “regimes” of our strategy’s performance. We are asking ourselves “what factors will tell us that we should stop trading our strategy?”

Let’s try using two calculations based off of a 10-period simple moving average (SMA) of our equity curve. We are going to look at both the rate of change over 5-periods and the distance between the current balance of the equity curve and the SMA line. The rate of change (ROC) should tell us if our equity curve is in a general downtrend and the distance between the lines should give us a much more sensitive measure of how the strategy is performing.

Now, based on these two inputs, we will us a 2-state HMM model to decide when we should “turn off” our strategy (you can download the R code here):


TRAIDE_2

We will then look at the performance of the strategy if we stop trading whenever the HMM model classifies the strategy in “Regime 2” (be sure that you shift the HMM’s classification back one data point so you are only using data that would actually be available):

TRAIDE_3

Once again, we see a significant increase in performance! We were able to see a 13% increase in return despite decreasing our number of trades from 1259 to 726, almost doubling our return per trade from 2.1 pips to 4.2 pips, and increase our accuracy from 60% to 67%!

Combining Our Models

Finally, let’s see what happens when we combine our random forest position sizing model with the HMM regime shifting model on our out-of-sample data set:

TRAIDE_4

By both adjusting our position size based on a random forest model and halting trading when conditions were unfavorable we were able to significantly increase the performance of our strategy. The final return was 44% higher despite having 133 less trades, leading to our return per trading jumping from 2.7 pips to 5.7 pips and the accuracy increasing from 64% to 70%.

Machine learning algorithms and techniques can be a powerful weapon in your arsenal when looking to improve the performance of your strategy.

At Inovance, we use machine-learning algorithms as a method to uncover patterns in the indicators you use to trade but as we saw here, that is just one way to leverage these powerful algorithms to make you a successful trader.