Получилось собрать в одном месте сразу несколько алгоритмов оптимизации и создать простой механизм их использования.
Механизм.
Помещаем советник в Тестер и используем 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
Практика.
Есть различные сценарии применения алгоритмов Оптимизации. Приложенные исходники помогают значительно быстрее разобраться, как начать работать, не вникая в технические и алгоритмические особенности.
Ссылка на блог автора.