Блог им. AleksandrBaryshnikov

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

    • 16 августа 2023, 12:45
    • |
    • bascomo
  • Еще
Как я уж писал ранее, руками я торгую по одному лоту, в качестве экспериментов и развлечений, а основную ставку я сделал на алготрейдинг. Но, как и для ручной торговли, для алготрейдинга тоже нужно придумывать стратегии. Поскольку разработкой кода я занимаюсь с 1998 года, то путь, который я должен был выбрать, был для меня очевидным.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Хорошего вам дня.
★3
37 комментариев
после того как закончатся прения непосредственно по сабжу предлагаю открыть сеанс срача по следующему вопросу:
можно ли к алгоритмической торговле относить автоматизированные торговые системы и допустимо ли к ней относить  автоматизированные торговые системы с ручным управлением )) 
avatar
Tуземец, пишите пост :)
avatar
bascomo, не. я обет дал не писать на смартлабе ничего, кроме  каментов.
да и те трёх типов: камент для большого брата, камент для срача и картинка )) 
avatar
Tуземец, а че здесь обсуждать, можно абсолютно все. На вкус и цвет…
avatar
3Qu, да некто логичный Зотов всю кровь у меня выпил в сраче по теханализу, тут тоже есть где развернуться
avatar
Tуземец, да? А я его заблокировал, чтоб кровь мне не пил :)
avatar
bascomo, заблокировал, а он пост написал от возмущения. и мне пришлось в его посту драться за двоих. он выиграл по очкам и я его тоже забанил ))
avatar
20% на 80% — мне кажется все так делают. IS у меня последние 360 дней, OOS  5000 дней.
avatar
Первое, что пришло в голову: концепция не противоречит общепринятой.
Первый короткий прибыльный участок существует просто для поиска возможных иногда что-то дающих алгоритмов. В общепринятом это остаётся за кадром.
Второй — большой, для классификации результатов. А в общепринятом так же.
В описанном подходе стоит добавить третий участок, например в четверть от второго, и на нём после классификации посмотреть как она сохраняется. Это будет аналогом боевого участка в общепринятом. Подозреваю, что в результатах на нём принципиальных отличий от общепринятого не будет.
avatar
svgr, а какой смысл, если параметры не меняются?
avatar
Тут только один вопрос. А не звездит преувеличивает автор? 100к стратегий — где вы их взяли?
avatar
LogikoMen, 348 сигналов * 348 контрсигналов = 121,104.
avatar
bascomo, извините. Не прочел вашу классификацию сигналов. Теперь верю. Она весьма способна обхватить на небольшом количестве индикаторов огромный набор простейших стратегий. И похвальна в плане проработки. 
У вас весьма грандиозный размах в аналитике. Вы создаете какой то софт? Или же для себя ищите стратегии? 
avatar
LogikoMen, всё для себя
avatar
bascomo, как вы все это программируете?  Софт какой, или написали что?
avatar
LogikoMen, всё написал с нуля на C#. Никакие фреймворки не использовал.
avatar
bascomo, много интересных идей у вас в блоге спасибо. Но и труд тяжелый. Из моего опыта, стратегия это набор сигналов с диапазоном их действия (диапазоном параметров). Можно еще добавить — наличие котировки к склонности характерного движения, но это не принципиально (и так идет поиск на лучших и их мало). От этого полный перебор в моем понимании не возможен. Потому что оптимизация — обязательна. Для меня странно, что вы находите что то ценное при таком подходе. Параметры же какие то выбираются. Прежде всего — закономерность отличается от случайности — количеством повторений. Ваша формула — поиск 20%, тест в 4 раза длиннее — это и есть принцип закономерности. На  короткой дистанции оценка невозможна. Но идеи очень крутые, спасибо. 
Почему вы удалили старые посты? 
avatar
LogikoMen, разочаровала аудитория. Тогда я не использовал бан так активно. Много неадекватных людей. Мне тут писать зачем? Причин две: получить критическую оценку своих идей и почерпнуть новые. Других смыслов не вижу. Но есть страта пользователей, которые по принципу чаек живут: прилетели, нагадили, улетели. Чайка-пользователи.
avatar
bascomo, могу подсказать идеи по вопросу. На который тоже нет хорошего решения. По умиранию стратегий. Часто вижу значительное изменение в стратегий в моменты кризиса бумаги в статистике. Т.е когда несут убытки и идет перестроение участников торговли. С акциями очень просто — они просто падают, кризисы видны. С другими сложнее определить кризисы. Т.е если стратегия идет под откос в момент кризиса бумаги — реагируйте активнее. Не ждите. Лучше поглядеть на заборе на нее. Выйдет на максимум — можно заходить. Как и эти периоды самые сложные для алготорговли.
Если алгоритм после достижения нового максимума пробивает локальный минимум за предыдущий период — он умер. Оценка вершин очень хороша — и тоже склоняюсь к вашему методу. Но периоды убытка важны. Хорошая стратегия тем и хороша, что не  проседает в плохие периоды. Такие просадки на двух периодах скорее говорят об смерти, чем долгое отсутствие прибыли. Как и хорошая стратегия — это оценка прибыльности на периодах. Где период — это достаточное количество сделок для оценки. 
Черные лебеди не  рассматриваю для оценки. Т.е. если алгоритму не повезло краткосрочно — то это просто случайность. Если какой то фундаментал покосил алгоритм — печально. Но мог и создать мега прибыль.
avatar
LogikoMen, хорошая идея, мне нравится. Кривую достигнутых максимумов я нарисовал, теперь ещё нарисую кривую достигнутых минимумов, так же, ступеньками. Если она поползла вниз — тоже повод выключать стратегию. Спасибо за совет. Дмитрий, кстати, тут этот концепт Ларри Вильямса описывал, правда, применительно к свечам, а не к кривой Equity.

А вот как падение Сбера на одной из стратегий отразилось



avatar
bascomo, все равно не понял ваш принцип. Вы ищите высоко доходные стратегии на короткой истории, а не долгосрочные. Дело в том. Что тест на долгой истории равнозначен форвардному тесту. Точнее сказать дает очень похожую оценку. Именно поэтому все профи тестируют алгоритмы на истории от 5 лет. Я использую форвард оценку периода — моя оценка, в книгах не встречается. Т.е. идет разбитие на периоды и оценивается в каких случаях был плюс на коротком диапазоне. И далее форвардом проверяю удачность выбора. Для короткого теста не плохо. Но неоднозначно. Вторую оценка у меня — это доход/волатильность. Тоже лучше, чем просто доход. В прогностическом плане.  Но проблема все равно стоит остро — цифры пляшут. И долгосрочная оценка всегда лучше. Вот так стоит проблема. Вы же говорите об краткосрочной. Нужно понимать, что я тоже вижу смерть стратегий. И вижу причины — смена участников торговли из за их убытков. А щас добавилось — подключение торговых алгоритмов. Если на истории есть работающая тех модель — жди роботов. И модель умрет. Но это не отменяет вопроса — что вашем понимании краткосрочная оценка? Месяц, 10 сделок? Как и вы задаете выборке параметры? Без них стратегии не существует. Я это хорошо вижу. Диапазон параметров — главное достояние стратегии. Есть еще такие стратегии, которые я называю обманными. Они стохастический не способны заработать. А лишь плод математической выборке. И да -вы их определите обычной  сменой котировки. Но проблема никуда не делась. Достоверность заработка по полученной системе нет. Что вы делаете такого, что не делаю я? Да, у меня нет такого математического комплекса и потому такой большой информации для оценки. По сравнению с вами я доисторический мамонт — и от того мой опыт очень субъективен. Но все же, почему на выходе вы получаете работающий алгоритм. А не готовую сливающую машину?
avatar
LogikoMen, а чего вам на слово мне верить? Исходите из того, что она сливает, пока сами не построите и не убедитесь в обратном.

Задачу я себе поставил так:
1. Работать на M1
2. Выбирать стратегии с удержанием позиции от часа до суток (для некоторых инструментов — до трёх суток)
3. Ротировать стратегии раз в неделю или по факту отключения неэффективной.
4. Другие принципы можно прочитать тут Диверсификация портфеля (smart-lab.ru)
5
. Эквити по отдельному инструменту меня интересует мало, важна суммарная эквити портфеля

Ничего не мешает определить иную дискретность — например, менять системы не раз в неделю, а раз в месяц. Но это вопросы тестирования.

В случае акций найденные алгоритмы могут работать месяцами на пределе максимальной возможной прибыли по акциям (около 10% в месяц).
avatar
bascomo, т.е. банально стратегия моментума в выборе алгоритма? Статистическая машина нашла некий  случайный алгоритм, благо она работает с огромной выборкой. Который заработал за три месяца лучше всего. Он подключается. И если ведет себя плохо отключается. Такой принцип?
avatar
LogikoMen, да, но важно не сколько он заработал, а тенденция на конец периода
avatar
bascomo, 5.
Эквити по отдельному инструменту меня интересует мало, важна суммарная эквити портфеля
Это значит, что алгоритм ищется по группе котировок?
avatar
LogikoMen, вопрос непонятен
avatar
bascomo, тест алгоритма идет на одной котировке, или нескольких? В каких случаях алгоритм попадает в список для торговли? Если он успешен на нескольких?
avatar
LogikoMen, у меня четыре этапа. На примере разберу, чтобы было понятнее.

1. Беру Сбер. Учу на 20%, тестирую на 80% следующих. Если сработал на 80% в плюс — запоминаю.
2. Успешные в п. 1 проверяю на других месяцах Сбера, за последние 2 года. Каждый успешный месяц добавляет весу алгоритма единичку.
3. Успешные в п. 1 проверяю на других инструментах — акциях, фьючерсах и пр. Каждый успех — +1 к весу.
4. Из 2 и 3 набираю лучшие по весам, которыми хочу начать торговать завтра. На истории за 2 последние недели по сегодня они должны показать "+". Если показывают "—" исключаю такие, и дополняю до нужного числа из пп. 2 и 3 с условием пп 4.
avatar
bascomo, 
1)на самом деле очень жесткое условие для первого этапа. Первый тест становится определяющим. При разработке выбор для обучения куска истории чем то обосновано? 
2) Повторно одни и те-же сигналы (стратегии) проходят проверку, уже на другом куске истории? Со временем, мы имеем уже что то новое. Через год, к примеру?
3) Успешность на другой котировке — субъективно. Но это является лучшим показателем успешности для алгоритма. В последнее время к этому прихожу. Причем он не должен сливать. А никак не зарабатывать на периоде. Зарабатывает алгоритм на котировке. На которой найдена закономерность. Но эта закономерность должна встречаться в принципе. А если это так, то это точно не математическая подгонка. 
4) Я озвучу проблему в рамках поста. И хотел бы от вас услышать комментарий. 
avatar
avatar
На первом этапе тестируется 100 000 стратегий...
Автор креативен или их GPT составляет)
avatar
Врач-бондиатОр, конечно, GPT
avatar
Здравствуйте!
Коллега прислал ссылку на заметку. Спасибо:)
Могли бы вы чуть подробнее разъяснить про соотношение времени теста и обучения? Я думал, что должно быть наоборот.
Вывод интересный.
avatar
phuture music, это вывод из практики и опыта. Можно потеоретизировать, рассуждая, почему такой эффект получается, но есть ли смысл?
avatar
bascomo, Очень интересно было бы раскрыть.
Как скажете, если не хочется топтать клавиатуру — может, и не надо.
avatar
phuture music, моё мнение — что на коротком периоде обучения выявляется больше возможностей, которые отработают в плюс на длинном периоде. Чем длиннее период обучения, тем меньше будет найдено возможностей. Видел подходы людей, которые решают это тем, что ослабляют ограничения к результативности алгоритмов на периоде обучения. И то, и другое направлено на одно — дать больше алгоритмов, которые будут проверяться на незнакомых данных.
avatar

теги блога bascomo

....все тэги



UPDONW
Новый дизайн