← Макалаларга кайтуу
June 3, 2025
5 мүн окуу

CCXT: WebSocket ордербук методдору чындыгында кантип иштейт

CCXT: WebSocket ордербук методдору чындыгында кантип иштейт
#CCXT
#WebSocket
#orderbook
#exchanges
#API
#trading
#cryptocurrency
📖
Part 1 of 6 · Collection
Order Book & Market Microstructure

Салам! Бүгүн соода системаларынын иштеп чыгуучулары үчүн эң маанилүү темалардын бирин карайбыз — CCXT-те ордербуктарды алуу үчүн WebSocket методдору кантип иштейт. Эгер сизде "эмне үчүн бул метод документацияда бар, бирок иш жүзүндө иштебейт?" же "100+ соода жупту байкоо үчүн кайсы методду тандоо керек?" деген суроолор туулса, бул макала сиз үчүн.

Киришүү: бул эмне үчүн маанилүү

Рынок маалыматтарын чогултуу үчүн CCXT менен иштегенде, көптөгөн адамдар маанилүү суроолорго туш болушат:

  • Ордербуктар үчүн кайсы WebSocket методдору чынында ар кандай биржаларда колдоого ээ?
  • Методдор трафик көлөмү жана маалымат структурасы боюнча кантип айырмаланат?
  • Автоматташтырылган тесттер "✓" көрсөтсө да, метод иш жүзүндө эмне үчүн иштебейт?

Бул макалада — популярдуу методдордун деталдуу анализи, алардын өзгөчөлүктөрү жана 75+ биржадагы чыныгы абал.

Негизги методдорго карата шолу

WebSocket ордербук методдоруна шолу Ордербук маалыматтары үчүн төрт негизги WebSocket методу: жеке жазылуу, топтук жазылуу, top-of-book байкоо жана бир жолку снапшот

Заманбап биржа API-лери WebSocket аркылуу ордербук маалыматтарын алуунун бир нече жолун сунуштайт. Ар бирин карап чыгалы:

1. watchOrderBook - Классикалык мамиле

Бул бир соода жупка ордербук жаңыртууларына жазылуунун негизги методу.

Негизги мүнөздөмөлөрү:

  • Максаты: бир жуп үчүн ордербук жаңыртууларына жазылуу
  • Байланыш түрү: туруктуу WebSocket байланышы
  • Маалыматтар: толук ордербук (адатта ар тарапка 100–1000 деңгээл)
  • Трафик: орточодон жогорку, жаңыртуу жыштыгына жана тереңдигине жараша

Колдонуу мисалы:

const exchange = new ccxt.pro.binance();
const orderbook = await exchange.watchOrderBook('BTC/USDT');
console.log(orderbook);

2. watchOrderBookForSymbols - Топтук жазылуу

Бул метод, эгер биржа колдоого алса, бир нече соода жупка бир эле убакта жазылууга мүмкүндүк берет.

Негизги мүнөздөмөлөрү:

  • Максаты: бир нече жупка бир эле убакта жазылуу
  • Байланыш түрү: туруктуу WebSocket, көбүнчө бир нече жуп үчүн бир байланыш
  • Маалыматтар: ар бир жуп үчүн — толук ордербук
  • Трафик: жуптардын саны көп болгондо өтө жогору (100–1000 деңгээл × 2 тарап × жуптардын саны)

Жооп мисалы:

{
  "BTC/USDT": {
    "bids": [[50000.1, 1.5], [50000.0, 2.1]],
    "asks": [[50001.0, 1.2], [50001.1, 0.8]],
    "timestamp": 1717398000000,
    "datetime": "2025-06-03T12:00:00Z"
  },
  "ETH/USDT": {
    "bids": [[3000.5, 10.2], [3000.4, 5.7]],
    "asks": [[3001.0, 8.3], [3001.1, 12.1]],
    "timestamp": 1717398000000,
    "datetime": "2025-06-03T12:00:00Z"
  }
}

Маанилүү эскертүү: иш жүзүндө бардык биржаларда колдоого ээ эмес. Кээде метод API-де бар, бирок ишке ашырылган эмес.

3. watchBidsAsks - Оптималдаштырылган байкоо

Бир нече соода жупта эң жакшы баалоорду көзөмөлдөөнүн эң үнөмдүү жолу.

Негизги мүнөздөмөлөрү:

  • Максаты: бир нече жуп үчүн эң жакшы баалар гана (top of book) жазылуу
  • Байланыш түрү: туруктуу WebSocket, көбүнчө бардык жуптар үчүн бир байланыш
  • Маалыматтар: ар тарапка бир баа гана (bid/ask)
  • Трафик: минималдуу, көп жупту байкоо үчүн ылайыктуу

Жооп мисалы:

{
  "BTC/USDT": {
    "bids": [[50000.1, 1.5]],
    "asks": [[50001.0, 1.2]],
    "timestamp": 1717398000000,
    "datetime": "2025-06-03T12:00:00Z"
  },
  "ETH/USDT": {
    "bids": [[3000.5, 10.2]],
    "asks": [[3001.0, 8.3]],
    "timestamp": 1717398000000,
    "datetime": "2025-06-03T12:00:00Z"
  }
}

Өзгөчөлүгү: адатта ticker endpoint аркылуу ишке ашырылат — бул клиент үчүн да, биржа үчүн да ресурстарды үнөмдөйт.

4. fetchOrderBookWs - Бир жолку сурамдар

Ордербук снапшотторун алуу үчүн REST API-ге альтернатива.

Негизги мүнөздөмөлөрү:

  • Максаты: WebSocket аркылуу бир жолку ордербук сурамы (REST сыяктуу)
  • Байланыш түрү: убактылуу WebSocket, маалымат алынгандан кийин байланыш жабылат
  • Маалыматтар: ордербук снапшоту
  • Трафик: минималдуу

Маанилүү айырмачылыктар жана методдорду салыштыруу

Туура мамилени тандоо үчүн методдордун ортосундагы айырмачылыктарды түшүнүү маанилүү:

Туруктуу жана убактылуу байланыштар

  1. watch* методдору — туруктуу байланыш түзөт, реалдуу убакыт стриминг жаңыртууларын алат
  2. fetch* методдору — WebSocket-ти бир жолку сурам үчүн гана колдонот, REST API сыяктуу

Трафикти салыштыруу

watchBidsAsks vs watchOrderBookForSymbols:

  • watchBidsAsks — 100–1000 эсе аз трафик, топтук байкоо үчүн идеалдуу
  • watchOrderBookForSymbols — күчтүү, бирок трафикке абдан оор жана бардык биржаларда колдоого ээ эмес

Трафикти эсептөө мисалы:

  • 100 жупка watchBidsAsks: ~100 жазуу (жуп башына 1 bid/ask)
  • 100 жупка watchOrderBookForSymbols: ~100 000–1 000 000 жазуу (100–1000 деңгээл × 2 тарап × 100 жуп)

Ордербук методдорунун трафигин салыштыруу Толук ордербук менен top-of-book (Bids/Asks) методдорунун ортосундагы маалымат интенсивдүүлүгүн көрнөктүү салыштыруу

Практикалык учур: Gate.io жана чындык vs документация

Документация vs чындык Таза API документациясы менен биржанын чыныгы жүрүм-турумунун ортосундагы ажырым

Документация иш жүзүндөгү абал менен дал келбеген чыныгы мисалды карап көрөлү.

Тест: Gate.io биржасында watchOrderBookForSymbols

10 популярдуу соода жупка жазылууга аракет:

const symbols = [
  '1CAT/USDT:USDT',
  '1INCH/USDT:USDT',
  'A8/USDT:USDT',
  'AAVE/USDT:USDT',
  'ACE/USDT:USDT',
  'ACH/USDT:USDT',
  'ACT/USDT:USDT',
  'ACX/USDT:USDT',
  'ADA/USDT:USDT',
  'ADX/USDT:USDT'
];

const exchange = new ccxt.pro.gateio();
try {
  const orderbooks = await exchange.watchOrderBookForSymbols(symbols);
  console.log('Success!', orderbooks);
} catch (error) {
  console.error('Error:', error.message);
}

Чыныгы натыйжа:

NotSupported: gateio watchOrderBookForSymbols() is not supported yet

Маанилүү сабак: метод API документациясында жарыяланганы менен, бул анын белгилүү бир биржада иштээрине кепилдик бербейт. Ар дайым иш жүзүндө текшериңиз!

Автоматташтырылган аудит: чынында эмне колдоого ээ

Биржалардын шайкештик аудитинин матрицасы 75+ криптовалюта биржасында методдордун чыныгы колдоосун көрсөткөн шайкештик матрицасы

Методдорго болгон колдоонун чыныгы сүрөтүн алуу үчүн бардык CCXT биржаларын текшерүүчү скрипт жазылды:

const ccxt = require('ccxt');

async function checkAllExchangeMethods() {
    const results = [];
    
    // Get list of all supported exchanges
    const exchangeIds = ccxt.pro.exchanges;
    
    for (const exchangeId of exchangeIds) {
        try {
            const exchange = new ccxt.pro[exchangeId]();
            
            // Check for method presence
            const hasWatchOrderBook = typeof exchange.watchOrderBook === 'function';
            const hasWatchBidsAsks = typeof exchange.watchBidsAsks === 'function';
            const hasWatchOrderBookForSymbols = typeof exchange.watchOrderBookForSymbols === 'function';
            
            // Check spot and futures support
            const hasSpot = exchange.has['spot'];
            const hasFutures = exchange.has['future'] || exchange.has['swap'];
            
            results.push({
                exchange: exchangeId,
                spot: hasSpot,
                futures: hasFutures,
                watchOrderBook: hasWatchOrderBook,
                watchBidsAsks: hasWatchBidsAsks,
                watchOrderBookForSymbols: hasWatchOrderBookForSymbols
            });
            
        } catch (error) {
            console.error(`Error checking ${exchangeId}:`, error.message);
        }
    }
    
    return results;
}

// Run the check
checkAllExchangeMethods().then(results => {
    console.table(results);
});

Аудит натыйжалары (мыкты биржалардын фрагменти)

Exchange        | Spot (OB/BA/OBS) | Futures (OB/BA/OBS)
----------------------------------------------------------
binance         | ✓/✓/✓            | ✓/✓/✓
bybit           | ✓/✓/✓            | ✓/✓/✓
okx             | ✓/✓/✓            | ✓/✓/✓
gateio          | ✓/✓/✓            | ✓/✓/✓
mexc            | ✓/✓/✓            | ✓/✓/✓
kucoin          | ✓/✓/✓            | ✓/✓/✓
huobi           | ✓/✓/✓            | ✓/✓/✓
bitget          | ✓/✓/✓            | ✓/✓/✓

Маанилүү эскертүү:
Скрипт JavaScript объектисинде методдун бар экенин гана текшерет, биржа тарабынан чыныгы колдоону эмес. Ошондуктан "✓" ар дайым функционалдуулукту билдирбейт — биз муну Gate.io мисалынан көрдүк.

Методду тандоо боюнча практикалык сунуштар

Методду тандоо чечим дарагы Сиздин колдонуу учуруңузга негизделген туура WebSocket методун тандоо үчүн чечим схемасы

Ар кандай колдонуу учурлары үчүн

1. Көп жупту (100+) байкоо:

  • watchBidsAsks колдонуңуз
  • Минималдуу трафик
  • Эң жакшы бааларды гана алыңыз
  • Арбитраж боттору үчүн идеалдуу

2. Бир жуп үчүн толук ордербук куруу:

  • watchOrderBook колдонуңуз
  • Толук рынок тереңдиги
  • Маркет-мейкинг стратегиялары үчүн ылайыктуу

3. Толук тереңдик менен бир нече жупту байкоо:

  • Алгач watchOrderBookForSymbols колдонуп көрүңүз
  • Колдоого ээ болбосо — бир нече watchOrderBook колдонуңуз
  • Байланыштардын саны боюнча биржанын чектөөлөрүн эске алыңыз

4. Бир жолку маалымат алуу:

  • fetchOrderBookWs же кадимки REST API колдонуңуз
  • Снапшоттор же инициализация үчүн

Иштин майнаптуулугун оптималдаштыруу

Байланыштарды оптималдаштыруу: көп vs мультиплекстелген Тартипсиз жеке байланыштар (солдо) vs оптималдаштырылган мультиплекстелген WebSocket байланышы (оңдо)

Байланыштарды башкаруу:

// Bad: creating multiple connections
const symbols = ['BTC/USDT', 'ETH/USDT', 'ADA/USDT'];
const orderbooks = await Promise.all(
    symbols.map(symbol => exchange.watchOrderBook(symbol))
);

// Good: one connection for all pairs (if supported)
try {
    const orderbooks = await exchange.watchOrderBookForSymbols(symbols);
} catch (error) {
    // Fallback to individual subscriptions
    const orderbooks = await Promise.all(
        symbols.map(symbol => exchange.watchOrderBook(symbol))
    );
}

Тереңдикти башкаруу:

// Limit depth to save traffic
const orderbook = await exchange.watchOrderBook('BTC/USDT', 20); // only 20 levels

Каталарды иштетүү жана байланышты калыбына келтирүү

Каталарды иштетүү жана экспоненциалдык backoff кайталоо Экспоненциалдык backoff кайталоо үлгүсү менен туруктуу байланышты калыбына келтирүү

WebSocket байланыштары үзүлүшү мүмкүн, ошондуктан каталарды туура иштетүү маанилүү:

async function robustWatchOrderBook(exchange, symbol, maxRetries = 3) {
    let retries = 0;
    
    while (retries < maxRetries) {
        try {
            const orderbook = await exchange.watchOrderBook(symbol);
            retries = 0; // reset counter on success
            return orderbook;
        } catch (error) {
            retries++;
            console.error(`Subscription error (attempt ${retries}):`, error.message);
            
            if (retries >= maxRetries) {
                throw new Error(`Failed to subscribe after ${maxRetries} attempts`);
            }
            
            // Exponential backoff
            await new Promise(resolve => setTimeout(resolve, 1000 * Math.pow(2, retries)));
        }
    }
}

Маалымат сапатын байкоо

Маалымат сапатын текшерүү конвейери Текшерүү пункттары аркылуу өтүп жаткан ордербук маалыматтары: структура, актуалдуулук жана спред логикасы

Алынган маалыматтын сапатын көзөмөлдөө маанилүү:

function validateOrderBook(orderbook) {
    // Check basic structure
    if (!orderbook.bids || !orderbook.asks) {
        throw new Error('Invalid orderbook structure');
    }
    
    // Check data freshness
    const now = Date.now();
    const dataAge = now - orderbook.timestamp;
    if (dataAge > 10000) { // older than 10 seconds
        console.warn('Stale orderbook data:', dataAge, 'ms');
    }
    
    // Check price logic
    const bestBid = orderbook.bids[0] ? orderbook.bids[0][0] : 0;
    const bestAsk = orderbook.asks[0] ? orderbook.asks[0][0] : 0;
    
    if (bestBid >= bestAsk && bestBid > 0 && bestAsk > 0) {
        console.warn('Crossed spread:', { bestBid, bestAsk });
    }
}

Корутундулар жана мыкты тажрыйбалар

CCXT менен практикалык тажрыйбага таянып, негизги сунуштар:

1. Документацияга гана таянбаңыз

Продукцияда ишке ашырардан мурун методдорду ар дайым чыныгы маалыматтарда текшериңиз. API-де методдун болушу функционалдуулукка кепилдик бербейт.

2. Тапшырма үчүн туура методду тандаңыз

  • Топтук байкоо: watchBidsAsks
  • Деталдуу анализ: watchOrderBook
  • Бир жолку сурамдар: fetchOrderBookWs

3. Трафикти оптималдаштырыңыз

Көп жупту байкоо үчүн watchBidsAsks watchOrderBookForSymbols-ка караганда 1000 эсе майнаптуу болушу мүмкүн.

4. Ийгиликсиздиктерге даяр болуңуз

Ишенимдүү кайталоо логикасын жана маалымат сапатын байкоону ишке ашырыңыз.

5. Продукциялык жүктөмдөрдө текшериңиз

API жүрүм-туруму жүктөм астында тест сурамдарынан олуттуу түрдө айырмаланышы мүмкүн.

Ордербуктар үчүн WebSocket API-лердин келечеги

WebSocket API-лердин эволюциясы Чачыранды биржа байланыштарынан бирдиктүү стандартташтырылган API протоколдоруна чейин

Тармак стандартташтырылган мамилелерге карай жылып жатат:

  • Биржалардын ортосунда методдорду бирдейлештирүү
  • Чыныгы мисалдар менен жакшыртылган документация
  • Майнаптуураак маалыматты кысуу протоколдору
  • Жакшыраак дебаг куралдары жана байкоо

Корутунду

Ордербуктар үчүн WebSocket API-лери күчтүү куралдар, бирок алар ар бир биржанын өзгөчөлүктөрүн терең түшүнүүнү талап кылат. CCXT интерфейстерди бирдейлештирүү аркылуу иштин иштелип чыгуусун абдан жеңилдетет, бирок чындык документациядан дагы деле татаалыраак.

Ийгиликтин ачкычы — тестирлөө, байкоо жана конкреттүү тапшырмалар үчүн туура методдорду тандоо. Эстен чыгарбаңыз: бир биржада иштеген нерсе экинчисинде иштебей коюшу мүмкүн, атүгүл API-лер бирдей көрүнгөн күндө да.

Ийгиликтүү соода системасы жалгыз туура алгоритмдерден гана эмес, ошондой эле ишенимдүү маалымат инфраструктурасынан турат. Ал эми CCXT WebSocket методдору ушул инфраструктуранын маанилүү бөлүгү болуп саналат.

Биржалардын WebSocket API-лери менен сиздин тажрыйбаңыз кандай? Күтүлбөгөн көйгөйлөргө туш болдуңузбу? Комментарийлерде бөлүшүңүз!

Пайдалуу шилтемелер

Цитата

@software{soloviov2025ccxtprowebsocketorderbook,
  author = {Soloviov, Eugen},
  title = {CCXT: How WebSocket Orderbook Methods Really Work},
  year = {2025},
  url = {https://marketmaker.cc/en/blog/post/ccxt-pro-websocket-orderbook-methods},
  version = {0.1.0},
  description = {Detailed breakdown of CCXT WebSocket methods for orderbooks: watchOrderBook, watchBidsAsks, watchOrderBookForSymbols. Real tests on 75+ exchanges.}
}
blog.disclaimer

Authors

Eugen Soloviov
Eugen Soloviov

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.

Newsletter

Рынктан бир кадам алдыда болуңуз

AI соода аналитикасы, рынок талдоолору жана платформа жаңылыктары үчүн биздин жаңылыктар бюллетенине жазылыңыз.

Биз сиздин купуялыгыңызды урматтайбыз. Каалаган убакта жазылымдан чыга аласыз.