Skip to content

Экспортер котировок из торгового терминала QUIK

License

Notifications You must be signed in to change notification settings

evsamsonov/quik-quotes-exporter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Экспортер котировок из торгового терминала QUIK

Экспортирует часовые свечи и обезличенные сделки из терминала QUIK по группе инструментов. Отправляет данные по протоколу JSON-RPC 2.0 через jsonrpc-fsproxy. Не требует установки дополнительных Lua библиотек. Есть функционал оповещения о возникающих в работе скрипта проблемах

Описание

Отправка свечей

Отправляет информацию с последней доступной свечи на сервере до текущей в том случае, если есть не отправленные на сервер свечи. Проверяет данное условие с периодичности раз в минуту

Отправка обезличенных сделок

После запуска единоразово отправляет все сделки, которые есть на данный момент в таблице обезличенных сделок. Подписывается на обновление по обезличенным сделкам и отправляет их пачкой раз в минуту.

Поведение при ошибках отправки данных

При проблемах с отправкой данных о торговых свечах делает 3 попытки с интервалом 15 секунд, если отправить не удалось, сообщает о проблеме и пытается отправить данные в следующем цикле отправки (в начале следующего часа).

При проблемах с отправкой обезличенных сделок делает 3 попытки с интервалом 15 секунд, если отправить не удалось, сообщает о проблеме и завершает работу.

Как запустить

  • Переименовать config.lua.dist в config.lua и сконфигурировать
  • Запустить jsonrpc-fsproxy с указанием корректного адреса JSON-RPC сервера и файлов обмена данными
  • Открыть в терминале QUIK окно "Доступные скрипты" (в главном меню перейти в "Сервисы" и выбрать "Lua скрипты...")
  • Добавить файл main.lua и запустить

Конфигурация

local QuikQuotesExporter = require('src/quik_quotes_exporter')
return {
    rpcClient = {
        -- Файл для отправки запроса. 
        -- Переменная окружения INPUT_FILE_PATH, заданная при запуске jsonrpc-fsproxy. 
        requestFilePath = 'Z:\\dev\\rpcin',  
        
        -- Файл для получения ответа.
        -- Переменная окружения OUTPUT_FILE_PATH, заданная при запуске jsonrpc-fsproxy. 
        responseFilePath = 'Z:\\dev\\rpcout',   
        
        -- Префикс идентификатора RPC запроса (по умолчанию пустая строка). 
        -- Требуется только в случае, когда указанные выше файлы используются 
        -- для работы других скриптов, чтобы различать ответы сервера.
        idPrefix = 'qe'                         
    },
    instruments = {
        {
            -- Идентификатор биржи. 
            -- Требуется для разделения по биржам на стороне сервера.
            market = 1,
            -- Идентификатор режима торгов и код ценной бумаги.
            -- Можно найти на странице конкретного торгового инструмента 
            -- на сайте Московской биржи или в таблице котировок QUIK (параметр "Код класса").
            classCode = 'TQBR',                                    
            secCode = 'SBER',
            -- Опционально. По умолчанию равно secCode
            -- Название символа на стороне сервера, если оно отличается от secCode 
            symbol = 'SBER',
            
            -- Интервал       
            interval = INTERVAL_H1,                                
        }
    },
    -- Часы работы скрипта (включительно). 
    -- Если не задан, то время работы неограничено.
    workingHours = {
        start = 10,
        finish = 23,
    }
}

Список поддерживаемых интервалов

Константа Значение Описание
INTERVAL_M1 1 1 минута
INTERVAL_M5 2 5 минут
INTERVAL_M10 3 10 минут
INTERVAL_M15 4 15 минут
INTERVAL_M30 5 30 минут
INTERVAL_H1 6 1 час
INTERVAL_D1 7 1 день
INTERVAL_W1 8 1 неделя
INTERVAL_MN1 9 1 месяц

Описание сервера

JSON-RPC сервер для корректной работы скрипта должен реализовывать следующие методы:

Метод Описание
Quotes.GetLastCandle Получение последней известной свечи
Quotes.AddCandle Добавление свечи
Quotes.AddTicks Добавление обезличенных сделок
Notification.Notify Оповещение

Quotes.GetLastCandle

Используется для получения последней известной свечи. Если свечей по указанному инструменту нет, то должен возвращать null

Параметры

Ключ Описание
market Рынок. Значение заданное при конфигурации инструмента instruments.*.market
symbol Код ценной бумаги. Значение заданное при конфигурации инструмента instruments.*.secCode
interval Интервал. Значение заданное при конфигурации инструмента instruments.*.interval

Запрос:

{
   "jsonrpc": "2.0",
   "method": "Quotes.GetLastCandle",
   "params": {
      "market": 1,
      "symbol": "SBER",
      "interval": 7
   },
   "id":"1"
}
curl -H "Content-Type: application/json" -X POST -d  '{"jsonrpc": "2.0", "method": "Quotes.GetLastCandle", "params":{"market":1, "symbol":"SBER", "period": 7}, "id": "1"}'  http://127.0.0.1:8080/rpc

Ответ:

{
   "jsonrpc": "2.0",
   "id": "1",
   "result": {
      "time": 1613340425,
      "open": 270.1,
      "close": 275.01,
      "high": 276,
      "low": 269.5,
      "volume": 320750
    }
}

Quotes.AddCandle

Используется для отправки данных по свечам. Данные по известным серверу свечам должны перезаписываться.

Параметры

Ключ Описание
market Рынок. Значение заданное при конфигурации инструмента instruments.*.market
symbol Код ценной бумаги. Значение заданное при конфигурации инструмента instruments.*.secCode
interval Интервал. Значение заданное при конфигурации инструмента instruments.*.interval
candle Свеча
candle.time Время в Unix time
candle.open Открытие
candle.close Закрытие
candle.high Максимум
candle.low Минимум
candle.volume Объем

Запрос:

{
   "jsonrpc": "2.0",
   "method": "Quotes.AddCandle",
   "params": {
      "market": 1,
      "symbol": "SBER",
      "period": 7,
      "candle":{
         "time": 1613340425,
         "open": 270.1,
         "close": 275.01,
         "high": 276,
         "low": 269.5,
         "volume": 320750
      }
   },
   "id": "1"
}
curl -H "Content-Type: application/json" -X POST -d  '{"jsonrpc": "2.0", "method": "Quotes.AddCandle", "params":{"market":1, "symbol":"SBER", "period": 7, "candle":{"time": 1613340425, "open": 270.1, "close": 275.01, "high": 276, "low": 269.5, "volume": 320750}}, "id": "1"}'  http://127.0.0.1:8080/rpc

Ответ:

{
   "jsonrpc": "2.0",
   "id": "1",
   "result": {}
}

Quotes.AddTicks

Используется для отправки данных по обезличенным сделками. Данные по известным сделкам должны игнорироваться или перезаписываться.

Параметры

Ключ Описание
market Рынок. Значение заданное при конфигурации инструмента instruments.*.market
symbol Код ценной бумаги. Значение заданное при конфигурации инструмента instruments.*.secCode
ticks Список с обезличенными сделками
ticks[].id Идентификатор сделки
ticks[].time Время в Unix time
ticks[].price Цена
ticks[].volume Объем в акциях
ticks[].operation Одно из двух значений: 1 - покупка, 2 - продажа

Запрос:

{
   "jsonrpc": "2.0",
   "method": "Quotes.AddTicks",
   "params": {
      "market": 1,
      "symbol": "SBER",
      "ticks":[
         {
            "id": 2683497839,
            "time": 1613340425,
            "price": 162.41,
            "volume": 10,     
            "operation": 2
         },
         {
            "id": 2683497840,
            "time": 1613340426,
            "price": 162.42,
            "volume": 400,     
            "operation": 1
         }
      ]
   },
   "id": "1"
}
curl -H "Content-Type: application/json" -X POST -d  '{"jsonrpc": "2.0", "method": "Quotes.AddTicks", "params":{"market":1, "symbol":"SBER", "ticks": [{"id": 2683497839, "time": 1613340425, "price": 162.41, "volume": 10, "operation":2},{"id": 2683497840, "time": 1613340426, "price": 162.42, "volume": 400, "operation":1}]}, "id": "1"}'  http://127.0.0.1:8080/rpc

Ответ:

{
   "jsonrpc": "2.0",
   "id": "1",
   "result": {}
}

Notification.Notify

Используется для оповещения о запуске и возникающих ошибках в работе скрипта

Запрос:

{
    "jsonrpc": "2.0",
    "method": "Notification.Notify",
    "params": {
        "message": "2021-02-22 10:09:57: QuikQuotesExporter has been started successfully"
    },
    "id": "1"
}
curl -H "Content-Type: application/json" -X POST -d  '{"jsonrpc": "2.0", "method": "Notification.Notify", "params":{"message":"2021-02-22 10:09:57: QuikQuotesExporter has been started successfully"}, "id": "1"}'  http://127.0.0.1:8080/rpc```

Ответ:

{
   "jsonrpc": "2.0",
   "id": "1",
   "result": {}
}

Замечание

Для работы с обезличенными сделками требуется заказать их у брокера. По умолчанию QUIK не загружает их. Убедитесь, что обезличенные сделки подгружаются, создав таблицу обезличенных сделок и выбрав необходимые инструменты.

Задачи

  • Реализовать пример принимающего данные сервера

About

Экспортер котировок из торгового терминала QUIK

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages