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

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

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


  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

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