Библиотека-обертка, которая позволяет получить доступ к функционалу Quik на основе Документации по языку LUA в QUIK из Python. В качестве коннектора используются lua-скрипты проекта QUIKSharp.
С помощью этой библиотеки можно создавать автоматические торговые системы любой сложности на Python для Quik. Также библиотека может быть использована для написания дополнений на Python к системам Технического Анализа. Например, для тестирования и автоматической торговли в BackTrader.
- Скопируйте папку QUIK\lua в папку установки Quik. В ней находятся скрипты LUA.
- Скопируйте папку QUIK\socket в папку установки Quik.
- Запустите Quik. Из меню Сервисы выберите Lua скрипты. Нажмите кнопку Добавить. Выберете скрипт QuikSharp.lua Нажмите кнопку OK. Выделите скрипт из списка. Нажмите кнопку Запустить.
Скрипт должен запуститься без ошибок, в окне сообщений Quik выдать QUIK# is waiting for client connection...
Установка коннектора. Метод 2. Из оригинального репозитория QuikSharp
-
В файле config.json замените строки "responseHostname": "127.0.0.1" на "responseHostname": "*" Иначе удаленный компьютер с Quik не будет отвечать на запросы.
-
В файле qsfunctions.lua замените функцию qsfunctions.getFuturesHolding(msg) на:
--- (ichechet) Через getFuturesHolding позиции не приходили. Пришлось сделать обработку таблицы futures_client_holding function qsfunctions.getFuturesHolding(msg) if msg.data ~= "" then local spl = split(msg.data, "|") local firmId, accId, secCode, posType = spl[1], spl[2], spl[3], spl[4] end local fchs = {} for i = 0, getNumberOf("futures_client_holding") - 1 do local fch = getItem("futures_client_holding", i) if msg.data == "" or (fch.firmid == firmId and fch.trdaccid == accId and fch.sec_code == secCode and fch.type == posType*1) then table.insert(fchs, fch) end end msg.data = fchs return msg end
Иначе, фьючерсные позиции приходить не будут.
-
В файле qsfunctions.lua дополните функцию qsfunctions.get_candles_from_data_source(msg)
--- Возвращаем все свечи по заданному инструменту и интервалу --- (ichechet) Если исторические данные по тикеру не приходят, то QUIK блокируется. Чтобы это не происходило, вводим таймаут function qsfunctions.get_candles_from_data_source(msg) local ds, is_error = create_data_source(msg) if not is_error then --- Источник данных изначально приходит пустым. Нужно подождать пока он заполнится данными. Бесконечно ждать тоже нельзя. Вводим таймаут local s = 0 --- Будем ждать 5 секунд, прежде чем вернем таймаут repeat --- Ждем sleep(100) --- 100 миллисекунд s = s + 100 --- Запоминаем кол-во прошедших миллисекунд until (ds:Size() > 0 or s > 5000) --- До тех пор, пока не придут данные или пока не наступит таймаут local count = tonumber(split(msg.data, "|")[4]) --- возвращаем последние count свечей. Если равен 0, то возвращаем все доступные свечи. local class, sec, interval = get_candles_param(msg) local candles = {} local start_i = count == 0 and 1 or math.max(1, ds:Size() - count + 1) for i = start_i, ds:Size() do local candle = fetch_candle(ds, i) candle.sec = sec candle.class = class candle.interval = interval table.insert(candles, candle) end ds:Close() msg.data = candles end return msg end
Иначе, если исторические данные по тикеру Quik не возвращает, то он блокируется, дальнейшая работа невозможна.
В папке Examples находится хорошо документированный код примеров. С них лучше начать разбираться с библиотекой.
- Connect.py - Подключение, Singleton класс, проверка соединения, сервисные функции, пользователь обработчик событий.
- Accounts.py - Список всех торговых счетов с лимитами, позициями, заявками и стоп заявками. Аналогично для заданного торгового счета.
- Ticker.py - Информация о тикере, получение свечек.
- Stream.py - Подписки на получение стакана, обезличенные сделки, новые свечки.
- Transactions.py - Выставление новой лимитной/рыночной заявки, стоп заявки, отмена заявки.
Автор данной библиотеки Чечет Игорь Александрович. Библиотека написана в рамках проекта Финансовая Лаборатория и предоставляется бесплатно. При распространении ссылка на автора и проект обязательны.
Исправление ошибок, доработка и развитие библиотеки осуществляется как автором, так и сообществом проекта Финансовая Лаборатория.