Оптимизация в Тестере стратегий - страница 7

 

Если кратко:

  • Разумная достаточность - это уложиться в поисковое поле 2 в 64 степени
  • Разумное поведение - это предварительная оценка области поиска вместо выкручивания всех перебираемых переменных на максимум

Рашид, вряд ли кто-то решится на прямой перебор. Генетический оптимизатор 2^64 легко проверит, но это не означает, что нужно выставлять неограниченные поисковые области. Нам ведь гены приходится генерировать под эти области, а потом ими манипулировать.

 
Rosh:

Хорошо, давайте посчитаем. Пусть один проход в тестере занимает 1 секунду, тогда число проходов 2^64-1 разделим на 60 и получим время оптимизации в минутах: 18 446 744 073 709 551 615/60.

Далее, разделим это время на 8 (8 ядер на компьютере) и получим время оптимизации с таким количеством проходов на 8-ядернике. Сколько это займет в часах или днях?

Не надо считать, я не говорю о прямом переборе. Пусть генетический алгоритм сам определит сколько ему надо.

Если сравнивать с человеческим мозгом, то по мнению ученых в мозге содержится примерно 10^10 нейронов и у каждого около 10^4 синоптических связей.

К чему мы все и стремимся, создавая всё более продвинутые программы.

 

Для чего делали облачные вычисления? Благодаря этому пользователи могут не ограничиваться одним компьютером, за что огромное спасибо. 

Генетические алгоритмы - это просто!
Генетические алгоритмы - это просто!
  • 2010.05.25
  • Andrey Dik
  • www.mql5.com
В статье автор расскажет об эволюционных вычислениях с использованием генетического алгоритма собственной реализации. Будет показано на примерах функционирование алгоритма, даны практические рекомендации по его использованию.
 
Renat:

Если кратко:

  • Разумная достаточность - это уложиться в поисковое поле 2 в 64 степени
  • Разумное поведение - это предварительная оценка области поиска вместо выкручивания всех перебираемых переменных на максимум

Рашид, вряд ли кто-то решится на прямой перебор. Генетический оптимизатор 2^64 легко проверит, но это не означает, что нужно выставлять неограниченные поисковые области. Нам ведь гены приходится генерировать под эти области, а потом ими манипулировать.

Что такое 2 в 64 - это надуманная проблема.

В генетическом алгоритме не обязательно сохранять самые худшие результаты? 

Что мешает, чтобы выкрутить все переменные на максимум?

 

Никак не могу понять какая связь между генами и 2^64?

Генетические алгоритмы - это просто!
Генетические алгоритмы - это просто!
  • 2010.05.25
  • Andrey Dik
  • www.mql5.com
В статье автор расскажет об эволюционных вычислениях с использованием генетического алгоритма собственной реализации. Будет показано на примерах функционирование алгоритма, даны практические рекомендации по его использованию.
 

Все таки может пригодится перебирать много переменных(например Нейронная сеть) и это ограничение както не очень.

Так что надеемся на свободу от ограничений)) 

 

Судя по всему в тестере стратегий используется ГА с двоичным кодированием хромосом.

Приведу цитату:

"Однако двоичное представление хромосом влечет за собой определенные трудности при поиске в непрерывных пространствах большой размерности, и когда требуется высокая точностьфенотип используется специальный прием, основанный на том, что весь интервал допустимых значений признака объекта [ai,bi] разбивается на участки с требуемой точностью. Заданная точность p определяется выражением:


где N – количество разрядов для кодирования битовой строки.

Эта формула показывает, что p сильно зависит от N, т.е. точность представления определяется количеством разрядов, используемых для кодирования одной хромосомы. Поэтому при увеличении N пространство поиска расширяется и становится огромным. Известный книжный пример: пусть для 100 переменных, изменяющихся в интервале [-500; 500], требуется найти экстремум с точностью до шестого знака после запятой. В этом случае при использовании ГА с двоичным кодированием длина строки составит 3000 элементов, а пространство поиска – около 101000 хромосом."

Поэтому, даже сравнительно небольших размеров нейронную сеть в штатном оптимизаторе, при ограничении до 64 оптимизируемых параметра, обучить не удастся. Есть и ещё одно неудобство - весьма трудоёмок процесс заполнения вручную параметров оптимизируемых переменных если их много. Поэтому я уже предлагал ввести возможность указания массивов с оптимизируемыми параметрами программно.

Но есть и хорошая новость. Всё, чего не хватает в тестере и терминале, можно реализовать штатными средствами языка MQL5. Чуть позже выложу результаты нескольких нескольких тестовых задач оптимизации тестером и программным  способом.

 

Впрочем, я так и не дождался результатов от тестера на тестовой задаче (в смысле, ждать лениво).

Но любой желающий может провести тесты самостоятельно. Для этого можно взять первый пример из статьи. Не забудьте поставить режим оптимизации - поиск максимума (что бы можно было сравнивать со штатным оптимизатором, в котором предусмотрено только максимизация).

Напишем простейший эксперт, который даже проще чем паренная репа, и который ничего не делает, а только считает пользовательскую тестовую функцию:

//+------------------------------------------------------------------+
//|                                                  Test expert.mq5 |
//|                                      Copyright 2010, JQS aka Joo |
//|                              https://www.mql5.com/ru/users/joo |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, JQS aka Joo"
#property link      "https://www.mql5.com/ru/users/joo"
#property version   "1.00"
//--- input parameters
input double   x1=0.0;
input double   x2=0.0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

  }
//+------------------------------------------------------------------+

double OnTester()
  {
   return
   (
    pow(cos((double)(2*x1*x1))-0.11e1,0.2e1)+
    pow(sin(0.5e0 *(double) x1)-0.12e1,0.2e1) -
    pow(cos((double)(2*x2*x2))-0.11e1,0.2e1)+
    pow(sin(0.5e0 *(double) x2)-0.12e1,0.2e1)
    );
  }
//+------------------------------------------------------------------+

В окне тестера выставляем настройки так:


Во вкладке "Входные параметры" делаем так:


И вперёд.

Приблизительные выводы такие:

1) Оптимизатор в тестере работает в 10-100 раз медленне (у меня так получалось, даже несмотря на то, что оптимизация в тестере проводилась на двух ядрах процессора, а программная на одном). Скорее всего, такая чудовищная разница связана с тем, что тестеру, кроме прямых вычислений ФФ, нужно писать логи, выводить информацию на экран, и т.д., то есть, присутствуют "вынужденные тормоза", в отличии от программной оптимизации.

2) Невозможно использовать более 64 оптимизируемых параметров в тестере(а в визарде создания экспертов и вовсе стоит ограничение на 60 параметров) , поэтому, невозможно производить обучение сколь ни будь серьёзных размеров нейронные сети.

Остаётся либо писать самостоятельно тесторозаменители (MQL5 это позволяет, отличная "удочка" а не "рыба"), либо ждать, что двоичный генетический алгоритм тестера заменят на непрерывный и тем самым снимутся ограничения на количество оптимизируемых параметров. Второе не конструктивно, поэтому остается первое. :)

Глобальный вывод: Учим MQL5.


PS Хорошим решением было бы введение возможности отключать вывод информации об оптимизации (логи, график оптимизации), а ещё лучше возможность настраивать детальность выводимой информации с целью увеличения производительности тестера.

 
joo, тут ещё в чём дело, помимо написания тестера и оптимизатора для таких не малых вычислений нужно ещё сделать и распределитель вычислений, что бы задействовать все ядра процессора и возможно подключить удалённые агенты (если проводить коллективные вычисления). Во первых по скорости это не как не сравниться с стандартным тестером - всё будет работать намнооого медленней, а во вторых на написания всего этого нужно потратить уйму времени и сотни килобайт кода, а всё из-за чего то собственно?
 
Mr.FreeMan:
joo, тут ещё в чём дело, помимо написания тестера и оптимизатора для таких не малых вычислений нужно ещё сделать и распределитель вычислений, что бы задействовать все ядра процессора и возможно подключить удалённые агенты (если проводить коллективные вычисления). Во первых по скорости это не как не сравниться с стандартным тестером - всё будет работать намнооого медленней, а во вторых на написания всего этого нужно потратить уйму времени и сотни килобайт кода, а всё из-за чего то собственно? 
GA от joo уже работает быстрее стандартного, а при переносе кода в CPP 10-й студией (адаптированной под многоядерные процы) ускорение ещё в 6 раз.
 
Mr.FreeMan:
joo, тут ещё в чём дело, помимо написания тестера и оптимизатора для таких не малых вычислений нужно ещё сделать и распределитель вычислений, что бы задействовать все ядра процессора и возможно подключить удалённые агенты (если проводить коллективные вычисления). Во первых по скорости это не как не сравниться с стандартным тестером - всё будет работать намнооого медленней, а во вторых на написания всего этого нужно потратить уйму времени и сотни килобайт кода, а всё из-за чего то собственно

Про красное Urain ответил.

А на счет зелёного - из за денег конечно. Время - деньги. Я, обычно, медленно запрягаю, но зато потом быстро еду (на разработку и отладку ГА потратил больше года), и теперь продолжают, после публикации статьи, приходить в личку благодарственные сообщения. :)

Я не хаю штатный тестер. Акцентирую только внимание разработчиков на то, на что необходимо уделить особое внимание. Ведь, какой бы хороший не был оптимизатор (именно оптимизатор, а не тестер), если он чудовищно медленный, то все его плюсы сходят на нет.

 

Только что меня посетила дерзкая мысль. Хотя, собственно, поркуа бы и не па?

Для меня большой честью будет использование компанией  MetaQuotes Software Corp. моего UGA в оптимизаторе MetaTrader 5. Совершенно безвозмездно, хотя от премиальных не откажусь конечно.

UGA прост, и эффективен. Очень гибкий в настройках. Можно в тестере ввести три шаблона настроек - "Грубый", "Средний" и "Точный", а также вывести отдельно эдванс настройки с указанием "Если Вы не представляете точно, за чем это Вам нужно, то ни чего не меняйте в этих настройках". Тогда можно будет проводить оптимизацию с нужной степенью детализации поиска - от очень быстрого прикидочного до точного итогового поиска оптимальных настроек ТС. В данный момент штатный оптимизатор ни как не позволяет себя настраивать.

Торговая платформа MetaTrader 5 для организации брокерского обслуживания / MetaQuotes Software Corp.
  • www.metaquotes.net
Торговая платформа MetaTrader 5 предназначена для проведения торговых операций на различных финансовый рынках. Терминал обладает большой базой аналитических возможностей и поддерживает более 70 различных инструментов для выполнения технического анализа
Причина обращения: