You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Сделал прототип клиента на Python AsyncIO работающий на JSON если кому-нибудь будет полезно
Основные возможности
Клиент создан на основе асинхронных вызовов AsyncIO
Клиент использует JSON протокол QuikLua (который в данный момент в статусе альфа)
Клиент поддерживает параллельные запросы через несколько сокетов и организует SocketPool
Клиент пока работает только с сокетами без авторизации и только localhost (из соображений безопасности)
Клиент пока не поддерживает подписку на события
Клиент поддерживает получение исторических данных и их кеширование в памяти
Клиент хранит данные истории котировок в формате Pandas.DataFrame
Клиент поддерживает проверку наличия соединения через heartbeat и выдает ошибку если socket QuikLua недоступен
Клиент поддерживает load-balancing т.е. вы в теории можете запустить 100 асинхронных запросов истории котировок
и клиент распределит нагрузку, чтобы LUA скрипт на той стороне не упал и не сожрал всю память
У меня вроде даже работает на Linux Debian с квиком под Wine! Если что, то можно подключиться к квику на
виртуальной машине.
Пример кода
importasynciofromaioquikluaimportQuikLuaClientBase, QuikLuaException, QuikLuaConnectionException, QuikLuaNoHistoryExceptionimporttracebackimporttimeclassQuikLuaClientSample(QuikLuaClientBase):
asyncdefmain(self):
# Вызываем main() основного класса для инициализации внутренних переменныхawaitsuper().main()
try:
# Тут вызываем логику модели, подписываемся на события и т.п.class_list=awaitself.rpc_call('getClassesList')
print('RPC: getClassesList')
print(class_list)
# RPC с параметрамиrpc_result=awaitself.rpc_call('message', message='Hello world', icon_type='WARNING')
print('RPC: message')
print(rpc_result)
# Заказываем историю котировок (первый запуск может занимать до 10 секунд), потом котировки заполняют кеш и# обновляются только последние данныеtime_begin=time.time()
print(f'RPC: price history')
quotes_df=awaitself.get_price_history('SPBFUT', 'RIH1', 'INTERVAL_M1', use_caching=True)
print(quotes_df.tail(5))
print(f'Price backfill took {time.time()-time_begin}sec')
time_begin=time.time()
print(f'RPC: price history cached')
quotes_df=awaitself.get_price_history('SPBFUT', 'RIH1', 'INTERVAL_M1', use_caching=True)
print(quotes_df.tail(5))
print(f'Price backfill took {time.time() -time_begin}sec')
whileTrue:
# Нажмите ctrl+c чтобы завершить# Получаем heartbeat(), он возвращает результат RPC getInfoParam('LASTRECORDTIME')awaitself.heartbeat()
awaitasyncio.sleep(1)
exceptasyncio.CancelledError:
# AsyncIO valid stopraiseexceptKeyboardInterrupt:
print('KeyboardInterrupt')
except:
print(traceback.format_exc())
finally:
# Завершаем выполнение (ОБЯЗАТЕЛЬНО вызывайте shutdown() особенно если вы заказывали историю котировок!)awaitself.shutdown()
if__name__=='__main__':
qclient=QuikLuaClientSample("tcp://localhost:5560", # RPC сокетNone, # PUB сокетsocket_timeout=100, # Таймаут сокета после которого он выдает ошибку (в миллисекундах)n_simultaneous_sockets=5, # Количество одновременно открытых сокетовhistory_backfill_interval_sec=10, # Таймаут на ожидание истории (в секундах) (обычно занимает менее 1 сек)cache_min_update_sec=0.2, # Время актуальности истории котировок к кеше, после последнего обновления
)
asyncio.run(qclient.main())
Сделал прототип клиента на Python AsyncIO работающий на JSON если кому-нибудь будет полезно
Основные возможности
и клиент распределит нагрузку, чтобы LUA скрипт на той стороне не упал и не сожрал всю память
виртуальной машине.
Пример кода
https://github.com/alexveden/quik-lua-async-client-python
The text was updated successfully, but these errors were encountered: