Как написать робастного эксперта

 

Каждый, кто знакомится с темой автоматической торговли, начинает с написания простых торговых роботов. По мере накопления навыков программирования усложняются алгоритмы торговли - появляются такие понятия как Stop Loss, Take Profit  и так далее. В общем, опыт показывает, что написать эксперта и провести оптимизацию его параметров по какому-либо критерию не так уж сложно.

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

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

Где брать идеи для создания торговой системы, какими инструментами пользоваться для анализа полученных результатов? В общем,  вопросов, конечно же, много. Если статья даже и не получится, то все равно такое обсуждение должно быть интересным многим, как мне кажется.

В общем, приглашаю высказываться всех желающих.

Робастность в статистике — Википедия
  • ru.wikipedia.org
Робастность (англ.  ) в статистике — влияние на результат исследования различного рода выбросов. Слово англ.  переводится как «крепкий», «сильный», «твёрдый», применительно к статистике — «устойчивый» или «помехоустойчивый». Статистика предоставляет несколько методов, направленных на выявление выбросов, снижение их влияния или исключение их из...
 
Критерии входа робастные полностью готовые конечно же нигде не найти. Хотя иногда они проскакивают случайно. Всегда найдется кому хочется выделиться и он может поделиться полезным. Поэтому перерывать горы доступной информации ради крох также можно назвать полезным. Но это же одна из задач трейдера. В горе информации выискивать закономерности. Программирование многим кажется довольно сложным потому, что не так уж много людей освоивших эту стезю. Но разумеется запрограммировать советник и подогнать параметры не одно и то же что найти закономерность в рынке. Это лишь удобное средство.  Поэтому помимо всего, программирование советника не лишнее в этом искусстве. Как итог  прибыльный трейдер сможет запрограммировать и очень простой советник и прибыльно на 10 летней истории (буквально одно два условия). В то время как хороший программист вряд ли сможет сделать прибыльным даже очень сложные алгоритмы. Этому есть простое объяснение, то что о нем можно подумать и то что он делает есть разные вещи. 
 

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

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

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

 
Vladix:

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

Это первый водораздел. Знаю два подхода к автоматической торговле (не торговой системе) и они упоминаются как в книгах, так и на форумах:

  • первый - устойчивая система должна прибыльно торговать годами;
  • второй - не надо пытаться создать систему, которая должна работать годами, нужно подбирать для каждого текущего периода (неделя, месяц, год и так далее) соответствующую ей торговую стратегию.
Как говорится, почувствуйте разницу.
 

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

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

3. Если выявленная закономерность подтверждается на предварительных тестах, строиться график перевеса. Делается это так, выход из сделки заменяется выходом по времени. Затем параметр, отвечающий за время удержания в сделке подвергается оптимизации, в итоге мы получаем некую зависимость эффективности стратегии (прибыльность) от времени ее нахождения в рынке. Экстремум этой кривой определит горизонт действия этой зависимости. Теперь у нас есть зависимость и время, в течении которого она действует.

4. Далее привлекается оптимизатор. Перебираются все возможные параметры и строится 2D или 3D поверхности типа прибыль - параметр. Если выпуклости поверхности имеют устойчивую структуру, то можно говорить о действительно надежном алгоритме. 

5. Форвард тестирование. Правильное тестирование на OOS позволяет выявить подгонку стратегии под рынок и ошибки в ее разработке, а также убедиться в устойчивости заданной закономерности.

6. Далее все просто. Мы тюнингуем полученную стратегию. Добавляем в нее защитные остановки и пожеланию дополнительные правила, которые могут улучшить показатели стратегии. Главное не перестараться на этом этапе.

7. Окончательный вариант также должен подтверждаться на истории и проходить OOS.

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

9. Реал.  

 

 
C-4:

1. Первое, с чего стоит начать ........

  Хороший развернутый ответ. ;)
 
Rosh:

Это первый водораздел. Знаю два подхода к автоматической торговле (не торговой системе) и они упоминаются как в книгах, так и на форумах:

  • первый - устойчивая система должна прибыльно торговать годами;
  • второй - не надо пытаться создать систему, которая должна работать годами, нужно подбирать для каждого текущего периода (неделя, месяц, год и так далее) соответствующую ей торговую стратегию.
Как говорится, почувствуйте разницу.
Возможно, водораздел здесь действительно непереплываемый... и первый вариант, наверное, близок к идеалу, но практически не реализуем, а второй просто приемлем, и поэтому не менее ценен, хотя требует постоянных доработок и поисков того, какая аппроксимация будет работать лучше всего в ближайшее время.          
C-4:
  Спасибо за путеводитель! :) 
 
C-4:

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

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

3. Если выявленная закономерность подтверждается на предварительных тестах, строиться график перевеса. Делается это так, выход из сделки заменяется выходом по времени. Затем параметр, отвечающий за время удержания в сделке подвергается оптимизации, в итоге мы получаем некую зависимость эффективности стратегии (прибыльность) от времени ее нахождения в рынке. Экстремум этой кривой определит горизонт действия этой зависимости. Теперь у нас есть зависимость и время, в течении которого она действует.

4. Далее привлекается оптимизатор. Перебираются все возможные параметры и строится 2D или 3D поверхности типа прибыль - параметр. Если выпуклости поверхности имеют устойчивую структуру, то можно говорить о действительно надежном алгоритме. 

5. Форвард тестирование. Правильное тестирование на OOS позволяет выявить подгонку стратегии под рынок и ошибки в ее разработке, а также убедиться в устойчивости заданной закономерности.

6. Далее все просто. Мы тюнингуем полученную стратегию. Добавляем в нее защитные остановки и пожеланию дополнительные правила, которые могут улучшить показатели стратегии. Главное не перестараться на этом этапе.

7. Окончательный вариант также должен подтверждаться на истории и проходить OOS.

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

9. Реал.  

1. Что такое "рыночные закономерности"? И даже, если пофантазировать и думать, что есть знание что это такое, то как их выявить? - и даже если пофантазировать и представить, что закономерности выявлены, как  убедится, что они будут работать и впредь? И с чего бы рыночные закономерности должны обязательно присутствовать "на достаточно большой выборке"? - рынок - злой дядя, который никому ничего не должен.

2. ..

и т.д, возникает больше вопросов, чем наводящих ответов.

Rosh:

1. Но в конце концов возникает вопрос - "Как написать робастного торгового робота?" Под термином робастность в данном случае подразумевается устойчивость торговой системы соответствовать меняющейся рыночной ситуации на протяжении достаточно длительного срока.

2.  ... и первая, самая важная - это конечно же, сама торговая идея - по каким правилам принимать решения о входк в рынок. Далее уже начинаются технические задачи: написание кода и оптимизация параметров.

3. И последнее - что выбрать в качестве критерия оптимизации, какие дополнительные требования наложить на систему, чтобы считать ее робастной?

4. Где брать идеи для создания торговой системы, какими инструментами пользоваться для анализа полученных результатов? 

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

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

и т.д. и т.п.

Вообще, я для себя все ТС делю на 2 типа - а) неконтролируемой торговли и б) контролируемой.

а) данный тип ТС характерен тем, что заранее не известно, когда последует сигнал на выход из трейда. Это означает (смысл гораздо глубже, чем может показаться на первый взгляд) , что для таких ТС слово "оптимизация" теряет смысл вообще. Как можно делать прогноз без указания времени актуальности этого прогноза? - это всё равно, что сказать: "Скоро настанет канец света" - да, конец настанет но когда именно?-"скоро" понятие растяжимое. Отсюда следует, что предыдущее состояние ТС (как отражение рыночного инструмента) никак не связано с последующими изменениями на рынке.

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

б) ТС контролируемой торговли, или ТС второго типа. Для таких ТС характерно наличие ограничения времени жизни трейда, или время жизни контролируется. По свойствам эти ТС полная противоположность первого типа.

2. Здесь простор для полёта фантазии. При фантазировании стоит помнить о двух типах ТС и их свойствах.

3. ТС 1-го типа оптимизировать не имеет смысла (почему-сказано выше), повезет - будешь (как на том указательном камне, только тут два варианта, и оба хорошие) богатым, не повезет - возможно будешь богатым но не за счет торговли.

ТС 2-го типа прекрасно оптимизируются. Общее количество сделок для них на заданном временном промежутке известно, а отсюда разрывается этот ацкий круг количество_сделок/количество_прибыльных/отношение_прибыльных_к_убыточным. Однако и для этого типа ТС будет неправильно оптимизировать на прибыль, как, впрочем и на профит фактор и прочее. Наиболее эффективно, как оказалось, оптимизировать на количество прибыльных сделок (общее количество сделок известно) - становится возможным проходить прибыльно OOS (занимательно то, что прибыльность на оптимизируемом участке приблизительно одинаковая при оптимизации на прибыль и при оптимизации на количество прибыльных сделок, но в первом случае OOS не проходит, а во втором случае да. хотя в этом нет ничего удивительного, так как пространство оптимизации многомерно и существуют много различных участков пространства с одинаковой прибыльностью, но отвечающие за различные способы достижения этой прибыльности).  Кроме того, с очень большим количеством прибыльных сделок становится возможным, только тссс, использовать мм по мартину


ЗЫ не стоит рассматривать мой пост как оппонирование процитированным коллегам, это были просто мысли вслух.  

 
joo:

1. Что такое "рыночные закономерности"?...

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

З.Ы. Андрей, не рассматривайте мои слова как отдельный выпад в Вашу сторону. Просто на форумах MQL4/MQL5 (MQL4 особенно) чересчур много рассуждений и мало конкретики.

 

C-4:

Просто на форумах MQL4/MQL5 (MQL4 особенно) чересчур много рассуждений и мало конкретики.

Ну так попробуйте исправить, хотя бы в этой отдельно взятой теме.
 
TheXpert:
Ну так попробуйте исправить, хотя бы в этой отдельно взятой теме.
Исправил своим первым постом в этой ветке.