Optimization is the process of finding the maxima and/or minima of functions.
Because some functions are complex, this is not always possible; so if the optimization cannot find the global maxima, it can however find a local maxima (we can have multiple local maxima in a function).
Some functions have too many parameters so that an exhaustive search requires billion of billion of combination and would take thousands of years for a computer to complete, therefore some special optimizing algorithms could help us find maxima with a reasonable amount of time.
In trading, optimization could be for example, the process of finding a set of rules parameters that leads to the best trading system in term of return.
In this example the return would be the fitness formula.
The fitness is used to evaluate each combination so we can compare combinations between them.
Fitness could be the drawdown in the case we seek for a trading strategy that have low drawdown, or it could be the Sharpe ratio, or any other user designed function.
Optimization in QuantShare
There are several optimization algorithms, those who are currently implemented in QuantShare are: Genetic algorithms and Population based incremental learning.
As we said earlier, an optimization algorithm tries to find a maxima or minima of a function or problem.
In the case of QuantShare, the optimizer is currently designed to solve four types of problems.
1 – From a trading system and a set of variables that you choose, the optimizer will run several trading system and shows you which one has the greatest fitness function, which as we have seen, could be return, minimum drawdown, Sharpe…
2 – Finding the best set of rules among any list of trading rules, you just enter the trading rules and the optimizer will run the algorithm to find which combination leads to the best fitness function.
3 – Given a ranking system, the optimizer will find the best combination of nodes, formulas and weights that maximize the fitness function.
4 – Add a prediction model like a neural network and define a list of inputs and the optimizer will explore these inputs to find the combination that has the best fitness value.