Continuing with the considerations about performance measures, I want to introduce the fitness function I am currently using as well as a simple trick to use it to avoid curve fitting.
To use some actual figures as an example, here are the results of a strategy I am testing :
Sharpe Ratio = 1.30
3y T-Stat = 2.25
Profit Factor = 1.28
Average win = 0.23
Average loss = 0.11
Win Rate = 38.43%
Expected Gain = 0.02
Bliss function = 2.82
Although the Win Rate is quite low, the strategy still looks profitable thanks to the Average win being more than double the Average loss.
You can notice the last performance measure called “Bliss function”. The term was originally coined by Ed Seykota (you may have heard of him if you read “Market Wizards”) and it basically just denotes a fitness function.
The way I am currently defining my bliss function is the following:
bliss_function = sh + 2*(profit_factor -1) + 50*expected_gain;
The weights are chosen in such a way to make different performance metrics figures comparable.
One of the principal uses for the bliss/fitness function is to pass it as the objective function for an optimization algorithm. The risk in doing this however is to fall in some curve fitting.
A simple trick to help avoiding this (besides performing insample/outsample analysis or walk-forward optimization), is to check whether the strategy is robust versus small changes in parameters values. To do this, we can just use as our objective function a sum of bliss functions evaluated in surroundings of the parameters values (you can define “surroundings” as the vertices of a simplex centred in the point we want to evaluate).