Skip to main content

backtrader-quik

backtrader-quik — устанавливаемая Python-библиотека для получения данных и торговли из стратегий Backtrader через терминал QUIK. QuikPy и Lua-коннектор входят в репозиторий: отдельное копирование Python-модулей QuikPy больше не требуется.

Текущая версия: 1.0.0.

Проект является функциональной заменой удалённой библиотеки Игоря Чечета BackTraderQuik и переименован в backtrader_quik, чтобы не смешиваться с ней.

Библиотека прошла локальные regression-тесты и полный тестовый цикл заявок на QUIK Junior 11.4.1.3 для QJSIM.GAZP и SPBFUT.RIU6. Это не заменяет проверку у конкретного брокера и не является допуском к торговле реальными деньгами.

Возможности

  • свечная история и live-бары через QKData;
  • несколько DataFeed и несколько тайм-фреймов в одном Cerebro;
  • фондовые и срочные счета с явным выбором account_id;
  • Market, Limit, Stop, StopLimit, отмена, OCO и bracket orders;
  • позиции, денежные лимиты, стоимость портфеля и комиссии;
  • callbacks QUIK с очередью между сетевым потоком и потоком Backtrader;
  • fan-out одной подписки на несколько DataFeed;
  • reconnect request/callback sockets;
  • polling fallback для свечей и Market-сделок при пропущенном callback;
  • корректное завершение и повторный запуск процесса;
  • встроенный Lua-коннектор для QUIK/QUIK Junior.

Что изменилось

В 1.0.0 — первый стабильный релиз и публикация на PyPI. Проект переименован в backtrader-quik (импорт backtrader_quik), чтобы исключить путаницу с удалённой библиотекой BackTraderQuik Игоря Чечета. Функциональных изменений кода относительно проверенной на QUIK Junior сборки нет.

Ранее:

  • callback-сокет запускается до первоначальных запросов к QUIK;
  • Lua-коннектор переподключается и корректно очищает DataSource;
  • добавлен резервный опрос свечей, если SetUpdateCallback не работает;
  • Market-сделка восстанавливается по точному order_num, если QUIK Junior не прислал OnTrade; дубликаты по-прежнему отсекаются;
  • неисполненная неактивная Market-заявка согласуется как Canceled;
  • срочная сделка принимается, когда QUIK Junior записал торговый счёт в client_code;
  • фондовая Stop-заявка получает положительную защитную цену вместо PRICE=0;
  • финальные cash/value кэшируются до закрытия QuikPy;
  • добавлены регрессионные проверки этих сценариев.

Подробности: CHANGELOG.md, VALIDATION.md и результаты QUIK Junior.

Требования

  • Windows 10/11;
  • Python 3.10;
  • Backtrader 1.9.78.123 (установится автоматически);
  • QUIK или QUIK Junior с разрешённым запуском Lua-скриптов;
  • свободные локальные порты 34130 и 34131.

Установка

Из PyPI:

python -m pip install backtrader-quik

Из локального клона:

py -m venv .venv
.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -e .

Из собранного wheel:

python -m pip install .\dist\backtrader_quik-1.0.0-py3-none-any.whl

Скопируйте содержимое QUIK/lua и QUIK/socket в каталог, из которого QUIK может запускать QuikSharp.lua, затем запустите Lua-скрипт в терминале. Пошаговая инструкция находится в docs/INSTALL_QUIK.md.

Быстрый старт

Сначала получите список счетов без отправки заявок:

python .\Examples\list_accounts.py

Минимальная схема подключения:

import backtrader as bt
from backtrader_quik import QKStore

store = QKStore()
broker = store.getbroker(account_id=0)

cerebro = bt.Cerebro(stdstats=False, quicknotify=True)
cerebro.setbroker(broker)

fast = store.getdata(
    dataname="QJSIM.GAZP",
    timeframe=bt.TimeFrame.Minutes,
    compression=1,
    live_bars=True,
)
cerebro.adddata(fast, name="GAZP-1m")
cerebro.resampledata(fast, timeframe=bt.TimeFrame.Minutes,
                     compression=5, name="GAZP-5m")

cerebro.addstrategy(MyStrategy)
cerebro.run(preload=False, runonce=False)

Один QKBroker обслуживает один счёт. Для другого счёта или независимого робота используйте отдельный процесс и отдельный комплект портов.

Размер заявки и цены

  • Для фондового инструмента size задаётся в бумагах и должен быть кратен размеру лота. Библиотека не округляет неверный размер молча.
  • Для фьючерса size задаётся в контрактах.
  • Market-заявка на срочном рынке QUIK реализуется с защитной ценой. Параметр slippage_steps задаёт ширину в шагах цены; значение по умолчанию — 10. В тестовом QUIK Junior для RIU6 использовалось 100 шагов из-за особенностей симулятора. Подбирать это значение нужно под инструмент и риск.
broker = store.getbroker(account_id=2, slippage_steps=100)

Безопасность эксплуатации

  1. Сначала запускайте только данные и сверяйте статусы LIVE/DELAYED.
  2. Затем тестируйте единичные заявки в QUIK Junior.
  3. Перед каждым запуском сверяйте счёт, класс, код контракта, срок экспирации, позиции и активные заявки.
  4. Не запускайте два процесса на одном комплекте портов.
  5. После аварии сверяйте фактическое состояние в QUIK; локальный объект Order не является источником истины для уже принятой биржей заявки.

Разработка и проверка

python -m pip install -r requirements-dev.txt
python -m pytest -q
python -m build

CI проверяет Windows/Linux и Python 3.10. Реальная интеграционная проверка QUIK выполняется вручную: GitHub-hosted runner не имеет терминала и счёта.

Правила участия: CONTRIBUTING.md. Сообщение об уязвимости: SECURITY.md.

Происхождение и лицензирование

Проект развивает идеи и код исторического BackTraderQuik Игоря Чечета (репозиторий удалён автором) и QuikPy, а также практический опыт BacktraderQuikJunior. Сохранены указания на Игоря Чечета и проект «Финансовая Лаборатория».

Унаследованный код Игоря Чечета распространяется на его условиях: бесплатно, с обязательной атрибуцией автору и проекту «Финансовая Лаборатория», и не переводится под MIT/Apache/BSD. Новый вклад этого репозитория (новый код, тесты, документация) распространяется под лицензией MIT. Точные условия и происхождение файлов: LICENSE.md и THIRD_PARTY_NOTICES.md.

Отказ от гарантий

Программное обеспечение предоставляется для разработки и тестирования. Автор и участники не гарантируют исполнение заявок, доступность соединения, совместимость с конкретной версией QUIK или пригодность для торговли реальными средствами.

Release files for backtrader-quik 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for backtrader-quik 1.0.0
File Size Uploaded
backtrader_quik-1.0.0.tar.gz 116.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for backtrader-quik 1.0.0
File Interpreter ABI Platform
backtrader_quik-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 215.0 kB

Release files / backtrader_quik-1.0.0.tar.gz

Download URL backtrader_quik-1.0.0.tar.gz
Size 116.1 kB
Tags Source
SHA-256 checksum
How to use checksums
1c9d1b3a0c982ef3083ad1316c400790ceb46cd4127f79571901a27c0a5d2797
BLAKE2b-256 checksum
How to use checksums
1151c731b7022fa750f4503c4af8b171cbdb834b272369bb859a644abdd46086
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.13

Release files / backtrader_quik-1.0.0-py3-none-any.whl

Download URL backtrader_quik-1.0.0-py3-none-any.whl
Size 98.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
156c129062c3ab2088f0a0af1cf88668bf9149a39b8e0194e0cda8c9ac009bd7
BLAKE2b-256 checksum
How to use checksums
eef8d2efca094d157701c0140d0be1bb0af69c18399b5a9481586d6664fef83e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.13

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page