bascomo
bascomo личный блог
16 августа 2023, 12:45

Как я создаю торговые стратегии

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

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

Отсюда следует, что если стратегию можно формализовать, то, значит, её можно свести к простому набору правил, что и есть формализация или описание требований. И если торговая система — это просто комбинация правил, определяющих точку входа и точку выхода, то всё, что нужно для автоматического создания стратегий — генерировать эти правила автоматически и проверять их комбинации на профпригодность. О процессе создания правил я подробно писал тут: Как я рассчитываю и использую сигналы ТА в торговле (smart-lab.ru)

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

Как я создаю торговые стратегии

Алгоритм относится к стохастическим, то есть, тем же, что и Монте-Карло. При этом, Монте-Карло все любят и восхищаются, а к генетике относятся подозрительно. Это забавно.

Итак, что я делаю — всё соответствует описанию классического алгоритма, как изложено здесь:

Как я создаю торговые стратегии

  1. Инициализирую нулевое поколение (и в связи с моей спецификой делаю это до 4 поколения)
  2. Проживаю жизни ботов — тестирую полученные стратегии на истории
  3. Сохраняю успешные алгоритмы-стратегии
  4. Ранжирую получившийся список от лучших к худшим по прибыли
  5. Исключаю неудачные
  6. Скрещиваю лучшие между собой с целью выведения следующего поколения стратегий
  7. И слегка мутирую их параметры
Технически, это довольно простая вещь.
На первой фазе инициализации я проверяю порядка 100к алгоритмов.
После каждого поколения оставляю только 5к лучших.
К ним добавляю 5к новорожденных и снова их считаю, ранжирую и т.п.
Весь цикл повторяется 15 раз.

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

Как я создаю торговые стратегии

Главное в этом куске кода: если на выборке для обучения стратегия показала профит, то проверяем её на незнакомых данных. Соответственно, вся сортировка и отбор и прочие операции, которые приведены в семи пунктах, что я перечислил выше — осуществляется на результатах, которые были получены на незнакомых данных, а не на тех, на которых проводилось обучение.

И ещё. Мне понравилась концепция, которая противоречит общепринятой идеологии алготрейдинга. Её суть состоит в том, что период обучения должен быть в разы меньше, чем период проверки. Я поэкспериментировал и на данном этапе пришёл к значению 20% — такова протяжённость выборки для обучения, а для тестирования, соответственно, 80%. Почему так? Правильный ответ на этот вопрос — результаты экспериментов. Но, если рассуждать логически, чем короче период обучения, тем легче найти рабочий алгоритм. А уж потом проверять его на более длинном периоде тестирования, и если он там будет работать — вероятность того, что он будет работать и в будущем, по моему мнению, выше.

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

Вот, собственно, и всё, что имел сказать по теме поста.

Хорошего вам дня.
37 Комментариев
  • Туземец
    16 августа 2023, 13:06
    после того как закончатся прения непосредственно по сабжу предлагаю открыть сеанс срача по следующему вопросу:
    можно ли к алгоритмической торговле относить автоматизированные торговые системы и допустимо ли к ней относить  автоматизированные торговые системы с ручным управлением )) 
  • Zoran
    16 августа 2023, 13:20
    20% на 80% — мне кажется все так делают. IS у меня последние 360 дней, OOS  5000 дней.
  • svgr
    16 августа 2023, 13:30
    Первое, что пришло в голову: концепция не противоречит общепринятой.
    Первый короткий прибыльный участок существует просто для поиска возможных иногда что-то дающих алгоритмов. В общепринятом это остаётся за кадром.
    Второй — большой, для классификации результатов. А в общепринятом так же.
    В описанном подходе стоит добавить третий участок, например в четверть от второго, и на нём после классификации посмотреть как она сохраняется. Это будет аналогом боевого участка в общепринятом. Подозреваю, что в результатах на нём принципиальных отличий от общепринятого не будет.
  • LogikoMen
    16 августа 2023, 15:23
    Тут только один вопрос. А не звездит преувеличивает автор? 100к стратегий — где вы их взяли?

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

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