Multidimensional Space Trading Strategies
Рис. 1. Оптимизация многомерного пространства алгоритмов торговых стратегий.

Оптимизация торговых стратегий

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

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

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

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

Метод стохастической кластерной оптимизации

Учитывая особенности оптимизации биржевых стратегий был разработан гибридный алгоритм (см. прошлую статью) у которого оказался один приятный побочный эффект — он успешно выделял и исследовал кластеры. Я дал название полученному алгоритму — «Метод стохастической кластерной оптимизации».

Процесс исследования поэтому алгоритму проходит в два этапа:

  1. Исследование пространства стратегий с удалением убыточных и подверженных риску областей
  2. Подробное исследование экстремумов и кластеров пространства

Этап 1. Исследование пространства стратегий с удалением убыточных и подверженных риску областей.

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

Работа ведется в следующем порядке:

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

На Рис. 2 видно, как исследование смещается в сторону экстремумов при этом риск упустить маленькие кластеры с возможно хорошими и стабильными параметрами минимален.

Stochastic Cluster Optimization - Extrema Focused

Рис. 2. Первый этап алгоритма «Stochastic Cluster Optimization» — исследование пространства стратегий.

Этап 2. Подробное исследование кластеров и экстремумов.

После первого этапа исследования становятся хорошо виды экстремумы. Однако, в силу особенностей алгоритма (вырезается множество микрообластей) пространство получается «рваным» и некоторые экстремумы могут быть исследованы не очень подробно. Чтобы полностью изучить все интересные кластеры алгоритм оптимизации начинает процесс исследования в точности наоборот. Для этого выбираются все лучшие стратегии и вокруг них дополнительно выделяются микрообласти. Если в этих областях обнаруживаются еще не исследованные стратегии, то они дополнительно тестируются (см. Рис. 3).

Extrema Map

Рис. 3. Второй этап алгоритма «Stochastic Cluster Optimization» — подробное исследование экстремумов.

В результате после работы алгоритма исследуются все интересные нам области пространства и подробно тестируются кластеры с прибыльными стратегиями. При этом фактический объем исследования, как правило, составляет не более 25-50% от общего объема пространства вариантов стратегий (см. Рис. 4).
Stochastic Cluster Optimization Brute Force
Рис. 4. Скорость исследования алгоритма «Stochastic Cluster Optimization» (слева) в 2-4 раза выше скорости алгоритма «Brute Force» (справа).

Walk Forward оптимизация

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

Для этого весь диапазон исторических данных разбивается на выборки, состоящие из наборов:

  • IS («In Sample») — выборка, используемая для оптимизации
  • OOS («Out Of Sample») — выборка, используемая для тестирования результатов оптимизации

Причем диапазоны выборок формируются таким образом, чтобы данные OOS следовали последовательно друг за другом (см. Рис. 5).

Walk Forward Optimization

Рис. 5. Схема Walk Forward оптимизации.

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

In Sample

Рис. 6. Результаты оптимизации на данных «In Sample».

Out Of Sample

Рис. 7. Проверка результатов оптимизации на данных «Out Of Sample».

Анализ результатов

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

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

Space-section Sharpe Ratio

Рис. 8. Пример сечения пространства по оптимизируемым параметрам и целевой функции.

Для комплексной оценки результатов Walk Forward оптимизации строится матрица со всеми шагами и параметрами, прошедшими фильтрацию. Зеленым цветом выделяются шаги, на которых параметры подтвердили свои показатели и красным, соответственно, если не подтвердили. Параметры, показавшие себя хорошо на большом количестве шагов можно считать более пригодными для торговли (см. Рис. 9).

Walk Forward Matrix

Рис. 9. Матрица Walk Forward со всеми результатами провеки на данных OOS.

В случае необходимости полученные результаты можно экспортировать в сторонние системы анализа для более детального исследования. Например, в R, Excel или Mathlab (см. Рис. 10).

Export to Excel

Рис. 10. Экспорт результатов оптимизации в Excel.

Чтобы окончательно убедиться в правильности выборанных параметров проводятся детальные тесты стратегий, оценивается плавность кривой доходности, выводятся заявки на график и изучается лог торговых сделок (см. Рис. 11).

Analyzer

Рис. 11. Подробный анализ параметров торговой стратегии.

Заключение

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

Наконец мы все перепроверили, наверное, уже можно начинать торговать? На самом деле мы только на полпути, еще рано отправлять торговые алгоритмы в бой. Далее предстоит:

  • Проверить стратегии на «живых» данных с Биржи для подтверждения показателей, полученных во время тестирования.
  • Сформировать портфель из торговых стратегий для диверсификации рисков. Кстати, его тоже нужно оптимизировать.
  • В процессе реальной торговли периодически сводить полученные результаты с результатами тестов для корректировки настроек тестера-оптимизатора.

Но об этом, наверное, в другой раз.
Всем удачной торговли!
Поделиться с друзьями
-->

Комментарии (28)


  1. boolive
    21.03.2017 01:50
    +1

    А где скачать? )


    1. Bond_algotrade
      21.03.2017 07:43

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


  1. raacer
    21.03.2017 04:06
    +3

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


    1. Bond_algotrade
      21.03.2017 07:37
      +3

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


  1. Alex_T666
    21.03.2017 08:15
    +1

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

    Но убедительно, да.


    1. Bond_algotrade
      21.03.2017 08:50
      +2

      Все верно, в 99,9% случаев люди предлагающие «прибыльных» торговых роботов мошенники.
      В реальности алгоритмическая торговля это множество инфраструктурных, модельных, аналитических проблем, которые решить очень не просто. И в конечном итоге зарабатывает не оптимизатор, а логика торговой стратегии, которую вы формируете самостоятельно.


      1. boolive
        21.03.2017 15:03

        Выгодней программу продавать? Убедительней было бы, если процент с прибыли брали, полученной торгами через программу.


    1. rPman
      22.03.2017 00:20

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

      почему? риски нужно уметь оценивать и перекладывать на других.


  1. ncix
    21.03.2017 10:36
    +1

    Простой вопрос — сколько заработали? можно в процентах.


  1. boolive
    21.03.2017 15:08

    Сделайте пример анализа реальной котировки (желательно у которой высокий потенциал большого роста=))


  1. Seraphinianus
    21.03.2017 16:50

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


    1. Bond_algotrade
      21.03.2017 16:53

      Будущее предсказывать занятие бессмысленное и неблагодарное, гарантий никаких нет. Задача оптимизации не подогнать результаты под определенный исторический диапазон, а найти и подтвердить системную неэффективность на рынке. Для это и существует Walk Forward, чтобы устранять подгонку.
      Оптимизировать на случайных данных тоже самое, что толочь воду в ступе. Вы подгоните, потом Walk Forward вам скажет, что это подгонка. В чем смысл?
      Когда рынок меняется ваши стратегии так же должны меняться. Вместе с рынком должен перестраиваться ваш портфель торговых алгоритмов.


      1. Seraphinianus
        21.03.2017 17:38

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


        1. Bond_algotrade
          21.03.2017 17:58

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


          1. Seraphinianus
            21.03.2017 18:11

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


  1. Bond_algotrade
    21.03.2017 19:58

    Кто как только не торгует! Некоторые успешно торгуют и по фазам луны) Случайность штука хитрая, допускает, что можно всю жизнь успешно торговать и это все равно останется случайностью. Вспоминается опыт проводимый профессором Нолан в Беркли «Сила случайности».


  1. rPman
    22.03.2017 00:36

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

    Если классические свечи (open,close,min,max,volume), обычно другие (я имею в виду level2 биржи конечно) не доступны либо очень дорогие, то во время торговли можете столкнуться с классикой форекс-бирж — проскальзывание и не полностью закрытые ордера, когда по графику рынок зашел ниже вашего стопа, но он почему то не сработал… а причина элементарна — графики bid/ask не обязательно параллельны, особенно в моменты резких движений (подавляющее количество стратегий добавляют фиксированную комиссию, равную ширине спреда), мало того, в зависимости от ваших объемов реальный спред может увеличиваться, как результат — не полностью закрытые позиции.

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

    И это я еще молчу, какие алгоритмические ухищрения брокер может добавлять между вами и рынком.


    1. Bond_algotrade
      22.03.2017 09:47
      +1

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

      2) Для тестов использую тики, они дают более точные результаты. Тестирую обязательно с задержками, частичным исполнением, комиссией и проскальзыванием. См. Режимы исполнения заявок.

      3) Если вы торгуете на форекс кухне, то чего вы от них ждете? Конечно, вас прокинут при первой удачной возможности. Если хотите торговать валютой используйте проверенных брокеров — IB, LMAX и т.д. А еще лучше торгуйте на фондовых и срочных рынках.


      1. Alexey_mosc
        22.03.2017 17:56

        3)…

        Заинтересовался LMAX — почитал сайт, которому доверяю (forexfactory), отзывы весьма смешанные про эту компанию как брокера: https://www.forexfactory.com/showthread.php?t=266866&page=92

        Просто для инфы…

        А еще лучше торгуйте на фондовых и срочных рынках.


        А можете порекомендовать FOREX Spot, чтобы не «кухня» была, но не LMAX? )


        1. Bond_algotrade
          22.03.2017 23:24

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


          1. Alexey_mosc
            23.03.2017 12:15
            +1

            Ок.

            Кухни наше все. Без нескольких десятков тысяч зеленых выйти на прямой доступ (с учетом стоимости и комиссий), либо на валютные фьючерсы в США затруднительно.

            Забыли…

            По поводы ваших статей хотел сказать, хорошо, мне нравится! Идея стохастического поиска с вырезанием подпространства кажется разумной. Walking Forward тоже вещь правильная.

            Хотел подбросить идею, хотя продукт и так навороченный, как я понял, но идея стоит того. Как кто-то писал, несколько последовательностей надо подать стратегии. Я разовью эту идею. Это один из milestones, или говоря по-нашему, важных шагов построения стратегии. Монте-Карло симуляция исходов. Нужна для анализа исхода торговли при смещенных туда-сюда точках входа в рынок. Очень нужна, если сигналов генериться больше, чем сделок. И пока одна сделка в рынке открыта, другие сигналы не реализованы. Таким образом, вместо одной реализации последовательности сделок, мы смотрим на несколько (десятки-сотни).

            У меня получались примерно такие картинки: https://drive.google.com/open?id=0B_Au3ANgcG7COFg5a3A5dXJRZ1E

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

            Это можно делать на валидационном отрезке, в моем случае он один и расположен в будущем.


            1. Bond_algotrade
              24.03.2017 02:13

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


              1. Alexey_mosc
                24.03.2017 12:20

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

                Вывод может звучать примерно так:

                с вероятностью 0.99 через 2 года система будет с прибылью > 0%;

                с вероятностью 0.5 через 3 года система будет с прибылью > 50%, с профит-фактором >= 2.

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

                Если не «монтекарлить» — я сам обычно не монтекарлю, когда подбираю параметры — то можно просто поделить на 2 прибыль и умножить на 2 просадку. Это будет нижняя оценка. И реал будет где-то между тестером и нижней оценкой. ИМХО…


      1. rPman
        22.03.2017 21:03

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

        p.s. стратегии, заглядывающие в будущее, это даже не смешно :)


        1. Bond_algotrade
          22.03.2017 23:37

          Все программы платформы моя разработка) Особенность комплекса в единой архитектуре. После тестов код торговой стратегии не нужно дорабатывать под конкретный коннектор, можно сразу отправлять в торговлю. Сейчас присутствует коннектор к Московской бирже, скоро будет доступен коннектор к IB. В рамках одной стратегии можно одновременно торговать через несколько коннекторов и т.д.
          Без многопоточности никак, все и так распараллено по максимуму. GPU не заточен под итеративные задачи, к сожалению, здесь традиционные CPU лучше справляются.


          1. rPman
            24.03.2017 17:10

            по моему мнению GPU тут более чем идеален, стратегия в виде opencl main метода, параметры которого — оптимизируемые параметры стратегии, для оптимизации просчитываем все возможные значения алгоритма стратегии, организуя последовательно во времени, полученные данные загружаем в видеокарту — и запускаем вычисление сотен или даже тысяч комбинаций параметров. Так как данные из памяти читаются последовательно (эмуляция торгов проходит почти наверняка линейно во времени) — то пока внутренние переменные и входные параметры стратеги помещаются в кешпамять карты (толи 16кб толи еще сколько, надо изучать подробнее) — вычисления будут утилизировать мощности видеокарты почти по максимумую.

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


  1. dshap
    30.03.2017 23:23

    Все отлично, но не прозвучал ответ на главный вопрос — что же автор использует в качестве целевой функции в задаче оптимизации?


  1. dshap
    30.03.2017 23:28

    И да, «25-50% от общего объема пространства вариантов» это, мягко говоря, очень много