Привет, Хабр!

Меня зовут Андрей Счастливый. Пишу на Python. Месяц назад разбираясь с одним пакетом для бэктестинга торговых стратегий на C был очень разочарован в низкой скорости. А ведь в пакете для бэктестинга самое главное скорость и вообще возможность массово пакетами тестировать торговые стратегии. Решил написать на Python свой бэктестер с GPU.

За месяц написал пакет и вот ближе к делу, хочу рассказать о нём. Тянуть не буду сразу в лоб, цифры в факты.

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

Писал и тестировал пакет на следующем железе, цифры будут относиться к тестам на данном железе: рабочая станция Lenovo P15, процессор Xeon W-10885M 8/16 ядер, 64 Gb ram, видео Nvidia Quadro RTX5000 с 16 Gb видеопамяти.

Тестирование производилось на наборах данных для тикеров MOEX: RTS, Si, BR, NG и для каждого тикера наборы данных по 152-155 тыс баров по 1 минуте, это 9 месяцев торгового времени, с начала 2025 года. Торговля только внутри дня, чтобы Гэпы не ловить.

Факты, цифры:

  • используется фреймворк Taichi;

  • асинхронная загрузка файлов с многопоточностью;

  • просчёт ведётся в GPU параллельно на 12 тысячах CUDA ядер;

  • пакетная обработка всех подгруженных тикеров и таймфреймов. Можно сразу в очередь поставить 5 тикеров и для каждого 2-3 таймфрейма;

  • просчёт стратегий по диапазонам значений сразу для 10 параметров;

  • адаптивные диапазоны значений просчитываемых параметров для разных тикеров и если надо таймфреймов;

  • обработка стратегий батчами по 150 тыс стратегий в батче;

  • средняя стабильная скорость при долгих просчётах 150 тыс стратегий в 1 секунду;

  • по итогу для каждого тикера пакет отбирает ТОП-500 самых прибыльных торговых стратегий, рассчитывает для каждой 33 метрики и выгружает всё в excel таблицы для удобного анализа;

  • корректный расчёт прибыли в рублях и USD по методологии MOEX (учёт комиссий, ГО, стоимости шага и т.д.);

  • возможность подключать разные ядра с торговой логикой;

  • анализ частоты попадания значений просчитываемых параметров в список топ стратегий;

А под подъехал и пример вывода рабочего просчёта за 1 заход на 4 тикера 1,47 млрд стратегий за 2 часа:

Загрузка файлов завершена
Комбинаций к просчёту:
RTS - 308,689,920
Si - 255,011,328
BR - 325,061,100
NG - 258,552,000
Всего комбинаций: 1,147,314,348
Расчётное время просчёта: 2ч 7м 28с
Расчётное время окончания: 15ч 12м 22с

[Taichi] Starting on arch=cuda
Загрузка файлов завершена
Направление сделок: all, Режим торговли: Интрадей, Файлов: 4
✅ Зарегистрированы ядра: SMA_RSI

Файл 1: Min1\BR.txt, Баров: 153,020, Период: 06.01.25-12.09.25
ГО на 20.09.25: 10,000 rub. Объём торговли: x1. Депозит: 120 usd
? Запуск стратегии SMA_RSI
? Первый проход: вычисление прибыли для 325,061,100 стратегий
Выполнение первого прохода: 41м 28с | Стратегий/сек: 130,637
? Отобрано: 500 лучших стратегий по прибыли
? Второй проход: показатели для 500 лучших стратегий

Файл 2: Min1\RTS.txt, Баров: 151,548, Период: 06.01.25-12.09.25
ГО на 20.09.25: 27,000 rub. Объём торговли: x1. Депозит: 33,000 rub
? Запуск стратегии SMA_RSI
? Первый проход: вычисление прибыли для 308,689,920 стратегий
Выполнение первого прохода: 29м 33с | Стратегий/сек: 174,063
? Отобрано: 500 лучших стратегий по прибыли
? Второй проход: показатели для 500 лучших стратегий

Файл 3: Min1\Si.txt, Баров: 151,598, Период: 06.01.25-12.09.25
ГО на 20.09.25: 7,500 rub. Объём торговли: x1. Депозит: 9,000 rub
? Запуск стратегии SMA_RSI
? Первый проход: вычисление прибыли для 255,011,328 стратегий
Выполнение первого прохода: 29м 25с | Стратегий/сек: 144,402
? Отобрано: 500 лучших стратегий по прибыли
? Второй проход: показатели для 500 лучших стратегий

Файл 4: Min1\NG.txt, Баров: 154,812, Период: 06.01.25-12.09.25
ГО на 20.09.25: 8,500 rub. Объём торговли: x1. Депозит: 100 usd
? Запуск стратегии SMA_RSI
? Первый проход: вычисление прибыли для 258,552,000 стратегий
Выполнение первого прохода: 25м 1с | Стратегий/сек: 172,178
? Отобрано: 500 лучших стратегий по прибыли
? Второй проход: показатели для 500 лучших стратегий

Всего для 4 файлов просчитано стратегий: 1,147,314,348
Общее время выполнения: 2ч 5м 37с | Стратегий/сек: 152,212
✓ Ресурсы Taichi очищены

[+] Сохранение pickle-файла с данными статистики топ стратегий: data\stats\stats.pkl
[+] Отчет с ТОП-500 стратегиями сохранен в: data\output\intraday_top_strategies.xlsx
[+] Созданы графики частоты попадания значений в список топ стратегий
[+] Данные для графиков сохранены в файл: data\stats\dict_for_plot.pkl

Пробежимся по остальным деталям. Оптимальная полная загрузка видео карты:

Загрузка видео
Загрузка видео

Вывод метрик ТОП-500 стратегий в excel для удобного дальнейшего анализа:

Таблица ТОП-500 стратегий
Таблица ТОП-500 стратегий

Таблица со сделками выбранной топ стратегии:

Сделки топ стратегий
Сделки топ стратегий

Интерактивный график с показом сделок и отдельно графика прибыли с разделением на short и long для выбранной топ стратегии:

График прибыли 1 топ стратегии
График прибыли 1 топ стратегии

Мультиграфик для одновременного анализа графиков прибыли до 20 стратегий:

Анализ до 20 стратегий одновременно
Анализ до 20 стратегий одновременно

Ну собственно и всё)) Дальше в пакет буду добавлять ядра с разной логикой торговых стратегий. Если пост наберёт 50 голосов, то запишу и выложу видео с работой пакета.

Кому интрадей стратегий со средней доходностью на протяжении 9 месяцев в 50% в месяц к депозиту?))

Комментарии (44)


  1. DooKoo2
    01.10.2025 11:20

    Мне интересно! Выкладывай:)

    Можешь рассказать по следубщим пунктам:

    1. Как синхронизировал батчи по варпам?

    2. При копировании данных с GPU с хоста, в какую памчть трамбовал данные? Shared/global?

    3. Была ли задействована constant память для каких-то данных?

    4. Сколько потоков запускал?

    5. Тестил ли на register pressure наборы данных, чтобы gpu не подтормаживала?

    6. Вижу вывод с винды, GPU немного недозагружена, но возможно это кривое отображение задействованных ресурсов GPU, так все-таки, пробовал ли на 100% ее загрузить?

    7. Считалось на CUDA или тензоры тоже подключались для каких-то действий?

    8. Не упирался в троттлинг по памяти/кристаллу?

    Спасибо за ответы заранее:)


    1. Athenix Автор
      01.10.2025 11:20

      У меня нет времени отвечать на все вопросы, извини. Главный совет: профилируй под своё железо и код. Я недели 2 профилировал. Поднял скорость с сотен стратегий до 150-160 тыс стратегий в секунду. В конце упёрся в скорость возврата просчитанных данных с gpu. Далее уже только железо другое нужно.


  1. Speculator
    01.10.2025 11:20

    Цифра впечатляет "на 4 тикера 1,47 млрд стратегий", видимо, имеется в виду количество вариаций одной стратегии, а не стратегий. От таких вычислений очень сильно веет переоптимизацией. На мой взгляд, ставить деньги на такие системы опасно.


    1. Athenix Автор
      01.10.2025 11:20

      Да, всё верно. Ядро пока одно. Это кол-во комбинаций значений параметров, оптимизация. По деньгам считает точно, расхождение в изменении курса usd. Я в ручную пересчитывал математику закрытия сделок. Переоптимизации нет. Был момент, когда я подошёл к скорости в 1 млн комбинаций в секунду, тогда да, расчёты посыпались. Откатился на 150 тыс.


  1. amirkhonov
    01.10.2025 11:20

    Кому интрадей стратегий со средней доходностью на протяжении 9 месяцев в 50% в месяц к депозиту?))

    мне


    1. urvanov
      01.10.2025 11:20

      Без денег останешься


  1. axweye
    01.10.2025 11:20

    Не очень понятно что с такой доходностью (50% в месяц ) вы на Хабре делаете. Если взять начальный депозит 10000 usd (не такая уж большая сумма), используя формулу сложного процента, то через 3 года у вас на счету будет примерно 227 млн usd. Можно начинать подыскивать остров для покупки


    1. venanen
      01.10.2025 11:20

      На самом деле, даже если вам удастся получить стратегию на 50% в месяц, то есть буквально бесконечные деньги - бесконечными они не будут. После определенной суммы сделки на большую сумму будут исполняться так долго и влиять на рынок так сильно, что полностью потеряют доходность.

      А вообще тут как-будто бы типичный пример оверфитта обычной нейронной сети, только автор сделал необычный подход - место градиентного спуска взял просто огромное количество комбинаций весов и прогнал их последовательно и выбрал те, которые ближе всего к нужному результату. Я так могу любую доходность показать. По хорошему нужно подбирать стратегию на X_train, а потом выбранную запускать уже на X_test, и вот если там будет 50% в месяц - я поздравлю ещё одного миллиардера, но это, увы, не сработает.


      1. Athenix Автор
        01.10.2025 11:20

        Интересные у вас мысли.


    1. urvanov
      01.10.2025 11:20

      Будет приближаться к Илону Маску в списке богатейших людей мира.


    1. Athenix Автор
      01.10.2025 11:20

      Я этот пакет только написал. Предстоит написать торговый бот и делать тест со стратегиями с этого пакета.


      1. axweye
        01.10.2025 11:20

        Я бы, прежде чем писать бота, сделал бы следующее:

        1. Как уже написали выше, разбить весь набор данных на две части - Train and Test. Обучать на Train, тестировать на Test

        2. Попытаться найти ошибку "заглядывания в будущее". Самый простой пример такой ошибки: логика ваших алгоритмов использует цены Close, а открываете или закрываете сделку вы по ценам Open или High или Low той же свечи, Close которой используется в логике алгоритма


    1. Athenix Автор
      01.10.2025 11:20

      Я этот пакет только написал. Предстоит написать торговый бот и делать тест со стратегиями с этого пакета.


    1. Athenix Автор
      01.10.2025 11:20

      Я этот пакет только написал. Предстоит написать торговый бот и делать тест со стратегиями с этого пакета. P.s. - в хабре комменты глючат.


    1. sergeym69
      01.10.2025 11:20

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


      1. axweye
        01.10.2025 11:20

        Крупные ETF и акции на американском фондовом рынке этот объем, если его ещё и между инструментами разбить, даже и не заметят


  1. yaroslavp
    01.10.2025 11:20

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


    1. Athenix Автор
      01.10.2025 11:20

      Вы полностью правы. Этот момент частично проработан и также будет дорабатываться.


  1. alhor
    01.10.2025 11:20

    Как технический кейс - ок. Реально это не сработает, о чем тут уже подробно написали. Возьмите данные за другие 9 месяцев и все сразу станет понятно. А вот из сравнения таких периодов (лучше 3-4, с таким подходом это тоже быстро) можно выбирать наилучшие стратегии. Конечно, там не будет и 50% за год, но и 10% в валюте тоже очень неплохо. Удачи!


    1. sergeym69
      01.10.2025 11:20

      Если вы будете использовать так называемый "классический" подход - где берем и используем лучшую стратегию то работает не очень, а может и не работать. А вот если полученные данные по тестированию стратегий правильно обработать и создать на их основе "правильную" стратегию, то все таки очень неплохо работает, в том числе и на другом периоде, на котором НЕ проводили тестирование. НЕ грааль конечно, но работает неплохо и устойчиво. Как это делать писать конечно не буду, потому что хоть и не грааль, но вполне неплохо и конкуренты таки никому не нужны.


      1. Athenix Автор
        01.10.2025 11:20

        Я точь в точ понимаю о чём вы говорити) так и делаю. В данном пакете топ статегии выбираются не по прибыли, а по кастомной метрике, которая опираеться на 4 других метрики со своими весами. Акцент на стабильность и быстрое восполнение после просадки. Так и получается по 50%. А если тупо по прибыли, то там есть стратегии и по 65% в среднем в месяц, вот они более рисковые.


    1. Athenix Автор
      01.10.2025 11:20

      Спасибо большое.


  1. sergeym69
    01.10.2025 11:20

    Тож решил попробовать Taichi, что то я забыл про него, больше numba использовал. Запустил новый Claude Sonnet 4.5 и с помощью него навайбкодил простой тестер стратегий за 30 минут. И вроде все работает, надо будет тоже потестировать насколько быстрее чем с numba выходит.


  1. vasil1994
    01.10.2025 11:20

    Кому интрадей стратегий со средней доходностью на протяжении 9 месяцев в 50% в месяц к депозиту?))
    мне тоже


  1. AlexM9181
    01.10.2025 11:20

    Поделитесь результатами портфеля хотя бы через полгода, плз.


    1. Athenix Автор
      01.10.2025 11:20

      Возможно.


  1. Format-X22
    01.10.2025 11:20

    А ведь в пакете для бэктестинга самое главное скорость

    Нет. Самое главное - реалистичность стратегии. А скорость нужна для поиска коллизий, которые идеально покажут вам прошлое и умрут в будущем. Я 9 лет подобным занимался в разных вариациях. Найти коллизию не сложно, а вот заработать - невозможно.


    1. Athenix Автор
      01.10.2025 11:20

      А я 15 лет). Понимаю о чём вы говорите, для меня это всё по умолчанию.


      1. Format-X22
        01.10.2025 11:20

        А зачем тогда всё оно?


        1. Athenix Автор
          01.10.2025 11:20

          Открыл в себе, что люблю такие вещи собирать. Раньше всё руками, да чужим ПО. А тут изучил Python и понял, что могу многое.


      1. unicorn_style
        01.10.2025 11:20

        Судя по вашим ответам не очень понимаете. Тут нет влияния сколько лет вы этим занимаетесь, 9-15…хоть сто.

        Вы ниже пишите в ответе, что валидация частично решена. Что значит частично? Валидация данных либо проходит, либо не проходит.

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


        1. Athenix Автор
          01.10.2025 11:20

          Я надеюсь, что вы выговорились и вам стало легче.


  1. j-b
    01.10.2025 11:20

    Вот бы ещё увидеть реальный торговый счёт на этой системе... А то картинки это красиво, а вот цифры на счету говорят сами за себя.


  1. andnotor
    01.10.2025 11:20

    Рекламируется фреймворк или продажа стратегий?


    1. Athenix Автор
      01.10.2025 11:20

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


  1. unicorn_style
    01.10.2025 11:20

    учёт комиссий

    Как там учет комиссии сделан, тейкер/мейкер? Чтобы узнать кем вы были нужен стакан, а я вижу минутные свечи как дата-сет. Разница там огромная


    1. Athenix Автор
      01.10.2025 11:20

      При открытии позиции сразу выставление ордеров тп и сл.


  1. Evlampy
    01.10.2025 11:20

    Подбираем параметры на 24 годе и ранее, тестируем на 25. Смотрим как по всем стратегиям наступает плато. Накидать 15 индикаторов и чтобы параметров для подгонки было не менее 500, вот и весь секрет успеха. Надо ещё добавить в стратегии манименеджмент, мартингейл в самый раз. Автор к какой яхте уже прицениваешься?))


    1. i-aztec
      01.10.2025 11:20

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


    1. i-aztec
      01.10.2025 11:20

      Подбираем параметры на 24 годе и ранее, тестируем на 25. Смотрим как по всем стратегиям наступает плато.

      Если тестировать по 150 тыс. стратегий в секунду, то и в 25-м году 1/3 из них вверх тоже пойдет. А треть от той трети и в 26-м. Так что все эти тестирования да валидации на отложенных выборках - не панацея ))


      1. Evlampy
        01.10.2025 11:20

        Пришлось покопаться в недрах памяти, ибо давно это было)
        Да плато наступает не сразу)
        Для начала выяснится что-то 2/3 отложенных лимитированных ордеров во время не срабатывают, срабатывают только как рыночные и не там как прогнозировалось в стратегии.
        Задрачивать параметры я умел) Генетические алгоритмы наше всё) Кривая доходности на бумаге была покруче чем у Курта Сакаеды в реале, был в те времена такой деятель на фьючерсных рынках.


  1. sturex
    01.10.2025 11:20

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


    1. Evlampy
      01.10.2025 11:20

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


  1. leadraven
    01.10.2025 11:20

    Как упражнение по программированию - хорошо, молодцом.

    А над очередным ломателем финансовой системы могу только угрюмо усмехнуться.