Skip to content

Repository files navigation

quik_python

PyPi ReleaseTotal downloadsMade with PythonLicense

QUIK Python представляет все функции и события, доступные в QLUA, в виде асинхронных функций Python и событий. Проект является портированием на Python библиотеки C# QUIKSharp .

Установка

pip install quik-python

Использование

Cкопировать содержимое папки lua c GIT репозитария в отдельную папку, которая будет доступна приложению QUIK.

ВНИМАНИЕ Для корректной работы с получением свечных данных используйте обновлённые Lua скрипты из QUIK Python Данные Lua скрипты будут также корректно работать и с QUIKSharp клиентами.

В терминале QUIK, через диалоговое окно работы со скриптами Lua, запустить "QuikSharp.lua" из скопированной ранее папки. Подробнее о Lua скриптах. Возможно, перед запуском скрипта, для его нормальной работы, на компьютере с терминалом потребуется установить DLL библиотеки c сайта MS https://learn.microsoft.com/cpp/windows/latest-supported-vc-redist?view=msvc-170#latest-supported-redistributable-version для [CPU X64] https://aka.ms/vs/17/release/vc_redist.x64.exe

Для первичного ознакомпления с основными возможностями библиотеки и синтаксисом некоторых команд, можно использовать приложение "QuikPythonDemo" из папки \Examples. Все указанные демонстрационные приложения оттестированы и полностью работоспособны.

В случае возникновения проблем с работоспособностью демонстрационных приложений убедитесь что:

  1. Терминал QUIK загружен и подключен к сереверу.
  2. Скрипт QuikSharp.lua запущен и не выдает никаких ошибок в соответствующем диалоговом окне.
  3. Никакие сторонние программы не используют для своих нужд порты 34130 и 34131. Данные порты используются по умолчанию для связи библиотеки с терминалом.
  4. Проверьте настройки что соединения не блокируются в Windows Firewall.
importloggingimportasynciofromquik_pythonimportQuik, LuaExceptionfromquik_python.data_structuresimportCandleInterval, Candle, InfoParamsCLASS_CODE="TQBR"# CLASS_CODE = "QJSIM" ## for Demo Quik Junior Connectionasyncdefmain():
""" Пример использования QuikPython API """# Создаем подключение к QUIK# async with Quik(host="192.168.10.128") as quik:asyncwithQuik(host="localhost") asquik:
try:
awaitquik.initialize()
# Работа с QUIKexceptExceptionase:
print(f"Ошибка подключения: {e}")
returntry:
# Проверяем подключениеifnotquik.is_service_alive():
print("Не удалось подключиться к QUIK")
returnifnotawaitquik.service.is_connected():
print("Quik не подключен к торгам")
print("Подключение к QUIK успешно!")
awaittest_candle(quik=quik)
exceptLuaExceptionase:
print(f"QUIK Lua error: {e}")
exceptExceptionase:
print(f"Error: {e}")
### test candleasyncdeftest_candle(quik:Quik):
received_candles= []
defon_new_candle(candle: Candle):
"""Callback for new candle events"""if (candle.sec_code=="SBER"andcandle.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:
# Проверяем подключениеifnotawaitquik.service.is_connected():
print("QUIK не подключен к торгам")
returnprint("QUIK service is connected")
v=awaitquik.candles.get_last_candles(CLASS_CODE, "SBER", CandleInterval.M1, 10)
print(f"Last candles: {v}")
# Subscribe to new candle eventsquik.candles.add_new_candle_handler(on_new_candle)
# Check if already subscribed and unsubscribe if neededis_subscribed=awaitquik.candles.is_subscribed(CLASS_CODE, "SBER", CandleInterval.M1)
print(f"Is subscribed: {is_subscribed}")
ifis_subscribed:
awaitquik.candles.unsubscribe(CLASS_CODE, "SBER", CandleInterval.M1)
# Subscribe to minute candlesawaitquik.candles.subscribe(CLASS_CODE, "SBER", CandleInterval.M1)
# Verify subscribedis_subscribed=awaitquik.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)awaitasyncio.sleep(120) ## wait 180sec# Unsubscribeawaitquik.candles.unsubscribe(CLASS_CODE, "SBER", CandleInterval.M1)
print(f"Received {len(received_candles)} candles during test")
exceptExceptionase:
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())
exceptKeyboardInterrupt:
print("\nStopped by user")
exceptExceptionase:
print(f"Main example error: {e}")
  • приложение "QuikPythonDemo" из папки \Examples chart1

Решение проблем

В случае возникновения проблем ознакомьтесь напишите в Проблемы или в Дискуссии . Постарайтесь описать проблему как можно подробнее, с деталями того, что Вы конкретно делаете и что не работает или работает неправильно.

License

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

This software is distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

About

QUIK Python is the QUIK Lua interface ported to Python

Topics

Resources

Stars

12 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages