Блог им. AlexShurenberg

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

  • обсудить на форуме:
  • QUIK
| ★33
31 комментарий
Поздно, уже все написано и отлажено на C#. Не хватит сил все баги по-новому собирать и красиво их обрабатывать еще и в Питоне
avatar
myaucha,  да нет, вполне ребятам их QuikPy вон хватило. есть небольшие косячки (раздувание памяти при подписке на кучу свечей и отваливание при этом клиента) — но в принципе при некотором мониторинге  проблема не столь критична даже на массивных скриптах. А так — вполне юзабельно, а если автор туда присоединится — то может и быстрее пойдет работа
avatar

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


 

avatar

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

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

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

avatar
Beach Bunny, ну сдохнут оба проекта — поодиночке шансов на успех всегда меньше — вам этого надо? 
avatar
Petr S, это СПАРТА! 
Пусть выживет Сильнейший ! 
avatar
Норм, ачказаврам будет чем заняться
а можно .dll самому из исходников собрать?
avatar
_xXx_, те которые для Lua скриптов ?
Да можно, dll такие же как и для QUIKSharp 
Небольшие отличия есть только в Lua скриптах там где идет подписка на получение свечей и получение свечей.
avatar
Ппц, чтобы получить свечные данные столько кода, писать надо. Да ну на…
avatar
Salvinit, и у меня глаза на лоб полезли! )))
Дак на эти свечи, вон пишет Красаучег, еще и подписка нужна…
Может еще и платная? )))
avatar
Если вы используете у себя QUIKSharp, то ОБНОВИТЕ Lua скрипты на последнюю версию из их репозитария, они месяц назад исправили критическую ошибку связанную с подпиской на свечи!
github.com/finsight/QuikSharp
avatar
В Lua скрипты проекта QUIK Python добавлена статическая DLL для Lua 54_MT.
C QUIK 12.6.0.53 работает,  DLL из 54_MT не требует загрузки и установки дополнительных библиотек с сайта Microsoft
---
Lua DLL DLL 54_MT скомпилирована с использованием статических библиотек MS VC, флаг компиляции /MT
avatar
Красаучег, и давно DLL стали статическими?
avatar
whoami1, специально для Вас дополнил текст выше необходимой Вам информацией! 
avatar
А не проще взять Питон и напрямую все написать без квика вообще? Данные все брать через апи брокера? Без квика вообще! Разве не проще это? Или брокер бесплатно не дает все то что в Квике транслируется?
avatar
VалиБакS, вам никто не запрещает это делать. 
QUIK самая распространенная торговая платформа, есть у всех брокеров
avatar
Красаучег, «QUIK самая распространенная торговая платформа, есть у всех брокеров» это в 2025 году уже не так. Самое распространенное — это мобильный терминал. А роботы делают уже через протоколы брокеров. И специально переводят счета под роботов, там где есть API доступ к брокеру. Вы опоздали со своим портом лет на 10 ) 
avatar
Самая большая проблема QUIK это сам QUIK. Какая разница на чем автоматизировать торговлю, если данные ты должен получить с терминала, который может показывать почти минуту пустоту в таблицах после начала торгов. И ладно показывать, но и возвращать нули. 
Даже QPILE был бы вполне себе хорош, если бы надежность терминала и получаемых с него данных была гарантирована… а так увы( как не изгаляйся, но из говна не сделать конфетку).

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

avatar
Prophetic, вы точно прочитали то что написано на githhub
 Проект является портированием на Python библиотеки C# QUIKSharp .

По поводу
Обман рано или поздно вскроется и сыграет против Вас.
Я вот про это:
Прямой доступ к API QUIK
Умный поймет что это написано про доступ к Qlua функциям в QUIK.

avatar
Prophetic, «Даже мое демо-приложение с QUIK# слизали  :)» Это же ИИ сделал порт. Он перевел всё 1 в 1. Мощь ИИ по-истине впечатляет.
avatar
Просто трейдер, тогда понятно
avatar
Просто трейдер, 
Это же ИИ сделал порт. Он перевел всё 1 в 1. Мощь ИИ по-истине впечатляет.

ИИ сделал каркас, который потом допиливался руками.
В общем, ежели вы такой умный, то попробуйте повторить с помощью ИИ и сделать тоже самое из оригинала, и мы посмотрим что у вас получится.
Давайте, очень ждём ВАШЕГО результата на github !
avatar
Красаучег, спасибо за предложение, я воздержусь ) Но мне интересно. Сам QUIKSharp уже как решение почти не используемое. Зачем вы сделали порт того, что и так предано забвению. Роботов сейчас делают через ИИ и напрямую с подключение к торгам. В том числе Python и вообще любые языки. Вы не анализировали тренд? ) Программисты как землекопы. Думать некогда, копать нужно. Потрачу X часов в пустую, получу лайки, намажу их на батон и подумаю, что «сделал» систему ))
avatar
Просто трейдер, 
Сам QUIKSharp уже как решение почти не используемое.

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

Читайте на SMART-LAB:
Акционеры Татнефти одобрили скромный дивиденд
В лидерах роста на Мосбирже 26 декабря оказались обыкновенные акции Татнефти, подорожавшие на 2,57%, до 583,4 руб. Эта динамика стала реакцией на...
Фото
🍾Старт торгов новых облигаций ГК «А101»
Состоялось размещение биржевых облигаций ГК «А101». Инвесторы, которые не смогли поучаствовать в первичном размещении, смогут приобрести...
Фото
Подробная попытка разобраться в ситуации с допкой ЮМГ/ЕМЦ - стоит ли ее бояться?
Вечером вышло сообщение раскрытия , что: ✅ЕМЦ собирается провести допэмиссию акций ✅в понедельник будет совет директоров ЕМЦ (GEMC)...

теги блога Красаучег

....все тэги



UPDONW
Новый дизайн