Choosing the best parameters for strategy with genetic algorithm
7 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Diego Makasevicius Barbosa
el 9 de Abr. de 2015
Editada: Diego Makasevicius Barbosa
el 1 de Jun. de 2015
Hello all, I developed a quantitative strategy, which it has a script that calling a function with seven parameters. The function uses some equity data (eg: price, volatility and so on). The function returns the 'sharpe ratio value'. The higher it is, the better is the result.
Is there a way to the Matlab help me to choose the best settings? I tried to use GA function without success.
-----------------------------------------------------------------------------
%%script example
x1=1;
x2=10;
x3=15;
x4=7;
x5=9;
x6=0.1;
x7=0.9;
load('Data.mat') % Price, Volume, Volatility
[sharpe] strategy(x1,x1,x1,x1,x1,x1,x1); %function
%end Script
-----------------------------------------------------------------------------
Thank you in advance!
0 comentarios
Respuesta aceptada
Mohammad Abouali
el 9 de Abr. de 2015
Editada: Mohammad Abouali
el 9 de Abr. de 2015
Let's say you have successfully coded strategy function which provided seven input parameters, it would give you the 'Sharpe Ratio Value'. From the look of it, it seems that you have designed this function as follow:
sharpe=strategy(x1,x2,x3,x4,,x5,x6,x7,x8)
You want to choose x1 to x7 in such a way that your sharpe ratio value (SRV) is maximized. You need to note two things (1) all the optimization function are minimization, so first you need to define your objective function as a minimization, and (2) different parameters should be entered to the objective function as different element of a vector (not separate variable as you have defined above.
For the reason above you can not directly feed strategy function to GA in matlab. To turn your problem from maximization to minimization, we can minimize the difference between the maximum possible sharpe ratio value to its current value which is equivalent of maximizing the sharpe value. and the second change, i.e. vector input is also easy. So define your objective function as follows:
myObjFunction=@(x) maxSRV-strategy(x(1),x(2),x(3),x(4),x(5),x(6),x(7));
where, maxSRV is the maximum value that Sharpe Ratio Value could get. If you don't know it, choose a really big number that it is going to be impossible to reach. And in your strategy code make sure that if a number above that is reached an error is produced. There are other methods to turn a maximumization into a minimization. You can try other method too.
now that you have a proper objective function pass that to GA like:
x = ga(myObjFunction,7)
that's the minimum requirement for ga, if your x1 to x7 are bounded (there is a minimum maximum value that they can get, it is always good to provide them to ga. you can do this as follows:
% Lower Bound limit
LB = {minX1,minX2,minX3,minX4,minX5,minX6,minX7];
% Upper bound
UB = {maxX1,maxX2,maxX3,maxX4,maxX5,maxX6,maxX7];
x = ga(myObjFunction,0,[],[],[],[],LB,UB)
2 comentarios
Diego Makasevicius Barbosa
el 17 de Abr. de 2015
Editada: Diego Makasevicius Barbosa
el 17 de Abr. de 2015
Mohammad Abouali
el 17 de Abr. de 2015
Fortunately MATLAB's GA already supports integer variables. All you need to do is to tell GA which parameters are integer using IntCon parameter.
x = ga(myObjFunction,0,[],[],[],[],LB,UB,[],IntCon)
IntCon lists all the parameters that are integer, for example if variable 2 and 4 can take only integer values, then set IntCon=[2, 4]. In your case if all parameters are integer simply set IntCon=1:7
Más respuestas (0)
Ver también
Categorías
Más información sobre Genetic Algorithm en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!