TSR - реанимация торговых систем

 

В продолжение темы: Где грань между подгонкой и реальными закономерностями?


TSR - аббревиатура от Trading Systems Recovery


Выкладываю без описания теории и без скриншотов. Скриншоты будут в Code Base


Особоодаренных сразу предупреждаю:

1. Прилагаемая версия советника урезана до минимума пригодного для учебно-образовательных целей

2. По вопросам усовершенствования советника идите в ЖОБу

3. На вопросы, типа: "а почему у меня другие результаты" ответа от автора не последует



Проведем эксперимент на торговой системе, в основе которой заложен прогноз будущего направления движения котировок путем подгонки весовых коэффициентов элементарной однослойной нейронной сети – перцептрона на исторических данных. Принцип действия данной торговой системы был подробно описан мною в статье: «Как найти торговую систему». Возьмем исторические данные для валютной пары EURUSD за 9 предыдущих месяцев или более на чарте с таймфреймом H1. Разобьем их на три независимых участка по три месяца. Первый участок оставим для окончательного теста, а два остальных для подгонки под историю. Чтобы не гонять торговую систему по отдельности, я сразу же объединил два перцептрона в одной торговой системе. А для раздельного тестирования и оптимизации создал функцию переключатель Supervisor() с помощью которой торговая система имеет три режима работы в зависимости от входного параметра pass: 1 – подгонка и тестирование первого перцептрона, 2 – подгонка и тестирование второго перцептрона, 3 – фильтрация путем отсева противоречивых показаний обоих перцептронов в режиме тестирования без оптимизации или в режиме автотрейдинга на демонстрационном или реальном депозите.

Подгоняемыми под исторические данные являются весовые коэффициенты перцептронов: x11, x12 … x42, а также p и sl. Входной параметр sl – является константой для всех участковх. По этому самому значению выставляются уровни стоплосс и тейпрофит для всех открываемых позиций. Еще один входной параметр p – временной период лага для разницы цен открытия, также является константой. Вход в рынок осуществляется в начале формирования нового бара, т.е. по ценам открытия баров и по показаниям перцептронов в зависимости от значения входного параметра pass, а выход только по срабатыванию стоплосс или тейкпрофит. Оптимизация проводится с помощью генетического алгоритма поиска экстремумов, а в качестве экстремума взят максимум по балансу. Чтобы алгоритм не клинило на маржинколлах во время оптимизации начальную сумму нужно брать очень большую, например, $1000000. Входные параметры: lots - объем открываемых позиций в лотах и mn - уникальный магический номер, чтобы советник не перепутал управление своими (которые он открыл) ордерами с чужими (которые он не открывал).


На первом этапе нам нужно узнать какими должны быть значения входных переменных p и sl. Для этого выбираем два последних участка истории, т.е. от 6 месяцев назад и до сегодня. Выставляем все параметры весов перцептронов в значения от Start = 0 до Stop = 200 с шагом 1. Значение p от Start = 3 до Stop =100 с шагом 1, значение sl от Start = 100 до Stop =1000 с шагом 10 (или от 10 до 100 с шагом 1 для четырехзначных котировок). Значение pass выставляем в 1. Помечаем галочкой оптимизируемые параметры: x11, x21, x31, x41, p и sl. Все остальные галочки должны быть отключены. Запускаем оптимизацию. После завершения подгонки устанавливаем входные параметры по лучшему проходу.


Второй этап. Подгонка весов первого перцептрона на втором участке исторических данных. Устанавливаем дату и время оптимизации от 6 месяцев назад, до 3 месяцев назад. Убираем галочки оптимизируемых параметров только с входных переменных p и sl. Запускаем оптимизацию. После завершения подгонки устанавливаем входные параметры по лучшему проходу.


Третий этап. Подгонка весов второго перцептрона на третьем участке исторических данных. Устанавливаем дату и время оптимизации от 3 месяцев назад и по сегодняшний день. Убираем галочки с оптимизируемых параметров: x11, x21, x31, x41 и выставляем для x12, x22, x32 и x42. Остальные галочки должны быть отключены. Выставляем значение входной переменной pass равным 2. Запускаем оптимизацию. После завершения подгонки устанавливаем входные параметры по лучшему проходу.


Все, наша торговая система подогнана под исторические данные от 6 месяцев назад и по сегодняшний день. Сохраняем значения входных параметров в файл настроек. Выставляем входную переменную pass в значение 3. Убираем галочку с «Использовать дату». Запускаем тест. Смотрим на график тестирования. И видим, что кривая баланса и эквити стремится вверх в правой части графика и стремится вниз в левой части. Теперь нам нужно удостовериться в том, что стремление баланса вверх имеет место на участке вне подгоночной выборки. Подводим курсор мышки к линии баланса, где начинается подъем профита и в всплывающей подсказке смотрим дату. Получается, что кривая баланса стремилась вверх почти девять месяцев назад, считая от сегодняшнего дня, без учета 10 дней, т.е. 8 месяцев и 20 дней. А подгонку мы проводили на участке 6 месяцев. Следовательно, успешный тест вне оптимизируемой выборки имеет место. Выделяем этот самый участок вне выборки, чтобы подробнее его проанализировать. В общем и в целом результаты вполне удовлетворительные, хотя значительно уступают рекорду Дж. Сороса, но превосходят рекорды В. Нидерхоффера.


Чтобы убедиться в том, что на отдельных участках истории мы имели дело с подгонкой, необходимо и достаточно убирать галочку с «Использовать дату». И прогнать тест советника со значениями 1 и 2 по всей доступной истории. В каждом из этих режимов мы видим, что рост кривой баланса вверх наблюдается только в пределах тех участков, по которым подгонялись отдельные перцептроны. На всех остальных периодах истории положительной динамики не наблюдается, если не считать отдельные горбы, завершающиеся впадинами.


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



Файлы:
tsr.mq4  4 kb
 

Я во многом не согласен был с Решетовым (не по данной теме). Мы с ним иногда состыковывались в обмене мнениями, и как правило, он меня посылал, назвав явно или завуалировано идиотом и дебилом. Со своей стороны не принимал это близко к сердцу.

У меня большая просьба ко всем: не заниматься в данной ветке флудерастией. Если есть что сказать по теме конструктивное - пишите, нет - не пишите.

 

Гг :) очередной грааль для ботанов имени Решетова :)

Конструктива? Кто же на ООС сзади смотрит? Это из очевидного.

 
TheXpert:


Конструктива? Кто же на ООС сзади смотрит? Это из очевидного.


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

Скажем так, для пущей уверенности можно прогнать тест на OOS и спереди и сзади. Если ТС там или сям сливает, то она заведомо не робастная.

 
Юрий, можно коротко в нескольких предложениях в чем суть и вывод ваших изысканий?
 
Avals:
Юрий, можно коротко в нескольких предложениях в чем суть и вывод ваших изысканий?
Начало изложено здесь: https://www.mql5.com/ru/forum/131724
 
Avals:
Юрий, можно коротко в нескольких предложениях в чем суть и вывод ваших изысканий?

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

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

3. Робастная ТС, настроенная по вышеприведенной методике надежнее, нежели просто оптимизированная и проверенная на OOS.

 
Reshetov:
... вполне понятно, что на OOS лучше проверять сзади, т.к. будущее, на котором собираемся торговать - впереди.
Я для себя еще пару лет назад проверял, насколько OOS "сзади" дает что-то "спереди". И пришел к выводу, что корреляция совершенно не очевидна. Нет никаких особых гарантий. Вероятность успешности ТС может несколько и повышается, но советник может и не дать прибыль и слить. Тут нужны другие методы.
 
voltair:
Я для себя еще пару лет назад проверял, насколько OOS "сзади" дает что-то "спереди". И пришел к выводу, что корреляция совершенно не очевидна. Нет никаких особых гарантий. Вероятность успешности ТС может несколько и повышается, но советник может и не дать прибыль и слить. Тут нужны другие методы.

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


Что касается гарантий, дык я их никому не обещал. Каждый должен сам прогнать предложенною мною, взятую где-то или свою собственную ТС на OOS и демо, центовых счетах и самостоятельно принять решение, устраивает его результат или нет.


Я не удивлюсь, если Вы всю свою жизнь потратите на тщетные поиски методы с гарантией результата и помрете, так ее и не обнаружив.

 
Reshetov:

В продолжение темы: Где грань между подгонкой и реальными закономерностями?

TSR - аббревиатура от Trading Systems Recovery ..................

......................

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

Юрий, я в восторге. Даже лёгкая зависть (пару лет назад бродил в шаге от этой идеи) не омрачает удовольствие. Порадовал. Буду экспериментировать дальше.

 
Reshetov:
... никто не запрещает проверить на OOS и спереди и сзади. ... Если ... ТС не робастная и от нее лучше избавиться ... будет разница результатов по разным OOS, дык 100% совпадения никто не обещал.
Юрий, это очевидно. Ну кто может запретить проверку / избавиться? Дело не в этом, а в том (мое мнение) что все эти проверки сродни... дооптимизации! То есть получая положительный результат на OOS мы получаем ТС, фигурально (да и фактически) оптимизированную на другом участке (теперь включающем и OOS). Какова вероятность того, что она будет робастна дальше в будущее или в прошлое? Каковы объективные критерии оценки будущей робастности, кроме "мне так кажется"?
Причина обращения: