Интеграция AI-трейдинг-бота с QUIK QLUA
QUIK — доминирующий терминал для торговли на российских рынках (ММВБ, СПБ Биржа). QLUA — встроенный Lua-скриптовый движок для автоматизации. Для AI-стратегий нужно вынести ML за пределы QUIK.
Архитектуры интеграции
QLUA + Python через TCP/Named Pipe
QLUA-скрипт в QUIK выступает посредником между торговым терминалом и Python AI-моделью:
-- QLUA скрипт: получает данные, отправляет Python, получает сигнал
local socket = require("socket")
local json = require("json")
local client = socket.tcp()
client:connect("127.0.0.1", 5555)
function OnBar(class_code, sec_code, interval, candle)
if class_code == "TQBR" and sec_code == "SBER" then
-- Формируем фичи для ML
local features = {
open = candle.open,
high = candle.high,
low = candle.low,
close = candle.close,
volume = candle.volume,
symbol = sec_code
}
-- Отправка Python-серверу
client:send(json.encode(features) .. "\n")
-- Получение сигнала
local signal_str = client:receive("*l")
local signal = json.decode(signal_str)
if signal.action == "buy" then
SendOrder(sec_code, signal.price, signal.quantity, true)
elseif signal.action == "sell" then
SendOrder(sec_code, signal.price, signal.quantity, false)
end
end
end
function SendOrder(sec_code, price, qty, is_buy)
local trans = {
CLASSCODE = "TQBR",
SECCODE = sec_code,
OPERATION = is_buy and "B" or "S",
PRICE = tostring(price),
QUANTITY = tostring(qty),
ACCOUNT = "L01-00000F00",
TYPE = "L", -- Лимитный ордер
TRANS_ID = tostring(os.time())
}
sendTransaction(trans)
end
# Python AI-сервер
import socket
import json
import numpy as np
from your_ml_model import predict
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('127.0.0.1', 5555))
server.listen(1)
conn, addr = server.accept()
buffer = ""
while True:
data = conn.recv(4096).decode()
buffer += data
if '\n' in buffer:
line, buffer = buffer.split('\n', 1)
features = json.loads(line)
# ML inference
signal = predict(features)
conn.send((json.dumps(signal) + '\n').encode())
QUIK Python Library
Сторонние библиотеки для прямой работы с QUIK из Python:
-
quik_py: не официальная, работает через DDE или TRANS2QUIK.dll -
PyQLUA: QLUA в Python обёртке - QuikSharp: .NET библиотека (если C# предпочтительнее)
Trans2Quik DLL
Официальная DLL от QUIK для отправки транзакций:
- Только отправка ордеров, не получение данных
- Python через ctypes или cffi
- Надёжнее для production use
Получение биржевых данных
Финам Data Feed
Для ML обучения: исторические данные через Финам API или экспорт из QUIK.
QLUA Data Tables
-- Получение всех сделок из таблицы
local trades_table = getTable("trades")
local num_rows = #trades_table
-- Подписка на стакан
Subscribe_Level_II_Quotes("TQBR", "SBER")
local order_book = getParamEx2("TQBR", "SBER", "BID")
Специфика российского рынка
T+2 расчёты
Режим T+2 на ММВБ: учёт в AI-стратегиях. Short позиции требуют РЕПО или наличия ценных бумаг.
Брокерские комиссии
Типичные комиссии: 0.035–0.1% от оборота. Для дейтрейдинга — значимо. Брокерский сбор + биржевой сбор + НКД для облигаций.
FORTS (срочный рынок)
Фьючерсы и опционы через FORTS: отдельный класс SPBFUT. Кодировка тикеров (SiM5, RIM5). Часовое гарантийное обеспечение.
Срок интеграции: 2–3 недели для QLUA + Python TCP bridge. Рекомендую начинать с paper trading mode (режим отладки в QUIK без реального исполнения).







