Как я уж писал ранее, руками я торгую по одному лоту, в качестве экспериментов и развлечений, а основную ставку я сделал на алготрейдинг. Но, как и для ручной торговли, для алготрейдинга тоже нужно придумывать стратегии. Поскольку разработкой кода я занимаюсь с 1998 года, то путь, который я должен был выбрать, был для меня очевидным.
Если стратегия формализуема, то она может быть алгоритмизирована и запрограммирована. Если стратегию формализовать невозможно — то это не стратегия, а шлак, чушь и фейк и фантазии автора.
Отсюда следует, что если стратегию можно формализовать, то, значит, её можно свести к простому набору правил, что и есть формализация или описание требований. И если торговая система — это просто комбинация правил, определяющих точку входа и точку выхода, то всё, что нужно для автоматического создания стратегий — генерировать эти правила автоматически и проверять их комбинации на профпригодность. О процессе создания правил я подробно писал тут:
Как я рассчитываю и использую сигналы ТА в торговле (smart-lab.ru)
Поскольку правил довольно много и их комбинации весьма вариабельны, и комплексы правил распадаются на две группы — вход и выход, то существует огромное количество потенциальных стратегий. Проблема тут в том, что методом перебора эту задачу решить невозможно. Поэтому на помощь я призвал генетический алгоритм — представитель семейства алгоритмов оптимизации. Вообще говоря, существует довольно большое множество алгоритмов из этого семейства. Выбирай любой на вкус и цвет, как говорится. Всё это, так или иначе — методы оптимизации или, другими словами, поиска локальных или глобальных минимумов.
Алгоритм относится к стохастическим, то есть, тем же, что и Монте-Карло. При этом, Монте-Карло все любят и восхищаются, а к генетике относятся подозрительно. Это забавно.
Итак, что я делаю — всё соответствует описанию классического алгоритма,
как изложено здесь:
- Инициализирую нулевое поколение (и в связи с моей спецификой делаю это до 4 поколения)
- Проживаю жизни ботов — тестирую полученные стратегии на истории
- Сохраняю успешные алгоритмы-стратегии
- Ранжирую получившийся список от лучших к худшим по прибыли
- Исключаю неудачные
- Скрещиваю лучшие между собой с целью выведения следующего поколения стратегий
- И слегка мутирую их параметры
Технически, это довольно простая вещь.
На первой фазе инициализации я проверяю порядка 100к алгоритмов.
После каждого поколения оставляю только 5к лучших.
К ним добавляю 5к новорожденных и снова их считаю, ранжирую и т.п.
Весь цикл повторяется 15 раз.
Нюанс тут заключается вот в чём. Те стратегии, которые показали себя как успешные на этапе обучения, должны быть проверены на незнакомых данных и показать на них хороший результат. Это основное отличие от классического генетического алгоритма, который полученные данные на тестовых периодах не проверяет.
Главное в этом куске кода: если на выборке для обучения стратегия показала профит, то проверяем её на незнакомых данных. Соответственно, вся сортировка и отбор и прочие операции, которые приведены в семи пунктах, что я перечислил выше — осуществляется на результатах, которые были получены на незнакомых данных, а не на тех, на которых проводилось обучение.
И ещё. Мне понравилась концепция, которая противоречит общепринятой идеологии алготрейдинга. Её суть состоит в том, что период обучения должен быть в разы меньше, чем период проверки. Я поэкспериментировал и на данном этапе пришёл к значению 20% — такова протяжённость выборки для обучения, а для тестирования, соответственно, 80%. Почему так? Правильный ответ на этот вопрос — результаты экспериментов. Но, если рассуждать логически, чем короче период обучения, тем легче найти рабочий алгоритм. А уж потом проверять его на более длинном периоде тестирования, и если он там будет работать — вероятность того, что он будет работать и в будущем, по моему мнению, выше.
Конечно, тут следует принять во внимание и тот факт, что я ищу короткоживущие и высокоэффективные стратегии, в то время, как большинство ищет алгоритмы, которые будут работать как можно дольше, теряя, при этом, в прибыли — что закономерно.
Вот, собственно, и всё, что имел сказать по теме поста.
Хорошего вам дня.
можно ли к алгоритмической торговле относить автоматизированные торговые системы и допустимо ли к ней относить автоматизированные торговые системы с ручным управлением ))
Первый короткий прибыльный участок существует просто для поиска возможных иногда что-то дающих алгоритмов. В общепринятом это остаётся за кадром.
Второй — большой, для классификации результатов. А в общепринятом так же.
В описанном подходе стоит добавить третий участок, например в четверть от второго, и на нём после классификации посмотреть как она сохраняется. Это будет аналогом боевого участка в общепринятом. Подозреваю, что в результатах на нём принципиальных отличий от общепринятого не будет.