|
|
MetaTrader 4 Backtesting & Optimization
To get the most out of your expert advisor, you'll
need to optimize
and backtest your strategy using MetaTrader's Strategy Tester. While
forward testing on a demo account is essential, backtesting allows you
to simulate trading over a long period of time in just minutes. And
with the optimization feature, you can find out which settings
performed best over a selected historical chart period.
There is considerable debate over the accuracy of
MetaTrader's strategy tester. At best, backtesting offers only a close
approximation of how trades would be executed in real-time. But it's
the only tool available to rapidly test any strategy over a wide range of
trading situations, and one that you should learn how to use
well.
Open the Strategy Tester in MetaTrader by clicking
the appropriate
button on the toolbar or by selecting Strategy Tester
from the View menu.
History Data
Before backtesting or optimizing, it's important
to make sure that your history data is complete and accurate,
especially if you're using 'Every tick' as your testing model. If you
see 'mismatched chart' errors in your Journal log or if your modeling
quality is less than 90%, your history data is insufficient to generate
accurate ticks.
Open the History Center
from the Tools
menu or by pressing F2
on your keyboard. Double click the chart pair in the left column that
you plan to backtest for. A list of time periods will appear below.
Start by double clicking on 1
Minute (M1) to load the history data for that period. The
backtester uses M1 data to generate ticks, so it is important that your
M1 data is complete.
Click the Download button to download the full history data for that
pair and period. You may receive a Download Warning message - hit OK to
continue. The history center will commence downloading. Repeat this
process for every other time period and pair that you plan to test with.
You can also import history data into the History center, using
accurate historical price data from Alpari. The Alpari databank has M1 data for
over a dozen popular currency pairs. Download and unzip the history
data to your hard drive. Click the Import
button in the History Center window, and then click Browse to select
the history data file (.hst).
You can also convert this accurate M1 data to other timeframes using
the Period Converter script. See this tutorial for more
information on how to do this.
Optimization
The optimization feature of MetaTrader 4 allows
you to test
thousands of combinations of expert advisor settings to find the most
profitable settings for the selected chart, period and date range.
Indicator-based strategies will need to be optimized for maximum
profitability. However, almost all EAs will benefit from optimization -
even those that trade on tick data, provided you have complete M1
history data (see above).
While the optimizer will return the most
profitable settings
for the selected date range, this is no guarantee that these
settings will be profitable in the future. Market conditions change
often, so it is important to regularly re-optimize your expert
advisor for best results. Read on for more information on how to
properly optimize your expert advisor for profitability.
To optimize your expert advisor, first select it
from the Expert Advisor
drop-down box. Select the currency pair from the Symbol box and
chart period from the Period
box. For Model,
you'll generally want to select "Open Prices Only," unless you are
optimizing an EA that runs on tick data. In that case, select "Every
Tick." Check the Use
Date option and select a range of dates to optimize for.
Lastly, make sure that Optimization is checked.
Click the Expert
Properties button to open your expert advisor settings.
Under the Inputs tab is where you'll enter the
range of values to optimize for. The Start column
will be the lowest value for a given setting, while the Stop
column will be the highest. The Step column is the
amount that the optimizer will "step through" from the Start to the
Stop setting.
In the image above we are optimizing SL, TS and TP
settings for an expert advisor. The Start value is 20, the Step is 20,
and the Stop is 200. The optimizer will test every combination of
values from 20, 40, 60 and so on up to 200. Use a start, step and stop
value that is appropriate for the setting you are optimizing. Even
values (5, 10, etc.) are good.
The checkbox to the far left must be selected for
that setting to be optimized. Any settings that aren't checked will use
the number in the Value column when optimizing.
Under the Testing tab, you can adjust the Initial
Deposit to something a bit more realistic. Leave the other
settings at their defaults.
When you're ready to begin optimizing, hit the Start
button at the bottom right of the Strategy Tester window. Depending on
the period, the date range, the testing model and the number of
settings to be optimized it can take anywhere from a few minutes to
several hours. If it's taking too long, consider shortening the date
range, optimizing fewer settings, or using a larger step value.
Once the optimization is finished, open the Optimization
Results tab and double-click the Profit
column to sort the results. Double-click any of the results to load it
into the tester. Hit the Start button again to backtest with the
selected settings.
Backtesting
By now, it should be obvious how the backtester
works. Select your Expert Advisor, Symbol,
Period and Model,
check the Use Date box and select a date range.
Select Visual Mode only if you want a visual
walkthrough of the backtesting. Leave Optimization
unchecked.
Hit the Expert Properties
button and enter your settings in the Value column
under the Inputs tab. You can also load or save
settings using the buttons in the bottom right. The Start,
Step and Stop columns are ignored, as are
the checkboxes.
Close the Expert Properties dialog and press Start
to begin testing. It will take anywhere from a few seconds to several
minutes depending on your settings. Once testing has finished, open the
Report tab on the bottom to see your
results.
A few statistics to take note of:
- Total net profit - The Gross
profit minus the Gross loss.
- Profit factor - The ratio of
gross profit to gross loss. Higher is better, anything above 2 is
acceptable.
- Absolute drawdown - The
drawdown of your initial deposit. High drawdowns increase the
likelihood that your account will be blown out.
- Profit trades - Your overall
win percentage.
- Modeling quality - Only
important if your testing model is Every Tick. If
so, this should be at 90%. If not, follow
the instructions above to update your history with accurate M1 data.
The Results tab at the bottom
of the strategy tester will give you the details on opened and closed
orders, including trailing stop, take profit and stop loss. Click the Open
Chart button to get a visual representation of your results.
When testing your new EA, examine these closely to ensure that your
strategy is working as intended.
Optimizing for Best Results
When optimizing your EA, you should optimize as
few parameters as possible. Optimizing too many
parameters leads to curve-fitting,
which produces great results in optimization, but performs
poorly in real time trading.
For indicator-based strategies, the period
settings for your indicators will have the greatest impact on your
results. Risk-based settings such as lot size, stop loss and take
profit should be set according to your predetermined risk profile. Other settings can be left at their defaults. The surest way to evaluate real-time performance based on optimized
results is to do a walk-forward
analysis. This
involves optimizing your EA over a reasonably large time period (the optimization window),
and then testing
your optimized parameters over a shorter time period following the
optimization window (the walk-forward
window).
Be
sure to choose an optimization window that is large enough to include a
sufficient number of trades, as well as a
variety of
market conditions. Optimizing a daily chart on 1 months data is
not enough to generate sufficient testing data. On the other hand,
optimizing a 1 minute chart over several years is probably overkill.
The
walk-forward window should be roughly 25% of the size of the
optimization window. A parameter set optimized over a 1 year window,
for example, will only be good for a few months before performance
starts to degrade. Your results may vary, however.
By repeating the process of optimizing and forward testing over many consecutive testing windows
and across several chart pairs, we can get a good idea of how our EA
really
performs. Short of real-time trading, which would take months,
if not years, this is the best way to evaluate an EA's performance.
Let's say we have a trend-following strategy that uses
2 MACD indicators. Trades are only placed when both indicators agree,
so this strategy is not always in the market. We are optimizing the
FastEMA and SlowEMA only. Our lot size is set to 2% of our equity, and
our stop loss is set to 5% of our equity. The starting balance is 1000.
We
are trading this strategy on the GBPUSD on an H1 chart period, and we
have determined that an optimization window of 12 months will give us a
large enough sample to work with. This gives us an average of
approximately 100 trades over the optimization window.
We optimize the strategy from
12.01.2006 to 11.31.2007, using "Open prices only" as our testing
model.
(Using "Every tick" as the testing model can take a long time, so
optimize as few parameters as possible if you do).
Sort the results
in the Optimization Results window by profit, and look for a good
parameter set to test with. Don't automatically pick the result with
the largest profit. If a result is significantly more profitable than
the rest, then it is a statistical
outlier
and not representative of the performance of your EA. Look for settings
that are profitable across multiple result sets, and choose a
representative result to test.
This is also a good time
to examine the percentage of the results that have a profit or a loss.
Sort the results by profit and scroll down through the list. A robust
strategy should have a high percentage of profitable result sets. Also
take note of the profit factor and the drawdown.
If
the profit factor is less than 1.5, and too close to 1.0, you're losing
too much of your gross profit to losses. The drawdown percentage
should ideally be around 10-15%, and no more than 20%. If your drawdown
consistently exceeds
this, then you are either taking on too much risk (large lot size or
stop loss), or the strategy is potentially unprofitable.
For our strategy above, we've
chosen the top performing result set with a profit of 117.75.
Now we're going to test it over the walk-forward window. Since we
used an optimization window of 12 months, we'll use a walk-forward
window of 4 months
to test our optimized results.
We test our optimized results
(make sure Optimization is unchecked!) from 12.01.2007 to 3.31.2008.
Our
result for this period is a profit of 104.27 in just 4 months. This is
a good result.
But we're not done yet.
Now we must repeat our optimization and testing process many times and
keep track of our results to get a better idea of the forward
performance of our EA. Since we used a testing period of 4 months,
we'll step forward our optimization window to 4.01.2007 - 3.31.2008.
Then we'll test our optimized result in a walk-forward window from
4.01.2008 - 7.31.2008.
Our
second round gave us an optimized profit of 415.02, with a walk-forward
loss of -296.30. In this case, the optimized
parameters did not perform as well in the walk-forward. Here are the
results of two years of walk-forward testing for this strategy:
Optimized
(12
months) |
Walk-forward
(4
months) |
| 167.74 |
302.73 |
| 321.88 |
-115.73 |
| 277.31 |
89.96 |
| 396.92 |
-130.13 |
| 117.75 |
104.20 |
| 415.02 |
-296.30 |
As you can see, the results are mixed.
The strategy made money in 3 out of 6 walk-forward periods. But our
total profit for our walk-forward testing is -45.27. Clearly this
strategy needs some work. Several more years of testing may provide a
more statistically significant sample, but for our purposes this is
sufficient.
If your results are more favorable than these, you
can calculate the walk-forward
efficiency. This is an annualized ratio between the
optimized results and the walk-forward results.
First, add up all of the optimized results.
Then divide that by the total number of years in your
optimization windows. In the example above, we have 6 optimization
windows of 12 months each, so we would divide by 6. This is
your optimized annual return.
Then, add up the walk-forward results and divide
that by the total number of years in your walk-forward windows. This is
your walk-forward annual return. Divide this by the optimized
annual return and you should have a ratio or percentage. This is your
walk-forward efficiency.
A walk-forward efficiency of 50% (0.5) or greater is desirable. If it's less than this, your system is likely unprofitable.
If you plan on trading an EA on several pairs, you
will want to repeat this process for each pair you plan on trading.
©2008
EasyExpertForex.com
|