November 19th, 2013

Adaptrade Builder

511093030В очередной раз пытаюсь выжать что-нибудь полезное из программы Adaptrade Builder. Напомню, что эта программа сама создает торговые системы для любого графика, либо портфеля графиков. Желающие могут взять полнофункциональный триал на 14 дней. Так как я после установки Windows 8 еще не брал триал, то вчера решил еще раз попытать счастья.

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

Также, программа генерирует, по желанию, код для TradeStation, Multichart, Omega 2000i либо Метатрейдер 4. Благодаря этому коду можно посмотреть логику системы и разобраться в ней. Как я понял, все системы строятся по шаблону:

Фильтр для входов, типа "Индикатор1 > Индикатора2" и т.д.
Уровень входа, типа "УровеньИндикатора + Число * ATR
Фильтр для выходов
Уровень для выхода, стопы, трейлы, тейк-профиты

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

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

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

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

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

На тему оптимизации

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

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

Вот и я решил поиграться с внутридневной системкой для фьючерса на фондовый индекс Russell2000 на пятиминутках. Что бросилось в глаза после нескольких часов исследований -- с уменьшением периодов IS и OOS результаты, почему-то, значительно ухудшались, несмотря на то что я считал что должно быть как раз наоборот. То есть если, например, берем интервал для оптимизации три месяца и период торговли по полученным параметрам один месяц, то результаты получаются хуже чем когда берем период оптимизации год и торгуем с полученными параметрами три месяца. И чем больше берем эти периоды, тем лучше получаются результаты. То есть, если продолжить тренд этого явления, то самые плохие результаты должны были получиться для самых ближайших коротких периодов, а самые лучшие просто разделив весь график на две части -- одна IS, другая OOS.

Но проверять, задавая каждый раз разные периоды оптимизации и торговли по полученным параметрам отнимает, конечно же, очень много времени. Поэтому в программах тестирования есть не только фишка для Walk-Forward Optimization, но и фишка, автоматически определяющая самые оптимальные периоды для оптимизации -- Cluster Analysis, которая оптимизирует величину периодов применяемых в Walk-Forward Optimization. Для этого нужно задать минимальное значение периода, максимальное и величину шага. Так вот, просто запускаем эту фишку и через некоторое время, действительно, убеждаемся в том что чем больше периоды оптимизации, тем лучше получаются результаты торговли по системе.

Вот пример, как это выглядит:

1

Failed -- означает что при таких периодах оптимизации систему опасно торговать
PASS -- можно торговать
Runs -- на сколько частей делится торгуемый график для оптимизации. Так как график был длиной в 10 лет, то число 5 означает что оптимизируем систему каждые два года. А 30 означает что оптимизируем каждые три месяца. Можно, конечно было расширить диапазоны Runs, но и так слишком долго это все происходит, поэтому ограничился этим диапазоном. Но тенденция видна -- чем больше периоды оптимизации,тем лучше получаются результаты.

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

Для сравнения, вот как выглядят результаты торговли при переоптимизации каждые два года:

2

А это результаты переоптимизации каждые три месяца:

1A

Ну и промежуточные результаты примерно соответствуют этому тренду.

Но самое интересное то , что просто разделив весь график на 70% IS и 30% OOS и прооптимизировав без всякого WFO, результат на OOS получился лучше чем при помощи WFO на том же периоде....