Binance 거래소 실시간 체결가 저장 및 읽기 - slog

Binance 거래소 종목의 실시간 체결가를 수신하여 파일로 저장하는 모듈을 만들기 위해 슬로그를 시작합니다.

저장할 데이터는 체결가 및 체결시 호가 정보입니다.

저장할 파일구조는 빠르게 원하는 시간대의 체결가를 획득하기 위해 하루단위로 다음의 구조로 만듭니다.
[1분 간격의 체결가정보 시작 offset] [체결가 정보, …]
으로 구성하고 1분사이 체결가가 없으면 체결가정보 시작 offset을 0으로 합니다.

.NET용 Binance API를 직접 구현할 수도 있지만 이미 잘 구현되어 있는 Binance.Net을 사용해보도록 합니다.

저장된 체결가 정보를 읽는 모듈은 거래량이 많을 경우 상당히 큰 사이즈가 될 것이기 때문에 MemoryMappedFile를 사용해 보도록 합니다. 파일을 마치 메모리 처럼 접근하기 위한 Span<byte>으로의 접근은 기존애 간단히 테스트 했던 아래의 코드를 참고합니다.

파일은 하루 단위로 저장하며 체결가를 사용하기 위해 파일 및 하루가 넘어가는 경계에 신경쓸 필요없이 체결가를 사용할 수 있도록 API를 구성합니다.

Span<OrderInfo> sectionOrders = orderStore.Get(startDatetime, endDatetime);
좋아요 3

Binance.Net을 이용하면 쉽게 실시간 시세 정보 및 체결정보를 얻을 수 있습니다.

using Binance.Net.Clients;
using Binance.Net.Objects;


var binanceClient = new BinanceClient(new BinanceClientOptions()
{
    // Set options here for this client
});

var binanceSocketClient = new BinanceSocketClient(new BinanceSocketClientOptions()
{
    // Set options here for this client
});


var coinFuturesSymbolData = await binanceClient.CoinFuturesApi.ExchangeData.GetExchangeInfoAsync();


var subscribeResult = await binanceSocketClient.CoinFuturesStreams.SubscribeToAllTickerUpdatesAsync(data =>
{
    foreach (var coinTick in data.Data)
        Console.WriteLine($"{coinTick.Symbol}: {coinTick.LastPrice}");
    Console.WriteLine("------");
});

Console.ReadLine();

좋아요 1

실시간 시세는 SubscribeToTickerUpdatesAsync()
실시간 체결은 SubscribeToAggregatedTradeUpdatesAsync()
실시간 호가정보는 SubscribeToOrderBookUpdatesAsync()를 구독해서 얻을 수 있습니다.
(그런데 실시간 호가정보는 인터벌이 있습니다. 100ms, 250ms, 500ms를 지정해서 이 간격 미만으로는 수신할 수 없는 것 같습니다.)

사용하는 용어를 정리할 필요성이 있습니다. Binance.Net에서 사용하는 용어로 통일합니다.

시세 - Ticker
거래 - Trade
호가정보 - OrderBook

저장하는 거래 요소 값은 일단 (Price, Quantity, TradeTime)로 해봅시다.

좋아요 1

실시간 거래정보와 호가정보를 별도의 파일로 저장하려 합니다. 파일은 다음의 규칙으로 저장합니다.

거래가 발생하지 않은 호가정보는 의미가 없으므로 거래 발생 시 가장 최근의 호가정보를 파일에 기록하는 것으로 합니다.

/data/{symbol}/{year}/{month}/{year}-{month}-{day}.{symbol}.trade.dat
/data/{symbol}/{year}/{month}/{year}-{month}-{day}.{symbol}.orderbook.dat

/data/BTCUSD/2022/11/2022-11-17.BTCUSD.trade.dat
/data/BTCUSD/2022/11/2022-11-17.BTCUSD.orderbook.dat

좋아요 1