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

Меня зовут Андрей Счастливый. Пишу на 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% в месяц к депозиту?))

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


  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. Speculator
    01.10.2025 11:20

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


  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. urvanov
      01.10.2025 11:20

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


  1. yaroslavp
    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. 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. Format-X22
    01.10.2025 11:20

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

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


  1. j-b
    01.10.2025 11:20

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


  1. andnotor
    01.10.2025 11:20

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