Блог им. empenoso
В мире алгоритмической торговли доминируют крупные фонды с их колоссальными ресурсами. Но что, если мы, частные инвесторы и разработчики, можем создать собственный мощный и доступный инструмент? Что, если больше не придётся зависеть от проприетарных платформ или писать с нуля сложную инфраструктуру для тестирования каждой новой идеи?
Сегодня у нас есть Python и такие мощные библиотеки, как Backtrader. Однако голый фреймворк — это лишь половина дела. Чтобы он стал по‑настоящему народным инструментом, ему нужна удобная обвязка: готовая структура проекта, автоматический импорт стратегий, наглядные отчёты, тепловые карты для оптимизации и бесшовное подключение к API брокеров — не только российских, но надо начать с Мосбиржи.
Мы стремимся сделать инструмент таким же удобным, как TradingView. Простота в использовании и доступность всех функций для пользователей без глубокой технической экспертизы — мне кажется вот идеал. Чтобы каждый, кто заинтересован в алгоритмической торговле, мог без усилий внедрить свою стратегию, протестировать её и получить результаты, не проводя часы и дни за настройкой системы.
Эта статья — не просто описание проекта, а призыв к действию. Я предлагаю объединить усилия и создать открытый стандарт для алготрейдинга на базе open source Backtrader, заточенный под реалии российского рынка.
https://github.com/empenoso/backtrader-quickstart-templateГлавная задача — построить открытый шаблон, который позволит частному инвестору, даже с небольшими навыками в программировании, сосредоточиться на главном — на разработке и тестировании стратегий, а не на борьбе с инфраструктурой. Мы создаём систему для марафона, а не для спринта: для классических стратегий с горизонтом в часы и дни, которая будет работать автономно и не требовать ежедневного внимания.
Выбор в пользу Backtrader был сделан не случайно. Прежде чем остановиться на этой библиотеке изучил несколько популярных open‑source решений, каждое из которых имеет свои сильные стороны, но не соответствовало главной цели — создать простой и гибкий инструмент, который будет удобен для частных инвесторов на Московской бирже.
С одной стороны, существуют комплексные платформы, такие как OsEngine. Это мощное решение на C#, предлагающее готовый функционал «из коробки»: от графического интерфейса до подключения к различным брокерам. OsEngine представляет собой готовую экосистему, в которую интегрируются торговые роботы. Для тех, кто ищет законченный продукт и готов работать в его рамках, это отличный выбор. Однако для нашей цели — создания гибкого и легко кастомизируемого шаблона на Python — его архитектура оказалась менее подходящей, так как мы стремимся к максимальной простоте и модульности, свойственной конструкторам.
На другом полюсе — узкоспециализированные инструменты. Freqtrade — необычайно популярен в мире криптотрейдинга. Он обладает огромным сообществом и богатым функционалом, но весь этот функционал «заточен» под цифровые активы. Для фондового рынка и тем более для Московской биржи потребуются серьёзные доработки.
Есть и проекты, выросшие из легендарного Zipline от Quantopian, например, Ziplime. Сам движок Zipline по‑прежнему силён в бэктестинге, но после закрытия Quantopian все стало сложно.
Отдельно стоит упомянуть Nautilus Trader — это современный высокопроизводительный фреймворк, который часто называют «тяжёлой артиллерией» для HFT. Он невероятно быстр, поддерживает асинхронную архитектуру и ориентирован на работу с миллионами тиков в секунду. Но для большинства частных инвесторов такой уровень скорее избыточен. Для долгосрочных стратегий с горизонтом в часы и дни он выглядит как перегруженный инструмент.
На фоне этих решений Backtrader выделяется своей философией. Это не готовая платформа с жёсткими рамками, а библиотека‑конструктор. Она даёт базовые «кубики», из которых можно собрать именно ту систему, которая нужна.
У неё есть три решающих преимущества: большое сообщество, качественная документация (и даже на русском, неофициальная, сделанная одним из пользователей) и проверенные интеграции с API российских брокеров.
Именно поэтому Backtrader кажется идеальной основой для «народного» шаблона: лёгкого, гибкого и понятного даже тем, кто делает первые шаги в алгоритмической торговле.
Open sourceВсе компоненты нашего фреймворка — библиотека Backtrader и предлагаемый шаблон — распространяются под лицензией Open Source. Это означает не просто бесплатный доступ к коду, но и возможность совместно развивать и улучшать проект.
В мире open source качественные инструменты создаются коллективными усилиями и становятся доступны каждому, устраняя барьеры проприетарных решений. Наш «народный шаблон Backtrader» — часть движения, которое делает мощные инструменты алгоритмической торговли доступными без значительных финансовых затрат.
В основе шаблона лежат три принципа: модульность, наглядность результатов и готовность к реальной торговле. Давайте заглянем «под капот» и посмотрим, как это устроено.
1. Максимальная модульность: одна стратегия — один файл.
Избавляемся от сложной структуры и запутанных зависимостей. Каждая ваша торговая идея — это отдельный Python‑файл в папке strategies. Внутри этого файла вы описываете всё, что касается именно этой стратегии: логику входа и выхода, список тикеров для теста, размер комиссии брокера, начальный капитал и, что самое важное, параметры для будущей оптимизации. Больше не нужно искать настройки по всему проекту. Система автоматически подхватывает все стратегии из этой папки, а в главном файле вы просто указываете, какую из них хотите запустить сегодня.

2. Два режима работы: «тест» и «оптимизация».
В основном файле проекта заложен простой переключатель. Хотите быстро проверить гипотезу на исторических данных? Включаете режим тестирования. Нужно подобрать лучшие параметры для вашей стратегии? Переключаетесь в режим оптимизации. Это позволяет сосредоточиться на задаче, не меняя код самой стратегии. Данные для тестов хранятся в отдельной папке data, а в настройках запуска вы лишь указываете нужный временной интервал, например, с 01.01.2022 по 31.12.2024.

3. Информативные отчёты и визуализация.
Поэтому по итогам каждого бэктеста фреймворк генерирует подробный текстовый отчёт в папку reports. В нём собраны ключевые метрики: чистая прибыль, годовая доходность в сравнении с «купил и держи», максимальная просадка, профит-фактор и коэффициент Сортино.
— ОТЧЕТ ПО БЭКТЕСТУ СТРАТЕГИИ: SmaCrossStrategy ---
Бумаги в тесте: ['SBER', 'VTBR', 'GAZP', 'LKOH', 'NVTK', 'YDEX', 'T']
Параметры: {'fast_ma': 20, 'slow_ma': 50, 'alloc_percent_per_ticker': 0.9, 'min_size': 1, 'rebal_weekday': None, 'log_on_connect': True}
Период тестирования: с 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
--------------------------------------------------
Для режима оптимизации сознательно ограничились двумя параметрами. Почему? Это позволяет визуализировать результаты в виде тепловой карты. Глядя на неё, вы сразу видите, какие комбинации параметров дают наибольший профит‑фактор, и можете выявить зоны переоптимизации, где стратегия становится неустойчивой.

4. Бесшовный переход к автоторговле.
Тестирование — это лишь первый шаг. Шаблон изначально спроектирован с возможностью лёгкого подключения к реальному рынку. В него заложена основа для интеграции с API.
В России есть несколько брокеров с открытыми API:
Брокер |
Документация |
|---|---|
Тинькофф (T-Invest) |
|
Алор |
|
Финам |
Для Backtrader есть интеграции с API российских брокеров.
Когда ваша стратегия покажет стабильные результаты на истории, вы сможете активировать режим реальной торговли, просто изменив одну настройку. Это превращает наш шаблон из простой «песочницы» в полноценный боевой инструмент.
Я сделал первую рабочую версию шаблона, которую можно найти на GitHub. Это основа, скелет будущего шаблона, но чтобы он оброс «мясом» и стал по‑настоящему удобным и «народным», ему нужна помощь сообщества. И здесь я обращаюсь к вам.
Одна из первых трудностей, с которой я столкнулся, — это визуализация результатов. Стандартная функция cerebro.plot() отлично справляется с одной ценной бумагой, но при тестировании портфеля из десятка акций график превращается в нечитаемую кашу, где сигналы и сделки сливаются в сплошную линию. Приблизить и рассмотреть детали невозможно. В идеале, нужно научить систему сохранять графики для каждого тикера в отдельный файл с высоким разрешением, чтобы можно было спокойно и детально изучать каждую сделку.
Мне удалось сохранить график в таком читаемом виде только за счёт махинаций с поворотом экрана на 90° через программу управления монитором. Смартлаб сжал этот файл, вот оригинал.

Но технические задачи — это лишь часть дела.Я буду невероятно благодарен за любую конструктивную критику. Возможно, вы видите архитектуру иначе? Знаете, как сделать отчёты ещё информативнее или добавить новые метрики? Можете предложить более изящный способ управления стратегиями? Любые идеи приветствуются.
Да, я знаю о существовании такого популярного комплекса, как QUIK. Я уважаю его возможности, но сознательно выбрал путь Python. Гибкость, открытость и возможность запустить торгового робота даже на крошечном Raspberry Pi, который будет автономно работать месяцами — вот те преимущества, которые, на мой взгляд, перевешивают.
Если вы разделяете идею создания «народного Backtrader» — подключайтесь. Даже небольшие улучшения или просто замечания помогут довести этот проект до уровня, когда частные инвесторы смогут использовать его так же легко, как крупные игроки используют свои проприетарные системы.
ЗаключениеГлавная цель этого проекта — создать не просто очередную библиотеку или набор скриптов, а универсальный инструмент для алгоритмической торговли, который будет доступен каждому. Мы строим открытый шаблон на Python, чтобы частные инвесторы могли сосредоточиться на разработке стратегий и анализе идей, а не на бесконечной настройке инфраструктуры. Народный Backtrader — это шаг к формированию сообщества, где знания и опыт становятся общим ресурсом. Вместе мы можем превратить этот проект в удобный, гибкий и по‑настоящему народный стандарт для алгоритмической торговли на Московской бирже.
Автор: Михаил Шардин
🔗 Моя онлайн-визитка
📢 Telegram «Умный Дом Инвестора»
26 августа 2025
приводятся данные, что в прогнозировании биржевых цен нейросети работают хуже статистических методов. Причем более поздние и сложные алгортимы хуже самой простой MLP — многослойного персептрона.
Мои опыты на Python
sourestdeeds.github.io/pdf/Deep Learning with Python.pdf
«Deep Learning with Python 2Ed» Fransois Chollet
с этим вполне согласуются.
Обучение нейросети по истории биржевых цен не дало полезных результатов.
А вот прогнозирование температуры по часовой истории погоды немецкого города Ены (Jena) оказалось лучше базового прогноза на 10%.
Базовый прогноз состоит в том, что в 75% случаев, температура в конце часа отличается от начала не более 0.1 градуса.
Тема управления набором систем даже не затронута.
Это тул для гиков,, коих единицы. Надо чётче рисовать портрет своего пользователя.
Обозначьте пожалуйста свою позицию, а то мы вроде как препираемся, а о чём мы спорим-то?
PS. До меня дошло. Вы один из авторов этой библиотеки: github.com/finsight/QUIKSharp/blob/master/AUTHORS.md
MIT — максимально либеральная лицензия: «делайте что хотите, только сохраните копирайт и отказ от гарантий».
GPL-3.0 — «копилефт»: если распространяешь производную работу, то обязан распространять её также под GPL-3.0.
Но мой шаблон это независимый проект, который лишь вызывает Backtrader как библиотеку.
на мой взгляд, не совсем корректные параметры
cerebro = bt.Cerebro( stdstats=False, optreturn=False if MODE == 'OPTIMIZATION' else True, runonce=False, # КЛЮЧЕВОЙ ПАРАМЕТР: отключаем синхронизацию данных preload=False, # НЕ предзагружаем все данные в память oldsync=False, # НЕ используем старый механизм синхронизации exactbars=-1 # ДОБАВИТЬ: позволяет разную длину данных )Работать будет, очень медленно, особенно тестирование.Документацию читайте и проверяйте!
Добрый день Михаил.
А Walk-Forward тестирование реализовано?
Дело в том что на примере sma Walk-Forward покажет что лучшие на прошлом периоде почти всегда хуже 0 на следующем.
есть бектетсы.
Этим страдает кстати и мета трейдер — пере оптимизируя параметры.
Он есть в OSA — вы можете взять ту-же sma стратегию там и пробекстесить WF методом.
Вообще без WF оптимизация не имеет практического смысла 99%
от этого метода у них тускнеет взгляд и пропадает румянец на щеках... короче… валит микробов наповал))
оно и понятно… метод окунает их головой в навоз, лишая иллюзий, подписчиков и денег… кому ж такое понравится?)))
и некоторые! боты заказчиков проходят.
но тут — «ты сам обманываться рад» — уходит много времени объяснить что такое переоптимизация.
и что чем больше индикаторов тем хуже.
и что должна быть какая-то неэффективность рыночная на входе в разработку.
и что это ошибка выжившего — на примере дельфинов.
так что да.
от переоптимизации спасает.
и от иллюзий.
но зато дает достаточно качественную картину.
кстати те кто пишет роботов для клиентов и не используют WF зарабатывают больше на разработке.
это вопрос совести против денег.
но конкретно этот проект — думается, из серии «больному не поможет, здоровому не нужно»
Михаил Шардин, очень хороший задел.
но в какой-то момент понимаешь что нужна надежность — типизация прибитая в компилятор.
и переходишь на rust \ c# .
а если еще и скорость то rust.
кстати у вас используется тип float в данных — это видно по cvs файлам.
а нужен decimal.
или ЦЕЛОЧИСЛЕННЫЙ int64\int128
docs.python.org/3/library/decimal.html
потому что с ошибками округления бороться это трешь.
и брокер на такую цену с ошибкой округления вернет ОШИБКУ.
особенно плохо если это будет стоп… он же в долях от цены берется.
пока бектесты это мелочь.
а потом вы говорите в боевой переводить — а там он эти сделки будет откидывать брокер.
с неправильной ценой.
Juri, избавляет. цены в decimal.
и лоты тоже — в своем потомке от децимал, так как торгуют лотами.
и округления цен и лотов везде ловятся в момент конвертации в децимал.
а не пропускаются.
часто вижу код который в реальности брокер \ биржа отбросит заявку так как округление не то.
причем не все заявки а некоторые — где float сработало неожиданно оставив 0.000000002 к лоту) или к цене.
можно конечно при генерации заявки все это делать и проще, но тогда план-факт по лотам\ценам не совпадает.
Это шаблон, который десятилетиями вбивают в голову трейдерам разнообразные инфоцыгане. На самом деле он глубоко ошибочен. Попробуйте так сделать самолет. Он не полетит.Сначала надо изучить аэродинамику, и понять, почему самолеты вообще летают. После этого Вы сможете сделать самолет, который хоть и с трудом, но оторвется от земли. После этого можно его тестировать и оптимизировать.
Теоретическая база трейдинга ничуть не меньше аэродинамики. И требует определенных усилий для своего усвоения. Существенная разница в том, что самолет, сделанный без знания основ точно не полетит. А стратегия разработанная методом случайного тыка может заработать. И даже много заработать. Случайно. Нассим Талеб даже книжку про это написал. «Одураченные случайностью» называется.
или вот на квадриках что-то поднимающее человека.
ГОРАДО ПРОЩЕ чем рабочую стратегию.
и ДЕШЕВЛЕ.
Вот пройти потом лицензию с уже летающим прототипом — да это много бумажной волокиты.
Библиотек которые рисуют свечные графики под Python сейчас много, выбираешь и делаешь.
Там работы всего то на 2-4недели !
Вот умеете Вы все усложнять...
Получаешь данные (realtime), делаешь инсерт в скуль и имеешь картинку (с масштабированием, зумом и т.п.) в браузере:
А потом 2-4 недели попиваешь пивко… ;)
PS: Но я свечи ненавижу. Только тики. Поэтому вот так:
Зум готовой статичной-картинки, он нам им даром не нужон.
Нужно чтобы отдельный участок можно было отмаштабировать и картинку подвигать, типа как в TradingView на графиках.
А это можете оставить себе.
Индикаторов нет, они исключительно для лохов.
Это реал-тайм график. Период обновления указан в верхнем правом углу — 1с. Можно и 0,1с поставить, но мне это не нужно. А сделок нет специально, а то слюной подавитесь… :)
Synthetic, а сделки где? есть возможность из коробки показать сделки.
не только голый график.
и индикаторы для лохов — ну такое себе.
а доверительный интервал 5% это тоже для лохов к примеру?
а линии показывающие страйки опционов… там где опцины выходят в деньги\уходят из денег — это тоже для лохов?
вся математика для дохов?
и опционная доска для лохов?
не обязательно индикаторы это бред вида macd в луне)
Я стремлюсь к стабильной доходности 10% в день. Поверьте, когда Вы этого достигнете, все эти графики Вам нах не будут нужны.
10%в день * 250 торговых дней в году = 2500% годовых.
Пусть будет начальный капитал 10 тысяч.
1. Через 5 дней: 10 000 × 1.1⁵ ≈ 10 000 × 1.61 = 16 100 руб.
2. Через 10 дней: 10 000 × 1.1¹⁰ ≈ 10 000 × 2.59 = 25 900 руб.
3. Через 20 дней: 10 000 × 1.1²⁰ ≈ 10 000 × 6.73 = 67 300 руб.
4. Через 30 дней (1.5 месяца): 10 000 × 1.1³⁰ ≈ 10 000 × 17.45 = 174 500 руб.
5. Через 44 дня: 10 000 × 1.1⁴⁴ ≈ 10 000 × 80 = 800 000 руб. Ваши 10 тысяч превращаются в 800 тысяч менее чем за 2 месяца.
6. Через 60 дней: 10 000 × 1.1⁶⁰ ≈ 10 000 × 304 = 3 040 000 руб.
7. Через 100 дней: 10 000 × 1.1¹⁰⁰ ≈ 10 000 × 13 781 = 137 810 000 руб. (137 миллионов рублей).
Продолжать?
Здесь много говорят о том, что плечи убивают депозит. Я вот так не считаю. Разумные плечи (а мосбиржа других и не дает) весьма полезны.
Гораздо вреднее пресловутое реинвестирование. Чудес не бывает. На бирже высокая прибыль равноценна высокому риску. Поэтому прибыль надо выводить и реинвестировать туда, где это будет оптимально, обязательно предварительно хорошо подумав.
А помечтать конечно не вредно…
спасибо!
Питон питоном, но я бы предпочел расчетную часть писать фундаментально, на Java.
Делал так: на lua в Quik только маленький модуль двусторонней связи, который сразу перебрасывает данные в endpoint, а там уже Java во всей красе обрабатывает и укладывает данные а postgres, и потом работает с ними. И обратно команды на сделки кидает в Lua. В теории туда же можно натравить питон для анализа и каких то решений. Но я питон не люблю.
Визуально морда — на react, тащит данные через то же джавовкое бэк-приложение по rest.
Но потом что-то всё забросил, скучно стало. Надо бы поднять архив, ещё покопаться.
Quik был сделан в те времена, когда ядро биржи работало на MS SQL SERVER. Брокерский сервер естественно тоже работал на MS SQL SERVER. Протокол квиковский был рассчитан на обмен между SQL серверами. Поэтому терминал Quik Весь пропитан идеологией SQL. Поэтому есть возможность, по крайней мере теоретическая, используя локальный MS SQL сервер, получить у себя что-то вроде локального дубля брокерского сервера (ессно read only).
Это можно сделать вообще без квика с использованием «Модуля экспорта биржевой информации.» Но можно попытаться и с квиком, который заносит в SQL всю необходимую информацию по odbc. При этом обеспечивая синхронизацию с брокерским сервером, обрабатывая разрывы связи и т.п. Читать из SQL может кто и что и как угодно. А заявки можно посылать и через dll, если конечно у Вас не ХФТ. С MS SQL сервером работает очень стабильно. Включил и забыл. Пробовал с другими — не работает вообще...
Все это к тому, что можно не тратить особо усилия на добывание данных из Quik. Но это для тех. кто с SQL на ты.
Synthetic, вроде как на ms sql они начали строить срочный рынок )
а другие сектора были на других движках, более модных в нулевых
Ну, для меня в то время других рынков, кроме срочного, как бы и не существовало.Скучные они были какие-то.
прочитал что это такое
я сейчас веб управление и мониторинг делал. Вот 1 в 1 вайбкодинг )
Андрей К, ) Ну это по сути ярлык для того, чтобы разные люди понимали, что речь о вот этом. На мой взгляд не идеально описывает явление.
Ну и я тут вкладываю использование специальных IDE по типу Cursor. Чтобы не просто ChatGPT по запросу код писал, а чтоб система могла за рычажки дергать, сама смотреть ошибки, запускать команды и т.д.
важно.
так-же важно видеть где именно делает бот сделки, и где ты\я ожидал, просто на этапе теста работы.
тоже полезно — тест бота.
хотя можно как-то прикрутить автотесты — но я не делал так.
наверно можно, но не делал.
сравнивать фильтр сделок.
А насчёт визуализации можно посмотреть в строну plotly: pypi.org/project/backtrader-plotly/ Библиотека позволяет строить интерактивные графики, что можно попробовать использовать для анализа стратегий.