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

 
Renat Fatkhullin:
Я веду полную перепроверку на MQL5 и опубликую тут полные результаты с прямыми кодами для воспроизведения.
Я очень надеюсь на объективное расследование.
Достоверные результаты расследования будут важнее извинений за обвинения в моём мошенничестве и подтасовке результатов тестирования
 

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

  • 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. представил скрины, логи и объяснения что есть что
 

Что я концептуально показал:

  1. Заявления Андрея, что генетический алгоритм МТ5 сливает - абсолютно ложно
  2. В случаях, когда область просчета бесконечна(по факту), за 20 000 проходов получить 76-86% точность - это счастье и подвиг. Штатный тестер это делает
  3. Метод ведения обсуждений без кодов, когда ты сам себя обязан убивать за любую попытку скрытия данных - неприемлем. Андрей категорически нагло это использовал.
  4. Андрей в попытках показать свое решение совершенно забыл про корректность доказательств, касающихся других систем. В таких вопросах доказательства корректности по другим системам кратно важнее доказательств своей собственной. И это жесткий залет.

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

Чтобы лично понимали: когда мы готовим ударные позиции, мы тратим 3-4 месяца на внутреннее собственное убийство любых шансов нас переиграть. Мы не выпускаем и не заявляем ударные позиции, пока на 100% не будем уверены, что мы себя не обманываем себя и что мы выдержим любую стороннюю критику.

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

Еще важно, что у меня не было времени (потратил всего час на исследования), чтобы лучше подобрать фитнес функцию. Я просто остановился на своем теоретическом слабо обоснованном варианте 1 + i * 0.01 и даже при нем получил серьезное улучшение результата (86% вместо 78%).


Ну и чтобы не забывали - генетика для быстрого поиска, а не для получения 100% точного результата. С помощью генетического оптимизатора вы сначала ищите области за 0.0000000х% затрат, а уже потом сужая область или продолжаете генетический поиск или просто перебираете потенциально важные области.

Если кто-то пытается с первого удара в генетике требовать 100% гарантий, то он явно не понимает принципа поиска.

 
Renat Fatkhullin:

Еще важно, что у меня не было времени (потратил всего час на исследования), чтобы лучше подобрать фитнес функцию. Я просто остановился на своем теоретическом слабо обоснованном варианте 1 + i * 0.01 и даже при нем получил серьезное улучшение результата (86% вместо 78%).

Ни это ли называется читингом? Задача была не восстановить текст, а найти максимум ФФ. Точно так же, как задача перед оптимизатором стоит не найти робастые параметры ТС, а найти максимум критерия оптимизации ТС. Самообман же выдаете. Красиво написали про доказательную базу, удары и прочие бла. Но сделали не больше, чем Андрей. Конструктива не больше. Обвинений с Вашей стороны не просто много, они зашкаливают и не отличаются рассудительностью. Причем, я отлично смог воспроизвести оба варианта: Ваш и Андрея.

Критические замечания в адрес Вашего ГА звучали только из моих уст. Поэтому наезды на Андрея, как перевод стрелок.

И давайте, если способны держать удар, попробовать держать его без админ. ресурса. Сейчас выходной, потратили много своего времени на обеливание того, что никто и не пачкал. Очень много оскорбительных выпадов в адрес Андрея написали. Да что дипломатничать, оскорбляли. Но сопли оставим и вернемся к баранам - алгоритмам.

Читинг или самообман - не доказательная база. Алгоритмы сравниваются на поиск максимума ФФ, а не на возможность подбора удобной для себя ФФ. Никто не находит удобную для ГА ТС.

 

Опровергните технически мои доводы и тогда ваши слова будут что-то значить.

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

Не забывайте, что если я захожу в обсуждения, то там все быстро превращается в доказательства каждого слова. Лично за вами большущий долг доказательств стоит по массе заявлений и эти долги не забыты.

 
Renat Fatkhullin:

Опровергните технически мои доводы и тогда ваши слова будут что-то значить.

После написания этого поста пойду спать, т.к. очень поздно уже. Готов сыграть по Вашим правилам. Вы их только четко сформулируйте. Давайте все ФФ, по которым нужно тягаться с Вашим ГА - найти максимум.

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

Странно все это, т.к. я сразу смог все воспроизвести. И фактически вовлек его в это крайне неприятное для него обсуждение. За что искренне перед ним извиняюсь.

Не забывайте, что если я захожу в обсуждения, то там все быстро превращается в доказательства каждого слова. Лично за вами большущий долг доказательств стоит по массе заявлений и эти долги не забыты.

Долги надо помнить! Помню свои недавние заявления и доказательную базу, с которой Вы соглашались (не сразу) и вносили соответствующие правки в билды. И никогда не воспринимал это, как некую победу над Вами. Если баг или недоработка исчезла - это хорошо и мне и Вам. Самоутверждаться за счет Вас - никогда.

Но если, действительно, есть какие-то долги, озвучьте, пожалуйста. Если отвечать за свои слова, то без двойных стандартов.

 

Вижу только слова, но не единого технического заявления или опровержения.

Долги за xrenfx такие, что их невозможно покрыть. 

 

Жутко сильно хочу спать, но раз почти мгновенно ответили, напишу еще и завалюсь, наконец.

Нет никакого с вами противостояния. Возможно, вам хочется, но мне - нет.

Какие технические заявления или опровержения мне нужно доказать?

Давайте четко их сформулируем. И либо извинюсь перед вами, либо предоставлю четкую техническую воспроизводимую аргументацию. А то, что умею это делать, вы ни раз были тому свидетелем.

 
fxsaber:

Жутко сильно хочу спать, но раз почти мгновенно ответили, напишу еще и завалюсь, наконец.

Нет никакого с вами противостояния. Возможно, вам хочется, но мне - нет.

Какие технические заявления или опровержения мне нужно доказать?

Давайте четко их сформулируем. И либо извинюсь перед вами, либо предоставлю четкую техническую воспроизводимую аргументацию. А то, что умею это делать, вы ни раз были тому свидетелем.

Вопрос не о вас и с вами.

Вы категорически далеки от темы генетических оптимизаторов.

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

 
Renat Fatkhullin:

Что я концептуально показал:

  1. Заявления Андрея, что генетический алгоритм МТ5 сливает - абсолютно ложно
  2. В случаях, когда область просчета бесконечна(по факту), за 20 000 проходов получить 76-86% точность - это счастье и подвиг. Штатный тестер это делает
  3. Метод ведения обсуждений без кодов, когда ты сам себя обязан убивать за любую попытку скрытия данных - неприемлем. Андрей категорически нагло это использовал.
  4. Андрей в попытках показать свое решение совершенно забыл про корректность доказательств, касающихся других систем. В таких вопросах доказательства корректности по другим системам кратно важнее доказательств своей собственной. И это жесткий залет.

Замечательно! Вы переделали ФФ, вставили другую строку - очевидно, что мой алгоритм эту строку не знает и читерить не может. Проведите этот же тест с моим алгоритмом, сравним результаты на ВАШЕЙ задаче. Потом перечитаем заново эти 4 пункта.

Почему Вы привели результаты Вашей задачи только для своего алгоритма и умолчали результаты моего? Это и есть результаты объективного расследования?