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