Готовый шаблон для быстрого старта в алгоритмической торговле на Python с использованием библиотеки Backtrader. Проект создан, чтобы частные инвесторы и разработчики могли сосредоточиться на главном — на разработке и тестировании стратегий, а не на борьбе с инфраструктурой.
В мире алгоритмической торговли доминируют крупные фонды с их колоссальными ресурсами. Этот проект — попытка создать мощный и доступный инструмент для частных инвесторов. Идея проста: больше не нужно зависеть от проприетарных платформ или писать с нуля сложную инфраструктуру для тестирования каждой новой идеи.
Цель — построить открытый стандарт для алготрейдинга на базе Backtrader, заточенный под реалии российского рынка. Мы создаём систему, которая была бы так же удобна, как TradingView, но с гибкостью и мощью Python. Чтобы каждый, кто заинтересован в алгоритмической торговле, мог без усилий внедрить свою стратегию, протестировать её и получить наглядные результаты.
Этот репозиторий — не просто набор скриптов, а призыв к действию. Давайте объединим усилия и создадим по-настоящему «народный» Backtrader!
- Максимальная модульность: одна стратегия — один файл. Никаких сложных зависимостей. Просто добавьте свой
.py
файл в папкуstrategies
, и система автоматически его подхватит. - Простое управление: главный файл
main.py
— это единая панель управления. Выбирайте режим, стратегию и период тестирования в одном месте. - Два режима работы:
BACKTEST
: быстрая проверка гипотезы на исторических данных.OPTIMIZATION
: автоматический подбор лучших параметров для вашей стратегии.
- Информативные отчеты: по итогам каждого теста генерируется подробный текстовый отчет с ключевыми метриками (прибыль, просадка, профит-фактор, коэффициент Сортино) и наглядные графики.
- Визуализация оптимизации: для режима оптимизации по двум параметрам строится тепловая карта, которая помогает визуально определить самые прибыльные и устойчивые зоны.
- Адаптация под портфель: шаблон изначально спроектирован для тестирования стратегий на нескольких акциях одновременно и корректно обрабатывает асинхронные исторические данные разной длины.
- Готовность к реальной торговле: архитектура закладывает основу для легкого перехода от бэктестинга к реальной торговле через API российских брокеров (Тинькофф, Финам, Алор и др.).
.
├── data-connector/Data/Tinkoff/ # Папка для ваших исторических данных (CSV/TXT)
│ └── TQBR.SBER_D1.txt
├── reports/ # Сюда сохраняются все отчеты и графики
│ └── SmaCrossStrategy_test_... .txt
├── strategies/ # Здесь живут ваши торговые стратегии
│ ├── __init__.py # 🚀 Автоматически загружает все стратегии из этой папки
│ ├── base_strategy.py # 🧱 Базовый класс-шаблон для всех стратегий
│ └── sma_cross_strategy.py # 📈 Пример готовой стратегии
├── utils/ # Вспомогательные модули
│ ├── custom_csv.py # 📈 Загрузчик для CSV-файлов нестандартного формата
│ ├── report_generator.py # 📊 Генератор текстовых отчетов и тепловых карт
│ └── sortino_analyzer.py # 📉 Анализатор для расчета коэффициента Сортино
├── main.py # 🚀 Главный файл для запуска тестов и оптимизации
├── requirements.txt # Список необходимых библиотек
└── install_requirements.bat # Скрипт для быстрой установки зависимостей (для Windows)
git clone https://github.com/empenoso/backtrader-quickstart-template.git
cd backtrader-quickstart-template
Запустите install_requirements.bat
(для Windows) или выполните команду в терминале:
pip install -r requirements.txt
Поместите ваши файлы с историческими данными в формате .txt
или .csv
в папку data-connector/Data/
.
Вы можете использовать данные, полученные из любых источников, включая коннекторы FinamPy, AlorPy или TinkoffPy. Папка Tinkoff
в пути data-connector/Data/Tinkoff/
используется для примера, вы можете создавать любую удобную для вас структуру.
Главное — убедиться, что:
- В
main.py
переменнаяDATA_DIR
указывает на верную папку. - Формат ваших данных соответствует загрузчику
utils/custom_csv.py
. По умолчанию он настроен на текстовые файлы с разделителем-табуляцией и форматом датыДД.ММ.ГГГГ ЧЧ:ММ
. При необходимости вы легко можете его адаптировать.
Откройте файл main.py
и настройте "Главную панель управления":
# 1. ВЫБЕРИТЕ РЕЖИМ: 'BACKTEST' или 'OPTIMIZATION'
MODE = 'BACKTEST'
# 2. ВЫБЕРИТЕ СТРАТЕГИЮ из загруженных
STRATEGY_TO_RUN = 'SmaCrossStrategy'
# 3. НАСТРОЙКИ ПЕРИОДА ТЕСТИРОВАНИЯ
FROM_DATE = datetime.datetime(2018, 1, 1)
TO_DATE = datetime.datetime(2025, 8, 12)
После настройки просто запустите скрипт:
python main.py
- Создайте новый Python-файл в папке
strategies
(например,my_super_strategy.py
). - Внутри файла создайте класс, унаследованный от
BaseStrategy
. - Определите обязательные атрибуты:
tickers
,start_cash
,commission
и параметры для оптимизацииopt_params
. - Реализуйте основную торговую логику в методе
next()
.
Система автоматически обнаружит и загрузит вашу новую стратегию при следующем запуске.
Все результаты сохраняются в папку reports
.
-
Для бэктеста создается текстовый отчет с полной статистикой и отдельные
.png
файлы с графиками для каждого тикера.Пример отчета:
--- ОТЧЕТ ПО БЭКТЕСТУ СТРАТЕГИИ: SmaCrossStrategy --- Бумаги в тесте: ['SBER', 'VTBR', 'GAZP', 'LKOH', 'NVTK', 'YDEX', 'T'] Параметры: {'fast_ma': 20, 'slow_ma': 50, ...} Период тестирования: с 01.01.2018 по 12.08.2025 --- РЕЗУЛЬТАТЫ --- Итоговая прибыль/убыток: 252 713.12 [50.54%] Доходность (годовых): 5.44% Результат 'Купил и держал': 205 648.56 [41.13%] Максимальная просадка: 67 124.98 [13.42%] Всего сделок: 128 Процент прибыльных сделок: 41.41% (53 из 128) Фактор прибыли: 2.13 Коэффициент Сортино: 1.08 --------------------------------------------------
-
Для оптимизации создается текстовый отчет со всеми комбинациями параметров и тепловая карта (
.png
), на которой цветом показана эффективность (профит-фактор) каждой комбинации.
Этот шаблон — лишь основа. Чтобы он стал по-настоящему удобным и «народным», ему нужна помощь сообщества.
Что можно сделать:
- Улучшить визуализацию: стандартный
cerebro.plot()
плохо справляется с портфелем из десятка акций. Вmain.py
уже есть наработки по сохранению графиков в отдельные файлы, но это решение можно усовершенствовать. - Добавить новые метрики: предложите новые анализаторы или улучшите существующие отчеты.
- Предложить свои идеи: возможно, вы видите архитектуру иначе? Знаете, как сделать управление стратегиями еще удобнее? Создайте
Issue
и давайте обсудим! - Добавить примеры стратегий: поделитесь своими наработками с сообществом.
- Интеграция с брокерами: помогите с реализацией готовых модулей для подключения к API российских брокеров.
Если вы разделяете идею создания «народного Backtrader» — подключайтесь! Любые улучшения, замечания и Pull Request'ы приветствуются.
Автор: Михаил Шардин
🔗 Моя онлайн-визитка
📢 Telegram «Умный Дом Инвестора»