uralpro
uralpro личный блог
04 августа 2015, 08:58

Генетическое программирование торговых стратегий

tree

Своим опытом в построении высокопроизводительных торговых систем с использованием генетического программирования делится Dr Jonathan Kinlay в своем блоге.

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

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

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

Представим, что мы собираемся сделать с помощью графика в заглавии статьи. В этом примере ГП система представляет собой комбинацию простых операторов с тригонометрическими функциями — синус и косинус, для создания сигнала, состоящего из двух переменных X и Y, которыми могут быть, например, цены акций, скользящие средние или импульсные технические индикаторы.

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

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

Внутридневная ГП стратегия

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

Для ответа на этот вопрос приведем ниже результаты созданной с помощью ГП внутридневной стратегии, которая торгует девять разных фьючерсных рынков: сырая нефть (CL), евро (EC), E-mini (ES), золото (GC), топочный мазут (HO), кофе (KC), природный газ (NG), десятилетние облигации (TY) и бонды (US). Система торгует один контракт на каждом рынке раздельно, входя в длинные и короткие позиции несколько раз в день. Торгуется только наиболее ликвидные периоды в течение дня, которые обычно соответствуют открытию/закрытию торгов, с выходом из открытых позиций к концу сессии с помощью маркет-ордеров. Кроме рынков NG и HO, где вход осуществляется по стоп ордерам, на остальных рынках для входа и выхода в/из позиции применяются лимитные ордера, по ценам, определенным алгоритмом.

Система была создана с использованием 15-минутных баров с января 2006 года по декабрь 2011 года и протестирована на out-of-sample данных с января 2012 года по май 2014 года. Тренировочный набор данных выбирался как с учетом периодов сильной активности рынков, так и чтобы были включены периоды со слабой волатильностью. Длина тестовой выборки составляет почти половину тренировочной для определения устойчивости системы.

Out-of-sample тестирование производилось по принципу " вслепую", то есть данные для тестирования не использовались для тренировки модели, также как и вычисление производительности осуществлялось до выбора модели.

Результаты получились следующие — средняя чистая прибыль за вычетом комиссий = 6 долларов на сделку, и в случае HO и NG дополнительное проскальзывание в размере 2 тика на сделку.

Ann-Returns-RiskValue-1000-Sharpe

Performance

 Самая поразительная особенность стратегии — это высокая степень прибыльности, выраженная коэффициентом Шарпа, который превысил 5 как в тренировочном, так и в тестовом периоде. Это отражение того факта, что в то время, как чистая прибыль упала со среднегодового значения 29% в тренировочной выборке до 20% в тестовой, волатильность тоже снизилась с 5,35% до 3,86% в следующем периоде. Уменьшение риска в тестовом периоде также отражено в уровне просадки.

Уменьшение средней прибыли за сделку с 25$ до 16$ (без вычета комиссии) объясняется некоторым увеличением количества сделок, с 42 до 44 в день в среднем, в то время как вероятность предсказания  и процент прибыльных сделок остались постоянными — 65% и 56% соответственно.

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

Преимущества и риски ГП подхода к созданию торговых систем

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

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

Другой недостаток это то, что из-за природы процесса моделирования, бывает очень трудно понять, или объяснить инвесторам, идею, лежащую в основе конкретной модели. «Мы протестировали и оно работает» — это недостаточно убедительное объяснение для инвесторов, которые привыкли к более подробным теоретическим обоснованиям. К несчастью, во время просадок, сложно убедить себя или инвесторов, что это временное явление.

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

Заключение

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

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

Стратегии, алгоритмы и программы автоматической торговли смотрите на моем сайте — www.quantalgos.ru

15 Комментариев
  • ves2010
    04 августа 2015, 09:15
    боян… 0.11% в день /42 сделки в день= комиссы не отобьются

    сайт гуд
  • Vitty
    04 августа 2015, 09:35
    генетика генерит много хороших систем. которые волшебным образом перестают быть хорошими когда их пользуют не на прошлом. самообманываться можно и с меньшими трудозатратами.
    • sergik99
      04 августа 2015, 11:17
      Vitty, Нет более циничного, чем самообман.
      И обидного…
  • Karim
    04 августа 2015, 10:05
    Обычная оптимизационная задача. Набор параметров, целевая функция, только ограничений нет. Поиск оптимальных параметров можно вести тупо простым перебором, если хватит мощностей, методом Монте-Карло (в частности применяется в Велслабе) или генетическими алгоритмами.
    • Vitty
      04 августа 2015, 11:04
      Karim, увы, это НЕ обычная оптимизационная задача. классический подход как к оптимизационной задаче приводит к генерации переподогнанных систем, практическая ценность которых отрицательна.

  • Karim
    04 августа 2015, 11:19
    Позвольте не согласиться. Какая разница каким инструментом искать максимум (или локальный максимум) целевой функции. Важно на каких данных и с какими ограничениями. Вы, в частности, описываете тестирование на out-of-sample данных. Но на тестовых можно и простым перебором найти параметры максимизирующие вашу целевую функцию.
    • Vitty
      04 августа 2015, 11:28
      Karim, в обычной оптимизационной задаче у вас есть некая стационарная данность в виде ф-ции, чей экстремум вы ищите. сама ф-ция не меняется. в трейдинге у вас есть инфа о том что было. а торговать вам предстоит в будущем. и тут, грубо говоря, есть два подхода: 1) придумать некую идею, некую модель, которую можно проверить на прошлых данных 2) решать оптимизационную задачу на прошлых данных. получите идеальное решение для прошлого. осталось изобрести машину времени чтобы им воспользоваться.

      OOS проверки это хорошо, но как показывает практика, если тестирование идет не от проверки идеи, а просто какой-нить бредогенератор генерит миллиарды систем, то никакой OOS не спасет.

      а вот когда тестирование идет от некой идеи, все становится намного лучше. хотя тоже непросто.
  • Макс
    04 августа 2015, 11:29
    Слишком очевидеый для квантов метод чтобы работать. Основная проблема — генетика будет топтаться вокруг одного и того же решения, в разных вариациях. Не считая того что сам подход — переоптимизация в квадрате.
    Шарп 5 — весьма круто надо сказать, у меня больше 3 редко выходило))
    .
    • SergeyJu
      04 августа 2015, 11:34
      Макс, генетика не будет топтаться около одного и того же решения, если алгоритм достаточно содержательный.
  • SergeyJu
    04 августа 2015, 11:33
    Генетический алгоритм — это алгоритм оптимизации, использующий некоторые специальные эвристики для получения более быстрой сходимости, чем тупой перебор по сетке или метод Монте-Карло. Эти эвристики построены на основе аналогии с эволюцией как её понимали в рамках стандартной теории. То есть мутации, размножение и отбор.
    Все риски оптимизации, вроде переподгонки, сохраняются. Объектом подгонки являются не только параметры индикаторов и решающих правил, но и выбор индикаторов.
  • EY
    04 августа 2015, 13:36
    Странно что у автора статьи хорошие показатели вне выборки, обычно такие системы вне выборки стабильно сливают. Не привели пример итоговой формулы, чтобы проверить.
  • bstone
    04 августа 2015, 14:02
    Прикольно, 1000 и еще 1 способ подгонки :)
  • nxt
    09 августа 2015, 21:35
    Да, тут правильно замечено насчет подгонки.
    Увы, для генетика даже стратегия не нужна.
    Достаточно задать произвольную точку входа рандомом — генетик всегда найдет прибыльное решение.
  • Vlad Minkov
    16 августа 2015, 11:57
    Мне кажется не все понимают разницу между генетическим программированием и генетической оптимизацией. Статья о генетическом программировании а скепсис об оптимизации. Это две большие разницы, как говорят в одном городе.
    Во всех экспертах применяю генетическую оптимизацию. Результатами доволен.
    Все эти возгласы о «подгонке», мне кажется, от недостатка или отсутствия нужного опыта.
    Удачи

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн