Красаучег
Красаучег личный блог
23 октября 2025, 21:06

QUIK выходит в Python: Новой библиотеки QUIK-python для алготрейдеров

Для алготрейдеров, работающаих с QUIK, связка «QUIK + Lua» всегда была одновременно и благословением, и проклятием. Мощно — но на малопопулярном в трейдинге языке.

Решения вроде QUIKSharp (.NET) стали шагом к более распространённым экосистемам, но что насчёт многомиллионного сообщества Python?

Новый проект QUIK-python портирует нативный QUIK Lua API прямо в Python — с сохранением всей гибкости оригинала и удобством современного async-кода.

Ключевые особенности и преимущества

-  Полностью асинхронный клиент — коллбеки данных из стаканов, сделок и свечей не блокируют основную логику.

-  Прямой доступ к API QUIK — вызывайте функции Lua напрямую из Python-кода.

-  Событийная модель — подписывайтесь на стаканы, свечи и сделки, получая события прямо в Python.

— 🐍 Нативный Python-код — всё, от коллбеков до торговой логики, пишется на чистом Python с доступом к его экосистеме (NumPy, Pandas, asyncio и др.).

-  Работа с объектами — вместо Lua-таблиц вы получаете удобные Python-объекты с автодополнением и проверкой типов.

-  Современная разработка — используйте IDE (VSCode, PyCharm) с отладкой, подсветкой и автокомплитом.

 

Технический стек

— asyncio  — управление событиями
Асинхронные сокеты — обмен с QUIK Lua-сервером
—  await -интерфейс для всех операций

Кому будет полезна библиотека?

Алготрейдерам на Python, которым нужен прямой доступ к QUIK без костылей.
Тем, кто переходит с Lua на Python и хочет сделать это максимально безболезненно.

 

 

Пример: получение свечных данных

 

<code>import logging
import asyncio
from quik_python import Quik, LuaException
from quik_python.data_structures import CandleInterval, Candle, InfoParams

CLASS_CODE = "TQBR"   
# CLASS_CODE = "QJSIM"  ## for Demo Quik Junior Connection


async def main():
    """
    Пример использования QuikPython API
    """
    
    # Создаем подключение к QUIK
    # async with Quik(host="192.168.10.128") as quik:
    async with Quik(host="localhost") as quik:
        try:
            await quik.initialize()
            # Работа с QUIK
        except Exception as e:
            print(f"Ошибка подключения: {e}")
            return

        try:
            # Проверяем подключение
            if not quik.is_service_alive():
                print("Не удалось подключиться к QUIK")
                return

            if not await quik.service.is_connected():
                print("Quik не подключен к торгам")


            print("Подключение к QUIK успешно!")

            await test_candle(quik=quik)



        except LuaException as e:
            print(f"QUIK Lua error: {e}")
        except Exception as e:
            print(f"Error: {e}")



### test candle
async def test_candle(quik:Quik):
    received_candles = []
    
    def on_new_candle(candle: Candle):
        """Callback for new candle events"""
        if (candle.sec_code == "SBER" and candle.interval == CandleInterval.M1):
            print(f"New candle - Sec:{candle.sec_code}, Open:{candle.open}, "
                  f"Close:{candle.close}, Volume:{candle.volume}")
            received_candles.append(candle)

    try:
        # Проверяем подключение
        if not await quik.service.is_connected():
            print("QUIK не подключен к торгам")
            return
        
        print("QUIK service is connected")

        v = await quik.candles.get_last_candles(CLASS_CODE, "SBER", CandleInterval.M1, 10)
        print(f"Last candles: {v}")


        # Subscribe to new candle events
        quik.candles.add_new_candle_handler(on_new_candle)
        
        # Check if already subscribed and unsubscribe if needed
        is_subscribed = await quik.candles.is_subscribed(CLASS_CODE, "SBER", CandleInterval.M1)
        print(f"Is subscribed: {is_subscribed}")
        if is_subscribed:
            await quik.candles.unsubscribe(CLASS_CODE, "SBER", CandleInterval.M1)

        # Subscribe to minute candles
        await quik.candles.subscribe(CLASS_CODE, "SBER", CandleInterval.M1)

        # Verify subscribed
        is_subscribed = await quik.candles.is_subscribed(CLASS_CODE, "SBER", CandleInterval.M1)
        print(f"Is subscribed: {is_subscribed}")
        
        # Wait a bit for potential candles (but don't wait too long in tests)
        await asyncio.sleep(120) ## wait 180sec
        
        # Unsubscribe
        await quik.candles.unsubscribe(CLASS_CODE, "SBER", CandleInterval.M1)

        print(f"Received {len(received_candles)} candles during test")

    except Exception as e:
        print(f"Candle test error: {e}")


if __name__ == "__main__":
    # Настройка логирования
    logging.basicConfig(
        level=logging.DEBUG,  # Уровень логирования (DEBUG, INFO, WARNING, ERROR, CRITICAL)
        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',  # Формат сообщений
        datefmt='%Y-%m-%d %H:%M:%S'  # Формат времени
    )

    
    print("QuikPython API Example")
    print("===========================")
    

    try:
        asyncio.run(main())
    except KeyboardInterrupt:
        print("\nStopped by user")
    except Exception as e:
        print(f"Main example error: {e}")</code>

 

 

GUI-пример 
github.com/Alex-Shur/quik_python/tree/main/Examples/QuikPythonDemo
QUIK выходит в Python: Новой библиотеки QUIK-python для алготрейдеров

Репозиторий проекта: github.com/Alex-Shur/quik_python

31 Комментарий
  • myaucha
    23 октября 2025, 21:17
    Поздно, уже все написано и отлажено на C#. Не хватит сил все баги по-новому собирать и красиво их обрабатывать еще и в Питоне
    • Petr S
      23 октября 2025, 21:28
      myaucha,  да нет, вполне ребятам их QuikPy вон хватило. есть небольшие косячки (раздувание памяти при подписке на кучу свечей и отваливание при этом клиента) — но в принципе при некотором мониторинге  проблема не столь критична даже на массивных скриптах. А так — вполне юзабельно, а если автор туда присоединится — то может и быстрее пойдет работа
  • Petr S
    23 октября 2025, 21:22

    есть же QuikPy  — (https://github.com/cia76/QuikPy)  такая же обертка. может туда бы лучше присоединились бы?  глюков еще хватает и там, но в принципе процесс идет. А тут у вас совсем новый проект и полный дубль? 


     

    • Beach Bunny
      23 октября 2025, 21:48

      Petr S, нет пусть не присоединяется!

      QuikPy выглядит как студенческая поделка слепленая на скорую руку, к тому же с багами которые видно невооруженным глазом! 

      Ни в коем случае не присодиняйся! 
      Тем более там все сделано человеком которые торгует в основном одни облиги либо акции которые покупает раз в месяц. Это в слышал в одном из его инфоцыганских видео!

      • Petr S
        23 октября 2025, 21:58
        Beach Bunny, ну сдохнут оба проекта — поодиночке шансов на успех всегда меньше — вам этого надо? 
        • Beach Bunny
          23 октября 2025, 22:13
          Petr S, это СПАРТА! 
          Пусть выживет Сильнейший ! 
  • Александр Сережкин
    23 октября 2025, 21:51
    Норм, ачказаврам будет чем заняться
  • _xXx_
    23 октября 2025, 22:18
    а можно .dll самому из исходников собрать?
  • Salvinit
    23 октября 2025, 22:54
    Ппц, чтобы получить свечные данные столько кода, писать надо. Да ну на…
    • VladMih
      24 октября 2025, 00:20
      Salvinit, и у меня глаза на лоб полезли! )))
      Дак на эти свечи, вон пишет Красаучег, еще и подписка нужна…
      Может еще и платная? )))
    • whoami1
      24 октября 2025, 06:21
      Красаучег, и давно DLL стали статическими?
  • VалиБакS
    24 октября 2025, 07:38
    А не проще взять Питон и напрямую все написать без квика вообще? Данные все брать через апи брокера? Без квика вообще! Разве не проще это? Или брокер бесплатно не дает все то что в Квике транслируется?
      • Просто трейдер
        24 октября 2025, 16:27
        Красаучег, «QUIK самая распространенная торговая платформа, есть у всех брокеров» это в 2025 году уже не так. Самое распространенное — это мобильный терминал. А роботы делают уже через протоколы брокеров. И специально переводят счета под роботов, там где есть API доступ к брокеру. Вы опоздали со своим портом лет на 10 ) 
  • Константин Б
    24 октября 2025, 08:47
    Самая большая проблема QUIK это сам QUIK. Какая разница на чем автоматизировать торговлю, если данные ты должен получить с терминала, который может показывать почти минуту пустоту в таблицах после начала торгов. И ладно показывать, но и возвращать нули. 
    Даже QPILE был бы вполне себе хорош, если бы надежность терминала и получаемых с него данных была гарантирована… а так увы( как не изгаляйся, но из говна не сделать конфетку).

    Пример ситуации: буквально пару недель назад на двух параллельно торгуемых счетах случилось капец какое расхождение из-за того что один терминал по какой-то магической причине затупил и решил не отображать наличие позиций по RI. В итоге автоматическая система приведения к состоянию продолжала продавать позиции пока позволяли средства. В итоге минут через 15 мы сидели с позициями по одному счету +2 контракта и -8 по второму счету. И чем тут PYTON поможет?
    ИМХО единственный вариант это писать новый терминал пользуясь опытом лучших мировых вариантов. 
  • Prophetic
    24 октября 2025, 09:55
    Даже мое демо-приложение с QUIK# слизали  :)
    Но не суть. Не стоит приписывать своему проекту то, чего в нем нет. Это не добавит ему популярности. Обман рано или поздно вскроется и сыграет против Вас.
    Я вот про это:
    Прямой доступ к API QUIK
    API QUIK был и остается закрытым, и открывать его разработчики не планируют (их об этом много раз просили).
    • VалиБакS
      24 октября 2025, 10:10
      Prophetic, через Апи Ьрокера, например, Финам можно получить бесплатно все что транслирует квик, не знаете? 
      • Prophetic
        24 октября 2025, 10:28
        VалиБакS, На сколько я знаю, обычно прямые API от брокера — это платная (в том или ином виде) услуга, но вроде бы это несколько дешевле, чем прямой доступ к API ММВБ.
        Честно говоря, давно не интересовался данной темой, так что мог сильно отстать в своих познаниях.
        • ignat
          26 октября 2025, 08:20
          Prophetic, апи брокеров — это бесплатно, достаточно быстро и удобно.
      • ZonderBondar
        24 октября 2025, 12:26
        VалиБакS, апи финама пол года всего, там все через жопу и без тестового контура

    • Просто трейдер
      24 октября 2025, 16:29
      Prophetic, «Даже мое демо-приложение с QUIK# слизали  :)» Это же ИИ сделал порт. Он перевел всё 1 в 1. Мощь ИИ по-истине впечатляет.
      • Prophetic
        24 октября 2025, 17:14
        Просто трейдер, тогда понятно
        • Просто трейдер
          24 октября 2025, 19:19
          Красаучег, спасибо за предложение, я воздержусь ) Но мне интересно. Сам QUIKSharp уже как решение почти не используемое. Зачем вы сделали порт того, что и так предано забвению. Роботов сейчас делают через ИИ и напрямую с подключение к торгам. В том числе Python и вообще любые языки. Вы не анализировали тренд? ) Программисты как землекопы. Думать некогда, копать нужно. Потрачу X часов в пустую, получу лайки, намажу их на батон и подумаю, что «сделал» систему ))
          • Synthetic
            24 октября 2025, 20:38
            Просто трейдер, 
            Сам QUIKSharp уже как решение почти не используемое.

            Тут хочется сказать немного измененными словами Антона Павловича Чехова «Учиться нам нужно, учиться и учиться, а с глубокими программистскими обобщениями погодим: мы ещё не доросли до них и, по совести, ничего в них не понимаем». 
  • ZonderBondar
    24 октября 2025, 12:26
    красавчики, квикпай реально поделка. Успехов

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн