Optimization - несколько алгоритмов оптимизации в одном месте.

20 января 2024, 15:52
fxsaber
3
341

Получилось собрать в одном месте сразу несколько алгоритмов оптимизации и создать простой механизм их использования.


Механизм.

Помещаем советник в Тестер и используем GUI вкладки Inputs, чтобы настроить входные параметры для оптимизации.


Затем можем не только запустить штатный Оптимизатор, но и кастомный - подхватит настройки, что задали через GUI.


Пример.

В качестве примера взят советник, состоящий из одного OnTester, - такие запускаются в штатном Оптимизаторе в режиме математических вычислений.

#include <fxsaber\Input_Struct\Input_Struct.mqh> // https://www.mql5.com/ru/code/47932

INPUT_STRUCT inInputs;

MACROS_INPUT(int, Amount, 1);
MACROS_INPUT(int, Count, 2); 
MACROS_INPUT(int, Period, 3);

MACROS_INPUT(double, Koef, 4.56);
MACROS_INPUT(double, Log, 7.89);

MACROS_INPUT(bool, Flag, true);

// ФФ для штатного Оптимизатора - пример.
double OnTester()
{
  return(MathSin(inInputs.Amount) *
         MathSin(inInputs.Count) *
         MathSin(inInputs.Period) *
         MathSin(inInputs.Koef) *
         MathSin(inInputs.Log) *
         (inInputs.Flag ? 1 : -1));
}

#include <fxsaber\Optimization\Optimization_Addon.mqh> // Кастомный оптимизатор.

В данном случае кастомный оптимизатор подключается одной строкой - в конце.


Кастомный Оптимизатор.

При запуске советника в Терминале можете выбрать соответствующий алгоритм оптимизации.

После чего получите данные результатов кастомной оптимизации (см. абзац Механизм).

BestResult = 0.8914240153964569: Amount = 58, Count = 2, Period = 30, Koef = 11.0, Log = 7.89, Flag = true
Check = 0.8914240153964569: Amount = 58, Period = 30, Koef = 11.0

Лучший набор входных параметров и значение OnTester для него.


Штатный Оптимизатор.

Если запустить советник в штатном Оптимизаторе (нажать на Start в Тестере), то есть возможность сравнить результаты кастомного и штатного оптимимзаторов.


Алгоритмы Оптимизации.

На MQL5-ресурсе были взяты (без изменения исходников - их надо самостоятельно скачать и разместить в MQL5-папке) несколько открытых реализаций алгоритмов Оптимизации.


Все тот же пример позволяет осуществить оптимизацию сразу всеми представленными методами.


PSO Finished 2764 of 30000 planned passes: true
BestResult = 0.8914820182251842: Amount = 80, Count = 2, Period = 30, Koef = 7.81, Log = 7.89, Flag = true
Check = 0.8914820182251842: Amount = 80, Period = 30, Koef = 7.81

01: OPTIMIZATION_METHOD_AO_Micro_AIS
OPTIMIZATION_METHOD_AO_Micro_AIS
BestResult = 0.9068686525004159: Amount = 77, Count = 2, Period = 33, Koef = 7.8, Log = 7.89, Flag = true
Check = 0.9068686525004159: Amount = 77, Period = 33, Koef = 7.8

02: OPTIMIZATION_METHOD_AO_POES
OPTIMIZATION_METHOD_AO_POES
BestResult = 0.9068686525004159: Amount = 77, Count = 2, Period = 33, Koef = 7.8, Log = 7.89, Flag = true
Check = 0.9068686525004159: Amount = 77, Period = 33, Koef = 7.8

03: OPTIMIZATION_METHOD_AO_P_O_ES
OPTIMIZATION_METHOD_AO_P_O_ES
BestResult = 0.9082452755000358: Amount = 55, Count = 2, Period = 33, Koef = 17.259999999999998, Log = 7.89, Flag = true
Check = 0.9082452755000358: Amount = 55, Period = 33, Koef = 17.259999999999998

04: OPTIMIZATION_METHOD_AO_SC
OPTIMIZATION_METHOD_AO_SC
BestResult = 0.8902821965730559: Amount = 11, Count = 2, Period = 33, Koef = 17.48, Log = 7.89, Flag = true
Check = 0.8902821965730559: Amount = 11, Period = 33, Koef = 17.48

05: OPTIMIZATION_METHOD_AO_SIA
OPTIMIZATION_METHOD_AO_SIA
BestResult = 0.9025570255671865: Amount = 11, Count = 2, Period = 33, Koef = 10.88, Log = 7.89, Flag = true
Check = 0.9025570255671865: Amount = 11, Period = 33, Koef = 10.88

06: OPTIMIZATION_METHOD_AO_SA
OPTIMIZATION_METHOD_AO_SA
BestResult = 0.9077141693512147: Amount = 33, Count = 2, Period = 33, Koef = 14.18, Log = 7.89, Flag = true
Check = 0.9077141693512147: Amount = 33, Period = 33, Koef = 14.18

07: OPTIMIZATION_METHOD_AO_NMm
OPTIMIZATION_METHOD_AO_NMm
BestResult = 0.7688872446124848: Amount = 33, Count = 2, Period = 23, Koef = 10.99, Log = 7.89, Flag = true
Check = 0.7688872446124848: Amount = 33, Period = 23, Koef = 10.99

08: OPTIMIZATION_METHOD_AO_DE
OPTIMIZATION_METHOD_AO_DE
BestResult = 0.9085923555712585: Amount = 11, Count = 2, Period = 33, Koef = 4.720000000000001, Log = 7.89, Flag = true
Check = 0.9085923555712585: Amount = 11, Period = 33, Koef = 4.720000000000001

09: OPTIMIZATION_METHOD_AO_SDOm
OPTIMIZATION_METHOD_AO_SDOm
BestResult = 0.9068686525004159: Amount = 77, Count = 2, Period = 33, Koef = 7.8, Log = 7.89, Flag = true
Check = 0.9068686525004159: Amount = 77, Period = 33, Koef = 7.8

10: OPTIMIZATION_METHOD_AO_IWDm
OPTIMIZATION_METHOD_AO_IWDm
BestResult = 0.9071223204616818: Amount = 33, Count = 2, Period = 33, Koef = 7.91, Log = 7.89, Flag = true
Check = 0.9071223204616818: Amount = 33, Period = 33, Koef = 7.91

11: OPTIMIZATION_METHOD_AO_CSS
OPTIMIZATION_METHOD_AO_CSS
BestResult = 0.7827785541604321: Amount = 99, Count = 2, Period = 33, Koef = 17.810000000000002, Log = 7.89, Flag = true
Check = 0.7827785541604321: Amount = 99, Period = 33, Koef = 17.810000000000002

12: OPTIMIZATION_METHOD_AO_SDS
OPTIMIZATION_METHOD_AO_SDS
BestResult = 0.9086045559297092: Amount = 11, Count = 2, Period = 33, Koef = 10.99, Log = 7.89, Flag = true
Check = 0.9086045559297092: Amount = 11, Period = 33, Koef = 10.99

13: OPTIMIZATION_METHOD_AO_SDSm
OPTIMIZATION_METHOD_AO_SDSm
BestResult = 0.8955299135348093: Amount = 58, Count = 2, Period = 33, Koef = 14.258400000000002, Log = 7.89, Flag = true
Check = 0.8955299135348093: Amount = 58, Period = 33, Koef = 14.258400000000002

14: OPTIMIZATION_METHOD_AO_MEC
OPTIMIZATION_METHOD_AO_MEC
BestResult = 0.9077141693512147: Amount = 33, Count = 2, Period = 33, Koef = 14.18, Log = 7.89, Flag = true
Check = 0.9077141693512147: Amount = 33, Period = 33, Koef = 14.18

15: OPTIMIZATION_METHOD_AO_SFL
OPTIMIZATION_METHOD_AO_SFL
BestResult = 0.9083788041182204: Amount = 55, Count = 2, Period = 33, Koef = 4.720000000000001, Log = 7.89, Flag = true
Check = 0.9083788041182204: Amount = 55, Period = 33, Koef = 4.720000000000001

16: OPTIMIZATION_METHOD_AO_EM
OPTIMIZATION_METHOD_AO_EM
BestResult = 0.8438515843356478: Amount = 83, Count = 2, Period = 33, Koef = 13.85, Log = 7.89, Flag = true
Check = 0.8438515843356478: Amount = 83, Period = 33, Koef = 13.85

17: OPTIMIZATION_METHOD_AO_SSG
OPTIMIZATION_METHOD_AO_SSG
BestResult = 0.9086045559297092: Amount = 11, Count = 2, Period = 33, Koef = 10.99, Log = 7.89, Flag = true
Check = 0.9086045559297092: Amount = 11, Period = 33, Koef = 10.99

18: OPTIMIZATION_METHOD_AO_MA
OPTIMIZATION_METHOD_AO_MA
BestResult = 0.8976054599598875: Amount = 77, Count = 2, Period = 33, Koef = 14.290000000000001, Log = 7.89, Flag = true
Check = 0.8976054599598875: Amount = 77, Period = 33, Koef = 14.290000000000001

19: OPTIMIZATION_METHOD_AO_HS
OPTIMIZATION_METHOD_AO_HS

Error optimization!

20: OPTIMIZATION_METHOD_AO_GSA
OPTIMIZATION_METHOD_AO_GSA
BestResult = 0.9083910016091539: Amount = 55, Count = 2, Period = 33, Koef = 10.99, Log = 7.89, Flag = true
Check = 0.9083910016091539: Amount = 55, Period = 33, Koef = 10.99

21: OPTIMIZATION_METHOD_AO_GSA_Stars
OPTIMIZATION_METHOD_AO_GSA_Stars

Error optimization!

22: OPTIMIZATION_METHOD_AO_BFO
OPTIMIZATION_METHOD_AO_BFO
BestResult = 0.9077471270774483: Amount = 99, Count = 2, Period = 33, Koef = 17.259999999999998, Log = 7.89, Flag = true
Check = 0.9077471270774483: Amount = 99, Period = 33, Koef = 17.259999999999998

23: OPTIMIZATION_METHOD_AO_IWO
OPTIMIZATION_METHOD_AO_IWO
BestResult = 0.7634700026405713: Amount = 99, Count = 2, Period = 33, Koef = 17.259999999999998, Log = 7.89, Flag = true
Check = 0.9077471270774483: Amount = 99, Period = 33, Koef = 17.259999999999998

24: OPTIMIZATION_METHOD_AO_BA
OPTIMIZATION_METHOD_AO_BA
BestResult = 0.87353869613809: Amount = 17, Count = 2, Period = 33, Koef = 10.99, Log = 7.89, Flag = true
Check = 0.87353869613809: Amount = 17, Period = 33, Koef = 10.99

25: OPTIMIZATION_METHOD_AO_FAm
OPTIMIZATION_METHOD_AO_FAm
BestResult = 0.7680735833732726: Amount = 55, Count = 2, Period = 23, Koef = 14.18, Log = 7.89, Flag = true
Check = 0.7680735833732726: Amount = 55, Period = 23, Koef = 14.18

26: OPTIMIZATION_METHOD_AO_FSS
OPTIMIZATION_METHOD_AO_FSS
BestResult = 0.8778276043544112: Amount = 61, Count = 2, Period = 33, Koef = 10.99, Log = 7.89, Flag = true
Check = 0.8778276043544112: Amount = 61, Period = 33, Koef = 10.99

27: OPTIMIZATION_METHOD_AO_COAm
OPTIMIZATION_METHOD_AO_COAm
BestResult = 0.9083910016091539: Amount = 55, Count = 2, Period = 33, Koef = 10.99, Log = 7.89, Flag = true
Check = 0.9083910016091539: Amount = 55, Period = 33, Koef = 10.99

28: OPTIMIZATION_METHOD_AO_GWO
OPTIMIZATION_METHOD_AO_GWO
BestResult = 0.8900729486572811: Amount = 55, Count = 2, Period = 33, Koef = 17.48, Log = 7.89, Flag = true
Check = 0.8900729486572811: Amount = 55, Period = 33, Koef = 17.48

29: OPTIMIZATION_METHOD_AO_ABC
OPTIMIZATION_METHOD_AO_ABC
BestResult = 0.8288764396911174: Amount = 61, Count = 2, Period = 33, Koef = 10.66, Log = 7.89, Flag = true
Check = 0.8288764396911174: Amount = 61, Period = 33, Koef = 10.66

30: OPTIMIZATION_METHOD_AO_ACOm
OPTIMIZATION_METHOD_AO_ACOm
BestResult = 0.9077141693512147: Amount = 33, Count = 2, Period = 33, Koef = 14.18, Log = 7.89, Flag = true
Check = 0.9077141693512147: Amount = 33, Period = 33, Koef = 14.18

31: OPTIMIZATION_METHOD_AO_PSO
OPTIMIZATION_METHOD_AO_PSO
BestResult = 0.9083788041182204: Amount = 55, Count = 2, Period = 33, Koef = 4.720000000000001, Log = 7.89, Flag = true
Check = 0.9083788041182204: Amount = 55, Period = 33, Koef = 4.720000000000001

32: OPTIMIZATION_METHOD_AO_RND
OPTIMIZATION_METHOD_AO_RND
BestResult = 0.8900729486572811: Amount = 55, Count = 2, Period = 33, Koef = 17.48, Log = 7.89, Flag = true
Check = 0.8900729486572811: Amount = 55, Period = 33, Koef = 17.48


Практика.

Есть различные сценарии применения алгоритмов Оптимизации. Приложенные исходники помогают значительно быстрее разобраться, как начать работать, не вникая в технические и алгоритмические особенности.


Ссылка на блог автора.

Файлы:
Поделитесь с друзьями: