-
Notifications
You must be signed in to change notification settings - Fork 43
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Пример клиента на python для quik-lua-rpc v2.0-alpha.0 JSON? #17
Comments
Пока только на Java. Не знаю, буду ли я в этом году писать для Python... Можете выложить свои наработки, если таковые имеются, -- наверняка народ подхватит. |
Механизм аутентификации ZeroMQ:"NULL" (нет аутентификации) -- coding: utf-8 --import zmq
|
Эмм, нет, это не так работает. В той версии, что лежит сейчас в ветке master, сообщения от/к серверу сериализуются/десериализуются с помощью Protobuf (гайд для Python). Сами схемы сообщений (файлы .proto) можно найти в директории qlua/rpc RPC-сервиса. Есть наработки для общения посредством JSON, но там ещё не доделано. Думаю, в течение следующей недели дозалью коммиты к альфа-версии. Если нужна помощью по Protobuf -- пишите. |
В ветке master теперь лежит альфа-версия с поддержкой JSON. Почему альфа?
import zmq
context = zmq.Context()
print("Connecting to test server")
socket = context.socket(zmq.REQ)
socket.connect("tcp://localhost:5560")
print("\nSending request")
socket.send_string("{\"method\":\"message\", \"args\":{\"message\":\"Hello!\",\"icon_type\":\"WARNING\"}}")
message = socket.recv()
print("Received reply [ %s ]\n" % (message))
print("Sending request")
socket.send_string("{\"method\":\"getScriptPath\"}")
message = socket.recv()
print("Received reply [ %s ]\n" % (message))
print("Sending request")
socket.send_string("{\"method\":\"getClassesList\"}")
message = socket.recv()
print("Received reply [ %s ]" % (message))
Документацию по API пока не написал, но вскоре займусь ей. В общих чертах, формат сообщений такой: Запрос: {
"method":"НАЗВАНИЕ_QLUA-ФУНКЦИИ",
"args": {
// АРГУМЕНТЫ QLUA-ФУНКЦИИ
}
} Ответ: {
"method": "НАЗВАНИЕ_QLUA-ФУНКЦИИ",
"result": // РЕЗУЛЬТАТ QLUA-ФУНКЦИИ (число, объект, строка -- в зависимости от вызываемой функции)
} Ответ в случае ошибки сервиса: {
"method":"НАЗВАНИЕ_QLUA-ФУНКЦИИ",
"error": {
"code": // ЧИСЛОВОЙ КОД ОШИБКИ,
"message": "ИНФОРМАЦИЯ ОБ ОШИБКЕ"
}
} !!! Все дробные числа передаются как строки (что в аргументах, что в ответе от сервиса). |
Чудесно! В отдельный бы репозиторий quik-lua-rpc-python-client - Пример Python-клиента к сервису 'quik-lua-rpc'. |
Ну, по сути, кроме этих сниппетов кода на Python как такового и нет... Клиент, в моём понимании, -- это всё же некая библиотека, позволяющая скрыть от пользователя низкоуровневую работу с сообщениями и ZeroMQ. |
Может кто в курсе. А нет просто нормального РФ брокера с апи? Чтобы не мучаться с этим адом квиком |
Какие-то брокеры предоставляют доступ на MOEX через MetaTrader. |
Квик для компа бесспорно норм. Но вот именно прямого апи у брокера жалко нету. Те недобиржи по крипте это все сделали давно...( Но они меня не интересуют. |
Ладно хоть Квик под wine пашет. Хоть что-то немного радует.) |
Вот уже есть пример Python-клиента к сервису quik-lua-rpc |
sholoma, под прямым API Вы имеете в виду прямой доступ к бирже, минуя всякие терминалы? Если так, то такая штука давно существует и её предоставляют почти все брокеры. Получение маркет-даты через следующие протоколы:
Отправка транзакций:
Но, уверяю, работа с этими протоколами на порядок сложнее, чем с QUIK (особенно по части обработки транзакций -- говорю из собственного опыта), даже при использовании каких-то готовых библиотек. Проще всех из них, наверное, Plaza2. И по латенси не сказать что бы андердог. |
Да, в качестве клиента к первой версии, где только protobuf, очень даже сойдёт. Добавлю ссылку в доку. Да и для второй версии сгодится, если в нём перегенерировать .py-обвязки над .proto-файлами (я поменял везде название message Request на message Args -- так лучше вписывается в модель). |
Это прямо готовая идея подпольного стартапа moex data sharing по аналогии со спутниковым шарингом |
Актуальное руководство по Qlua QUIK Lua. Версия 7.24 от 21.01.2019
|
Python клиент для второй версии quik-lua-rpc v2.0-alpha.0 JSON import zmq
context = zmq.Context()
socket = self.context.socket(zmq.REQ)
socket.connect('tcp://127.0.0.1:5560')
socket.send_string('{"method":"datasource.CreateDataSource","args":{"class_code":"SPBFUT", "sec_code":"SiU9", "interval":"INTERVAL_M1", "param":""}}')
datasource_uuid = json.loads(socket.recv_string())['result']['datasource_uuid']
socket.send_string('{"method":"datasource.Size","args":{"datasource_uuid":"%s"}}' % (datasource_uuid))
num_candles = json.loads(socket.recv_string())['result']['value']
for i in range(0,num_candles):
socket.send_string('{"method":"datasource.C","args":{"datasource_uuid":"%s","candle_index":%d}}' % (datasource_uuid, i))
candle_close = json.loads(socket.recv_string())['result']['value']
socket.send_string('{"method":"datasource.O","args":{"datasource_uuid":"%s","candle_index":%d}}' % (datasource_uuid, i))
candle_open = json.loads(socket.recv_string())['result']['value']
socket.send_string('{"method":"datasource.T","args":{"datasource_uuid":"%s","candle_index":%d}}' % (datasource_uuid, i))
candle_time = json.loads(socket.recv_string())['result']['value'] |
import zmq
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect("tcp://127.0.0.1:5561")
socket.setsockopt(zmq.SUBSCRIBE, b"OnAllTrade")
while True:
print(json.loads(socket.recv_unicode())) |
Пример клиента на python?
The text was updated successfully, but these errors were encountered: