Предложение разработчикам. Борьба с подгонкой внешних параметров советников на исторических данных

 
Не для кого не секрет, что MetaTrader4 уже стал практически вне конкуренции по отношению к другим торговым платформам, благодаря поддержке очень качественного автотрейдинга (и не только). И причиной тому, являются несколько факторов:

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

Я так думал и многие до сих пор полагают, что бороться с этим злом можно если внедрить автооптимизацию советников, как внешнюю, так и встроенную в терминал. Например ввести функцию Optimize(некие параметры оптимизации). Но на самом деле, как выясняется, такой подход ничего не решает. Например, параметры советника прошли оптимизацию и был взят лучший результат. Поставили его на трейдинг. Если не сливает, то оставляем прежние параметры, пока не начнет сливать. Как только слил, сразу переоптимизацию. Вроде бы логично. Но в результате получается, что последующая переоптимизация также дает подгонку (причем по очень многим инструментам еще и стабильно подгонка за подгонкой). Результат только плачевный, поскольку подобрать таким макаром неподгоночные параметры советника удается очень редко.

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

Как это делается? Например, у меня в окне установлены максимальные 2000 баров - репрезентативная выборка. Я прогоняю по ним оптимизацию. Потом ставлю советника на трейдинг и гоняю на демо или в реале еще на 500 барах - вне репрезентативной выборки. Если советник не сливает, то внешние параметры остаются прежними. Если сливает переоптимизация.

А теперь предположим, что в тестере стратегий есть форвардная оптимизация. Для этого в окне установлен предел 2500 баров. Но оптимизация проводится только по 2000 первых - по репрезентативной выборке, а тестирование только по 500 последним - вне выборки. И отсортированные результаты выдаются только по результатам вне выборки. Причем бесполезными данными тестера считаются, если или в выборке или (либо) вне ее баланс оказался отрицательным. (Желательно, чтобы владелец советника мог сам выбирать количество баров в выборке и вне ее). В этом случае мне нет никакой необходимости терять время на тестирование советника в трейдинге, а результат получается таким же, как и при этом самом тестировании. Т.е. если советник не слил на последних 500 барах, значит я уже с большей вероятностью имею дело не с подгонкой результатов, а с более или менее подобранными под реальный рынок.

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

Получаем 4 варианта:

  1. В выборке и вне ее результаты оказались сливными. Значит параметры советника нет смысла применять.
  2. В выборке результаты оказались прибыльными, вне выборки сливными - подгонка или рынок изменился и следует переждать, когда он стабилизируется
  3. В выборке результаты были убыточными, а вне ее прибыльными. Подгонка по результатам вне выборки или рынок меняется и тоже следует переждать
  4. И в выборке и вне ее результаты прибыльны. Рынок более менее стабилен и есть вероятность, что он продолжит прежние тенденции.
 

Думаю, что бороться с подгонкой параметров эксперта на истории просто невозможно. И форвардные тесты (тестирование вне выборки) проблему также не решают. Результат как всегда будет один и тот же. Если стратегия имеет рациональное зерно, способное зарабатывать деньги, то прибыль у вас будет и без оптимизации на истории. Если же его там нет, то оптимизация, включая успешные форвардные тесты, денег вам не принесут. Я уже более полугода никакими оптимизациями в тестере не занимаюсь (максимум - это просто прогоны в тестере для отладки кода). Только тестирование он-лайн (сразу на реальных копейках). По моему мнению у эксперта не должно быть вообще никаких внешних параметров, которые нужно оптимизировать. Если взять концепцию рынка, условно говоря разделяющуюся на 2 фазы - разворот тренда и движение цены от одного разворота до другого, то эксперт должен во-первых решать "всего лишь" :o) 2 задачи - это определение фазы разворота и фазы движения. Очевидно, что каждый разворот в будущем будет иметь разные параметры, то есть если использовать индикаторы, которые сигнализируют о развороте, то один и тот же индикатор покажет разные значения на разных разворотах. И соответственно бессмысленно пытаться подстраивать работу эксперта под параметры индикатора на прошлых разворотах, так как будущие развороты будут другими с соответсвующими последствиями для работы эксперта. Ну а уровень стоплосса для открытой позиции может быть выбран просто на основании логики к примеру стоплосс за ближайшим значимым фракталом (минимум или максимум за последние 1-2 неделю) или ещё как-нибудь логически обоснованным. Трейлинг стоплосса также вряд ли может быть сколь-нибудь обоснован (соптимизирован). Во время движения от одного разворота до другого может случиться куча разных спекулятивных новостей, которые вышибут прибыльную позу по невыгодной цене вне зависимости от значения размера трейлинга стоплосса, который был подобран в тестере. Эксперт просто должен определить повышенную вероятность начала следующего разворота и закрыть прибыльную позицию в перегретой разворотной зоне пускай и не по максимальной цене, так как точное значение максимума никакими расчётами определить невозможно, можно определить лишь повышенную вероятность его возникновения. Это в любом случае статистически будет выгоднее чем трейлинг стоп. Как это сделать - это уже вопросы стратегии, который каждый решает самостоятельно. Эксперт, который работает на основе такого принципа соответственно должен быть более-менее успешным на большинстве валют. Поэтому я провожу реальные тесты сразу на всех доступных валютах брокера (19 штук). Это резко убыстряет скорость набора статистических данных и позволяет быстрее понять направления дальнейшего совершенствования логики работы советника по определению фаз рынка.

 
solandr:

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

Кто бы спорил? Делов то, хрен да маленько! Осталось только найти такого эксперта и рынок, который с таким экспертом будет профит давать.

Действительно, и нафига эта возня со всякими тестами, оптимизаторами и прочие ген. алгоритмами? Когда можно просто воткнуть на чарт МТСку и только наблюдать как морда у нее улыбается и баланс растет. Все сразу станут богатыми и счастливыми.
 
Reshetov, молодца. Хорошо написал.
На самом деле сколько людей столько и мнений. Например я очешь широко использую функцию как тестирование и оптимизация советников. В моих экспертах имеется ряд настроик которые необходимо оптимизировать. И поверте оптимизация даёт свой прирост баланса, нежели эксперт в котором нет совсем внешних настроек и который не оптимизируется совсем. Да я понимаю что в прибыльном эксперте должны быть заложены алгоритмы правильной торговли, а не добиваться прибыльности с помощью подгонки под прошлую историю.
Вот вам живой пример эффективности оптимизации. Эксперт оптимизируется каждые сутки, по каждой валютной паре. Ниже результат его торговли, а в аттаче деталезация счета.
Файлы:
statement.zip  8 kb
 
HIDDEN:
Reshetov, молодца. Хорошо написал.
На самом деле сколько людей столько и мнений. Например я очешь широко использую функцию как тестирование и оптимизация советников. В моих экспертах имеется ряд настроик которые необходимо оптимизировать. И поверте оптимизация даёт свой прирост баланса, нежели эксперт в котором нет совсем внешних настроек и который не оптимизируется совсем.
Я человек не верующий - атеист и на веру ничего не принимаю кроме доказанных теорем, а стараюсь все перепроверять. Тем паче, что бизнес на доверии - лохотрон, а реальный бизнес строиться только на гарантиях.

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

Ну и потом, из результатов оптимизации приемлемыми являются лишь те, которые по тестам на графике дают профит на последних 20-30% тестируемого периода. Все остальные - голимая подгонка.

Поэтому предлагаю разработчикам чтобы в тестере стратегий выдавались не только результаты оптимизации по всей истории тестирования, а сразу два результата, т.е. например, результат по балансу или прибыльности для первых 80% оптимизируемого периода и отдельно результат последних 20% этого же периода. Если хотя-бы один из этих участков убыточен, то параметры советника на которых он тестировался непригодны. А отличить пригодные от непригодных результатов оптимизации никоим образом не удается, как последующим тестированием и визуальным просмотром графиков. Поскольку результатов тестирования и после генетического алгоритма слишком много, то поиск приемлемых, попросту чрезмерно затратен по времени.
 
Reshetov:
solandr:

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

Кто бы спорил? Делов то, хрен да маленько! Осталось только найти такого эксперта и рынок, который с таким экспертом будет профит давать.

Действительно, и нафига эта возня со всякими тестами, оптимизаторами и прочие ген. алгоритмами? Когда можно просто воткнуть на чарт МТСку и только наблюдать как морда у нее улыбается и баланс растет. Все сразу станут богатыми и счастливыми.

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

Ваше предложение бесспорно может облегчить жизнь тем, кто занимается вот такими оптимизациями с последующими тестами вне выборки. Хотя на этом форуме мне попадались обсуждения запуска тестера, расположенного в другом каталоге с получением результатов экспертом. По моему xeon предлагал вариант реализации. То есть и без помощи разработчиков такое можно уже реализовать, только конечно же это достаточно сложно.

PS: 'автооптимизатор'
 
solandr:
Reshetov:
solandr:

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

Кто бы спорил? Делов то, хрен да маленько! Осталось только найти такого эксперта и рынок, который с таким экспертом будет профит давать.

Действительно, и нафига эта возня со всякими тестами, оптимизаторами и прочие ген. алгоритмами? Когда можно просто воткнуть на чарт МТСку и только наблюдать как морда у нее улыбается и баланс растет. Все сразу станут богатыми и счастливыми.

Я просто поделился своим мнением исходя из имеющегося своего опыта - всего-навсего... А все сразу богатыми и счастливыми никогда не будут и причина этого кроется не только в методах оптимизации. ..
Cкорее результатом этого мнения является отсутствие какого либо опыта, а потому и такой кавалерийский наскок в духе - фигня все чем вы тут занимаетесь, и только solandr знает как надо делать МТС. А далее идет куча бреда, взятого из книг американских авторов.
 
Reshetov:
Cкорее результатом этого мнения является отсутствие какого либо опыта, а потому и такой кавалерийский наскок в духе - фигня все чем вы тут занимаетесь, и только solandr знает как надо делать МТС. А далее идет куча бреда, взятого из книг американских авторов.

Заметьте, что это сказано было именно вами. Никаких споров по этому вашему заявлению я устраивать не собираюсь.
 
solandr:
Reshetov:
Cкорее результатом этого мнения является отсутствие какого либо опыта, а потому и такой кавалерийский наскок в духе - фигня все чем вы тут занимаетесь, и только solandr знает как надо делать МТС. А далее идет куча бреда, взятого из книг американских авторов.

Заметьте, что это сказано было именно вами. Никаких споров по этому вашему заявлению я устраивать не собираюсь.
Тоже не вижу смысла устраивать личные разборки. Сколько трейдеров, столько и мнений. Если всех их собрать в одну кучу, то очень быстро друг другу морды разобьют, но к единому мнению по вопросам торговых стратегий так и не придут.
 
solandr:
Reshetov:
solandr:

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

Кто бы спорил? Делов то, хрен да маленько! Осталось только найти такого эксперта и рынок, который с таким экспертом будет профит давать.

Действительно, и нафига эта возня со всякими тестами, оптимизаторами и прочие ген. алгоритмами? Когда можно просто воткнуть на чарт МТСку и только наблюдать как морда у нее улыбается и баланс растет. Все сразу станут богатыми и счастливыми.

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

Ваше предложение бесспорно может облегчить жизнь тем, кто занимается вот такими оптимизациями с последующими тестами вне выборки. Хотя на этом форуме мне попадались обсуждения запуска тестера, расположенного в другом каталоге с получением результатов экспертом. По моему xeon предлагал вариант реализации. То есть и без помощи разработчиков такое можно уже реализовать, только конечно же это достаточно сложно.

PS: 'автооптимизатор'
Да, я видел эту ветку. И у меня есть свой автооптимизатор написанный на Java, который выполняет ту же самую задачу и потом прописывает параметры советников в профили. Но проблема в том, что глядя на параметры оптимизации, нельзя понять, являются ли они подгоночными или нет. Их можно только отсортировать по тем или иным параметрам: прибыли, прибыльности, матожиданию, просадке или количеству непрерывных прибылей либо убытков. Поэтому весь процесс автоматизации попросту теряет смысл, поскольку по каждому результату и выуженным им внешним параметрам советника, потом приходится вручную гонять тесты и смотреть на графики. Т.е. двойная работа, т.к. во время оптимизации гонялись тесты по каждому проходу и после нее опять же приходится.
А если бы во время оптимизации сразу же можно было засечь прибыль от начала периода тестирования и до некоторой точки, а также отдельно от этой самой точки и до завершения периода, то все стало бы в той или иной степени наглядным и понятным. Это и есть форвардные тесты.
 
HIDDEN:
Эксперт оптимизируется каждые сутки, по каждой валютной паре. Ниже результат его торговли, а в аттаче деталезация счета.

Как у вас обстоят дела с экспертом в целом? Если я не ошибаюсь, то вы запустили несколько его вариантов (наверное с разными параметрами) в тестирование на демо с нового года. Могли бы ознакомить с общими результатами тестирования эксперта за 2 месяца, который имеет очень впечатляющие результаты на истории 'От идеи до реального счета.' ?
Просто так из чистого любопытства спрашиваю, так как у меня тоже были советники, которые загонялись под кривую с не менее впечатляющими результатами, что ваш эксперт, но к сожалению на реале эффект был обратным. Вот и хотелось бы узнать что получилось в результате у вас?
Причина обращения: