Upbit 웹소켓을 이용한 급등 코인의 움직임 예측 모델 개발 (2)

2025. 12. 21. 02:46·dev/ai

이전에 Upbit api와 websocket을 이용해서 종목별로 틱 데이터를 받아왔는데 이를 이용하여 ml용 시퀀스 데이터를 만들어야했다.

 

일단 모델의 목적은 종목과 관계없이 급등, 급락 전에 공통적으로 나타나는 abnormal한 패턴 감지이므로 종목의 종속을 최소화 하기위해 입력 feature를 절대값이 아닌 상대값으로 구성했다. 

(이와 같은 이유로 slope도 원래 의미인 변화량 대신 변화율로 계산했다. accel도 이렇게 바꾼 slope 변화량으로 계산)

 

그러다보니 당연하게도 가격과 거래량에 관한 변화율, 가속도 같은 값을 제일 먼저 찾게 됐고 평소 빠져있던 (on-premise용 경량모델의 핵심 입력 cusum) CUSUM도 당연히 넣었다.

 

그 외 gpt의 도움을 받아 급등 패턴 인식에 있어서 나름 겹치지 않으면서 대표성있는 여러 지표를 알아본 결과 입력 feature로 다음 8개를 결정하였다.

 

slope, accel, last_return, cusum_pos, cusum_neg, volume_ratio, bid_ask_imbalance, spread_ratio 

 

feature 값 사용되는 데이터 사용되는 값 의미
slope OHLCV close  가격 변화율
accel features slope 변화율 변화량
last_return OHLCV 직전 close, 현재 close 직전 대비 수익률 
cusum_pos features last_return 상승 수익률 누적합
cusum_neg features last_return 하락 수익률 누적합
volume_ratio OHLCV volume,
moving_avg_volume
현재 거래량 대비 최근 평균 거래량 변화율
bid_ask_imbalance 틱 데이터 bid_volume, ask_volume 매수/매도 불균형 비율
spread_ratio 틱 데이터 ask_price, bid_price 호가 스프레드

 

결국 하나의 ml용 시퀀스 데이터를 구성하는 인터벌 데이터, 즉 feature 데이터의 한 row는  8개의 column으로 이루어진 데이터고 해당 값들은 이전 인터벌의 틱 데이터(order book), ohlcv(캔들 데이터), feature 데이터를 골고루 사용하는 복잡한 형태임을 알 수 있다.

 

예를 들면 웹소켓으로 특정 종목에서 다음과 같은 틱 데이터를 받았다 치자.

timestamp trade_price trade_volume ask_bid
12:00:01.123 100 0.5 BID
12:00:05.456 101 0.3 ASK
12:00:12.789 102 0.2 BID
12:00:25.000 101 0.7 ASK
12:00:29.500 103 0.4 BID
12:00:31.500 103 0.4 BID
12:00:33.100 101 0.7 ASK
12:00:42.233 102 0.2 BID
12:00:58.512 100 0.3 ASK

 

인터벌동안 수집한 틱 데이터를 모아 다음과 같은 ohlcv를 구성 

interval open high low close volume
12:00:00-12:00:30 103 103 100 103 2.1
12:00:30-12:01:00 100 103 100 100 1.6

 

틱데이터, ohlcv, 이전 인터벌의 feature를 이용해서 각 column을 계산해서 현재 인터벌의 feature를 구성

interval slope accel last_return ... spread_ratio
12:00:00-12:00:30 0.2 1.0 0.02 ... 2.1
12:00:30-12:01:00 -0.1 -1.0 -0.01 ... 1.3

 

 

데이터 생성 과정을 개괄적으로 구상해보자면 

웹소켓으로 급등 종목 틱 데이터 수집 -> 종목별로 인터벌마다(일단은 30초로 설정) 캔들 정보 추출 -> 각 인터벌 캔들과 직전 feature를 이용한 현재 feature 계산 -> 10개의 연속된 인터벌(t0~t9) feature를 모아서 11번째 인터벌의 가격 상승률이 0.8% 이상이면 매수, -0.8% 이상이면 매도, 그 외는 관망으로 label -> 완성된 시퀀스 데이터를 csv파일로 저장 -> ml에 입력

 

파일 실행 직후 로그

 

파일을 실행하면 상승률 상위 5개 종목에 대해 30초 간격으로 "틱 데이터 수집 -> 캔들 데이터 계산 -> feature 계산" 과정을  반복한다. 매 구간이 끝날때마다 그동안 웹소켓으로 받은 틱 데이터 개수를 종목별로 출력하도록 하였다.

 

feature를 구성하는 8개의 값 중 직전 두 개 인터벌의 데이터로부터 계산되는 column이 존재하므로 3번째 feature부터 모든 column이 계산 가능하다. 따라서 처음과 두번째 인터벌의 feature는 시퀀스 데이터에 포함하지 않고 세번째 feature부터 시퀀스 데이터를 구성하도록 하였다.

KRW-ANIME의 t0 feature와 그 계산에 사용된 ohlcv값들
KRW-POKT의 t0 feature와 그 계산에 사용된 ohlcv값들
KRW-UNI의 t0 feature와 그 계산에 사용된 ohlcv값들
KRW-NOM의 t0 feature와 그 계산에 사용된 ohlcv값들
KRW-KERNEL의 t0 feature와 그 계산에 사용된 ohlcv값들

 

추가로 시퀀스를 구성하는 첫 인터벌 feature(이하 t0의 feature)가 처음 계산될 때 현재 포함 직전 2개 ohlcv 로그를 함께 찍어서 제대로 계산되는지 검증했다. 세개의 연속된 인터벌이 모일 때 종목별로 한 번씩 로그가 출력된다. 직접 계산해서 검증 완료

 

종목별로 10개의 연속된 인터벌 데이터가 모여서 1개의 시퀀스 데이터를 완성하면 csv파일을 만들어서 자동으로 저장되게 하였다.

일단 10개 인터벌의 feature가 모여서 첫 시퀀스 데이터를 완성하고 나서는 매 인터벌 데이터가 생길 때마다 시퀀스 데이터가 sliding하며 새로 생기므로 데이터 수집은 실시간으로 빠르게 가능했다.

csv파일로 저장된 시퀀스 데이터셋

 

자세한 구현은 다음에 알아보자.

'dev > ai' 카테고리의 다른 글

Codex Skill 등록하기 - bcpprm 사례로 익히는 워크플로 자동화 가이드  (1) 2026.05.23
Upbit 웹소켓을 이용한 급등 코인의 움직임 예측 모델 개발 (5)  (1) 2025.12.22
Upbit 웹소켓을 이용한 급등 코인의 움직임 예측 모델 개발 (4)  (0) 2025.12.22
Upbit 웹소켓을 이용한 급등 코인의 움직임 예측 모델 개발 (3)  (0) 2025.12.22
Upbit 웹소켓을 이용한 급등 코인의 움직임 예측 모델 개발 (1)  (0) 2025.12.20
'dev/ai' 카테고리의 다른 글
  • Upbit 웹소켓을 이용한 급등 코인의 움직임 예측 모델 개발 (5)
  • Upbit 웹소켓을 이용한 급등 코인의 움직임 예측 모델 개발 (4)
  • Upbit 웹소켓을 이용한 급등 코인의 움직임 예측 모델 개발 (3)
  • Upbit 웹소켓을 이용한 급등 코인의 움직임 예측 모델 개발 (1)
cusum26
cusum26
  • cusum26
    CUSUMlog
    cusum26
  • 전체
    오늘
    어제
    • 분류 전체보기 (18)
      • dev (15)
        • blockchain (1)
        • ai (6)
        • web (0)
        • infra (4)
        • app (4)
      • cs (1)
        • blockchain (1)
      • scalability (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    lazy fanout
    consumer offset
    kafkaListenerContainerFactory
    fanout-on-read
    codex skill
    fanout-on-write
    msa
    bccprm
    도메인 이벤트
    KafkaConfig
    FanoutTask
    Kafka
    비동기
    min.insync.replicas
    kafka ui
    컨슈머 오프셋
    __consumer_offsets
    acks
    Merkle Trie
    group metadata
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
cusum26
Upbit 웹소켓을 이용한 급등 코인의 움직임 예측 모델 개발 (2)
상단으로

티스토리툴바