실시간 데이터 (Realtime)

api.k_data는 WebSocket 기반의 실시간 시세 데이터를 제공합니다. src/stock/data.rs에 구현되어 있습니다.

스트림 종류

TrId설명데이터 타입
RealtimeExecKrxKRX 체결Exec
RealtimeExecNxtNXT 체결Exec
RealtimeExecUnion통합 체결Exec
RealtimeOrdbKrxKRX 호가Ordb
RealtimeOrdbNxtNXT 호가Ordb
RealtimeOrdbUnion통합 호가Ordb
RealRealtimeMyExec / VirtualRealtimeMyExec내 체결통보MyExec

subscribe_market — 시세 구독

종목 실시간 체결 또는 호가 데이터를 구독합니다.

#![allow(unused)]
fn main() {
pub async fn subscribe_market<T: StreamParser<R> + Send, R: Clone + Send>(
    &mut self,
    tr_key: &str,
    tr_id: TrId,
) -> Result<(Option<broadcast::Receiver<T>>, SubscribeResponse), Error>
}

파라미터

파라미터타입설명
tr_key&str종목 코드 (6자리)
tr_idTrId스트림 종류 (RealtimeExecKrx 등)

반환값

  • Option<broadcast::Receiver<T>>: 새로 생성된 수신 채널. 이미 구독 중이면 None
  • SubscribeResponse: 구독 응답 (성공 여부, 메시지)

예시 — 체결 구독

#![allow(unused)]
fn main() {
use korea_investment_api::types::{TrId};
use korea_investment_api::types::stream::stock::{Exec, exec};

let (rx, response) = api.k_data.subscribe_market::<Exec, exec::Body>(
    "005930",
    TrId::RealtimeExecKrx,
).await?;

assert!(response.is_success());

if let Some(mut rx) = rx {
    while let Some(exec) = rx.recv().await {
        println!("체결가: {:?}", exec);
    }
}
}

예시 — 호가 구독

#![allow(unused)]
fn main() {
use korea_investment_api::types::stream::stock::{Ordb, ordb};

let (rx, _) = api.k_data.subscribe_market::<Ordb, ordb::Body>(
    "005930",
    TrId::RealtimeOrdbKrx,
).await?;
}

PINGPONG 처리

서버에서 PINGPONG 프레임이 오면 자동으로 에코 응답합니다. 사용자 코드에서 처리할 필요가 없습니다.


subscribe_my_exec — 체결통보 구독

내 계좌의 주문 체결 통보를 실시간으로 수신합니다.

#![allow(unused)]
fn main() {
pub async fn subscribe_my_exec(
    &mut self,
) -> Result<(UnboundedReceiver<MyExec>, SubscribeResponse), Error>
}

보안

체결통보 스트림 데이터는 AES-256-CBC로 암호화되어 전송됩니다. 구독 응답에 포함된 ivkey를 사용하여 내부적으로 자동 복호화합니다.

예시

#![allow(unused)]
fn main() {
use korea_investment_api::types::stream::stock::MyExec;

let (mut rx, response) = api.k_data.subscribe_my_exec().await?;

assert!(response.is_success());

while let Some(my_exec) = rx.recv().await {
    println!("체결통보: {:?}", my_exec);
}
}

unsubscribe_market — 시세 구독 해제

구독 중인 종목 시세 스트림을 해제합니다.

#![allow(unused)]
fn main() {
pub async fn unsubscribe_market(
    &mut self,
    tr_key: &str,
    tr_id: TrId,
) -> Result<SubscribeResponse, Error>
}

예시

#![allow(unused)]
fn main() {
let response = api.k_data.unsubscribe_market(
    "005930",
    TrId::RealtimeExecKrx,
).await?;
}

자동 구독 해제

KoreaStockData가 Drop될 때, 진행 중인 모든 구독이 자동으로 해제됩니다.