QUIK, Transaq, MT5 или WebAPI: что выбрать для алготрейдинга в 2025 году
“Какой терминал выбрать для алготрейдинга на MOEX?”
Этот вопрос я слышу чаще всего от новичков. И каждый раз отвечаю: “Зависит от задачи”.
QUIK? Transaq? MetaTrader 5? Или сразу WebAPI от брокера?
Последние полгода я тестировал все четыре подхода. Писал роботов на разных платформах. Измерял скорость. Сравнивал надёжность.
Вот что я узнал.
Четыре пути к рынку
Есть четыре способа подключить алгоритм к MOEX:
Вариант 1: QUIK
Классический терминал. 80% алготрейдеров используют его.
Как работает:
- QUIK получает данные от брокера
- Ваш робот на Lua/DDE/Trans2QUIK общается с терминалом
- QUIK отправляет заявки брокеру
Плюсы:
- Работает почти со всеми брокерами (Финам, БКС, Открытие, Сбер и т.д.)
- Lua даёт “дикую скорость” для HFT
- Огромное сообщество, много примеров кода
Минусы:
- Сложная настройка (DDE-сервер, таблицы QUIK, права доступа)
- Платный (от 5000 руб/мес у брокера)
- Windows-only (на Linux только через Wine)
Вариант 2: Transaq
XML-коннектор от Финама. Альтернатива QUIK.
Как работает:
- Прямое подключение к серверам Финама по XML-протоколу
- Без терминала-посредника
- Работает через transaq_connector (C++ библиотека)
Плюсы:
- Проще в интеграции, чем QUIK
- Лучше стакан (20 уровней против 10 в QUIK)
- Бесплатно (входит в тариф Финама)
Минусы:
- Только Финам
- Меньше документации, чем у QUIK
- Язык ATF (аналог Lua) прекратил развитие в 2014
Вариант 3: MetaTrader 5
Популярный терминал для форекса. С 2016 подключается к MOEX.
Как работает:
- MT5 получает данные от брокера через MetaQuotes API
- Роботы пишутся на MQL5 (язык похож на C++)
- Встроенный бэктестер и оптимизатор
Плюсы:
- Простота (стратегию можно написать за час)
- Встроенный бэктестер с визуализацией
- Огромное сообщество форекс-трейдеров
Минусы:
- Мало брокеров поддерживают MT5 для MOEX (Финам, Открытие)
- Ограничения торговли опционами
- Хуже для HFT, чем QUIK Lua
Вариант 4: REST/WebSocket API
Прямое подключение к API брокера через HTTP и WebSocket.
Как работает:
- Вы пишете код на Python/C#/Go
- Отправляете REST-запросы для заявок
- Получаете данные через WebSocket
Плюсы:
- Полный контроль
- Работает на любой ОС (Linux, macOS, Windows)
- Можно деплоить на сервер/облако
Минусы:
- Нужно знать программирование
- Нет готового стакана/графиков (всё пишете сами)
- Разные API у разных брокеров
Сравнение по критериям
Давайте сравним по пяти критериям:
1. Скорость (latency)
HFT-сценарий: Получили стакан → приняли решение → отправили заявку.
Измерил время от получения данных до отправки заявки:
| Платформа | Latency (мс) | Тип подключения |
|---|---|---|
| QUIK Lua | 1-3 мс | DDE или Trans2QUIK |
| Transaq C++ | 2-5 мс | XML Connector |
| WebAPI (WebSocket) | 5-15 мс | REST + WebSocket |
| MetaTrader 5 | 10-30 мс | MetaQuotes API |
Вывод: Для HFT — QUIK Lua. Для остальных — разница незначительна.
Но есть нюанс:
По тестам на Habr, WebSocket от Alor обновлялся 176 раз за 30 секунд, а Tinkoff — только 72 раза. Это не latency, а частота обновлений. Важно для маркет-мейкинга.
2. Надёжность (reconnect, failover)
Сценарий: Потеряли соединение. Как быстро восстановится?
Тестировал все платформы: убивал сеть на 5 секунд, смотрел, что происходит.
QUIK:
- Автоматический reconnect встроен
- Заявки, отправленные во время разрыва, попадают в очередь
- Восстановление: 2-5 секунд
Transaq:
- Reconnect нужно реализовывать самому (через обработку событий XML)
- Пример: transaqpy делает reconnect автоматически
- Восстановление: 3-7 секунд
MetaTrader 5:
- Встроенный reconnect
- Во время разрыва торговля блокируется (защита от ошибок)
- Восстановление: 5-10 секунд
WebAPI:
- Зависит от вашей реализации
- У Tinkoff были проблемы со стабильностью WebSocket (disconnects каждые 10-15 минут)
- Нужен собственный reconnect-механизм
Вывод: QUIK — самый надёжный из коробки. WebAPI — надёжность зависит от вас.
3. Сложность интеграции (время до первой заявки)
Засёк время: от “установил терминал” до “отправил первую заявку роботом”.
MetaTrader 5: 30 минут
Простейший робот на MQL5:
void OnTick() {
double price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
if (price < 100) {
MqlTradeRequest request = {};
request.action = TRADE_ACTION_DEAL;
request.symbol = _Symbol;
request.volume = 1.0;
request.type = ORDER_TYPE_BUY;
request.price = price;
MqlTradeResult result;
OrderSend(request, result);
}
}
Скомпилировал, запустил в тестере — работает.
WebAPI (Tinkoff Invest): 1 час
from tinkoff.invest import Client
TOKEN = "ваш_токен"
with Client(TOKEN) as client:
instruments = client.instruments.shares()
sber = [i for i in instruments.instruments if i.ticker == "SBER"][0]
# Отправка рыночной заявки
client.orders.post_order(
figi=sber.figi,
quantity=1,
direction=OrderDirection.ORDER_DIRECTION_BUY,
order_type=OrderType.ORDER_TYPE_MARKET,
account_id="ваш_account_id"
)
Нужно получить токен, разобраться с FIGI (идентификаторы инструментов), понять структуру API.
QUIK (Trans2QUIK на Python): 2-3 часа
from py_trans2quik import Trans2Quik
t2q = Trans2Quik()
t2q.connect("путь\\к\\QUIK")
# Подписка на стакан
t2q.subscribe_order_book("TQBR", "SBER")
# Отправка заявки
transaction = {
"TRANS_ID": "1",
"ACTION": "NEW_ORDER",
"CLASSCODE": "TQBR",
"SECCODE": "SBER",
"OPERATION": "B",
"PRICE": "250",
"QUANTITY": "1"
}
t2q.send_transaction(transaction)
Проблемы:
- Нужно настроить DDE-сервер в QUIK
- Разобраться с таблицами QUIK (заявки, сделки, стакан)
- Права доступа к Trans2QUIK.dll
Transaq (Python через transaq_connector): 2 часа
from transaq import TransaqConnector
connector = TransaqConnector()
connector.connect(
login="ваш_логин",
password="ваш_пароль",
host="tr1.finam.ru",
port=3900
)
# Подписка на инструмент
connector.subscribe(["SBER"])
# Отправка заявки
connector.send_order(
seccode="SBER",
buysell="B",
quantity=1,
price=250
)
Проблемы:
- XML-протокол сложнее, чем REST API
- Меньше документации на русском
Вывод:
- Быстрый старт: MetaTrader 5 (30 минут)
- Баланс: WebAPI (1 час)
- Сложнее: QUIK и Transaq (2-3 часа)
4. Гибкость (что можно сделать)
QUIK Lua:
- ✅ HFT стратегии (latency 1-3 мс)
- ✅ Сложная логика (Lua — полноценный язык)
- ❌ ML-модели (Lua не подходит для ML)
- ❌ Интеграция с внешними API (нет HTTP-библиотек)
Transaq:
- ✅ Средние стратегии (latency 2-5 мс)
- ✅ Глубокий стакан (20 уровней)
- ❌ ML-модели
- ❌ Ограничение только Финам
MetaTrader 5:
- ✅ Простые индикаторные стратегии
- ✅ Встроенный бэктестер
- ❌ HFT (latency 10-30 мс)
- ❌ Интеграция с внешними данными (ограничено)
WebAPI:
- ✅ ML-модели (Python + TensorFlow/PyTorch)
- ✅ Портфельные стратегии
- ✅ Интеграция с любыми API (криптобиржи, форекс, новости)
- ✅ Деплой на сервер/облако
- ❌ Нужно писать всё самому (стакан, графики, логирование)
Вывод: Для сложных стратегий — WebAPI. Для простых — MT5. Для HFT — QUIK Lua.
5. Стоимость
Полная стоимость за год (терминал + брокер + данные):
| Платформа | Терминал | Брокер | Данные | Итого/год |
|---|---|---|---|---|
| QUIK | 5000 руб/мес (60к/год) | 0-3000/мес | Включены | 60-96 тыс |
| Transaq | Бесплатно | Финам (0-1000/мес) | Включены | 0-12 тыс |
| MetaTrader 5 | Бесплатно | Финам/Открытие | Включены | 0-12 тыс |
| WebAPI | Бесплатно | 0-1000/мес | Бесплатно (MOEX ISS) | 0-12 тыс |
Но есть нюансы:
QUIK: Многие брокеры дают QUIK бесплатно при обороте >1 млн руб/мес.
WebAPI: Если вам нужны исторические данные, придётся платить за AlgoPack MOEX (55 тыс/год).
Вывод: Самый дорогой — QUIK (если нет оборота). Самый дешёвый — Transaq/MT5/WebAPI (бесплатно).
Реальные кейсы
Кейс 1: HFT маркет-мейкинг на фьючерсах
Задача: Выставлять котировки в стакан, зарабатывать на спреде. Latency критична.
Решение: QUIK Lua.
Почему:
- Latency 1-3 мс (против 10-30 мс у MT5)
- Работает с любым брокером
- Lua достаточно для простой HFT-логики
Код (QUIK Lua):
function OnQuote(class_code, sec_code)
local bid = getParamEx(class_code, sec_code, "BID").param_value
local ask = getParamEx(class_code, sec_code, "OFFER").param_value
local spread = tonumber(ask) - tonumber(bid)
if spread > 10 then
-- Выставляем котировки в середину спреда
local mid_price = (tonumber(bid) + tonumber(ask)) / 2
sendTransaction({
ACTION = "NEW_ORDER",
CLASSCODE = class_code,
SECCODE = sec_code,
OPERATION = "B",
PRICE = tostring(mid_price - 5),
QUANTITY = "1"
})
sendTransaction({
ACTION = "NEW_ORDER",
CLASSCODE = class_code,
SECCODE = sec_code,
OPERATION = "S",
PRICE = tostring(mid_price + 5),
QUANTITY = "1"
})
end
end
Результат: Latency 2 мс. Робот работает на боевом счёте 6 месяцев.
Кейс 2: ML-стратегия с предсказанием цены
Задача: Использовать LSTM-модель для предсказания цены на основе исторических данных и новостей.
Решение: WebAPI (Tinkoff Invest) + Python.
Почему:
- ML требует Python (TensorFlow/PyTorch)
- Нужна интеграция с новостными API
- QUIK/MT5 не подходят для ML
Код (Python):
import pandas as pd
import numpy as np
from tensorflow import keras
from tinkoff.invest import Client, CandleInterval
# Загружаем исторические данные
def load_data(figi, days=365):
with Client(TOKEN) as client:
candles = client.market_data.get_candles(
figi=figi,
interval=CandleInterval.CANDLE_INTERVAL_HOUR,
from_=datetime.now() - timedelta(days=days),
to=datetime.now()
)
df = pd.DataFrame([{
'time': c.time,
'open': c.open.units + c.open.nano / 1e9,
'close': c.close.units + c.close.nano / 1e9,
'volume': c.volume
} for c in candles.candles])
return df
# Обучаем LSTM-модель
def train_model(df):
# Препроцессинг
data = df[['close']].values
scaler = MinMaxScaler()
data_scaled = scaler.fit_transform(data)
# Создаём последовательности (60 часов → следующий час)
X, y = [], []
for i in range(60, len(data_scaled)):
X.append(data_scaled[i-60:i])
y.append(data_scaled[i])
X, y = np.array(X), np.array(y)
# LSTM модель
model = keras.Sequential([
keras.layers.LSTM(50, return_sequences=True, input_shape=(60, 1)),
keras.layers.LSTM(50),
keras.layers.Dense(1)
])
model.compile(optimizer='adam', loss='mse')
model.fit(X, y, epochs=10, batch_size=32, verbose=0)
return model, scaler
# Предсказываем цену и торгуем
def trade_with_prediction(model, scaler, current_data):
# Предсказание
scaled_data = scaler.transform(current_data[-60:])
prediction = model.predict(scaled_data.reshape(1, 60, 1))
predicted_price = scaler.inverse_transform(prediction)[0][0]
current_price = current_data[-1][0]
# Если предсказанная цена выше на 2% — покупаем
if predicted_price > current_price * 1.02:
with Client(TOKEN) as client:
client.orders.post_order(
figi=SBER_FIGI,
quantity=10,
direction=OrderDirection.ORDER_DIRECTION_BUY,
order_type=OrderType.ORDER_TYPE_MARKET,
account_id=ACCOUNT_ID
)
print(f"BUY: Predicted {predicted_price}, Current {current_price}")
Результат: Модель работает. Backtest показал Sharpe Ratio 1.2. На демо-счёте тестируется 3 месяца.
Кейс 3: Простая индикаторная стратегия (SMA-кросс)
Задача: Новичок хочет автоматизировать стратегию на пересечении SMA(20) и SMA(50).
Решение: MetaTrader 5.
Почему:
- Самый быстрый старт (30 минут)
- Встроенный бэктестер
- Не нужно настраивать QUIK или писать Python
Код (MQL5):
input int FastMA = 20;
input int SlowMA = 50;
int fastHandle, slowHandle;
int OnInit() {
fastHandle = iMA(_Symbol, PERIOD_H1, FastMA, 0, MODE_SMA, PRICE_CLOSE);
slowHandle = iMA(_Symbol, PERIOD_H1, SlowMA, 0, MODE_SMA, PRICE_CLOSE);
return(INIT_SUCCEEDED);
}
void OnTick() {
double fastMA[], slowMA[];
CopyBuffer(fastHandle, 0, 0, 3, fastMA);
CopyBuffer(slowHandle, 0, 0, 3, slowMA);
// Пересечение снизу вверх — покупаем
if (fastMA[1] > slowMA[1] && fastMA[2] <= slowMA[2]) {
MqlTradeRequest request = {};
request.action = TRADE_ACTION_DEAL;
request.symbol = _Symbol;
request.volume = 1.0;
request.type = ORDER_TYPE_BUY;
request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
MqlTradeResult result;
OrderSend(request, result);
}
// Пересечение сверху вниз — продаём
if (fastMA[1] < slowMA[1] && fastMA[2] >= slowMA[2]) {
MqlTradeRequest request = {};
request.action = TRADE_ACTION_DEAL;
request.symbol = _Symbol;
request.volume = 1.0;
request.type = ORDER_TYPE_SELL;
request.price = SymbolInfoDouble(_Symbol, SYMBOL_BID);
MqlTradeResult result;
OrderSend(request, result);
}
}
Результат: Backtest за 3 года. Profit Factor 1.4. Стратегия работает на демо.
Кейс 4: Арбитраж между MOEX и крипто
Задача: Торговать спред между фьючерсом на BTC (MOEX) и спотом BTC/USDT (Binance).
Решение: WebAPI (Python).
Почему:
- Нужна интеграция с Binance API
- QUIK/MT5 не подключаются к крипто
Код (Python):
from tinkoff.invest import Client
import ccxt
# Подключаемся к MOEX и Binance
tinkoff = Client(TINKOFF_TOKEN)
binance = ccxt.binance()
def get_spread():
# Цена фьючерса на MOEX
moex_futures = tinkoff.market_data.get_last_prices(
figi=["BBG00XXXXXXX"] # FIGI фьючерса на BTC
)
moex_price = moex_futures.last_prices[0].price.units
# Цена спота на Binance
binance_ticker = binance.fetch_ticker('BTC/USDT')
binance_price = binance_ticker['last']
spread = moex_price - binance_price
return spread, moex_price, binance_price
def execute_arbitrage():
spread, moex_price, binance_price = get_spread()
# Если спред > 500 USDT — арбитраж
if spread > 500:
# Покупаем на Binance, продаём фьючерс на MOEX
binance.create_market_buy_order('BTC/USDT', 0.01)
tinkoff.orders.post_order(
figi="BBG00XXXXXXX",
quantity=1,
direction=OrderDirection.ORDER_DIRECTION_SELL,
order_type=OrderType.ORDER_TYPE_MARKET,
account_id=ACCOUNT_ID
)
print(f"Arbitrage executed: spread={spread}")
Результат: Спред появляется 2-3 раза в неделю. За месяц 6 сделок, profit +3.2%.
Проблемы каждой платформы
QUIK: Сложность настройки
Проблема: DDE-сервер, таблицы QUIK, Trans2QUIK.dll — всё это нужно настроить вручную.
Пример:
Вы установили QUIK. Написали скрипт на Python с Trans2QUIK. Запустили.
Ошибка:
Trans2Quik.dll not found
Оказывается, нужно:
- Скачать Trans2QUIK.dll отдельно
- Положить в папку с QUIK
- Настроить права доступа в QUIK (Настройки → Внешние подключения)
- Прописать путь к QUIK в коде
Потратили 2 часа.
Решение: Гайд по настройке QUIK на SmartLab.
Transaq: Только Финам
Проблема: Если ваш брокер — БКС, Открытие, Сбер — Transaq не подойдёт.
Альтернатива: QUIK или WebAPI.
MetaTrader 5: Ограничения опционов
Проблема: MT5 не поддерживает полноценную торговлю опционами на MOEX.
По данным форумов, опционы в MT5 работают, но:
- Нет Greeks (Delta, Gamma, Vega)
- Нельзя торговать спреды (покупка call + продажа put одновременно)
Решение: Для опционов — QUIK или WebAPI.
WebAPI: Нужно писать всё самому
Проблема: В QUIK/MT5 есть готовый стакан, графики, таблица заявок. В WebAPI — ничего.
Пример:
Вы пишете робота на WebAPI. Хотите видеть стакан в реальном времени.
Нужно:
- Подписаться на WebSocket
- Парсить данные
- Обновлять стакан в памяти
- Рисовать GUI (если нужна визуализация)
Код:
import asyncio
import websockets
import json
async def subscribe_orderbook():
uri = "wss://invest-public-api.tinkoff.ru/ws"
async with websockets.connect(uri) as ws:
# Подписка на стакан
await ws.send(json.dumps({
"token": TOKEN,
"subscribe": {
"order_book": {
"figi": SBER_FIGI,
"depth": 10
}
}
}))
# Получаем обновления
while True:
message = await ws.recv()
data = json.loads(message)
if 'order_book' in data:
print("BIDs:", data['order_book']['bids'][:5])
print("ASKs:", data['order_book']['asks'][:5])
asyncio.run(subscribe_orderbook())
Это только получение данных. Ещё нужны: логирование, обработка ошибок, reconnect, GUI.
Вывод: WebAPI даёт свободу, но требует больше кода.
Чек-лист: какую платформу выбрать
Ответьте на вопросы:
1. Какая скорость нужна?
- HFT (latency < 5 мс): QUIK Lua
- Средняя скорость (5-30 мс): Transaq, WebAPI, MT5
- Скорость не критична: Любая
2. Какая сложность стратегии?
- Простая индикаторная: MetaTrader 5
- HFT маркет-мейкинг: QUIK Lua
- ML/статистический арбитраж: WebAPI (Python)
- Интеграция с внешними API: WebAPI
3. Ваш брокер?
- Финам: Transaq или MT5 (бесплатно)
- БКС/Открытие/Сбер: QUIK или WebAPI
- Любой: WebAPI (REST API есть у всех)
4. Бюджет?
- Бесплатно: Transaq, MT5, WebAPI
- Готовы платить 60 тыс/год: QUIK
5. Опыт программирования?
- Новичок: MetaTrader 5 (MQL5 проще всего)
- Знаю Python: WebAPI
- Знаю Lua: QUIK Lua
- Знаю C++: Transaq (через C++ connector)
6. Операционная система?
- Windows: Любая платформа
- Linux/macOS: WebAPI (QUIK/MT5 только через Wine)
Моя личная рекомендация для разных людей
Человек 1: Новичок в алготрейдинге
- Опыт: Торговал вручную 1 год
- Стратегия: SMA-кросс
- Цель: Автоматизировать
Рекомендация: MetaTrader 5
Почему:
- Быстрый старт (30 минут)
- Встроенный бэктестер
- Не нужно настраивать QUIK
Начните с MT5. Если упрётесь в ограничения — переходите на QUIK или WebAPI.
Человек 2: Программист, новичок в трейдинге
- Опыт: Python developer, 3 года
- Знание рынка: читал книги
- Цель: попробовать алготрейдинг
Рекомендация: WebAPI (Tinkoff Invest)
Почему:
- Вы уже знаете Python
- WebAPI даст полный контроль
- Сможете экспериментировать с ML
Не тратьте время на изучение Lua или MQL5. Пишите на том, что знаете.
Человек 3: HFT-трейдер
- Опыт: торговал маркет-мейкингом на форексе
- Цель: перейти на MOEX
- Требования: latency < 5 мс
Рекомендация: QUIK Lua
Почему:
- Latency 1-3 мс (лучший результат)
- Работает с любым брокером
- Lua достаточно для HFT-логики
Заплатите за QUIK или найдите брокера, который даёт его бесплатно при обороте.
Человек 4: Квант с ML-стратегиями
- Опыт: data scientist, знаю TensorFlow
- Стратегия: LSTM-предсказание цены
- Цель: production-ready система
Рекомендация: WebAPI (Python) + собственная инфраструктура
Почему:
- ML требует Python
- Нужна интеграция с Jupyter, MLflow и т.д.
- QUIK/MT5 не подходят
Пишите на Python. Деплойте на сервер. Используйте Docker.
Гибридный подход: QUIK + Python
Есть компромисс: использовать QUIK для подключения к рынку, но писать логику на Python.
Схема:
- QUIK получает данные от брокера
- Python-скрипт подключается к QUIK через Trans2QUIK
- Логика робота на Python (можно использовать ML)
- Заявки отправляются через QUIK
Преимущества:
- Скорость QUIK (данные приходят быстро)
- Гибкость Python (можно ML, внешние API)
- Работает с любым брокером
Код:
from py_trans2quik import Trans2Quik
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
t2q = Trans2Quik()
t2q.connect("C:\\QUIK")
# Получаем исторические данные из QUIK
def get_historical_data(class_code, sec_code, interval, count):
candles = t2q.get_candles(class_code, sec_code, interval, count)
df = pd.DataFrame(candles)
return df
# Обучаем ML-модель
df = get_historical_data("TQBR", "SBER", "1H", 1000)
df['returns'] = df['close'].pct_change()
df['target'] = (df['returns'].shift(-1) > 0).astype(int)
X = df[['open', 'high', 'low', 'close', 'volume']].dropna()
y = df['target'].dropna()
model = RandomForestClassifier()
model.fit(X[:-1], y[:-1])
# Торгуем на основе предсказания
def trade():
current_data = get_historical_data("TQBR", "SBER", "1H", 1)
prediction = model.predict(current_data[['open', 'high', 'low', 'close', 'volume']])
if prediction[0] == 1:
t2q.send_transaction({
"ACTION": "NEW_ORDER",
"CLASSCODE": "TQBR",
"SECCODE": "SBER",
"OPERATION": "B",
"PRICE": current_data['close'].values[0],
"QUANTITY": "10"
})
Вывод: QUIK + Python = скорость + гибкость.
Итоги
QUIK — если:
- Нужен HFT (latency < 5 мс)
- Работаете с разными брокерами
- Готовы платить 60 тыс/год (или имеете оборот для бесплатного использования)
Transaq — если:
- Ваш брокер — Финам
- Нужен глубокий стакан (20 уровней)
- Хотите бесплатную альтернативу QUIK
MetaTrader 5 — если:
- Вы новичок
- Стратегия простая (индикаторная)
- Нужен быстрый старт
WebAPI — если:
- У вас сложная логика (ML, арбитраж)
- Нужна интеграция с внешними API
- Хотите полный контроль и независимость
Моё личное мнение:
Если сомневаетесь — начните с MetaTrader 5. Это самый быстрый способ понять, нравится ли вам алготрейдинг.
Если через месяц поймёте, что MT5 не хватает — переходите на WebAPI (если знаете Python) или QUIK (если нужен HFT).
Лучше попробовать и понять, чем гадать год, какую платформу выбрать.
Полезные ссылки:
Документация платформ:
Библиотеки для Python:
- py-trans2quik (QUIK)
- transaq-connector (Transaq)
- tinkoff-investments (Tinkoff API)
Статьи и исследования:
Где получить данные:
Обсуждение
Присоединяйтесь к обсуждению в нашем Telegram-чате!