Оптимизация ручной торговой системы. Личный опыт.

good-betterТы помнишь, как все начиналось?

Итак, прошло больше двух месяцев с тех пор, как на Tradetrade  появился мой запрос на оптимизатор «ручных» ТС. Удивлена не меньше вашего, но дело таки сдвинулось с мертвой точки. Софт написан, использован, проведены форвард тесты.

Честно говоря, затрудняюсь вообще сказать, зачем пишу эту статью. Своими торговыми результатами хочется делиться тем больше, чем меньше ты зарабатываешь. Вертишься и так, и сяк, чувствуешь запах добычи, а зуб неймёт. И пишешь, пишешь, в надежде, что либо сам себе в психо-трейдо-анализе выдашь важную истину, способную воскресить эквити …или подскажет кто из жалости. Как только начинает что-то получаться — сразу оп, и замолкает внезапно внутренний графоман. Я совершенно уверена, что через три-четыре месяца стабильной торговли в хороший плюс интерес делиться методами угас бы до последней искорки. Но пока что мои результаты еще недостаточно серьезны и слишком хрупки, чтоб я могла с уверенностью причислить себя к этой категории, а сострадание к тем, кто вертится у нуля — все еще слишком велико, чтоб я могла молчать.  Поэтому давайте перейдем к тому самому оптимизатору.

Мучителен был выбор «писать с нуля» VS «под готовую платформу». Вопрос решился в пользу второго варианта, так как кнопочку «жажда легкой и быстрой наживы» в голове разблокировать не удалось. Таким образом, приходится мириться с сопутствующими проблемами и спецификой Tradestation. К примеру, пришлось распрощаться с идеей тестировать все на тиковых данных, — только пятиминутка, только хардкор. Не без танцев с бубном решился вопрос редких ситуаций, где на одном баре отрабатываются сразу два сигнала. Отдельно пришлось создать для софта таблицу с датами ролловеров и нужными множителями для цены, чтоб в бэктестах использовался именно back-adjusted чарт (иначе получились бы некорректные результаты по сделкам, удерживаемым в переходный период).

Примеров неадекватности Трэйдстейшена накопилосль великое множество, и на долгую память Паша даже начал их каталогизировать, создав рабочую папку «Глюки Tradestation». Некоторые из них разработчики считают фичами. Но скажите, если вы, к примеру, хотите вписать в тестер условное проскальзывание на стопе, а программа это проскальзывание начинает применять к лимитникам тоже — это фича или баг все-таки?

— Почему EasyLanguage был так назван, если на нём писать так сложно?, — то и дело слышала я злободневную аллюзию к эпизоду про Бивиса и Баттхэда, где они рассуждали об easylistening, пока Паша корпел над кодом. Да, невозможность выбора другого языка программирования стала еще одним камнем в ботинке.

Что оптимизировать будем?

Первый год своей трейдерской «карьеры» я провела пытаясь торговать на Topsteptrader комбайнах интуитивно фильтруя все те сигналы, которыми ежедневно орошает нас рынок. Чем дальше, тем все яснее становились те правила, следуя которым, получалось работать эффективнее. Не прошло и двух лет (вот жесть!), как выкристализовалась торговая система, и теперь я  уже почти не испытыhamsterваю никаких сомнений, есть ли в данном месте и в данное время у меня системная сделка, или нет. Спорные ситуации возникают по поводу точности размещения стопа и точки входа, много проблем с тэйками, но в целом, размещая ордера, я понимаю, что независимо от исхода сделки, я поступаю правильно. Технические детали и торговые сетапы/паттерны все еще в стадии допиливания.  Их я меняла регулярно, и меняю до сих пор каждые две-три недели, но при этом каждый раз принимаю конкретное решение (например, с сегодняшнего дня по такому-то сетапу у меня кэш-стоп в 12 тик), решаю как долго буду тестировать на реале именно такой подход и возвращаюсь к пересмотру результатов по истечению этого периода. И так по кругу.

Конечно же, все это было бы невозможно, если б я не вела торговые дневники. Темпы развития системы и её гипотетическая/бэктестовая эффективность начали расти с многократно возросшей скоростью с тех пор, как я начала заносить в таблицы детальную информацию не только по тем трейдам, которые реально сделала, но и по тем, которые были технически возможны в теории. Дошло до того, что немного позже я стала записывать даже те трейды, где цена не задевала теоретическую точку входа. Т.е так и приписываю, — «no fill», — в строке данных. Мало ли, а вдруг в моем черпаке, подставленном под золотой дождь — дырка, которую прожигают зажатые на увеличенный стоп несколько баксов?

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

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

Следующим шагом было начать вести новую таблицу, на основе которой можно было бы делать оптимизацию уровнем повыше: менять точки входа, по-разному трейлиться/переворачиватьс/переводить в БУ и реализовывать иные фантазии. Теперь у меня из каждой строки получается от 0 до 3х трейдов, основанных на пробоях уровней.

Я сейчас спалю палю Грааль, но так как делаю это бесплатно, то могу быть уверена — вы им не воспользуетесь, и все сокровища рыночного дракона я разделю лишь с теми энтузиастами, которые сами проделали тот же путь, или нашли другой, более удобный/короткий/правильный самостоятельно. В общем, моя ТС основана на том, что пробой важного уровня может быть либо истинным, либо ложным. Если ложным, то обратное движение может быть либо стремительным, либо не очень. Выбор уровня — как раз ручная задача, так же как и выбор той точки, где нас должно озарить, с каким видом пробоя мы имеем дело. Ручками также проводится анализ объемов.

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

Что может программа?

Меня очень порадовало рабочее название софта. Оптимизатор моей ручной стратегии Паша воодушевленно окрестил Monetizer. Из этого, собственно, становится понятна основная роль программулины согласно задумке инженера: хотелось, наконец, добыть побольше денег из моей ТС, эквити которой до сих пор выглядела довольно уныло — уклон слабенький, а сизифов камень дохода то и дело срывался в довольно глубокие дродауны.

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

Итак, первое и немаловажное — визуализация трейдов на графике. Когда появляется «лимитка», это уже отображается горизонтальной линией, вместе с такими же пометками по поводу тейка и стопа. Если трейд отменялся (время отмены я тоже вписываю в таблицу), то линии обрываются и я получаю визуализацию даже не состоявшихся сделок. Стоп, кстати, я сейчас заполняю в тиках. Пара строк кода — и можно заполнять две цифры вместо пяти. Мелочь, но приятно! После исполнения ордера, на графике отображается точка входа с пометкой по типу трейда. Дополнительно можно настроить параметр override (как один трейд накладывается на другой: трейлит стоп, переворачивается на обратном сигнале, или же просто игнорирует все сигналы, следующие после входа в рынок).

В итоге имеем такую приблизительно картинку:

monetizer

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

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

Полагаю, здесь необходимо прояснить что и почему происходит в программе, когда пробивается новый уровень/появляется новый сигнал, а ты уже в трейде. Есть несколько возможных сценариев, которые приходят на ум: доливка (если сигнал в том же направлении), переворот (если в противоположном), оставить все как есть и проигнорировать новый сигнал.

Сразу скажу, что Tradestation не позволяет цивилизованно делать «замки», а то, как реализован пирамидинг, нас категорически не устроило, поэтому все случаи наложения сигналов один на другой проводились как для торговли одним контрактом по принципу оверрайдинга: если обратный сигнал — закрываем текущий трейд и переворачиваемся, туда же — трейлим стоп и увеличиваем тейк. Пока что, как можно понять по скрину, тейк увеличивается только если была зацеплена потенциальная новая точка входа, что, наверное, неправильно и нуждается в доработке (иначе теряется вся прелесть удачи встать по тренду заранее).  Довольно любопытно, что проведя тесты, мы выяснили, что оверрайдинг или его отсутствие по сигналам в направлении аналогичном текущему трейду влияет на общий результат весьма несущественно. ХЗ, может, устранив недостаток по условию трейлинга тейка, я изменю свое мнение — самой страшно любопытно. Зато стало достоверно известно, что переворачиваться по обратному сигналу — очень хорошая идея.

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

Во-первых, есть две торговые сессии (Европа/Америка), под которые подгоняются кэш-тейки (моя гипотеза заключается в том, что на тейк должен влиять ожидаемый ATR).

Во-вторых, есть возможность подвигать вход, отталкиваясь от вбитых в таблицу данных.

В-третьих, можно поиграть с кэш-стопом для того паттерна, что это предусматривает.

В-четвертых, можно отдельно заставить софт отображать сделки в конкретный период времени (например, торговля только от 7 до 10 по Чикаго).

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

Ну и каждый паттерн, естественно, тоже можно отдельно оптимизировать/отображать/настраивать.

Делается все через вот такой незамысловатый интерфейс:

nastrojki

Каждый параметр можно крутить по отдельности вручную, а можно зарядить перекрестную оптимизацию сразу по всем, или нескольким отдельно выбранным пунктам, не забывая при этом поставить желаемый «шаг» в тестах, конечно. Чем меньше шаг и чем больше одновременно оптимизируемых параметров, тем дольше будет Великая Копьютера обмозговывать самый выигрышный результат. Генетическую оптимизацию решили не использовать. Мы исследуем влияние каждого параметра или их совокупности, после чего самостоятельно решаем, как отнестись к результатам — принять на вооружение или не одурачиваться случайностью.

Варить борщ Монетайзер научить не удалось, и с этим просто непоправимая беда.

Результаты

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

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

Я тут недавно узнала, что выставлять напоказ результаты бэктестов для трейдеров — ужасный моветон. Только реал.

Ну ладно, реал, так реал. Для наглядности свою кривую доходности, где каждую сделку я могу подтвердить или отчетом из ТСТ, или стэйтментом, я отметила вертикальным линиями. Первая находится там, где я начала торговать только реал (с 236 номера), а вторая (с 277 номера) — где я начала использовать оптимизированную Монетайзером стратегию. До того — всё-всё, что было нажито непосильным трудом на комбайнах ТСТ, начиная с первого дня моей трейдерской «карьеры».

ekviti

Как видите, за последние полтора месяца (а именно тогда мне в руки попал пре-альфа релиз Монетайзера), удалось заработать ровно столько же, сколько за три года до этого. Разумеется, есть в этом заслуга не только софта — опыт ведь наживное дело. Кроме того, нельзя пренебречь и тем фактом, что в последнее время мне везло: по бэктестам дродауны между профитными сделками бывают значительно глубже, а сами профиты реже достигают максимальных величин (из-за наложения обратных сигналов, как правило). И все же, спорить с фактами трудно. Великой Компьютере ставим плюсик. Себе говорим: «Света молодец, пойди купи себе новое платьишко за усердие». Для Паши идём готовить борщ, раз уж Монетайзер не смог.

Послесловие

фантазия

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

Есть те, кто ратует за алготрейдинг как единственный способ переиграть рынок на дистанции. Аргументы всем известны. Есть те, кто успешно просидел свои 10 000 часов перед графиками и достиг величайшей ступени эволюции трейдера — стал успешным интуитивщиком. Как правильно — я не знаю. У меня есть только свой опыт, свои шишки, свои прорывы, своя голова на плечах, чтоб делать выводы, которыми могу поделиться.

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

Вопрос в формате.

Я долго думала, что цифры — не моё, и боролась с пресловутой «психологией» средствами публичного торгового журнала, где описывала не только торговые сигналы, по которым принимала решения, но и тщательно каталогизировала, селекционировала и дрессировала личных тараканов. Это помогало. Серьёзно. Медленно, но помогало ведь!

А вот что помогло действительно быстро — это Excel. Сухие цифры по всем теоретически возможным сделкам быстро обтесали сырую недосистему, приведя ее в состояние торгового алгоритма, выявили слабые места, укрепили уверенность, сгладили боль от неизбежных на рынке потерь, покрыв их статистическим колпаком вероятностей. Быстро — это пол года собирать каждый день данные по десятку трейдов. Долго — три года надеяться, что и без того «прожарится как-нибудь».

Вам также может понравиться

  • Привет, Свет!
    Какие инструменты брали в разработку «грааля»? Вижу нефть 😀

    • linred

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

  • Сергей

    Добрый день!
    Могу ли я узнать куда вы собираетесь на 10ти дневный курс Випассаны?

    • linred

      О, как-то я уехала до того как прочла 🙂 Сегодня вернулась.