Andrey Dik: Исправьте свое обращение на "Вы" тогда будем разговаривать. Повежливее пожалуйста. Вы меня просите признать результат, значит проявите учтивость.
Я уже написал раньше - мне неважно что ты думаешь о результате, потому что сейчас это считаешь "конкурсом" только ты. Результат ни на что не влияет, и не революционирует мир форекса. Просто моя цифра больше твоей, всё.
Яб уже давно ушёл из этой темы, но ты сам зачем-то постоянно возвращаешься к R и моему результату, то отказываешься их принять, то требуешь ex5, то обещаешь портировать на mql. Наверное уже штук десять твоих последних сообщений только об этом. Возьми и сделай что-то, а не трепись языком понапрасну.
Я вообще без понятия что тебе от меня надо? Вот твой следующий коммент опять будет или о R, или о моём результате, или о "конкурсе", хотя всем плевать уже давно на это.
Для начала попробуйте дать своё определение "робастная ТС".
Можно подобрать такой размер комиссии, что эквити на любом стат. значимом участке будет иметь постоянный вид распределения с мат. ожиданием равным нулю. Это определение.
Я уже написал раньше - мне неважно что ты думаешь о результате, потому что сейчас это считаешь "конкурсом" только ты. Результат ни на что не влияет, и не революционирует мир форекса. Просто моя цифра больше твоей, всё.
Яб уже давно ушёл из этой темы, но ты сам зачем-то постоянно возвращаешься к R и моему результату, то отказываешься их принять, то требуешь ex5, то обещаешь портировать на mql. Наверное уже штук десять твоих последних сообщений только об этом. Возьми и сделай что-то, а не трепись языком понапрасну.
Я вообще без понятия что тебе от меня надо? Вот твой следующий коммент опять будет или о R, или о моём результате, или о "конкурсе", хотя всем плевать уже давно на это.
Хорошо, будем разговаривать на твоём языке.
Слышь, ты здесь что делаешь то, если тебе всё равно? Что ж ты изводишься на *овно?
Какое тебе дело до моего мнения, признал я результат или нет? Что ты волосы то на *опе своей рвёшь? Иди тогда нах*ен или переписывай свой код на MQL5 сам, приду*ок.
fxsaber: Можно подобрать такой размер комиссии, что эквити на любом стат. значимом участке будет иметь постоянный вид распределения с мат. ожиданием равным нулю. Это определение.
Хорошо. Тогда всё проще. Нужно всего лишь сделать полный перебор всех параметров и определить такие параметры ТС, которые дадут "вид распределения с мат. ожиданием равным нулю". Тогда оптимизация вообще ни причем на этом этапе.
А вот после выявления таких параметров проведя полный перебор, нужно попытаться выявить связь между полученными вариантами параметров (понять что именно даёт такие результаты). Если удастся выявить эту связь, то только тогда в следующий раз её (связь) можно уже использовать как критерий оптимизации, использовать как ФФ. Шутка юмора только в том, что если получили параметры робастной системы на этапе полного перебора, то зачем тогда в следующие разы оптимизация?
Другой подход, исходя из определения "робастной ТС", заключается в том, что бы сразу оптимизировать на как можно большую глубину истории, при этом оформить кастомный критерий оптимизации как "вид распределения с мат. ожиданием равным нулю". Такой подход менее трудоёмок, но если существует на самом деле робастная ТС, то она с большой долей вероятности будет найдена оптимизатором. В этом контексте огромную роль играет количество сделок в торговой истории, оно напрямую влияет на время оптимизации, поэтому если бы было возможно отключать ненужные статистики в тестере и вообще всё то, что считается в фоне по умолчанию, то это бы значительно ускорило процесс. Ведь всё что действительно требуется посчитать в торговых результатах можно посчитать внутри советника.
Результаты тестов буду публиковать в этом посте частями. Пошагово.
1. Сначала повторю тесты, которые провел Ренат.
2. Создам отдельную библиотеку с ФФ Рената и проведу этот же тест но уже по стандарту подключения к библиотеке с сгенерированным автоматически советником (библиотека понадобится, если Ренат, и другие пользователи, захочет повторить тест и с моей библиотекой оптимизации тоже). Результат должен совпасть с результатом в п.1.
3. Проведу тест с моим алгоритмом и полученной в п2. библиотекой ФФ.
Далее, все те же 3 шага повторим для слегка изменённой ФФ Рената.
1. Сделаем три запуска для среднего значения с очисткой кэша оптимизатора перед каждым запуском оптимизации.
1) первое испытание
2016.11.2614:58:45 Statistics optimization done in 1 minutes 00 seconds 2016.11.2614:58:45 Tester genetic optimization finished on pass 16640 2016.11.2614:58:45 Tester result cache used 4170 times 2016.11.2614:58:45 Tester 12373 records written to file cache D:\Soft\#1Invests\MT5\tester\cache\TestFitness.3.xml 2016.11.2614:58:45 Tester genetic calculation is over 2016.11.2614:58:44 Tester Best result 39 produced at generation 52. Next generation 63
2) второе испытание
2016.11.2615:11:29 Statistics optimization done in 1 minutes 16 seconds 2016.11.2615:11:29 Tester genetic optimization finished on pass 23296 2016.11.2615:11:29 Tester result cache used 8614 times 2016.11.2615:11:29 Tester 14493 records written to file cache D:\Soft\#1Invests\MT5\tester\cache\TestFitness.3.xml 2016.11.2615:11:29 Tester genetic calculation is over 2016.11.2615:11:29 Tester Best result 40 produced at generation 78. Next generation 89
3) третье испытание
2016.11.2615:14:26 Statistics optimization done in 1 minutes 18 seconds 2016.11.2615:14:26 Tester genetic optimization finished on pass 22784 2016.11.2615:14:26 Tester result cache used 7564 times 2016.11.2615:14:26 Tester 15085 records written to file cache D:\Soft\#1Invests\MT5\tester\cache\TestFitness.3.xml 2016.11.2615:14:26 Tester genetic calculation is over 2016.11.2615:14:25 Tester Best result 45 produced at generation 76. Next generation 87
Средний результат (39+40+45)/3=41,33 при в среднем (16640+23296+22784)/3=20906 обращений к ФФ. Таким образом я результаты Рената воспроизвел, даже с немного лучшими результатами чем у него (это объяснимо, результаты слегка плавают из за стохастической природы ао, поэтому я и просил делать несколько испытаний).
2. Далее, тест советника от MQ сгенерированный для работы с ФФ оформленной в виде отдельной библиотеки testfitnessFF.mq5 (в прикрепе).
1) первое испытание
2016.11.2616:17:44 Statistics optimization done in1 minutes 03 seconds 2016.11.2616:17:44 Tester genetic optimization finished on pass 19200 2016.11.2616:17:44 Tester result cache used 6355 times 2016.11.2616:17:44 Tester 12728 records written to file cache D:\Soft\#1 Invests\MT5\tester\cache\AO from MQ (expert) testfitness.3.xml 2016.11.2616:17:44 Tester genetic calculation is over 2016.11.2616:17:43 Tester Best result 41 produced at generation 62. Next generation 73
2) второе испытание
2016.11.2616:23:58 Statistics optimization done in1 minutes 03 seconds 2016.11.2616:23:58 Tester genetic optimization finished on pass 19712 2016.11.2616:23:58 Tester result cache used 6823 times 2016.11.2616:23:58 Tester file cache used 3 times 2016.11.2616:23:58 Tester 12736 records written to file cache D:\Soft\#1 Invests\MT5\tester\cache\AO from MQ (expert) testfitness.3.xml 2016.11.2616:23:58 Tester genetic calculation is over 2016.11.2616:23:58 Tester Best result 36 produced at generation 64. Next generation 75
3) третье испытание
2016.11.2616:27:22 Statistics optimization done in1 minutes 07 seconds 2016.11.2616:27:22 Tester genetic optimization finished on pass 21248 2016.11.2616:27:22 Tester result cache used 7938 times 2016.11.2616:27:22 Tester file cache used 2 times 2016.11.2616:27:22 Tester 13166 records written to file cache D:\Soft\#1 Invests\MT5\tester\cache\AO from MQ (expert) testfitness.3.xml 2016.11.2616:27:22 Tester genetic calculation is over 2016.11.2616:27:22 Tester Best result 39 produced at generation 70. Next generation 81
4) и на всякий случай еще разок
2016.11.2616:29:57 Statistics optimization done in1 minutes 12 seconds 2016.11.2616:29:57 Tester genetic optimization finished on pass 21760 2016.11.2616:29:57 Tester result cache used 7438 times 2016.11.2616:29:57 Tester 14152 records written to file cache D:\Soft\#1 Invests\MT5\tester\cache\AO from MQ (expert) testfitness.3.xml 2016.11.2616:29:57 Tester genetic calculation is over 2016.11.2616:29:57 Tester Best result 41 produced at generation 72. Next generation 83
Средний результат (41+36+39+41)/4=39,25 при в среднем (19200+19712+21248+21760)/4=20480 обращений к ФФ. Таким образом можем видеть, что с ФФ оформленной в виде отдельной библиотеки тестовый советник от MQ демонстрирует похожие результаты (для повторения среднего значения понадобятся сотни повторений эксперемента, на это времени нет.
3. Раз мы получили соответствие результатов советника с ФФ внутри и советника с ФФ в виде отдельной библиотеки, то можем приступить к тестированию работы ао от Joo с той же ФФ в библиотеке, с которой работал алгоритм от MQ в предыдущем пункте.
2016.11.2616:38:32.077 AO runner (script) (AUDUSD,M5) Макс: 46.00000000 2016.11.2616:38:32.077 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000 2016.11.2616:38:32.077 AO runner (script) (AUDUSD,M5) Время: 415791 мкс; 0.41579100 c 2016.11.2616:38:32.077 AO runner (script) (AUDUSD,M5) --------------------------------- 2016.11.2616:38:41.827 AO runner (script) (AUDUSD,M5) Макс: 49.00000000 2016.11.2616:38:41.827 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000 2016.11.2616:38:41.827 AO runner (script) (AUDUSD,M5) Время: 415834 мкс; 0.41583400 c 2016.11.2616:38:41.827 AO runner (script) (AUDUSD,M5) --------------------------------- 2016.11.2616:38:45.068 AO runner (script) (AUDUSD,M5) Макс: 49.00000000 2016.11.2616:38:45.068 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000 2016.11.2616:38:45.068 AO runner (script) (AUDUSD,M5) Время: 363686 мкс; 0.36368600 c 2016.11.2616:38:45.068 AO runner (script) (AUDUSD,M5) --------------------------------- 2016.11.2616:38:48.233 AO runner (script) (AUDUSD,M5) Макс: 48.00000000 2016.11.2616:38:48.233 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000 2016.11.2616:38:48.233 AO runner (script) (AUDUSD,M5) Время: 369436 мкс; 0.36943600 c 2016.11.2616:38:48.233 AO runner (script) (AUDUSD,M5) --------------------------------- 2016.11.2616:38:51.573 AO runner (script) (AUDUSD,M5) Макс: 45.00000000 2016.11.2616:38:51.573 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000 2016.11.2616:38:51.573 AO runner (script) (AUDUSD,M5) Время: 371704 мкс; 0.37170400 c 2016.11.2616:38:51.573 AO runner (script) (AUDUSD,M5) --------------------------------- 2016.11.2616:38:55.005 AO runner (script) (AUDUSD,M5) Макс: 46.00000000 2016.11.2616:38:55.005 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000 2016.11.2616:38:55.005 AO runner (script) (AUDUSD,M5) Время: 357759 мкс; 0.35775900 c 2016.11.2616:38:55.005 AO runner (script) (AUDUSD,M5) --------------------------------- 2016.11.2616:38:57.968 AO runner (script) (AUDUSD,M5) Макс: 48.00000000 2016.11.2616:38:57.968 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000 2016.11.2616:38:57.968 AO runner (script) (AUDUSD,M5) Время: 362894 мкс; 0.36289400 c 2016.11.2616:38:57.968 AO runner (script) (AUDUSD,M5) --------------------------------- 2016.11.2616:39:00.748 AO runner (script) (AUDUSD,M5) Макс: 48.00000000 2016.11.2616:39:00.748 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000 2016.11.2616:39:00.748 AO runner (script) (AUDUSD,M5) Время: 373494 мкс; 0.37349400 c 2016.11.2616:39:00.748 AO runner (script) (AUDUSD,M5) --------------------------------- 2016.11.2616:39:03.599 AO runner (script) (AUDUSD,M5) Макс: 45.00000000 2016.11.2616:39:03.599 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000 2016.11.2616:39:03.599 AO runner (script) (AUDUSD,M5) Время: 363190 мкс; 0.36319000 c 2016.11.2616:39:03.599 AO runner (script) (AUDUSD,M5) --------------------------------- 2016.11.2616:39:06.968 AO runner (script) (AUDUSD,M5) Макс: 42.00000000 2016.11.2616:39:06.968 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000 2016.11.2616:39:06.968 AO runner (script) (AUDUSD,M5) Время: 361686 мкс; 0.36168600 c 2016.11.2616:39:06.968 AO runner (script) (AUDUSD,M5) ---------------------------------
Средний результат (46+49+49+48+45+46+48+48+45+42)/10=46,6 при в среднем 20000 обращений к ФФ.
В первом тесте результат у алгоритма от MQ 41.33 при среднем вызове ФФ 20906, у алгоритма от Joo 46.6 при ровно 20000 вызовов.
Далее проведем тест на изменённой ФФ. Так как мы выяснили полное соответствие результатов советника с ФФ внутри с результатами советника с ФФ в виде библиотеки, то приступим к тестированию сразу со 2-го пунтка.
2.
1) первое испытание
2016.11.2616:57:55 Statistics optimization done in1 minutes 16 seconds 2016.11.2616:57:55 Tester genetic optimization finished on pass 21504 2016.11.2616:57:55 Tester result cache used 6048 times 2016.11.2616:57:55 Tester 15299 records written to file cache D:\Soft\#1 Invests\MT5\tester\cache\AO from MQ (expert) testfitness.3.xml 2016.11.2616:57:55 Tester genetic calculation is over 2016.11.2616:57:55 Tester Best result 49.81000000000001 produced at generation 71. Next generation 82
2) второе испытание
2016.11.2617:00:52 Statistics optimization done in1 minutes 12 seconds 2016.11.2617:00:52 Tester genetic optimization finished on pass 24576 2016.11.2617:00:52 Tester result cache used 11850 times 2016.11.2617:00:52 Tester 12547 records written to file cache D:\Soft\#1 Invests\MT5\tester\cache\AO from MQ (expert) testfitness.3.xml 2016.11.2617:00:52 Tester genetic calculation is over 2016.11.2617:00:51 Tester Best result 51.79000000000001 produced at generation 83. Next generation 94
3) третье испытание
2016.11.2617:02:46 Statistics optimization done in1 minutes 07 seconds 2016.11.2617:02:46 Tester genetic optimization finished on pass 19200 2016.11.2617:02:46 Tester result cache used 4827 times 2016.11.2617:02:46 Tester 14217 records written to file cache D:\Soft\#1 Invests\MT5\tester\cache\AO from MQ (expert) testfitness.3.xml 2016.11.2617:02:46 Tester genetic calculation is over 2016.11.2617:02:45 Tester Best result 49.04000000000001 produced at generation 62. Next generation 73
Средний результат (49,81+51,79+49,01)/3=50,2 при в среднем (21504+24576+19200)/3=21760 обращений к ФФ
3.
2016.11.2617:06:10.729 AO runner (script) (AUDUSD,M5) Макс: 61.12000000 2016.11.2617:06:10.729 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000 2016.11.2617:06:10.729 AO runner (script) (AUDUSD,M5) Время: 440832 мкс; 0.44083200 c 2016.11.2617:06:10.729 AO runner (script) (AUDUSD,M5) --------------------------------- 2016.11.2617:06:14.232 AO runner (script) (AUDUSD,M5) Макс: 60.22000000 2016.11.2617:06:14.232 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000 2016.11.2617:06:14.232 AO runner (script) (AUDUSD,M5) Время: 388881 мкс; 0.38888100 c 2016.11.2617:06:14.232 AO runner (script) (AUDUSD,M5) --------------------------------- 2016.11.2617:06:17.966 AO runner (script) (AUDUSD,M5) Макс: 60.12000000 2016.11.2617:06:17.966 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000 2016.11.2617:06:17.966 AO runner (script) (AUDUSD,M5) Время: 392409 мкс; 0.39240900 c 2016.11.2617:06:17.966 AO runner (script) (AUDUSD,M5) --------------------------------- 2016.11.2617:06:21.117 AO runner (script) (AUDUSD,M5) Макс: 60.22000000 2016.11.2617:06:21.117 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000 2016.11.2617:06:21.117 AO runner (script) (AUDUSD,M5) Время: 377241 мкс; 0.37724100 c 2016.11.2617:06:21.117 AO runner (script) (AUDUSD,M5) --------------------------------- 2016.11.2617:06:24.333 AO runner (script) (AUDUSD,M5) Макс: 60.00000000 2016.11.2617:06:24.333 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000 2016.11.2617:06:24.333 AO runner (script) (AUDUSD,M5) Время: 401577 мкс; 0.40157700 c 2016.11.2617:06:24.333 AO runner (script) (AUDUSD,M5) --------------------------------- 2016.11.2617:06:27.506 AO runner (script) (AUDUSD,M5) Макс: 57.42000000 2016.11.2617:06:27.506 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000 2016.11.2617:06:27.506 AO runner (script) (AUDUSD,M5) Время: 384175 мкс; 0.38417500 c 2016.11.2617:06:27.506 AO runner (script) (AUDUSD,M5) --------------------------------- 2016.11.2617:06:31.067 AO runner (script) (AUDUSD,M5) Макс: 60.22000000 2016.11.2617:06:31.067 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000 2016.11.2617:06:31.067 AO runner (script) (AUDUSD,M5) Время: 387644 мкс; 0.38764400 c 2016.11.2617:06:31.067 AO runner (script) (AUDUSD,M5) --------------------------------- 2016.11.2617:06:35.111 AO runner (script) (AUDUSD,M5) Макс: 60.22000000 2016.11.2617:06:35.111 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000 2016.11.2617:06:35.111 AO runner (script) (AUDUSD,M5) Время: 438752 мкс; 0.43875200 c 2016.11.2617:06:35.111 AO runner (script) (AUDUSD,M5) --------------------------------- 2016.11.2617:06:38.183 AO runner (script) (AUDUSD,M5) Макс: 61.23000000 2016.11.2617:06:38.183 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000 2016.11.2617:06:38.183 AO runner (script) (AUDUSD,M5) Время: 373958 мкс; 0.37395800 c 2016.11.2617:06:38.183 AO runner (script) (AUDUSD,M5) --------------------------------- 2016.11.2617:06:41.676 AO runner (script) (AUDUSD,M5) Макс: 56.71000000 2016.11.2617:06:41.677 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000 2016.11.2617:06:41.677 AO runner (script) (AUDUSD,M5) Время: 374096 мкс; 0.37409600 c 2016.11.2617:06:41.677 AO runner (script) (AUDUSD,M5) ---------------------------------
Средний результат (61.12+60.22+60.12+60.22+60+57.42+60.22+60.22+61.23+56.71=597,48)/10=59,75 при в среднем 20000 обращений к ФФ.
Итак, во втором тесте с слегка изменённой ФФ результаты такие: у алгоритма от MQ 50.2 при среднем вызове ФФ 21760, у алгоритма от Joo 59.75 при ровно 20000 вызовов.
Поставим задачу просто и чисто для проверки способностей тестера подбирать целевую функцию:
50 оптимизируемых переменных, которые являются символами от 'a' до 'z' английского алфавита (от 97 до 122 с шагом 1)
нужно получить целевую строку "millionsxofxresidentsxchinasxnorthwesternxregionsx" в 50 символов. чтобы упростить перебор, пробелы заменены на x. на суть это не влияет
исходная рандомная строка не нужна - она всегда заполняется входными параметрами
В первую очередь надо понять область просчета - это 26(сколько символов в алфавите) в степени 50(символов в тексте). Это 5.6061+e70 вариантов переборов - такое безумное число в реальности.
Генетическому алгоритму нужно умудриться в пределах 1-2 десятков тысяч попыток уложиться и найти приемлемые результаты. Я бы сказал четче - задача экстремально сложна(безнадежна) и все зависит от функции фитнеса.
1) Шаг первый, вот исходный эксперт (TestFitness.mq5) с простейшей фитнес-функцией, предложенной @Andrey Dik:
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:
оригинал: 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
оригинал: millions of residents chinas northwestern regions
жирным выделено 7 ошибок из 50 позиций, это 14%.
В чем проблемы и что я показал:
Область поиска чудовищная
В ее рамках MQL5 генетический тестер находит меньше чем за минуту результаты с долей результата до 86% (я не ковырял до упора, просто потратил 1 час)
Предложенная Андреем фитнес функция явно проигрывает более разумной - 78% против 86% с модифицированной и более логичной
Непонятно, что насчитал Андрей, представляя, что штатный генетик кратно слабее других(его)
Я выполнил главные требования к замерам тестов:
представил полные и конечные исходники, которые любой может запустить и проверить результаты
технически корректно описал вводные и приложил все данные начала прямого теста (set файлы в %terminal_data%\tester, исходники в %terminal_data%\mql5\experts)
У вас есть рандомная строка. Вам нужно привести ее с помощью генетики до расшифрованного до человеческого восприятия(чтоб каждый мог сравнить и сказать - да, получилось!) результата.
Где целевая строка? Или вы хотите сказать, что настолько запутали вопрос, что вообще задача не ставится про расшифровку строки?
В вашем коде есть исходная строка на 1000 символов. Почему вы тут вдруг прыгаете и заявляете про нечеловеческий рандом "SptstmLEjXhdESqotbRQbmsYKkJTZiOHBEenIbGqLHwxqfWTok" как целевую строку?
Я присоединяюсь к первой строке) Вы не можете прямо сказать?
Я присоединяюсь к первой строке) Вы не можете прямо сказать?
кто же все-таки впереди?
Вы арабскими цифрами владеете на уровне счета хотя бы до ста? Видно же, что в двух проведённых тестах мой алгоритм впереди.
И не имейте привычку выдирать посты из контекста, это не красиво. Тогда Ренат не совсем понял суть теста, поэтому такие слова. Кроме того, нужно смотреть предысторию, почему строка стала такой а не какой то другой.
Исправьте свое обращение на "Вы" тогда будем разговаривать. Повежливее пожалуйста. Вы меня просите признать результат, значит проявите учтивость.
Я уже написал раньше - мне неважно что ты думаешь о результате, потому что сейчас это считаешь "конкурсом" только ты. Результат ни на что не влияет, и не революционирует мир форекса. Просто моя цифра больше твоей, всё.
Яб уже давно ушёл из этой темы, но ты сам зачем-то постоянно возвращаешься к R и моему результату, то отказываешься их принять, то требуешь ex5, то обещаешь портировать на mql. Наверное уже штук десять твоих последних сообщений только об этом. Возьми и сделай что-то, а не трепись языком понапрасну.
Я вообще без понятия что тебе от меня надо? Вот твой следующий коммент опять будет или о R, или о моём результате, или о "конкурсе", хотя всем плевать уже давно на это.
Для начала попробуйте дать своё определение "робастная ТС".
Я уже написал раньше - мне неважно что ты думаешь о результате, потому что сейчас это считаешь "конкурсом" только ты. Результат ни на что не влияет, и не революционирует мир форекса. Просто моя цифра больше твоей, всё.
Яб уже давно ушёл из этой темы, но ты сам зачем-то постоянно возвращаешься к R и моему результату, то отказываешься их принять, то требуешь ex5, то обещаешь портировать на mql. Наверное уже штук десять твоих последних сообщений только об этом. Возьми и сделай что-то, а не трепись языком понапрасну.
Я вообще без понятия что тебе от меня надо? Вот твой следующий коммент опять будет или о R, или о моём результате, или о "конкурсе", хотя всем плевать уже давно на это.
Хорошо, будем разговаривать на твоём языке.
Слышь, ты здесь что делаешь то, если тебе всё равно? Что ж ты изводишься на *овно?
Какое тебе дело до моего мнения, признал я результат или нет? Что ты волосы то на *опе своей рвёшь? Иди тогда нах*ен или переписывай свой код на MQL5 сам, приду*ок.
Можно подобрать такой размер комиссии, что эквити на любом стат. значимом участке будет иметь постоянный вид распределения с мат. ожиданием равным нулю. Это определение.
Хорошо. Тогда всё проще. Нужно всего лишь сделать полный перебор всех параметров и определить такие параметры ТС, которые дадут "вид распределения с мат. ожиданием равным нулю". Тогда оптимизация вообще ни причем на этом этапе.
А вот после выявления таких параметров проведя полный перебор, нужно попытаться выявить связь между полученными вариантами параметров (понять что именно даёт такие результаты). Если удастся выявить эту связь, то только тогда в следующий раз её (связь) можно уже использовать как критерий оптимизации, использовать как ФФ. Шутка юмора только в том, что если получили параметры робастной системы на этапе полного перебора, то зачем тогда в следующие разы оптимизация?
Другой подход, исходя из определения "робастной ТС", заключается в том, что бы сразу оптимизировать на как можно большую глубину истории, при этом оформить кастомный критерий оптимизации как "вид распределения с мат. ожиданием равным нулю". Такой подход менее трудоёмок, но если существует на самом деле робастная ТС, то она с большой долей вероятности будет найдена оптимизатором. В этом контексте огромную роль играет количество сделок в торговой истории, оно напрямую влияет на время оптимизации, поэтому если бы было возможно отключать ненужные статистики в тестере и вообще всё то, что считается в фоне по умолчанию, то это бы значительно ускорило процесс. Ведь всё что действительно требуется посчитать в торговых результатах можно посчитать внутри советника.
Я уверен, что Вы человек чести и доведете эти вопросы до конца, не баньте меня по крайней мере до завершения тестов с Вашей ФФ.
Вот результаты тестов которые провел я. И пару страниц назад результаты, которые получил Ренат.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
MetaTrader 5 Strategy Tester!
Andrey Dik, 2016.11.26 11:04
Результаты тестов буду публиковать в этом посте частями. Пошагово.
1. Сначала повторю тесты, которые провел Ренат.
2. Создам отдельную библиотеку с ФФ Рената и проведу этот же тест но уже по стандарту подключения к библиотеке с сгенерированным автоматически советником (библиотека понадобится, если Ренат, и другие пользователи, захочет повторить тест и с моей библиотекой оптимизации тоже). Результат должен совпасть с результатом в п.1.
3. Проведу тест с моим алгоритмом и полученной в п2. библиотекой ФФ.
Далее, все те же 3 шага повторим для слегка изменённой ФФ Рената.
1. Сделаем три запуска для среднего значения с очисткой кэша оптимизатора перед каждым запуском оптимизации.
1) первое испытание
2016.11.26 14:58:45 Tester genetic optimization finished on pass 16640
2016.11.26 14:58:45 Tester result cache used 4170 times
2016.11.26 14:58:45 Tester 12373 records written to file cache D:\Soft\#1 Invests\MT5\tester\cache\TestFitness.3.xml
2016.11.26 14:58:45 Tester genetic calculation is over
2016.11.26 14:58:44 Tester Best result 39 produced at generation 52. Next generation 63
2) второе испытание
2016.11.26 15:11:29 Tester genetic optimization finished on pass 23296
2016.11.26 15:11:29 Tester result cache used 8614 times
2016.11.26 15:11:29 Tester 14493 records written to file cache D:\Soft\#1 Invests\MT5\tester\cache\TestFitness.3.xml
2016.11.26 15:11:29 Tester genetic calculation is over
2016.11.26 15:11:29 Tester Best result 40 produced at generation 78. Next generation 89
3) третье испытание
2016.11.26 15:14:26 Tester genetic optimization finished on pass 22784
2016.11.26 15:14:26 Tester result cache used 7564 times
2016.11.26 15:14:26 Tester 15085 records written to file cache D:\Soft\#1 Invests\MT5\tester\cache\TestFitness.3.xml
2016.11.26 15:14:26 Tester genetic calculation is over
2016.11.26 15:14:25 Tester Best result 45 produced at generation 76. Next generation 87
Средний результат (39+40+45)/3=41,33 при в среднем (16640+23296+22784)/3=20906 обращений к ФФ. Таким образом я результаты Рената воспроизвел, даже с немного лучшими результатами чем у него (это объяснимо, результаты слегка плавают из за стохастической природы ао, поэтому я и просил делать несколько испытаний).
2. Далее, тест советника от MQ сгенерированный для работы с ФФ оформленной в виде отдельной библиотеки testfitnessFF.mq5 (в прикрепе).
1) первое испытание
2016.11.26 16:17:44 Tester genetic optimization finished on pass 19200
2016.11.26 16:17:44 Tester result cache used 6355 times
2016.11.26 16:17:44 Tester 12728 records written to file cache D:\Soft\#1 Invests\MT5\tester\cache\AO from MQ (expert) testfitness.3.xml
2016.11.26 16:17:44 Tester genetic calculation is over
2016.11.26 16:17:43 Tester Best result 41 produced at generation 62. Next generation 73
2) второе испытание
2016.11.26 16:23:58 Tester genetic optimization finished on pass 19712
2016.11.26 16:23:58 Tester result cache used 6823 times
2016.11.26 16:23:58 Tester file cache used 3 times
2016.11.26 16:23:58 Tester 12736 records written to file cache D:\Soft\#1 Invests\MT5\tester\cache\AO from MQ (expert) testfitness.3.xml
2016.11.26 16:23:58 Tester genetic calculation is over
2016.11.26 16:23:58 Tester Best result 36 produced at generation 64. Next generation 75
3) третье испытание
2016.11.26 16:27:22 Tester genetic optimization finished on pass 21248
2016.11.26 16:27:22 Tester result cache used 7938 times
2016.11.26 16:27:22 Tester file cache used 2 times
2016.11.26 16:27:22 Tester 13166 records written to file cache D:\Soft\#1 Invests\MT5\tester\cache\AO from MQ (expert) testfitness.3.xml
2016.11.26 16:27:22 Tester genetic calculation is over
2016.11.26 16:27:22 Tester Best result 39 produced at generation 70. Next generation 81
4) и на всякий случай еще разок
2016.11.26 16:29:57 Tester genetic optimization finished on pass 21760
2016.11.26 16:29:57 Tester result cache used 7438 times
2016.11.26 16:29:57 Tester 14152 records written to file cache D:\Soft\#1 Invests\MT5\tester\cache\AO from MQ (expert) testfitness.3.xml
2016.11.26 16:29:57 Tester genetic calculation is over
2016.11.26 16:29:57 Tester Best result 41 produced at generation 72. Next generation 83
Средний результат (41+36+39+41)/4=39,25 при в среднем (19200+19712+21248+21760)/4=20480 обращений к ФФ. Таким образом можем видеть, что с ФФ оформленной в виде отдельной библиотеки тестовый советник от MQ демонстрирует похожие результаты (для повторения среднего значения понадобятся сотни повторений эксперемента, на это времени нет.
3. Раз мы получили соответствие результатов советника с ФФ внутри и советника с ФФ в виде отдельной библиотеки, то можем приступить к тестированию работы ао от Joo с той же ФФ в библиотеке, с которой работал алгоритм от MQ в предыдущем пункте.
2016.11.26 16:38:32.077 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.26 16:38:32.077 AO runner (script) (AUDUSD,M5) Время: 415791 мкс; 0.41579100 c
2016.11.26 16:38:32.077 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.26 16:38:41.827 AO runner (script) (AUDUSD,M5) Макс: 49.00000000
2016.11.26 16:38:41.827 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.26 16:38:41.827 AO runner (script) (AUDUSD,M5) Время: 415834 мкс; 0.41583400 c
2016.11.26 16:38:41.827 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.26 16:38:45.068 AO runner (script) (AUDUSD,M5) Макс: 49.00000000
2016.11.26 16:38:45.068 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.26 16:38:45.068 AO runner (script) (AUDUSD,M5) Время: 363686 мкс; 0.36368600 c
2016.11.26 16:38:45.068 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.26 16:38:48.233 AO runner (script) (AUDUSD,M5) Макс: 48.00000000
2016.11.26 16:38:48.233 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.26 16:38:48.233 AO runner (script) (AUDUSD,M5) Время: 369436 мкс; 0.36943600 c
2016.11.26 16:38:48.233 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.26 16:38:51.573 AO runner (script) (AUDUSD,M5) Макс: 45.00000000
2016.11.26 16:38:51.573 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.26 16:38:51.573 AO runner (script) (AUDUSD,M5) Время: 371704 мкс; 0.37170400 c
2016.11.26 16:38:51.573 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.26 16:38:55.005 AO runner (script) (AUDUSD,M5) Макс: 46.00000000
2016.11.26 16:38:55.005 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.26 16:38:55.005 AO runner (script) (AUDUSD,M5) Время: 357759 мкс; 0.35775900 c
2016.11.26 16:38:55.005 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.26 16:38:57.968 AO runner (script) (AUDUSD,M5) Макс: 48.00000000
2016.11.26 16:38:57.968 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.26 16:38:57.968 AO runner (script) (AUDUSD,M5) Время: 362894 мкс; 0.36289400 c
2016.11.26 16:38:57.968 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.26 16:39:00.748 AO runner (script) (AUDUSD,M5) Макс: 48.00000000
2016.11.26 16:39:00.748 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.26 16:39:00.748 AO runner (script) (AUDUSD,M5) Время: 373494 мкс; 0.37349400 c
2016.11.26 16:39:00.748 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.26 16:39:03.599 AO runner (script) (AUDUSD,M5) Макс: 45.00000000
2016.11.26 16:39:03.599 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.26 16:39:03.599 AO runner (script) (AUDUSD,M5) Время: 363190 мкс; 0.36319000 c
2016.11.26 16:39:03.599 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.26 16:39:06.968 AO runner (script) (AUDUSD,M5) Макс: 42.00000000
2016.11.26 16:39:06.968 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.26 16:39:06.968 AO runner (script) (AUDUSD,M5) Время: 361686 мкс; 0.36168600 c
2016.11.26 16:39:06.968 AO runner (script) (AUDUSD,M5) ---------------------------------
Средний результат (46+49+49+48+45+46+48+48+45+42)/10=46,6 при в среднем 20000 обращений к ФФ.
В первом тесте результат у алгоритма от MQ 41.33 при среднем вызове ФФ 20906, у алгоритма от Joo 46.6 при ровно 20000 вызовов.
Далее проведем тест на изменённой ФФ. Так как мы выяснили полное соответствие результатов советника с ФФ внутри с результатами советника с ФФ в виде библиотеки, то приступим к тестированию сразу со 2-го пунтка.
2.
1) первое испытание
2016.11.26 16:57:55 Tester genetic optimization finished on pass 21504
2016.11.26 16:57:55 Tester result cache used 6048 times
2016.11.26 16:57:55 Tester 15299 records written to file cache D:\Soft\#1 Invests\MT5\tester\cache\AO from MQ (expert) testfitness.3.xml
2016.11.26 16:57:55 Tester genetic calculation is over
2016.11.26 16:57:55 Tester Best result 49.81000000000001 produced at generation 71. Next generation 82
2) второе испытание
2016.11.26 17:00:52 Tester genetic optimization finished on pass 24576
2016.11.26 17:00:52 Tester result cache used 11850 times
2016.11.26 17:00:52 Tester 12547 records written to file cache D:\Soft\#1 Invests\MT5\tester\cache\AO from MQ (expert) testfitness.3.xml
2016.11.26 17:00:52 Tester genetic calculation is over
2016.11.26 17:00:51 Tester Best result 51.79000000000001 produced at generation 83. Next generation 94
3) третье испытание
2016.11.26 17:02:46 Tester genetic optimization finished on pass 19200
2016.11.26 17:02:46 Tester result cache used 4827 times
2016.11.26 17:02:46 Tester 14217 records written to file cache D:\Soft\#1 Invests\MT5\tester\cache\AO from MQ (expert) testfitness.3.xml
2016.11.26 17:02:46 Tester genetic calculation is over
2016.11.26 17:02:45 Tester Best result 49.04000000000001 produced at generation 62. Next generation 73
Средний результат (49,81+51,79+49,01)/3=50,2 при в среднем (21504+24576+19200)/3=21760 обращений к ФФ
3.
2016.11.26 17:06:10.729 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.26 17:06:10.729 AO runner (script) (AUDUSD,M5) Время: 440832 мкс; 0.44083200 c
2016.11.26 17:06:10.729 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.26 17:06:14.232 AO runner (script) (AUDUSD,M5) Макс: 60.22000000
2016.11.26 17:06:14.232 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.26 17:06:14.232 AO runner (script) (AUDUSD,M5) Время: 388881 мкс; 0.38888100 c
2016.11.26 17:06:14.232 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.26 17:06:17.966 AO runner (script) (AUDUSD,M5) Макс: 60.12000000
2016.11.26 17:06:17.966 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.26 17:06:17.966 AO runner (script) (AUDUSD,M5) Время: 392409 мкс; 0.39240900 c
2016.11.26 17:06:17.966 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.26 17:06:21.117 AO runner (script) (AUDUSD,M5) Макс: 60.22000000
2016.11.26 17:06:21.117 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.26 17:06:21.117 AO runner (script) (AUDUSD,M5) Время: 377241 мкс; 0.37724100 c
2016.11.26 17:06:21.117 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.26 17:06:24.333 AO runner (script) (AUDUSD,M5) Макс: 60.00000000
2016.11.26 17:06:24.333 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.26 17:06:24.333 AO runner (script) (AUDUSD,M5) Время: 401577 мкс; 0.40157700 c
2016.11.26 17:06:24.333 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.26 17:06:27.506 AO runner (script) (AUDUSD,M5) Макс: 57.42000000
2016.11.26 17:06:27.506 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.26 17:06:27.506 AO runner (script) (AUDUSD,M5) Время: 384175 мкс; 0.38417500 c
2016.11.26 17:06:27.506 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.26 17:06:31.067 AO runner (script) (AUDUSD,M5) Макс: 60.22000000
2016.11.26 17:06:31.067 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.26 17:06:31.067 AO runner (script) (AUDUSD,M5) Время: 387644 мкс; 0.38764400 c
2016.11.26 17:06:31.067 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.26 17:06:35.111 AO runner (script) (AUDUSD,M5) Макс: 60.22000000
2016.11.26 17:06:35.111 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.26 17:06:35.111 AO runner (script) (AUDUSD,M5) Время: 438752 мкс; 0.43875200 c
2016.11.26 17:06:35.111 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.26 17:06:38.183 AO runner (script) (AUDUSD,M5) Макс: 61.23000000
2016.11.26 17:06:38.183 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.26 17:06:38.183 AO runner (script) (AUDUSD,M5) Время: 373958 мкс; 0.37395800 c
2016.11.26 17:06:38.183 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.26 17:06:41.676 AO runner (script) (AUDUSD,M5) Макс: 56.71000000
2016.11.26 17:06:41.677 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.26 17:06:41.677 AO runner (script) (AUDUSD,M5) Время: 374096 мкс; 0.37409600 c
2016.11.26 17:06:41.677 AO runner (script) (AUDUSD,M5) ---------------------------------
Средний результат (61.12+60.22+60.12+60.22+60+57.42+60.22+60.22+61.23+56.71=597,48)/10=59,75 при в среднем 20000 обращений к ФФ.
Итак, во втором тесте с слегка изменённой ФФ результаты такие: у алгоритма от MQ 50.2 при среднем вызове ФФ 21760, у алгоритма от Joo 59.75 при ровно 20000 вызовов.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
MetaTrader 5 Strategy Tester!
Renat Fatkhullin, 2016.11.26 01:41
Поставим задачу просто и чисто для проверки способностей тестера подбирать целевую функцию:
В первую очередь надо понять область просчета - это 26(сколько символов в алфавите) в степени 50(символов в тексте). Это 5.6061+e70 вариантов переборов - такое безумное число в реальности.
Генетическому алгоритму нужно умудриться в пределах 1-2 десятков тысяч попыток уложиться и найти приемлемые результаты. Я бы сказал четче - задача экстремально сложна(безнадежна) и все зависит от функции фитнеса.
1) Шаг первый, вот исходный эксперт (TestFitness.mq5) с простейшей фитнес-функцией, предложенной @Andrey Dik:
{
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
оригинал: millions of residents chinas northwestern regions
жирным выделено 11 ошибок из 50 позиций, это 22%. не забывайте, что вместо пробелов поставлены x.
2) Шаг второй, пробуем исправить проблему с исходной фитнес функцией.
Как я и предложил выше на уровне теоретического рассуждения, сделаем зависимость угадывания символа зависимо от позиции символа:
{
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 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
оригинал: millions of residents chinas northwestern regions
жирным выделено 7 ошибок из 50 позиций, это 14%.
В чем проблемы и что я показал:
Я выполнил главные требования к замерам тестов:
Вот результаты тестов которые провел я. И пару страниц назад результаты, которые получил Ренат.
опять сотня строк пурги.
а где ответ на вопрос:
кто же все-таки впереди?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
MetaTrader 5 Strategy Tester!
Renat Fatkhullin, 2016.11.25 22:43
Андрей, вы идиот? Про самообман я ошибся.
У вас есть рандомная строка. Вам нужно привести ее с помощью генетики до расшифрованного до человеческого восприятия(чтоб каждый мог сравнить и сказать - да, получилось!) результата.
Где целевая строка? Или вы хотите сказать, что настолько запутали вопрос, что вообще задача не ставится про расшифровку строки?
В вашем коде есть исходная строка на 1000 символов. Почему вы тут вдруг прыгаете и заявляете про нечеловеческий рандом "SptstmLEjXhdESqotbRQbmsYKkJTZiOHBEenIbGqLHwxqfWTok" как целевую строку?
Я присоединяюсь к первой строке)
Вы не можете прямо сказать?
кто же все-таки впереди?
Я присоединяюсь к первой строке)
Вы не можете прямо сказать?
кто же все-таки впереди?
Вы арабскими цифрами владеете на уровне счета хотя бы до ста? Видно же, что в двух проведённых тестах мой алгоритм впереди.
И не имейте привычку выдирать посты из контекста, это не красиво. Тогда Ренат не совсем понял суть теста, поэтому такие слова. Кроме того, нужно смотреть предысторию, почему строка стала такой а не какой то другой.