20 марта в 22:50

Как я сделал тестер-оптимизатор для нахождения прибыльных стратегий на Бирже — 2 из песочницы

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. Подробный анализ параметров торговой стратегии.

Заключение

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

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

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

Но об этом, наверное, в другой раз.
Всем удачной торговли!
Алексей Бондаренко @Bond_algotrade
карма
18,0
рейтинг 0,0
Алготрейдер, Программист
Самое читаемое Разработка

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

  • +1

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

    • 0
      Конечно, вы можете скачать программу и провести аналогичные исследования самостоятельно, все совершенно бесплатно. Контакты доступны в моем профиле.
  • +3
    Сделайте, пожалуйста, интерфейс в виде поля ввода для номера счета, куда будут переводиться заработанные деньги, и кнопки Вкл/Выкл.
    • +3
      Сейчас как раз работаю над этим! Пока не могу определиться с цветом для кнопки, в перспективе планирую добавить возможность перевода денег сразу на несколько счетов, на случай, если один из счетов переполнится)
  • +1
    Я — плохой человек, жадный. И я никогда не опубликовал бы реально работающую стратегию, алгоритм, советник. Я бы сам на них зарабатывал и никому бы не дал. Поэтому я крайне скептически отношусь к любым публикациям такого рода.

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

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

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

      почему? риски нужно уметь оценивать и перекладывать на других.
  • +1
    Простой вопрос — сколько заработали? можно в процентах.
  • 0

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

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

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

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

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

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

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

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

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

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

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

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


        А можете порекомендовать FOREX Spot, чтобы не «кухня» была, но не LMAX? )
        • 0
          Вряд ли я смогу вам дать толковый совет, так как сам форекс не торгую.
          В основном работаю с фьючерсами на срочном рынке, там регулирование получше будет.
          • +1
            Ок.

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

            Забыли…

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

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

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

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

            Это можно делать на валидационном отрезке, в моем случае он один и расположен в будущем.
            • 0
              Отличная идея!
              Подобный подход должен дополнительно повысить качество разрабатываемых торговых стратегий. Нужно будет как-нибудь проверить.
              • 0
                Монте-Карло симуляция исходов помогает сделать выводы об ожидаемых показателях на реале.

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

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

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

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

                Если не «монтекарлить» — я сам обычно не монтекарлю, когда подбираю параметры — то можно просто поделить на 2 прибыль и умножить на 2 просадку. Это будет нижняя оценка. И реал будет где-то между тестером и нижней оценкой. ИМХО…
      • 0
        хм, тики с объемами? учитываете проскальзывания и задержки… интересно, тестер часть торговой платформы или ваш собственный? учитывая необходимость проведения многомерной оптимизации, есть возможность его распараллеливания? или даже запуска на GPU?

        p.s. стратегии, заглядывающие в будущее, это даже не смешно :)
        • 0
          Все программы платформы моя разработка) Особенность комплекса в единой архитектуре. После тестов код торговой стратегии не нужно дорабатывать под конкретный коннектор, можно сразу отправлять в торговлю. Сейчас присутствует коннектор к Московской бирже, скоро будет доступен коннектор к IB. В рамках одной стратегии можно одновременно торговать через несколько коннекторов и т.д.
          Без многопоточности никак, все и так распараллено по максимуму. GPU не заточен под итеративные задачи, к сожалению, здесь традиционные CPU лучше справляются.
          • 0
            по моему мнению GPU тут более чем идеален, стратегия в виде opencl main метода, параметры которого — оптимизируемые параметры стратегии, для оптимизации просчитываем все возможные значения алгоритма стратегии, организуя последовательно во времени, полученные данные загружаем в видеокарту — и запускаем вычисление сотен или даже тысяч комбинаций параметров. Так как данные из памяти читаются последовательно (эмуляция торгов проходит почти наверняка линейно во времени) — то пока внутренние переменные и входные параметры стратеги помещаются в кешпамять карты (толи 16кб толи еще сколько, надо изучать подробнее) — вычисления будут утилизировать мощности видеокарты почти по максимумую.

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

      В качестве целевой функции вы можете использовать любой из показателей — коэффициенты Шарпа и Сортино, матожидание, просадку, PnL и т.д.
      Просто тот же Шарп не всегда информативен и во многом зависит от общего количества сделок.

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

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

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