Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Хорошо. Тогда всё проще. Нужно всего лишь сделать полный перебор всех параметров и определить такие параметры ТС, которые дадут "вид распределения с мат. ожиданием равным нулю". Тогда оптимизация вообще ни причем на этом этапе.
А вот после выявления таких параметров проведя полный перебор, нужно попытаться выявить связь между полученными вариантами параметров (понять что именно даёт такие результаты). Если удастся выявить эту связь, то только тогда в следующий раз её (связь) можно уже использовать как критерий оптимизации, использовать как ФФ. Шутка юмора только в том, что если получили параметры робастной системы на этапе полного перебора, то зачем тогда в следующие разы оптимизация?
Дело в том, что родил определение робастной ТС, отвечая на Ваш вопрос. Т.е. только что. И до сих пор пребываю в глубоких раздумьях, как будто сформулировал его кто-то другой. Думаю над видом ФФ робастной ТС по озвученному и неожиданному для себя определению.
Раньше делал полный перебор и, соответственно, мог видеть сразу большое количество ФФ. Но выбрать "робастные" (для реала) точки было всегда проблемой. С этим, думаю, сталкиваются все, кто решается после тестера на реал. Поэтому, как правило, для каждой ФФ выбирал несколько точке из топа. И создавал корзину ТС, взятыми с разными точками для разных ФФ. Получалась психологическая диверсификация робастности - математически совсем не обоснованная.
А на самом деле есть сторонние методы оптимизации ТС, в которых ну совсем не такой подход, как при полном переборе или ГА. Вот они для ТС подходят в миллион раз больше любого ГА.
Другой подход, исходя из определения "робастной ТС", заключается в том, что бы сразу оптимизировать на как можно большую глубину истории, при этом оформить кастомный критерий оптимизации как "вид распределения с мат. ожиданием равным нулю". Такой подход менее трудоёмок, но если существует на самом деле робастная ТС, то она с большой долей вероятности будет найдена оптимизатором. В этом контексте огромную роль играет количество сделок в торговой истории, оно напрямую влияет на время оптимизации, поэтому если бы было возможно отключать ненужные статистики в тестере и вообще всё то, что считается в фоне по умолчанию, то это бы значительно ускорило процесс. Ведь всё что действительно требуется посчитать в торговых результатах можно посчитать внутри советника.
Это очень легко делается. Считайте сделки сами, а в OnTester выдавайте результат. От мат. режима это будет отличаться тем, что исторические данные будут подаваться на вход. И это будет быстрее, чем тестер.
Вы арабскими цифрами владеете на уровне счета хотя бы до ста? Видно же, что в двух проведённых тестах мой алгоритм впереди.
И не имейте привычку выдирать посты из контекста, это не красиво. Тогда Ренат не совсем понял суть теста, поэтому такие слова. Кроме того, нужно смотреть предысторию, почему строка стала такой а не какой то другой.
И не Вам решать, что Ренат понял.
И не Вам решать, что Ренат понял.
Это очень легко делается. Считайте сделки сами, а в OnTester выдавайте результат. От мат. режима это будет отличаться тем, что исторические данные будут подаваться на вход. И это будет быстрее, чем тестер.
Имеете в виду отключать программно торговые операции в советнике при оптимизации и в самом советнике считать торговые операции и их результаты? Тогда получается, что нужно создать свой тестер, а сам штатный тестер служит лишь поставщиком котировок. Тогда зачем нужен вообще штатный тестер? Всё это можно сделать скриптом на чарте.
Штатный тестер нужен только для поступления новых котировок и 100%-й гарантии, что заглядывания в будущее нет.
Написать свой тестер очень просто. В этой реализации используется понятие контекста: штатный торговый движок или свой.
Попробуем такую функцию.
Оптимизатор MQ позволяет самый мелкий шаг 0.0000001 (1 в 7-м знаке после запятой). Решим эту задачу в диапазоне [-100.0; 100.0] с шагом 0.0000001.
Функция гладкая и параметра всего лишь 2. Единственная существенная проблема - ровная поверхность ФФ на 98% её площади, ФФ меняется хоть сколько нибудь существенно только в диапазоне [-5.0; 5.0]. Это тест алгоритма на способность полномасштабно ииследовать ВСЮ область значений ФФ.
Результаты алгоритма MQ:
2016.11.27 13:45:25 Tester genetic optimization finished on pass 23040 (of 4000000004000000001)
2016.11.27 13:45:25 Tester result cache used 10514 times
2016.11.27 13:45:25 Tester 12262 records written to file cache D:\Soft\#1 Invests\MT5\tester\cache\AO from MQ (expert).3.xml
2016.11.27 13:45:25 Tester genetic calculation is over
2016.11.27 13:45:24 Tester Best result 0.9779021503142658 produced at generation 77. Next generation 88
2016.11.27 13:48:55 Tester genetic optimization finished on pass 29184 (of 4000000004000000001)
2016.11.27 13:48:55 Tester result cache used 11774 times
2016.11.27 13:48:55 Tester 17075 records written to file cache D:\Soft\#1 Invests\MT5\tester\cache\AO from MQ (expert).3.xml
2016.11.27 13:48:55 Tester genetic calculation is over
2016.11.27 13:48:54 Tester Best result 0.975485093832579 produced at generation 101. Next generation 112
2016.11.27 13:50:58 Tester genetic optimization finished on pass 28672 (of 4000000004000000001)
2016.11.27 13:50:58 Tester result cache used 14191 times
2016.11.27 13:50:58 Tester 14161 records written to file cache D:\Soft\#1 Invests\MT5\tester\cache\AO from MQ (expert).3.xml
2016.11.27 13:50:58 Tester genetic calculation is over
2016.11.27 13:50:57 Tester Best result 0.9921959228388156 produced at generation 99. Next generation 110
Средний результат: 0,981861055661887 при 26965 обращений.
Результаты алгоритма Joo:
2016.11.27 13:56:39.234 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.27 13:56:39.234 AO runner (script) (AUDUSD,M5) Время: 58897 мкс; 0.05889700 c
2016.11.27 13:56:39.234 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.27 13:56:43.145 AO runner (script) (AUDUSD,M5) Макс: 0.99997220
2016.11.27 13:56:43.145 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.27 13:56:43.145 AO runner (script) (AUDUSD,M5) Время: 62574 мкс; 0.06257400 c
2016.11.27 13:56:43.145 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.27 13:56:45.981 AO runner (script) (AUDUSD,M5) Макс: 0.99997287
2016.11.27 13:56:45.981 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.27 13:56:45.981 AO runner (script) (AUDUSD,M5) Время: 69333 мкс; 0.06933300 c
2016.11.27 13:56:45.981 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.27 13:56:50.167 AO runner (script) (AUDUSD,M5) Макс: 0.99999902
2016.11.27 13:56:50.167 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.27 13:56:50.167 AO runner (script) (AUDUSD,M5) Время: 64544 мкс; 0.06454400 c
2016.11.27 13:56:50.167 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.27 13:56:52.689 AO runner (script) (AUDUSD,M5) Макс: 0.99803312
2016.11.27 13:56:52.689 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.27 13:56:52.689 AO runner (script) (AUDUSD,M5) Время: 87375 мкс; 0.08737500 c
2016.11.27 13:56:52.689 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.27 13:56:55.052 AO runner (script) (AUDUSD,M5) Макс: 0.99990425
2016.11.27 13:56:55.052 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.27 13:56:55.052 AO runner (script) (AUDUSD,M5) Время: 67242 мкс; 0.06724200 c
2016.11.27 13:56:55.052 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.27 13:56:58.375 AO runner (script) (AUDUSD,M5) Макс: 0.99999002
2016.11.27 13:56:58.375 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.27 13:56:58.375 AO runner (script) (AUDUSD,M5) Время: 65139 мкс; 0.06513900 c
2016.11.27 13:56:58.375 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.27 13:57:01.019 AO runner (script) (AUDUSD,M5) Макс: 0.99952582
2016.11.27 13:57:01.019 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.27 13:57:01.019 AO runner (script) (AUDUSD,M5) Время: 102345 мкс; 0.10234500 c
2016.11.27 13:57:01.019 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.27 13:57:03.578 AO runner (script) (AUDUSD,M5) Макс: 0.99780772
2016.11.27 13:57:03.578 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.27 13:57:03.578 AO runner (script) (AUDUSD,M5) Время: 69588 мкс; 0.06958800 c
2016.11.27 13:57:03.578 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.27 13:57:06.287 AO runner (script) (AUDUSD,M5) Макс: 0.99789141
2016.11.27 13:57:06.287 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.27 13:57:06.287 AO runner (script) (AUDUSD,M5) Время: 55451 мкс; 0.05545100 c
2016.11.27 13:57:06.287 AO runner (script) (AUDUSD,M5) ---------------------------------
Средний результат: 0,999112922 при 20000 обращений.
И, в качестве факультативного задания для алгоритма Joo: эта же задача с шагом 0.0, поле поиска стремится к бесконечности и ограниченно лишь возможностями числа double в параметрах:
2016.11.27 14:02:52.591 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.27 14:02:52.591 AO runner (script) (AUDUSD,M5) Время: 63993 мкс; 0.06399300 c
2016.11.27 14:02:52.591 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.27 14:02:56.526 AO runner (script) (AUDUSD,M5) Макс: 0.99999094
2016.11.27 14:02:56.526 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.27 14:02:56.526 AO runner (script) (AUDUSD,M5) Время: 58772 мкс; 0.05877200 c
2016.11.27 14:02:56.526 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.27 14:03:00.312 AO runner (script) (AUDUSD,M5) Макс: 0.99788956
2016.11.27 14:03:00.312 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.27 14:03:00.312 AO runner (script) (AUDUSD,M5) Время: 61093 мкс; 0.06109300 c
2016.11.27 14:03:00.312 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.27 14:03:03.950 AO runner (script) (AUDUSD,M5) Макс: 0.99788956
2016.11.27 14:03:03.950 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.27 14:03:03.950 AO runner (script) (AUDUSD,M5) Время: 58263 мкс; 0.05826300 c
2016.11.27 14:03:03.950 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.27 14:03:06.485 AO runner (script) (AUDUSD,M5) Макс: 0.99985214
2016.11.27 14:03:06.485 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.27 14:03:06.485 AO runner (script) (AUDUSD,M5) Время: 54989 мкс; 0.05498900 c
2016.11.27 14:03:06.485 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.27 14:03:08.788 AO runner (script) (AUDUSD,M5) Макс: 0.99995755
2016.11.27 14:03:08.788 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.27 14:03:08.788 AO runner (script) (AUDUSD,M5) Время: 75008 мкс; 0.07500800 c
2016.11.27 14:03:08.788 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.27 14:03:11.370 AO runner (script) (AUDUSD,M5) Макс: 0.99788878
2016.11.27 14:03:11.370 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.27 14:03:11.370 AO runner (script) (AUDUSD,M5) Время: 58411 мкс; 0.05841100 c
2016.11.27 14:03:11.370 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.27 14:03:13.963 AO runner (script) (AUDUSD,M5) Макс: 0.99999747
2016.11.27 14:03:13.963 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.27 14:03:13.963 AO runner (script) (AUDUSD,M5) Время: 66229 мкс; 0.06622900 c
2016.11.27 14:03:13.963 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.27 14:03:16.421 AO runner (script) (AUDUSD,M5) Макс: 0.99999543
2016.11.27 14:03:16.421 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.27 14:03:16.421 AO runner (script) (AUDUSD,M5) Время: 65642 мкс; 0.06564200 c
2016.11.27 14:03:16.421 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.27 14:03:19.316 AO runner (script) (AUDUSD,M5) Макс: 0.99798106
2016.11.27 14:03:19.316 AO runner (script) (AUDUSD,M5) Запусков ФФ: 20000
2016.11.27 14:03:19.316 AO runner (script) (AUDUSD,M5) Время: 48589 мкс; 0.04858900 c
2016.11.27 14:03:19.316 AO runner (script) (AUDUSD,M5) ---------------------------------
Средний результат: 0,999143996 при 20000 обращений. Шаг 0.0 не вызвал никаких проблем, а результат улучшился (было 0,999112922).
Итого:
MQ: Средний результат: 0,981861055661887 при 26965 обращений.
Joo: Средний результат: 0,999112922 при 20000 обращений.
Обращаю внимание на то, что разница между Макс ФФ и Мин ФФ очень невелика, всего 2,0, то есть число 2 в целой части, поэтому играет существенную роль в результате каждая цифра после запятой.
Сократим разрешенное количество обращений до 10К:
2016.11.27 14:26:37.160 AO runner (script) (AUDUSD,M5) Запусков ФФ: 10000
2016.11.27 14:26:37.160 AO runner (script) (AUDUSD,M5) Время: 46032 мкс; 0.04603200 c
2016.11.27 14:26:37.160 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.27 14:26:43.770 AO runner (script) (AUDUSD,M5) Макс: 0.99799845
2016.11.27 14:26:43.770 AO runner (script) (AUDUSD,M5) Запусков ФФ: 10000
2016.11.27 14:26:43.770 AO runner (script) (AUDUSD,M5) Время: 62890 мкс; 0.06289000 c
2016.11.27 14:26:43.770 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.27 14:26:55.129 AO runner (script) (AUDUSD,M5) Макс: 0.99733171
2016.11.27 14:26:55.129 AO runner (script) (AUDUSD,M5) Запусков ФФ: 10000
2016.11.27 14:26:55.129 AO runner (script) (AUDUSD,M5) Время: 41799 мкс; 0.04179900 c
2016.11.27 14:26:55.129 AO runner (script) (AUDUSD,M5) ---------------------------------
Среднее значение 0,997979283333333
Сократим разрешенное количество обращений до 5К:
2016.11.27 14:29:12.589 AO runner (script) (AUDUSD,M5) Запусков ФФ: 5000
2016.11.27 14:29:12.589 AO runner (script) (AUDUSD,M5) Время: 52603 мкс; 0.05260300 c
2016.11.27 14:29:12.589 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.27 14:29:19.119 AO runner (script) (AUDUSD,M5) Макс: 0.99842384
2016.11.27 14:29:19.119 AO runner (script) (AUDUSD,M5) Запусков ФФ: 5000
2016.11.27 14:29:19.119 AO runner (script) (AUDUSD,M5) Время: 32456 мкс; 0.03245600 c
2016.11.27 14:29:19.119 AO runner (script) (AUDUSD,M5) ---------------------------------
2016.11.27 14:29:25.701 AO runner (script) (AUDUSD,M5) Макс: 0.99712439
2016.11.27 14:29:25.701 AO runner (script) (AUDUSD,M5) Запусков ФФ: 5000
2016.11.27 14:29:25.701 AO runner (script) (AUDUSD,M5) Время: 35381 мкс; 0.03538100 c
2016.11.27 14:29:25.701 AO runner (script) (AUDUSD,M5) ---------------------------------
Среднее значение 0,879866583333333.
Таким образом можно сделать вывод, что алгоритм Joo уверенно опережает результаты MQ в этом тесте даже при в 2 раза меньшем числе обращений к ФФ (10К против более чем 20К).
Это был довольно простой тест для ао.
Теперь можно усложнить тест "размножив" представленную функцию и перемешав её параметры на 50-100 параметров ФФ. Учитывая, что в штатном оптимизаторе весьма ограниченное возможное поле поиска то думаю шаг не получится сделать менее чем 0,01.
Дело в том, что родил определение робастной ТС, отвечая на Ваш вопрос. Т.е. только что. И до сих пор пребываю в глубоких раздумьях, как будто сформулировал его кто-то другой. Думаю над видом ФФ робастной ТС по озвученному и неожиданному для себя определению.
Ответ на вопрос о робастности лежит в самом определении этого слова - примерно - устойчивость системы при изменчивости условий. Если не отходить далеко от тестера, то аналог будет примерно сродни форвард-тесту, который в общем-то есть (правда только в МТ5), но опять-таки не доделан, потому что нет механизма сравнения показателей на бэк и форвард периодах. А именно из этого сравнения можно выделить область стабильных прибыльных параметров (они не будут равны ни оптимальным параметрам бэк-периода, ни оптимальным параметрам форварда).
Это если рассматривать "робастность" как способность системы иметь те же характеристики на форварде, что и на бек периоде. Но тогда остаются открытыми вопросы: "Как долго система будет сохранять свои свойства", "Какова оптимальная длина оптимизации что бы получить устойчивый форвард?" и др. То есть это очень "скользкие" моменты, на которые нет ответов. К тому же параметры системы определённой как прошедшей бак-форвард тест ни что иное как один из вариантов параметров системы, который УЖЕ есть, его можно было бы увидеть если провести оптимизацию сразу на всём периоде вместе бак-форвард, при этом естественно отсеяться те, которые не пройдут этот участок. Тогда опять встаёт вопрос, как определить ту, что пройдет участок в будущем? Снова удлинять участок истории?
Таким образом мысленно интегрируя робастую систему на историю мы приходим к тому, что если и существуют параметры системы которые сохранят свои свойства на форварде, то система с такими параметрами вечна в узком смысле (пока кардинально не поменяется рынок или ещё что глобальное не произойдет). Рассуждая дальше приходим к неутешительным выводам: все эти валк-форвард оптимизации и бак-форвард тесты ни что иное как самообман, это равносильно выбору варианта параметров, которые имеют характеристики одинаковые на выбранном бак-форвард участке, то есть не имеют практической ценности и гарантии на будущее.
Я подхожу к этому вопросу проще, наоборот, мысленно дифференцируя параметры системы и её торговые показатели на истории. Логика следующая: представим, что существует некая вечная система, которая не имеет параметров и торговые характеристики у неё постоянны на любой длине истории. Тогда есть система, которая имеет параметры, но любой из вариантов параметров даст стабильную систему. Далее, тогда существует система, 80% вариантов параметров системы стабильны на выбранном участке истории. Тогда существует система, все варианты параметров которой убыточны на выбранной длине истории. Какие из этих гипотетических систем в принципе возможны? Конечно определённо по крайней мере последние две. Делаем вывод: чем больше вариантов параметров системы показывают устойчивые показатели на выбранном участке истории, тем более вероятно, что при выборе одного из варианта параметров окажется с такими характеристиками и на форварде! Посмотрите например на систему по МА, сколько процентов из вариантов параметров оказываются стабильными? 3-5%? - поэтому и вероятность прибыли в будущем очень низка.
Конечно, все эти рассуждения чисто умозрительны. Но по крайней мере нужно хотя бы рассуждать в сторону большей вероятности того, что мы хотим получить.
Ответ на вопрос о робастности лежит в самом определении этого слова - примерно - устойчивость системы при изменчивости условий. Если не отходить далеко от тестера, то аналог будет примерно сродни форвард-тесту, который в общем-то есть (правда только в МТ5), но опять-таки не доделан, потому что нет механизма сравнения показателей на бэк и форвард периодах. А именно из этого сравнения можно выделить область стабильных прибыльных параметров (они не будут равны ни оптимальным параметрам бэк-периода, ни оптимальным параметрам форварда).
Нет, в моем понимании "робастности" нет места форвардам. "Робастность" определяется на определенном участке истории. И не имеет отношения к будущему. Казалось бы, просто подгони тогда любую ТС в оптимизаторе и все дела. Но только это не просто с тем определением, что дал.
Рассуждая дальше приходим к неутешительным выводам: все эти валк-форвард оптимизации и бак-форвард тесты ни что иное как самообман, это равносильно выбору варианта параметров, которые имеют характеристики одинаковые на выбранном бак-форвард участке, то есть не имеют практической ценности и гарантии на будущее.
Да, элемент самообмана во всех видах форвардов очень велик.