DeepLOB: Лимиттик Заказ Китептериндеги Терең Окутуу
Лимиттик заказ китеби (limit order book) заманбап электрондук базарлардын борбордук маалымат структурасы болуп саналат. Ар бир сатып алуу сунушу, ар бир сатуу сунушу, ар бир жокко чыгаруу — баары LOB-до жашайт. Ондогон жылдар бою сандык изилдөөчүлөр бул маалыматтардан белгилерди (features) кол менен түзүшкөн: заказ теңдешсиздик катыштары, салмактанган орто баалар, кезек позициясынын сигналдары. DeepLOB башка жол тандады — ал гибриддик CNN-LSTM архитектурасын колдонуп, бул белгилерди түз чийки заказ китебинин снапшоттарынан үйрөнөт.
2019-жылы Oxford-Man институтунда Zhang, Zohren жана Roberts тарабынан жарыяланган DeepLOB бир гана терең тармак, чийки китеп маалыматтарында учтан-учка (end-to-end) окутулган, орто баа кыймылын алдын ала билүүдө күчтүү классикалык негиздерге (baseline) атаандаш же алардан жакшыраак экенин көрсөттү. Бирок, далилдер тууралуу так болушубуз керек. Көптөгөн макалалар шилтеме кылган эталондук FI-2010 маалымат жыйынтыгын авторлордун өздөрү жетишсиз деп эсептешет — "өтө кыска, дискретизацияланган (downsampled) жана азыраак ликвиддүү базардан алынган" — жана өздөрүнүн күчтүүрөөк натыйжасы катары Лондон биржасынын (LSE) маалыматтарында экинчи, алда канча чоң баалоону сунушташат. Ал LSE изилдөөсү беш окутуу акциясы менен беш тест акциясы боюнча болжол менен бир жылды камтыйт, болжол менен 100 миллиондон ашык үлгү, жана трансфердик окутууну (transfer learning) көрсөтөт: акциялардын бир жыйынтыгында окутулган модель мурда көрбөгөн акцияларда дагы деле алдын ала билет. Так ошол трансфер натыйжасы, FI-2010 рейтинги эмес, макаланын чыныгы башкы жыйынтыгы. Бул жазуу архитектураны, математиканы, чыныгы сандарды жана иштеп жаткан PyTorch кайра ишке ашырууну талдайт.
Маалымат Структурасы катары Лимиттик Заказ Китеби

Лимиттик заказ китеби эки иреттелген тизмени сактайт — bid (сатып алуу заказдары) жана ask (сатуу заказдары) — ар бири баа деңгээли боюнча уюштурулган. Ар бир деңгээлде китеп бааны жана аткарылбаган заказдардын жалпы көлөмүн каттайт.
деңгээлдүү заказ китеби үчүн убагындагы бир снапшот мааниси бар вектор болуп саналат:
бул жерде жана — деңгээлиндеги сатуу баасы жана көлөмү, ал эми , — сатып алуу тарабынын тиешелүү маанилери. 1-деңгээлде эң жакшы bid жана эң жакшы ask (BBO) болот; алардын айырмасы bid-ask спреди.
FI-2010 эталондук маалымат жыйынтыгында , бул снапшот үчүн 40 белги берет. FI-2010 NASDAQ Nordic-те (Kesko, Outokumpu, Sampo, Rautaruukki, Wartsila) беш фин акциясынын болжол менен 4 миллион чийки лимиттик заказ билдирүүсүнөн, 2010-жылдын 1-14-июну аралыгындагы он катар соода күнүндө түзүлгөн. Маанилүүсү, DeepLOB 4 миллион снапшотто окутулбайт: эталон бул билдирүүлөрдү (ар 10 окуяда) 394,337 үлгүдөн турган нормалдаштырылган көрүнүшкө чейин дискретизациялайт (downsample). Так ошол дискретизацияланган, нормалдаштырылган түр модель чындыгында көргөн нерсе болуп саналат — авторлордун FI-2010-ду акыркы сөз катары карабоо керек экенине эскертүүсүнүн бир себеби ушул.
Орто Баа жана Анын Кыймылдары
убагындагы орто баа эң жакшы bid менен ask-тын ортосу болуп саналат:
DeepLOB окуянын келечектеги горизонтунда орто баа кыймылынын багытын алдын ала билет. Белги (label) тегиздетилген киреше (return) болуп саналат, бирок адабиятта эки тегиздөө конвенциясы бар экенин эске алуу керек, алар өз ара алмаштырылбайт:
- Келечек-орточо vs. учурдагы баа (Tsantekidis et al.): кийинки окуя боюнча орточо орто бааны чийки учурдагы орто баа менен салыштырат.
- Келечек-орточо vs. мурунку-орточо (Ntakaris et al., каноникалык FI-2010 белгиси, ошондой эле DeepLOB өзүнүн LSE маалыматтары үчүн колдонгон): маалымдама (reference) да, максат (target) да тегизделет.
Маалымдаманы тегиздөө (жалгыз гана келечекти эмес) жалгыз тик термелүүлөрүнөн келип чыккан белги ызы-чуусун бир кыйла азайтат, ошондуктан мурунку/кийинки-орточо формасы жакшыраак көрүнөт. Кайсынысын колдонсоңуз да, үзгүлтүксүз киреше туруктуу чектерин колдонуп үч класска дискретизацияланат — өсүү, түшүү, туруктуу:
FI-2010 маалымат жыйынтыгы беш алдын ала билүү горизонту үчүн белгилерди сунуштайт: окуя.
Салттуу LOB Белгилери
Терең окутууга чейин изилдөөчүлөр кол менен жасалган белгилерге таянышкан. Муну түшүнүү маанилүү, себеби DeepLOB атайын алардын көбүнө окшош болгудай түзүлгөн — анын архитектурасы бул чоңдуктарды так кайталабаса да, алар менен негизделген.
Заказ Китебинин Теңдешсиздиги (OBI)
Эң көп колдонулган микроструктура сигналы. Китептин үстү жагында:
Сатуу көлөмүнө салыштырмалуу сатып алуу көлөмүнүн көбүрөөк болушу жогору карай басымды билдирет. Көп деңгээлдүү теңдешсиздик деңгээл боюнча жыйындыланат:
Көлөм менен Салмактанган Орто Баа
Стандарттуу орто баа эки тарапты бирдей салмактайт. Көлөм менен салмактанган орто баа (ошондой эле салмактанган орто, же VAMP деп аталат) китептин оор жагына карай оодарылат. Китептин үстү жагынын теңдешсиздигин деп жазсак, бул эки баанын теңдешсиздик менен салмактанган орточосу:
Кайчылаш салмактоого көңүл буруңуз: ask баасы bid көлөмү менен салмакталат жана тескерисинче. Bid көлөмү басымдуу болгондо (), салмактанган орто ask жагына жылат — бул теңдешсиз китептин оор жагына карай жылуу менен чечилерин күтүүнү чагылдырат.
Аталышы жөнүндө эскертүү. Бул статикалык, көлөм менен салмактанган орто Stoikov-дун микробаасы эмес. Stoikov-дун микро-баасы (2018) — спред менен теңдешсиздик кантип өнүгөрүн рекурсивдүү оңдоо аркылуу алынган мартингейл менен оңдолгон баалоочу — Stoikov-дун бүткүл негизги оюу — наивдүү салмактанган орто бир тараптуу (biased) жана мартингейл эместиги. Булар эки бөлөк нерсе; биз бул жерде салмактанган ортону анын жөнөкөйлүгү үчүн колдонобуз, микробаанын ордуна эмес.
Тереңдик Теңдешсиздиги
BBO-дон тышкары китептин формасын өлчөйт:
Спред жана Салыштырмалуу Спред
Бул белгилер күчтүү, бирок чектелген. Аларды долбоорлоо үчүн домен боюнча адистик талап кылынат, татаал сызыктуу эмес өз ара аракеттенүүлөрдү камтыбайт жана удаалаш снапшоттордун ортосундагы убакыттык динамиканы этибарга албайт. DeepLOB бул үч чектөөнү тең чечет.
DeepLOB Архитектурасы

Архитектурада үч блок бар, ар биринин өзүнчө ролу бар:
- Конволюциялык блок — заказ китебинин снапшотунан мейкиндик белгилерди алат
- Inception модулу — көп масштабдуу убакыттык үлгүлөрдү (patterns) камтыйт
- LSTM блогу — убакыт боюнча удаалаш көз карандылыктарды моделдейт
Тармактын кириши формасындагы тензор болуп саналат, бул жерде — ретроспективдик терезе (макалада 100 убакыт кадамы), ал эми — эки тарапта тең баа жана көлөмдүн 10 деңгээли үчүн.
Блок 1: Конволюциялык Белги Алуу
Алгачкы конволюциялык катмарлар ар бир деңгээлде баа менен көлөмдүн ортосундагы өз ара аракеттенүүнү үйрөнүү үчүн белги өлчөмү боюнча иштейт.
1-катмар: Ар бир баа-көлөм жубуна колдонулган фильтр өлчөмү жана кадамдагы конволюция. Бул ар бир жубун бир белгиге жыйынтыктайт — ар бир деңгээлде "баа-көлөм өз ара аракеттенүүсүн" эсептөөгө окшош. Туурасы 40-тан 20-га чейин кичирейет.
2-катмар: Ошол эле деңгээлдеги дал келген bid-ask жуптары боюнча иштеген , кадамдуу конволюция. Бул деңгээл боюнча спред жана теңдешсиздик маалыматын камтыйт. Туурасы 20-дан 10-го чейин кичирейет.
3-катмар: Бардык 10 деңгээл боюнча интеграцияланган конволюция, тереңдик өлчөмүн 1 туурасына чейин жыйынтыктайт. Бул толук тереңдик профилин коддогон ар бир убакыт кадамы үчүн бир жыйынтыкталган белги чыгарат.
Ар бир / кадамынан кийин убакыт огу боюнча эки конволюция болот, ар бири LeakyReLU активациясы менен жана топтомдук нормалдаштыруу (batch normalization) менен. padding=(1, 0) бар бул конволюциялары убакыт өлчөмүн сактабай тургандыгын эске алыңыз: ар бири аны бир кадамга кыскартат (). 1-3 блоктордогу ушундай алты катмар боюнча убакыт огу inception модулуна чейин 100-дөн 94-кө чейин кичирейет — бул төмөндөгү коддогу форма түшүндүрмөлөрүндө ачык көрсөтүлгөн.
Дизайн атайын чоң мейкиндик фильтрлеринен алыс болот. фильтрлер LOB маалыматтарынын табигый жупташуу структурасын урматтайт — баа көлөм менен, bid ask менен. Бул индуктивдүү ыклым (inductive bias) чечүүчү: фильтр каржылык мааниси жок жол менен коңшу деңгээлдерди жана тараптарды аралаштырмак.
Блок 2: Inception Модулу
Конволюциялык блок 40 белгини ыкчам мейкиндик көрүнүшүнө (туурасы 1) чейин азайткандан кийин, inception модулу бир нече убакыттык масштабда бир учурда үлгүлөрдү камтуу үчүн убакыт өлчөмү боюнча иштейт.
DeepLOB inception модулунда төрт параллель жол бар, ар бири 32 канал чыгарат, баары бириктирилген:
- тар өткөөл (bottleneck) убакыттык конволюция: кыска мөөнөттүү убакыттык үлгүлөр (3 убакыт кадамы)
- тар өткөөл убакыттык конволюция: орто мөөнөттүү убакыттык үлгүлөр (5 убакыт кадамы)
- max-pool конволюция: тегизделген, дискретизацияланган көрүнүштү сактаган пулинг жолу
- ( азайтуулары убакыттык конволюциялардан мурда чекиттик-убакыттагы тар өткөөлдөр катары иштейт)
Ар бир убакыттык жол симметриялуу толтурууну (padding) колдонот, ошентип убакыт өлчөмү inception блогунун ичинде сакталат (жогорудагы конволюциялык блоктордон айырмаланып). Чыгыштар канал өлчөмү боюнча бириктирилет, бул тармакка бир учурда көп масштабдуу убакыттык белгилерге жетүүгө мүмкүнчүлүк берет.
Бул GoogLeNet inception архитектурасынан шыктанган, бирок 2D сүрөттөрдүн ордуна 1D убакыттык маалыматтарга ыңгайлаштырылган. Негизги түшүнүк — LOB динамикасы бир нече убакыт масштабында иштейт: тиктен-тикке ызы-чуу, кыска мөөнөттүү моментум жана узак мөөнөттүү орточого кайтуу (mean reversion) баары бирге жашайт.
Төмөндөгү PyTorch кайра ишке ашыруу жөнөкөйлөштүрүлгөн үч жолдуу вариантты сунуштайт (эки убакыттык конволюция плюс жол), ошентип код окууга оңой бойдон калат; ал max-pool жолун калтырат. Биз муну так белгилейбиз, себеби бул макаладан четтөө, түпнуска модуль эмес.
Блок 3: LSTM Удаалаштык Моделдөө
Inception модулунун чыгышы толук -узундуктагы удаалаштыкты иштеткен LSTM катмарына берилет. LSTM конволюциялар өз алдынча жоготуп алчу алыскы аралыктагы убакыттык көз карандылыктарды камтыйт — режим өзгөрүүлөрү, суткалык эффекттер жана өнүгүп жаткан базар шарттары.
LSTM-дин акыркы жашыруун абалы үч класс (өсүү, түшүү, туруктуу) боюнча ыктымалдуулук бөлүштүрүүсүн чыгаруу үчүн softmax активациясы бар толук байланышкан катмардан өтөт.
Жоготуу Функциясы
Модель категориялык кросс-энтропия менен окутулат:
бул жерде — one-hot коддолгон чыныгы белги, — классы үчүн алдын ала билинген ыктымалдуулук.
PyTorch Кайра Ишке Ашыруу
Түпнуска DeepLOB TensorFlow негизинде Keras-та курулган; авторлордун репозиторийи (zcakhaa) кийинчерээк PyTorch портун кошту. Төмөндөгү код — биздин өзүбүздүн көрсөтмөлүү PyTorch кайра ишке ашыруубуз, расмий эмес. Ал макаладан эки жол менен четтейт, аларды inline белгилейбиз: ал inception max-pool жолун калтырат (төрттүн ордуна үч жол), жана канал санын көбөйтөт. Макала конволюциялык блоктор боюнча 16 фильтр жана inception жолу боюнча 32 фильтр колдонот (LSTM кириши ), бул болжол менен 60 миң параметрдүү ыкчам модель берет. Төмөндөгү үзүндү 32 конв / 64 inception фильтрин колдонот (LSTM кириши 192) — ички жактан шайкеш жана иштетүүгө болот, бирок түпнускадан оорураак. Макалага дал келүү үчүн конв каналдарын 16-га, inception каналдарын 32-ге, ал эми input_size=96 кылып коюңуз.
import torch
import torch.nn as nn
class DeepLOB(nn.Module):
"""
DeepLOB-style CNN-Inception-LSTM for limit order books.
Reimplementation inspired by Zhang, Zohren, Roberts (2019),
IEEE Transactions on Signal Processing, arXiv:1808.03668.
NOTE: this is an illustrative reimplementation, NOT the official model.
Differences from the paper:
- inception has 3 paths here vs 4 in the paper (max-pool path omitted);
- channel counts are scaled up (paper: 16 conv / 32 inception, input 96).
Input shape: (batch_size, 1, T, 40)
T = lookback window (e.g. 100)
40 = 10 levels x 4 features (ask_price, ask_vol, bid_price, bid_vol)
"""
def __init__(self, num_classes: int = 3, T: int = 100):
super().__init__()
self.num_classes = num_classes
self.conv1 = nn.Sequential(
nn.Conv2d(1, 32, kernel_size=(1, 2), stride=(1, 2)),
nn.LeakyReLU(negative_slope=0.01),
nn.BatchNorm2d(32),
nn.Conv2d(32, 32, kernel_size=(4, 1), padding=(1, 0)), # time -1
nn.LeakyReLU(negative_slope=0.01),
nn.BatchNorm2d(32),
nn.Conv2d(32, 32, kernel_size=(4, 1), padding=(1, 0)), # time -1
nn.LeakyReLU(negative_slope=0.01),
nn.BatchNorm2d(32),
)
self.conv2 = nn.Sequential(
nn.Conv2d(32, 32, kernel_size=(1, 2), stride=(1, 2)),
nn.LeakyReLU(negative_slope=0.01),
nn.BatchNorm2d(32),
nn.Conv2d(32, 32, kernel_size=(4, 1), padding=(1, 0)), # time -1
nn.LeakyReLU(negative_slope=0.01),
nn.BatchNorm2d(32),
nn.Conv2d(32, 32, kernel_size=(4, 1), padding=(1, 0)), # time -1
nn.LeakyReLU(negative_slope=0.01),
nn.BatchNorm2d(32),
)
self.conv3 = nn.Sequential(
nn.Conv2d(32, 32, kernel_size=(1, 10)),
nn.LeakyReLU(negative_slope=0.01),
nn.BatchNorm2d(32),
nn.Conv2d(32, 32, kernel_size=(4, 1), padding=(1, 0)), # time -1
nn.LeakyReLU(negative_slope=0.01),
nn.BatchNorm2d(32),
nn.Conv2d(32, 32, kernel_size=(4, 1), padding=(1, 0)), # time -1
nn.LeakyReLU(negative_slope=0.01),
nn.BatchNorm2d(32),
)
self.inp1 = nn.Sequential(
nn.Conv2d(32, 64, kernel_size=(1, 1), padding=(0, 0)),
nn.LeakyReLU(negative_slope=0.01),
nn.BatchNorm2d(64),
)
self.inp2 = nn.Sequential(
nn.Conv2d(32, 64, kernel_size=(1, 1), padding=(0, 0)),
nn.LeakyReLU(negative_slope=0.01),
nn.BatchNorm2d(64),
nn.Conv2d(64, 64, kernel_size=(3, 1), padding=(1, 0)),
nn.LeakyReLU(negative_slope=0.01),
nn.BatchNorm2d(64),
)
self.inp3 = nn.Sequential(
nn.Conv2d(32, 64, kernel_size=(1, 1), padding=(0, 0)),
nn.LeakyReLU(negative_slope=0.01),
nn.BatchNorm2d(64),
nn.Conv2d(64, 64, kernel_size=(5, 1), padding=(2, 0)),
nn.LeakyReLU(negative_slope=0.01),
nn.BatchNorm2d(64),
)
self.lstm = nn.LSTM(
input_size=192, # 64 * 3 paths from the simplified inception
hidden_size=64,
num_layers=1,
batch_first=True,
)
self.fc = nn.Linear(64, num_classes)
def forward(self, x: torch.Tensor) -> torch.Tensor:
"""
Args:
x: Tensor of shape (batch, 1, T, 40)
Returns:
Tensor of shape (batch, num_classes)
"""
h = self.conv1(x) # (batch, 32, T-2, 20)
h = self.conv2(h) # (batch, 32, T-4, 10)
h = self.conv3(h) # (batch, 32, T-6, 1) e.g. T=100 -> 94
h_inp1 = self.inp1(h) # (batch, 64, T-6, 1)
h_inp2 = self.inp2(h) # (batch, 64, T-6, 1)
h_inp3 = self.inp3(h) # (batch, 64, T-6, 1)
h = torch.cat([h_inp1, h_inp2, h_inp3], dim=1) # (batch, 192, T-6, 1)
h = h.squeeze(-1) # (batch, 192, T-6)
h = h.permute(0, 2, 1) # (batch, T-6, 192)
h, _ = self.lstm(h)
h = h[:, -1, :] # take last hidden state
out = self.fc(h)
return out
Маалыматтарды Алдын Ала Иштетүү
FI-2010 маалымат жыйынтыгы z-score боюнча нормалдаштырылган түрдө берилет. Тирүү (live) заказ китеби маалыматтары үчүн окшош түрдө нормалдаштыруу керек:
import numpy as np
from torch.utils.data import Dataset
class LOBDataset(Dataset):
"""Dataset for limit order book snapshots."""
def __init__(
self,
data: np.ndarray,
labels: np.ndarray,
T: int = 100,
):
"""
Args:
data: shape (num_snapshots, 40), raw LOB features
labels: shape (num_snapshots,), class labels {0, 1, 2}
T: lookback window length
"""
self.data = data
self.labels = labels
self.T = T
self.mean = data[:len(data) // 2].mean(axis=0)
self.std = data[:len(data) // 2].std(axis=0)
self.std[self.std == 0] = 1.0
self.data = (self.data - self.mean) / self.std
def __len__(self) -> int:
return len(self.data) - self.T
def __getitem__(self, idx: int):
x = self.data[idx : idx + self.T].reshape(1, self.T, 40)
y = self.labels[idx + self.T - 1]
return torch.tensor(x, dtype=torch.float32), torch.tensor(
y, dtype=torch.long
)
Окутуу Циклы
def train_deeplob(
model: DeepLOB,
train_loader,
val_loader,
epochs: int = 50,
lr: float = 0.01,
device: str = "cuda",
):
model = model.to(device)
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=lr, eps=1)
best_val_f1 = 0.0
for epoch in range(epochs):
model.train()
train_loss = 0.0
for x_batch, y_batch in train_loader:
x_batch = x_batch.to(device)
y_batch = y_batch.to(device)
optimizer.zero_grad()
logits = model(x_batch)
loss = criterion(logits, y_batch)
loss.backward()
optimizer.step()
train_loss += loss.item()
model.eval()
all_preds, all_labels = [], []
with torch.no_grad():
for x_val, y_val in val_loader:
x_val = x_val.to(device)
preds = model(x_val).argmax(dim=1).cpu()
all_preds.extend(preds.numpy())
all_labels.extend(y_val.numpy())
from sklearn.metrics import f1_score
val_f1 = f1_score(all_labels, all_preds, average="weighted")
print(
f"Epoch {epoch+1}/{epochs} | "
f"Train Loss: {train_loss/len(train_loader):.4f} | "
f"Val F1: {val_f1:.4f}"
)
if val_f1 > best_val_f1:
best_val_f1 = val_f1
torch.save(model.state_dict(), "deeplob_best.pt")
Түпнуска макаладан алынган негизги окутуу гиперпараметрлери:
- Оптимизатор: бар Adam (адаттан тыш чоң — ызы-чуулуу каржылык маалыматтардагы жаңылоолорду туруктандырууга жардам берет)
- Окуу ылдамдыгы: 0.01
- Топтом өлчөмү: 32
- Ретроспективдик терезе: убакыт кадамы
Биз валидацияда тактыктын (accuracy) ордуна салмактанган F1-ди байкайбыз, себеби үч класс теңдешсиз — жана кийинки бөлүм көрсөткөндөй, F1 — түпнуска макала так ошол себептен баса белгилеген метрика.
DeepLOB Эмнени Камтуу Үчүн Курулган

DeepLOB-дун жагымдуу бир жагы — анын блоктору жогорудагы кол менен жасалган белгилер менен канчалык тыгыз негизделгендиги. Бул жерде этияттуу болуу керек: макала муну дизайн интуициясы катары сунуштайт, окутулган тармактын далилденген касиеттери катары эмес. Ал фильтр визуализацияларын, активация-теңдешсиздик корреляцияларын, же LSTM эмнеге көңүл бурарын талдоону жарыялабайт. Ошондуктан төмөнкүнү өлчөнгөн жыйынтыктар эмес, архитектуралык ниет катары окуңуз.
Биринчи конволюциялык блок. фильтрлер ар бир деңгээлде бааны көлөм менен жупташтырат. Структуралык жактан, бул көлөм менен салмактанган бааны түзгөн операция менен бирдей — макала биринчи катмарды анын белги карталары микробаага окшош чоңдукту түзөрүн белгилөө менен негиздейт. Тармак ошол үй-бүлөдөгү бир нерсени калыбына келтирүү үчүн курулган; биз анын кандайдыр бир так баалоочуну далилдүү түрдө кайра ачарын билдирбейбиз.
Экинчи конволюциялык блок. Bid-ask жуптары боюнча иштөө менен, бул фильтрлер бир нече деңгээлде теңдешсиздикке окшош белгилерди үйрөнүүгө багытталган — кайрадан, далилденген корреляция менен эмес, курулуш боюнча.
Inception модулу. Көп масштабдуу убакыттык конволюциялар ар кандай жыштыктарда моментумду камтууга багытталган: жол чекиттик-убакыттагы структурага жооп берет, жол кыска мөөнөттүү тенденцияларга, жол бир аз узагыраак тенденцияларга, ал эми (толук модулда) max-pool жолу тегизделген көрүнүшкө.
LSTM катмары. Кайталануучу компонент конволюциялар көрсөтө албаган алыскы аралыктагы көз карандылыктардын эсин кошот — режим өзгөрүүлөрү жана суткалык эффекттер. Биз күчтүүрөөк билдирүүлөрдөн алыс болобуз (мисалы, LSTM туруксуз режимдерде акыркы маалыматтарды кайра салмактаган "адаптивдүү көңүл буруу" (adaptive attention) ишке ашырат дегендей); макала муну көрсөтпөйт.
FI-2010 боюнча Аткарылышы
Түпнуска макала эки протоколду баалайт. Setup 1 маалымат жыйынтыгынын мурунку нормалдаштыруу бөлүнүшүн колдонот; Setup 2 — көптөгөн кийинки иштер салыштырган терең окутуу орнотуусу. FI-2010 класс теңдешсиз болгондуктан, макала тактыкты эмес F1-ди баса белгилейт, жана нейрондук эмес негиздер (SVM, MLP) үчүн precision/recall негизиндеги сандарды билдирет. Мына, чыныгы Setup 2 сандары (F1, %):
| Горизонт (k) | SVM | MLP | CNN-I | LSTM | DeepLOB |
|---|---|---|---|---|---|
| 10 | 35.88 | 48.27 | 55.21 | 66.33 | 83.40 |
| 20 | — | — | — | — | 72.82 |
| 50 | — | — | — | — | 80.35 |
учурунда DeepLOB ошондой эле 83.40 F1 менен катар 84.47% тактыкты билдирет. Setup 2 болгону билдирет — бул жерде саптары жок. (Setup 1 билдирет, тиешелүүлүгүнө жараша 77.66 / 74.96 / 76.58 DeepLOB F1 маанилери менен.) Жогорудагы сызыкчалар макаланын бул протоколдо ошол горизонттордо жадыбалдаштырбаган негиз клеткаларын белгилейт.
Бир нече байкоо көзгө урунат:
- DeepLOB кыска горизонтто негиздерди чоң айырма менен басып озот. учурунда анын F1 (83.40) LSTM (66.33), CNN-I (55.21), MLP (48.27) жана SVM (35.88)-ден алда канча жогору. Сапаттык иреттүүлүк — жөнөкөй CNN, MLP жана SVM-ден жогору терең кайталануучу-конволюциялык моделдер — бекем жыйынтык болуп саналат.
- Горизонт тенденциясы монотондуу эмес, "узунураак жеңилирээк" деген эмес. Setup 2 боюнча, DeepLOB-дун F1-и жылганда болот — U-сымал үлгү, эң кыйыны, таза жогору карай жүрүш эмес. Горизонт "жеңил" болобу деген нерсе орнотууга, чегине, жана белги-тегиздөө схемасына катуу көз каранды; биз бул сандардан универсалдуу мыйзам окубашыбыз керек.
- DeepLOB ар бир клеткада ар бир классикалык ыкманы басып озбойт. C(TABL) сыяктуу күчтүү негиздерге каршы кээ бир горизонттордо айырмалар тарылат, ошондуктан "бардык жерде бардык классикалык ыкмалардан ашып түшөт" деген билдирүү иштин жагдайын ашыра көрсөтөт. Коргоого болгон билдирүү — ал атаандаштыктан эң жакшыга чейин, жана кыска горизонтто анык эң жакшы.
Жана дагы бир жолу: макаланын өз көз карашы боюнча FI-2010 маселени чечүү үчүн өтө кичине жана өтө дискретизацияланган. Анын күчтүүрөөк далили — DeepLOB акциялардын бир жыйынтыгында окутулуп, мурда көрбөгөн акцияларда дагы деле алдын ала билген LSE изилдөөсү — FI-2010 көрсөтө албаган трансфердик окутуу жыйынтыгы.
LOBFrame жана Кайра Жаңыртуу Кризиси

LOBFrame эталондук системасы (Briola, Bartolucci, Aste, 2024) бул жыйынтыктарга сергитүүчү толуктоо сунуштайт. DeepLOB-дун архитектурасы туура болсо дагы, система бир нече маанилүү эскертүүлөрдү белгилейт:
Микроструктурага көз карандылык. Модель аткарылышы ар кандай микроструктуралык мүнөздөмөлөрү бар акциялардын арасында бир кыйла өзгөрөт. Ликвиддүү, ири-тикт акцияларды ликвиддүү эмес, кичине-тикт куралдарга караганда алдын ала билүү оңоюраак. Бир акцияда күчтүү көрүнгөн модель башкасында бир кыйла начарлашы мүмкүн.
Алдын ала билүү жана пайда. Жогорку классификация тактыгы автоматтык түрдө соода пайдасына айланбайт. LOBFrame алдын ала билинген кыймылдын bid-ask спредин жеңүү үчүн жетиштүү чоң экенине байланыштуу метрикаларды баса белгилейт. Модель спредди жеңүү үчүн жетиштүү жиш, жана жетиштүү чоң кыймылдарда туура болушу керек — ал эми тар спредд акциялар үчүн бул чек жогору.
Белгиге сезгичтик. чегин жана горизонтун тандоо билдирилген тактыкка да, алдын ала билүүлөрдүн практикалык баалуулугуна да олуттуу таасир этет. Өтө тар белгилер ызы-чуулуу максаттарды жаратат; өтө кең белгилер тривиалдуу түрдө "так", бирок пайдасыз алдын ала билүүлөрдү жаратат.
DeepLOB-дон Тышкары: Учурдагы Ландшафт

DeepLOB жарыялангандан бери бир нече кеңейтүү пайда болду:
Лимиттик заказ китептери үчүн трансформерлер (Wallbridge, 2020). Кийинки адабиятта көбүнчө бош түрдө "TransLOB" деп аталган модель өзү маскаланган көп баштуу өзүнчө көңүл бурууда (self-attention) кийинки себептик/дилатацияланган конволюциялык белги алуучу болуп саналат — жөн гана LSTM Трансформерге алмаштырылган DeepLOB эмес; ал inception+конв стегин кайра колдонбойт. Ал өз мезгили үчүн FI-2010 боюнча жаңы заманбап деңгээлди (state of the art) билдирди.
Крипто-домен варианттары. Бир нече топ DeepLOB стилиндеги архитектураларды заказ китеби динамикасы акциялардан бир кыйла айырмаланган криптовалюта базарларына колдонот — кеңирээк спредд, 24/7 соода, жана баары кайра окутууну талап кылган башка катышуучулар аралашмасы.
Көңүл буруу менен күчөтүлгөн варианттар. Бир иш багыты inception жана LSTM блоктору арасында көп баштуу көңүл бурууну кошот, бул тармакка учурдагы алдын ала билүү үчүн эң маалыматтуу деңгээлдерге же убакыт кадамдарына көңүл буруу мүмкүнчүлүгүн берет.
LOB-Bench (Nagy, Frey, Li, Sarkar, Vyetrenko, Zohren, Calinescu, Foerster, 2025). Бул эталон көңүлдү алдын ала билүүдөн генерацияга бурат, заказ китеби маалыматтарынын генеративдүү моделдеринин канчалык чыныгы экенин баалайт — багыттуу божомолдоодон көрө бэктестинг жана агентти окутуу үчүн тиешелүү.
Өндүрүш үчүн Практикалык Ойлор
Эгер сиз тирүү (live) соода системасында DeepLOB стилиндеги модельди жайгаштырууну карап жатсаңыз, бир нече инженердик маселелер пайда болот:
Кечигүү (Latency)
Модель сиздин соода системаңыздын кечигүү бюджетинин чегинде алдын ала билүүлөрдү чыгарышы керек. Миллисекунддан аз кечигүүдө иштеген HFT системалары үчүн, атүгүл оптималдаштырылган PyTorch корутунду чыгаруу да өтө жай болушу мүмкүн. Опциялар мыналарды камтыйт:
- TensorRT оптималдаштыруусу менен ONNX экспорту
- INT8-ге кванттоо
- Кечигүүгө эң сезгич колдонмолор үчүн FPGA жайгаштыруу
Маалымат Түтүгү
Модель туруктуу жыштыкта нормалдаштырылган, тегизделген заказ китеби снапшотторун күтөт. Тажрыйбада, LOB жаңыртуулары асинхрондуу түрдө келет. Сизге керек:
- Китептин учурдагы абалын сактаган снапшот кайра куруу кыймылдаткычы
- кириш тензорун чыгарган туруктуу жыштыктагы сэмплер
- Жылмалуучу статистиканы колдонгон онлайн нормалдаштыруу
Белгинин Туруктуулугу
Окутуу маалыматтарында эсептелген z-score нормалдаштыруу параметрлери убакыттын өтүшү менен четтейт. Баалар өзгөрөт, туруксуздук режимдери жылат, базар структурасы өнүгөт. Өндүрүштүк системага мыналар керек:
- Жылмалуучу нормалдаштыруу терезелери (мисалы, статистиканы күн сайын кайра эсептөө)
- Модельди кайра окутууну иштетүү үчүн режимди аныктоо
- Кириш бөлүштүрүүсүнүн жылышын байкоо
Микроструктурага Ашыкча Ыңгайлашуу (Overfitting)
LOB үлгүлөрү аянтка (venue) жана куралга тиешелүү. NASDAQ акцияларында окутулган модель кайра окутуусуз Binance BTC/USDT-де иштебейт. Атүгүл ошол эле аянттын ичинде да, моделдер төмөнкүлөргө ашыкча ыңгайлашышы мүмкүн:
- Тик өлчөмүнүн режими (ири-тикт vs кичине-тикт акциялар)
- Суткалык убакыт үлгүлөрү (ачылуу аукциону, түшкү тынчтык, жабылуу кросу)
- Убакыттын өтүшү менен өзгөргөн маркет-мейкер жүрүм-туруму
Корутунду
DeepLOB базар микроструктурасына терең окутуунун таза, жакшы негизделген колдонмосун билдирет. Анын үч блоктук архитектурасы — мейкиндик белгилер үчүн CNN, көп масштабдуу убакыттык үлгүлөр үчүн inception, удаалаш көз карандылыктар үчүн LSTM — лимиттик заказ китеби маалыматтарынын структурасына табигый түрдө дал келет.
Негизги түшүнүк болгону терең модель кол менен жасалган белгилерге дал келе алат же алардан ашып түшө алат дегенде эмес, ошондой эле архитектуранын индуктивдүү ыклымдары — фильтрлер, inception параллелизми, кайталануучу эс — заказ китептери кантип иштээрин чагылдырган чыныгы домен билимин коддойт дегенде. Бул каржылык маалыматтарга ыргытылган жалпы терең тармак эмес; бул лимиттик заказ китебинин так геометриясынын тегерегинде долбоорлонгон архитектура. Жана анын эң ишенимдүү далили авторлордун өздөрү ишенбеген FI-2010 рейтинги эмес, LSE маалыматтарынын бир жылы боюнча трансфердик окутуу жыйынтыгы.
Практиктер үчүн DeepLOB күчтүү негиз жана пайдалуу курулуш блогу болуп саналат. Изилдөөчүлөр үчүн ал структураланган каржылык маалыматтардагы аткарылышты болгону модель масштабы эмес, ойлонулган архитектура дизайну айдап жатканын көрсөтөт. Болгону чыныгы сандарды келтирүүнү, белги схемасын байкоону, жана классификация тактыгын соода пайдасынан дагы деле алыс нерсе катары карап туруу керектигин унутпаңыз.
Шилтемелер
-
Zhang, Z., Zohren, S., & Roberts, S. (2019). DeepLOB: Deep Convolutional Neural Networks for Limit Order Books. IEEE Transactions on Signal Processing, 67(11), 3001-3012. arXiv:1808.03668
-
Ntakaris, A., Magris, M., Kanniainen, J., Gabbouj, M., & Iosifidis, A. (2018). Benchmark Dataset for Mid-Price Forecasting of Limit Order Book Data with Machine Learning Methods. Journal of Forecasting, 37(8), 852-866. arXiv:1705.03233
-
Briola, A., Bartolucci, S., & Aste, T. (2024). Deep Limit Order Book Forecasting (LOBFrame). arXiv:2403.09267
-
Wallbridge, J. (2020). Transformers for Limit Order Books. arXiv:2003.00130
-
Cont, R., Kukanov, A., & Stoikov, S. (2014). The Price Impact of Order Book Events. Journal of Financial Econometrics, 12(1), 47-88.
-
Stoikov, S. (2018). The Micro-Price: A High-Frequency Estimator of Future Prices. Quantitative Finance, 18(12), 1959-1966.
-
Nagy, P., Frey, S., Li, K., Sarkar, B., Vyetrenko, S., Zohren, S., Calinescu, A., & Foerster, J. (2025). LOB-Bench: Benchmarking Generative AI for Finance — an Application to Limit Order Book Data. ICML 2025. arXiv:2502.09172
-
DeepLOB code (original in Keras/TensorFlow; the repository also provides a PyTorch port): github.com/zcakhaa/DeepLOB-Deep-Convolutional-Neural-Networks-for-Limit-Order-Books
Authors
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.