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

 
Dr.Trader:

Представьте себе функцию f(x,y) = x^2 + y^2 + 3.
Вам нужно найти её минимум. 
Одним алгоритмом решение - можно найти производные от x и y, и спуститься по градиенту.
Другим алгоритмом решение - поиск по сетке - по очереди менять значения x и y в определённых пределах, добиваясь всё меньшего результата.

Так вот, этот второй алгоритм - то что использовал я. Не имеет значения это работа с текстом, или работа с параметрами функций, смысл от этого не меняется. 
Если почему-то считаете этот метод читерским - то посмотрите википедию, где для него даже есть отдельная статья - https://ru.wikipedia.org/wiki/Метод_перебора Метод перебора (метод равномерного поиска, перебор по сетке). Всё это общепризнано.

Я согласен с fxsaber что значение шага = 1 это очень большая подсказка для алгоритма. Но, вы используете такой константый шаг для теста MQ, и для теста своей библиотеки, так что здесь мы на равных условиях.

я дико извиняюсь,что влезаю в ваш высоконаучный диспут, но Андрей еще 100500 страниц назад писал, что такой способ сработает для гладкой функции, где можно найти производную в каждой точке, а тут ,вроде как,задача не "гладкая".
 
ivanivan_11:
я дико извиняюсь,что влезаю в ваш высоконаучный диспут, но Андрей еще 100500 страниц назад писал, что такой способ сработает для гладкой функции, где можно найти производную в каждой точке, а тут ,вроде как,задача не "гладкая".

Я просто привёл два примера для решения f(x,y) = x^2 + y^2 + 3    Задача Андрея так не решится, это к сожалению да. 

Третий способ - генетика. То что используется в MQ для этой задачи
1) нагенерировать кучу комбинаций x и y,
2) оценить их все,отбросить все неудачные комбинации
3) из оставшихся комбинаций наделать новых, путём перемешивания их x и y. Иногда вносить туда новые рандомные значения.
4) повторять 2-3 пока не надоест

Четвёртый способ - то что использует андрей. Раз он свой код не выкладывает (ex5 не в счёт, там кода нету), то там наверное какое-то читерство. 

 
Dr.Trader:

Проблема в том что данная задача заточена под вот такое условие - 

Andrey Dik:

А вот функции имеющие ступени, долгие горизонтальные поверхности (когда ФФ не меняет значение в большом диапазоне параметров), нелинейные и рубленые, со множеством острых пиков, и тем более вообще не имеющие НИКАКОЙ зависимости между параметрами (фактически это просто шум, это поиск иголки на околоземной орбите)
...
и представляют собой результаты работы советников на финансовых рынках

И моё мнение что это полная противоположность того как должна выглядеть фитнесс функция советника.

+1.
 

Вот новый код с небольшим изменением, в нём убран константный шаг = 1, дабы было ещё честнее.

Там-же 3 теста:
1) Для задания от андрея с лимитом в 20000.
2) оптимизация x^2 + y^2 + z^2 этим-же оптимизатором, без изменений в его коде. 
3) оптимизация функции rastrigin https://www.sfu.ca/~ssurjano/Code/rastrr.html этим-же оптимизатором, без изменений в его коде. Длина вектора Rastrigin = 100

Результаты.
1)
Тест на 50 букв     - Accuracy: 1; fitness calls: 19950; average execution time: 0.04791732 s. Найдены 50 из 50, результат тот-же
Тест на 150 букв   - Accuracy: 1; fitness calls: 19800; average execution time: 0.08571966 s. Найдены 150 из 150, результат тот-же
Тест на 1000 букв - Accuracy: 0.215; fitness calls: 20000; average execution time: 0.4046583 s. Найдены 215 из 1000. Результат хуже чем в прошлый раз, это связано с тем что алгоритм теперь вообще без понятия о нужной длине шага, и может перешагивать/недошагивать. Результат всё равно лучше чем у андрея который при этом подсказывал алгоритму что шаг = 1.

2)
Найденный минимум = 0.003895788 (1000 вызовов фитнесс функции), при том что результат может быть от 0 до бесконечности. Это очень хорошее решение.

3)
Найденный минимум = 1.609767 (100000 вызовов фитнесс функции), при том что результат может быть от 0 до десятков тысяч. Это очень хорошее решение.

 

Как видите, оптимизатор справился очень хорошо, с разными функциями, подстройки под данные от андрея нету.
Это всё тот-же код что я приложил раньше, с убранным шагом=1, и добавленным расчётом шага от допустимого числа вызовов фитнесс функции. 

Любое упоминание "читерства" - должно сопровождаться соответсвующей строчкой из приложенного кода, иначе не считается. Ваша личная неприязнь к какому-то алгоритму меня не волнует.

Файлы:
discropt2.txt  18 kb
 

Тестер мт5 мне нравится, очень но хорош...

но блин.... почему по нажатию кнопки f2 меня все время перекидывает в редактор вместо того чтобы начать редактировать выбранное поле параметра?

раньше можно было удобно редактировать поля Значение Старт Шаг Стоп с кейборды кнопками f2 f3 f4 f5 не кликая мышой а теперь нет!

я опечален... 

 

Сначала читаем это:

Dr.Trader:

Представьте себе функцию f(x,y) = x^2 + y^2 + 3.
Вам нужно найти её минимум. 
Одним алгоритмом решение - можно найти производные от x и y, и спуститься по градиенту.
Другим алгоритмом решение - поиск по сетке - по очереди менять значения x и y в определённых пределах, добиваясь всё меньшего результата.

Так вот, этот второй алгоритм - то что использовал я. Не имеет значения это работа с текстом, или работа с параметрами функций, смысл от этого не меняется. 
Если почему-то считаете этот метод читерским - то посмотрите википедию, где для него даже есть отдельная статья - https://ru.wikipedia.org/wiki/Метод_перебора Метод перебора (метод равномерного поиска, перебор по сетке). Всё это общепризнано.

Я согласен с fxsaber что значение шага = 1 это очень большая подсказка для алгоритма. Но, вы используете такой константый шаг для теста MQ, и для теста своей библиотеки, так что здесь мы на равных условиях.

 Далее читаем:

Dr.Trader:

Я просто привёл два примера для решения f(x,y) = x^2 + y^2 + 3    Задача Андрея так не решится, это к сожалению да. 

Третий способ - генетика. То что используется в MQ для этой задачи
1) нагенерировать кучу комбинаций x и y,
2) оценить их все,отбросить все неудачные комбинации
3) из оставшихся комбинаций наделать новых, путём перемешивания их x и y. Иногда вносить туда новые рандомные значения.
4) повторять 2-3 пока не надоест

Четвёртый способ - то что использует андрей. Раз он свой код не выкладывает (ex5 не в счёт, там кода нету), то там наверное какое-то читерство. 

 Так решается или не решается?

А мой алгоритм - это значительно модифицированный ГА того что в моей статье. Я связан лицензионным соглашением и посему не могу предоставить исходники.

 
Andrey Dik:

Так решается или не решается?

Простите за неточность, я думал будет понятно из контекста, ибо это был ответ на комментарий про первый способ. Первым способом ваша задача не решится. Вторым - решится.

Вы уже проверили тот новый код что я приложил? Добавите меня в табличку результатов? 

 
Dr.Trader:

Простите за неточность, я думал будет понятно из контекста, ибо это был ответ на комментарий про первый способ. Первым способом ваша задача не решится. Вторым - решится.

Вы уже проверили тот новый код что я приложил? Добавите меня в табличку результатов? 

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

Второй Ваш код - окончательный вариант? - если да, то для Вас назад дороги уже нет. 

 

Да там и изучать-то не надо, просто посмотрите на первую функцию (оптимизатор), ваших знаний mql хватит чтоб убедиться что идёт работа только с локальными и интерфейсными переменными, а сама фитнесс функция - для оптимизатора чёрный ящик. Синтаксис R очень похож на mql, разберётесь за 5 минут.

Багов вроде нету, пускай этот второй код будет окончательный вариант, ок.
Будет очень некрасиво если начнёте опять придумывать новые правила на ходу.. так что объявляю текущие правила и ваш текущий результат тоже окончательными.
В светлый путь! 

 

Для истории -

Andrey Dik: Dr.Trader:
Участники501501000
Joo39,35,43,37,39,38,39,43,44,40 (средн. 39,7)78,73,81,75,79,78,83,80,74,80 (средн. 78,1) (88 при 74K) 170,168,169,158,168,162,158,170,172,160 (средн. 165,5)
R 50 150 215

Таблица с результатами по итогам 20 испытаний для каждого из тестов с текстом из 50, 150 и 1000 символов, с ключом из 52 символов, максимально допустимое количество обращений к ФФ 20000 (для MQ значение несколько больше). 

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