MetaTrader 5 Strategy Tester! - страница 99

 
Renat Fatkhullin:

Поставим задачу просто и чисто для проверки способностей тестера подбирать целевую функцию:

  • 50 оптимизируемых переменных, которые являются символами от 'a' до 'z' английского алфавита (от 97 до 122 с шагом 1)
  • нужно получить целевую строку "millionsxofxresidentsxchinasxnorthwesternxregionsx" в 50 символов. чтобы упростить перебор, пробелы заменены на x. на суть это не влияет
  • исходная рандомная строка не нужна - она всегда заполняется входными параметрами

В первую очередь надо понять область просчета - это 26(сколько символов в алфавите) в степени 50(символов в тексте). Это 5.6061+e70 вариантов переборов - такое безумное число в реальности.

Генетическому алгоритму нужно умудриться в пределах 1-2 десятков тысяч попыток уложиться и найти приемлемые результаты. Я бы сказал четче - задача экстремально сложна(безнадежна) и все зависит от функции фитнеса.


1) Шаг первый, вот исходный эксперт (TestFitness.mq5) с простейшей фитнес-функцией, предложенной @Andrey Dik:

double OnTester()
  {
   double ffValue=0;
//---
   for(int i=0;i<ArraySize(ExtTarget);i++)
      if(ExtTarget[i]==ExtOriginal[i])
         ffValue++;
//--- вернем результат
   return(ffValue);
  }

TestFitness.set файл приложен в аттачах, его надо положить в каталог /%datafolder%/tester до запуска терминала.

Так как фитнесс функция простая и содержит ряд проблем(малый размах дискретных результатов 0-50, нет мелких приращений, постоянный обман генетического тестера за счет срыва результатов, когда 1 и 10 совпавший символ равнозначны для оптимизатора), то тестер смог достичь результатов 39 подобранных результатов из 50:


В системе с локальными 8 ядрами тест проходит за 57 секунд:

2016.11.26 01:48:19    Statistics    local 14665 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
2016.11.26 01:48:19    Statistics    optimization done in 0 minutes 57 seconds
2016.11.26 01:48:19    Tester    genetic optimization finished on pass 21760
2016.11.26 01:48:19    Tester    result cache used 7095 times
2016.11.26 01:48:18    Tester    14491 records written to file cache C:\Users\sys\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\tester\cache\TestFitness.3.xml
2016.11.26 01:48:18    Tester    genetic calculation is over
2016.11.26 01:48:17    Tester    Best result 39 produced at generation 72. Next generation 83

Результат в 39 найденных символов из 50 означает 78% точность. Не так плохо в процентах, как заявлял Андрей ранее. Чтобы увидеть вывод лучшего результата, надо запустить одиночный тест лучшего результата и посмотреть в логи  первого агента по пути ...\Roaming\MetaQuotes\Tester\...Agent-127.0.0.1-3000\logs:
TestFitness (EURUSD,H1)    Result: miltsoisxoqxresfdeltgschinasxworghwebternxregionsx percent: 78.0%%

оригинал:                          millions of residents chinas northwestern regions

жирным выделено 11 ошибок из 50 позиций, это 22%. не забывайте, что вместо пробелов поставлены x.


2) Шаг второй, пробуем исправить проблему с исходной фитнес функцией.

Как я и предложил выше на уровне теоретического рассуждения, сделаем зависимость угадывания символа зависимо от позиции символа:

double OnTester()
  {
   double ffValue=0;
//---
   for(int i=0;i<ArraySize(ExtTarget);i++)
      if(ExtTarget[i]==ExtOriginal[i])
         ffValue+= 1 + i * 0.01;
//--- вернем результат
   return(ffValue);
  }


Тем самым мы избавляемся от чудовищно дискретного результата и делаем результирующую кривую более гладкой. Это приводит нас к результату 86%.

Использованный коэффициент i * 0.01 хотя очень мал, но оказался очень важным - он дал слабое направление оптимизации генетическому алгоритму, а не заставил его кружиться в цикле самообмана как в исходной формуле.


2016.11.26 02:26:56    Statistics    local 16026 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
2016.11.26 02:26:56    Statistics    optimization done in 0 minutes 56 seconds
2016.11.26 02:26:56    Tester    genetic optimization finished on pass 22272
2016.11.26 02:26:56    Tester    result cache used 6246 times
2016.11.26 02:26:55    Tester    15779 records written to file cache C:\Users\sys\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\tester\cache\TestFitnessBetter.3.xml
2016.11.26 02:26:55    Tester    genetic calculation is over
2016.11.26 02:26:55    Tester    Best result 54.03999999999999 produced at generation 74. Next generation 85
TestFitnessBetter (EURUSD,H1)    Result: millcoqsxofxdekgdentsxchifasxnorthwesternxreguonsx percent: 86.0%%

оригинал:                                millions of residents chinas northwestern regions

жирным выделено 7 ошибок из 50 позиций, это 14%.


В чем проблемы и что я показал:

  1. Область поиска чудовищная
  2. В ее рамках MQL5 генетический тестер находит меньше чем за минуту результаты с долей результата до 86% (я не ковырял до упора, просто потратил 1 час)
  3. Предложенная Андреем фитнес функция явно проигрывает более разумной - 78% против 86% с модифицированной и более логичной
  4. Непонятно, что насчитал Андрей, представляя, что штатный генетик кратно слабее других(его)


Я выполнил главные требования к замерам тестов:

  1. представил полные и конечные исходники, которые любой может запустить и проверить результаты
  2. технически корректно описал вводные и приложил все данные начала прямого теста (set файлы в %terminal_data%\tester, исходники в %terminal_data%\mql5\experts)
  3. представил скрины, логи и объяснения что есть что

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

 
Реter Konow:

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

Ты как был не в теме, так и остался там же.

Запомни одну простую вещь - нет смысла применять какие либо алгоритмы оптимизации, если известна аналитическая формулировка задачи. Вдумайся, а потом переосмысли то, что было сказано тобой и участниками этой ветки. Без понимания этих вещей даже не пробуй что либо говорить на тему оптимизации вслух рискуя выглядеть глупо.... Извини за грубость.

Кто был прав или неправ уже не важно (и не было важно изначально), важно другое - масса материала для размышлений. Примеров куча - пробуй, тестируй, изучай, думай.

 
Andrey Dik:

Ты как был не в теме, так и остался там же.

Запомни одну простую вещь - нет смысла применять какие либо алгоритмы оптимизации, если известна аналитическая формулировка задачи. Вдумайся, а потом переосмысли то, что было сказано тобой и участниками этой ветки. Без понимания этих вещей даже не пробуй что либо говорить на тему оптимизации вслух рискуя выглядеть глупо.... Извини за грубость.

Кто был прав или неправ уже не важно (и не было важно изначально), важно другое - масса материала для размышлений. Примеров куча - пробуй, тестируй, изучай, думай.

Андрей, я не хотел задеть тебя. Возможно, выгляжу глупо. Это не площадка для самоутверждения. Просто восхитился эрудированностью и уровнем понимания и профессионализма Рената. Может, это дилетантское мнение и ошибочно, но все таки... Я тогда и выиграл, и проиграл. Так бывает... Новичкам везет.))) 
 
Реter Konow:
Андрей, я не хотел задеть тебя. Возможно, выгляжу глупо. Это не площадка для самоутверждения. Просто восхитился эрудированностью и уровнем понимания и профессионализма Рената. Может, это дилетантское мнение и ошибочно, но все таки... Я тогда и выиграл, и проиграл. Так бывает... Новичкам везет.))) 

Конечно ты выиграешь решая уравнение y=x^2 зная формулу, ты собственно это и сделал, зная спицифику задачи вложил фактически решение в алгоритм, это не победа в соревновании, а мухлеж, и к тому же, решение ничего общего не имеющее с оптимизацией.

Прекращай уже, всё уже в прошлом, эта ветка вообще "на грани добра и зла", зря её ворошишь.

 
Andrey Dik:

Конечно ты выиграешь решая уравнение y=x^2 зная формулу, ты собственно это и сделал, зная спицифику задачи вложил фактически решение в алгоритм, это не победа в соревновании, а мухлеж, и к тому же, решение ничего общего не имеющее с оптимизацией.

Прекращай уже, всё уже в прошлом, эта ветка вообще "на грани добра и зла", зря её ворошишь.

Я не мухлевал. Решил задачу на уровне тогдашних моих возможностей, знаний и общего понимания темы. Результат получился двояким. С одной стороны, - технически я выиграл. С другой, - создал очень слабый алгоритм, который не обладал универсальностью, - и потому, - проиграл. Понял я это быстро, ну а ты, как специалист, мог снисходительно дать мне насладиться  "победой" и потом, спокойно пояснить в чем дело. Ты объяснял, только эмоции были лишними. Что спорить с новичком, думающим что он победил профессионала?))

В твоем споре с Ренатом я не судья, а наблюдатель, спокойно перелистывающий страницы обсуждений. Читая, поверхностно оцениваю форму аргументов (не имея возможности вникнуть в суть) и невольно цепляюсь за некоторые "выпирающие" вещи. Те, что всегда следуют спорам заинтересованных людей - эмоциональные всплески. По их сигнатурам пытаюсь определить кто "правее". Ведь тот кто менее прав, сам об этом знает, а значит, в его словах, поверх технических деталей есть еще информация, которая может открыть правду. А именно: "знает ли он, что не прав?".  

И вот, нашел я, что у обоих сторон есть это знание. Знание своей правоты и знание своей неправоты. Боюсь, матерый профессионализм не избавил вас от двоякости результатов тестирования ваших алгоритмов и не дал окончательно определить правого, как это было в моем соревновании с тобой. Таковы эти ГА... 

Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии (советники) перед началом использования их в реальной торговле. При тестировании советника происходит его однократная прогонка с начальными параметрами на исторических данных. При оптимизации торговая стратегия прогоняется несколько раз с различным набором параметров...
 
Реter Konow:

И вот, нашел я, что у обоих сторон есть это знание. Знание своей правоты и знание своей неправоты. Боюсь, матерый профессионализм не избавил вас от двоякости результатов тестирования ваших алгоритмов и не дал окончательно определить правого, как это было в моем соревновании с тобой. Таковы эти ГА... 


да пофиг кто прав а кто нет! главное - что всё идет на пользу, ничего не пропадает даром и каждую мысль, каждое предложение разработчики осмысливают, а многие идеи даже реализуют. Вот к примеру:
и много много другого полезного и удобного что стало плодом ярых споров ранее. 

ps. кстати, та задачка с текстом - простая, чрезвычайно убогая модель задачи поиска нулей в хеше биткоина. ты любознательный и если делать нечего можешь провентилировать тему и попытаться майнить коины алгоритмически на простом домашнем компе, там не получится "сглаживать" фф как ни старайся, или как то использовать знания о природе фф как это делал ты. у меня получилось за 3-5 минут находить хеш с нулями вплоть до 5-го знака!!!)))... если бы все задачки позволяли сглаживать изнутри фф, то мир бы сейчас был совсем другим.... поняв это ps ты поймешь в чем заблуждался, нет - значит нет. 
MetaTrader 5 Strategy Tester!
MetaTrader 5 Strategy Tester!
  • 2010.05.01
  • www.mql5.com
Эта программа входит в состав клиентского терминала MetaTrader 5 и предназначена для тестирования и оптимизации советников (MQL5 Expert Advisors).
 
Andrey Dik:

да пофиг кто прав а кто нет! главное - что всё идет на пользу, ничего не пропадает даром и каждую мысль, каждое предложение разработчики осмысливают, а многие идеи даже реализуют. Вот к примеру:
и много много другого полезного и удобного что стало плодом ярых споров ранее. 

ps. кстати, та задачка с текстом - простая, чрезвычайно убогая модель задачи поиска нулей в хеше биткоина. ты любознательный и если делать нечего можешь провентилировать тему и попытаться майнить коины алгоритмически на простом домашнем компе, там не получится "сглаживать" фф как ни старайся. у меня получилось за 3-5 минут находить хеш с нулями вплоть до 5-го знака!!!)))... если бы все задачки позволяли сглаживать изнутри фф, то мир бы сейчас был совсем другим.... поняв это ps ты поймешь в чем заблуждался, нет - значит нет. 

Ты меня заинтересовал. Буду соревноваться со штатным алгоритмом, как и ты. Сначала изучу тему. Это займет время. 

ЗЫ. Суть в том, что в графике на МКЛ мне равных нет, и соревноваться не с кем. Скучно. А эта тема интересна и может пригодиться. Ее знать нужно. 

Причина обращения: