Open Anton5244 opened 4 years ago
Возможно вместо getQuoteLevel2
должна быть GetQuoteLevel2
Нет не помогло...
Возможно вместо
getQuoteLevel2
должна бытьGetQuoteLevel2
неть, не помогло(((
Да действительно. Преблема в том что такой функции нет. Можно только подписаться и отписаться на стакан. Подписавшись, стакан будет приходить на сокет колбэков (порт 34131)
На всякий случай: В библиотеке QUIKSharp функция GetQuoteLevel2 есть (см. обновление от 14.03.20). Но корректность ее работы в сочетании с подпиской на колбэк OnOrder, вызывает сомнения (могут возникать конфликты). Во всяком случае, в демо-приложении мне пока не удалось решить проблему конфликта.
Добрый день! Пробираюсь сквозь скрипты на Win7x64, Quik 8.3.2.4, ветка master от 14.04.2020 (оставляю отредактированную версию этого поста, т.к. на сообщение никто не ответил)
GetQuoteLevel2
в голом виде не работает; ошибка такая же, как и в головном посте.
Но даже если я не подписываюсь на тикер (напр., SiM0) и просто читаю из сокета колбэка, то обнаруживаю, что туда вываливается много чего. В том числе, котировки, которые заказаны в quik через меню "Система --> Заказ данных --> Поток котировок".
def get_socket_cb_data(bufsize=1024):
data = b""
while(True):
packet = sok_callbacks.recv(bufsize)
data += packet
if len(packet) < bufsize:
data = data.decode()
data = data.split('\n')
data = [ json.loads(d) for d in data if d ]
return data
for i in range(10):
data = get_socket_cb_data()
print(i, end=' --> ')
[ print(d['data']['sec_code'], d['cmd'], end=' | ') for d in data ]
print()
Результат работы скрипта:
Вопрос: на sok_callback всегда приходят разные данные и требуется из всех данных отсортировать нужный тебе стакан или же нужно действовать иначе? Как?
Насколько я понял, Subscribe_Level_II_Quotes
подразумевает то действие, которое выполняется, когда заказываем данные в квике вручную. После подписки квик каждый раз при обновлении стакана вызывает колбэк OnQuote
. Это происходит вне зависимости от того, кто и когда подписался на данные. Другие оформленые в квике колбэки отрабатывают по тому же сценарию (OnParam
, OnAllTrade
, ...), а Lua покорно всё пересылает в сокет колбеков. В итоге необходимые данные нужно отсеивать при чтении из сокета.
Если в питоновском скрипте написать с большой буквы: GetQuoteLevel2, то работает.
Запускаю в PyCharm "Пример со стаканом из QUIK для python" https://github.com/finsight/QUIKSharp/blob/master/quiksharp_qlua_python_socket_client.py выдаёт ошибку {'cmd': 'lua_error', 'id': '1', 't': '', 'data': 'QJSIM|SBER', 'lua_error': 'Command not implemented in Lua qsfunctions module: getQuoteLevel2'}