Q

PRIVATE NAVIGATION MODE

ML4T_S 탭 잠금 해제

패스워드를 확인하면 이 브라우저에서 ML4T_S 탭과 검색 결과를 표시합니다.

STUDY SEARCH

학습 자료 검색

제목과 설명, 키워드, 학습 본문에서 찾습니다.

검색 범위

검색어를 입력해 주세요.

SEARCH THE NOTEBOOK

찾고 싶은 금융·통계·전략 개념을 입력해 보세요.

CHAPTER 17 / SECTION 06

17.6 실거래 파이프라인의 기술적 동등성 검증하기

원자료부터 주문까지 비교하고 펀딩, 외환, 주식 사례에서 시장 변화와 구분합니다.

17장. Live Trading Systems(실거래 시스템)초급 학습 노트

마지막 주문이 다르면 값이 처음 갈라진 곳을 찾는다

같은 시각의 ETF 재생에서 연구 환경은 80주, 운영 환경은 70주 매수를 냈다고 하자. 먼저 둘 다 같은 종가와 계좌 상태를 읽었는지 확인한다. 종가가 같아도 입력 특성이 다르면 전처리를 조사한다. 예측과 목표 수량까지 같다면 진행 중인 10주 주문을 한쪽만 차감했는지 확인한다. Technical Parity(기술적 동등성)는 같은 입력과 상태에서 두 경로의 결정이 일치하는 성질이다.

과거 재생과 실시간 경로에서 같은 단계끼리 비교하기
  1. 원자료 → 특성
    같은 시각과 종목의 가격으로 계산한 지표를 비교한다.
  2. 예측 → 목표
    같은 모델의 출력과 포트폴리오 목표를 비교한다.
  3. 목표 → 주문
    수량·방향·가격·주문 조건을 비교한다.
최종 주문이 다르면 원자료부터 대조해 값이 처음 어긋난 단계를 좁힌다.

특성은 결정 당시에 알 수 있었던 자료로 다시 계산한다

Point-in-Time Data(시점 기준 자료)는 거래 판단을 내릴 때 알 수 있었던 값만 담는다. 예를 들어 장 마감 확정 가격으로 계산한 특성을 같은 날 마감 전에 주문할 때 썼다면 Look-ahead Bias(미래 정보 편향)가 생긴다. 과거 재생을 결정 시각에서 멈추고 당시 이용 가능했던 가격과 공개 시각을 뽑아 운영 계산에 넣는다. 분할 조정, 누락값 전일 값 채우기, 시간대와 거래일 경계도 각각 맞춘다. 휴장, 분할, 자료 누락이 있던 날짜를 포함해야 평범한 날짜의 비교로 숨는 차이를 찾을 수 있다.

같은 특성 벡터에서 모델 출력부터 분리한다

Feature Vector(특성 벡터)는 한 종목과 한 시각에 대해 모델이 받는 숫자 묶음이다. 과거 재생에서 이 묶음을 한 번 추출해 양쪽 모델에 그대로 넣는다. 열 순서, 범주 변환, 학습 때 저장한 평균과 표준편차, 모델 파일의 버전을 확인한다. Serialization(직렬화)은 학습한 모델을 파일로 저장하는 일이다. 라이브러리 버전이 다르면 같은 파일을 복원해도 계산이 달라질 수 있다. 난수 사용 여부와 32비트·64비트 수치 정밀도도 기록한다. 작은 반올림 차이를 허용해도 매수 임계값이나 상위 종목 순위가 바뀌는지는 별도로 검증한다.

목표 비중과 실제 주문은 별도로 대조한다

같은 예측에 더해 보유량, 미결 주문, 거래 가능 종목, 자금, 위험 추정과 제한을 같은 값으로 고정한다. 두 실행기의 Portfolio Optimizer(포트폴리오 최적화 계산기)에 넣어 목표 비중을 비교한다. 차이가 나면 자산들이 함께 움직이는 정도를 담은 공분산, 위험 요인에 대한 노출, 종목 목록, 최적화 계산 허용 오차를 살핀다. 비중이 같다면 거래 단위 반올림, 미결 수량 차감과 주문 가격 조건을 비교한다. 특성과 예측은 허용 오차로, 종목·매수 방향·최종 수량은 일치 여부로 판정한다.

바뀐 부분을 검출하는 검사를 운영에 남긴다

Regression Test(회귀 검사)는 코드를 바꾼 뒤 이전에 맞았던 결과가 달라졌는지 확인한다. 배포 전에는 기준 기록을 고정하고 특성, 예측, 신호, 주문 개수와 주문 내용을 각각 비교한다. 준비 구간 길이가 달라 특성 행 수에 예상된 차이가 있다면 그 사유와 비교 가능한 구간을 기록한다. 실시간 경로가 실행되지 않아 출력이 비어 있으면 비교 미실행으로 분류한다. 양쪽이 빈 목록이라는 이유로 통과시키면 연결 장애를 숨기게 된다.

일일 전략이라면 매일 전날 운영 로그를 같은 시점의 정보로 재생한다. 단계별 입력·출력, 시각, 설정, 모델과 라이브러리 버전을 남겨 두면 차이가 난 첫 단계부터 조사할 수 있다. 설명할 수 없는 차이가 생기면 다음 주문을 보류하고 원인을 확인한다.

같은 코드라도 거래소가 달라지면 입력의 성격이 달라진다

한 거래소에서는 거래량이 큰 종목이 다른 거래소에서는 얇게 거래될 수 있다. 그러면 거래량 순위로 만든 특성도 바뀐다. 호가 간격, 가격 단위, 봉 경계, 수수료와 펀딩 산식도 분포에 영향을 준다. Distribution Shift(분포 변화)는 코드가 같아도 모델에 들어가는 숫자의 범위와 빈도가 달라지는 현상이다. 가능하면 같은 시장의 과거 자료와 실시간 자료를 사용한다. 과거 거래소를 바꿀 수 없다면 같은 날짜와 상품의 중복 자료를 나란히 놓고 결측, 분포, 순위와 비용 차이를 측정한다.

펀딩 신호를 실시간으로 계산하고 현물 모의 주문까지 보낸다

Funding Rate(펀딩 비율)는 무기한 계약의 매수·매도 보유자 사이에 정기적으로 오가는 지급액을 정하는 비율이다. 보통 양수면 매수 보유자가 매도 보유자에게, 음수면 매도 보유자가 매수 보유자에게 지급한다. 펀딩 비율이 평소보다 크게 낮아지면 매도 쪽이 붐볐을 가능성이 있다. 전략은 이 쏠림이 풀리면서 가격이 반대 방향으로 움직일 가능성을 점수로 만든다.

학습 예에서는 Binance 기반 가격과 펀딩으로 LightGBM(경량 경사 부스팅 모델)을 학습한다. 13개 특성은 펀딩 관련 표준화 점수와 8시간·24시간 변화 세 가지, 여러 기간의 가격 변화·변동성·기술 지표 열 가지로 이루어진다. 운영 시 OKX에서 시가·고가·저가·종가·거래량을 묶은 Open, High, Low, Close, Volume(가격 막대와 거래량, OHLCV)과 해당 사례의 8시간 펀딩 기록을 받아 같은 열을 만든다. 모델은 손실 한도에 먼저 닿음, 시간 만료, 이익 목표에 먼저 닿음의 세 결과에 확률을 준다.

운영 루프가 매분 돌아도 시간봉 입력은 확정된 값과 공개 시각을 기준으로 갱신한다. 이익 목표에 닿을 확률이 청산 기준 아래로 떨어지면 포지션 종료를 검토하고, 가격이 손절 조건을 넘으면 모델 점수와 별개로 종료 주문을 낸다. 가격이 한 번에 뛰면 주문 체결은 설정한 손실 한도를 넘어설 수 있다. 모델을 더 자주 호출하는 것과 매분 의사결정의 성능이 검증된 것은 별개의 판단이다.

분리형 실행에서는 19개 계약에 점수를 내고, 대응하는 11개 달러 표시 현물만 Alpaca 모의 거래로 보냈다. 나머지 8개는 신호로 기록했다. 이는 시세 수신, 모델 계산, 주문 제출을 이어 보는 방법이다. 현물 바스켓으로 무기한 스왑의 펀딩 수익이나 롱·쇼트 성과를 재현할 수는 없다.

기술적으로 맞는 전략도 구성 종목 때문에 손실을 낸다

2020~2023년 자료로 학습한 이 전략은 검증 기간에는 수익 우위가 보였지만, 2025년 하락장을 포함한 Holdout(최종 평가 구간)에서는 우위가 사라졌다. 음의 펀딩 쪽에 작은 토큰 매수가 모였고, 양의 펀딩 쪽에는 비트코인·이더 등 대형 토큰 매도가 모였다. 시장 하락기에 작은 토큰이 더 크게 떨어지면서 매수 손실이 매도 이익을 넘었다. 손실이 가장 컸던 세 종목을 합쳐도 전체 손실의 약 8%였으므로, 손실의 원인을 그 세 종목으로 좁히기는 어렵다.

예를 들어 양쪽 명목액을 각각 100만 원으로 맞추고 작은 토큰이 20%, 대형 토큰이 8% 하락했다고 하자. 매수 쪽은 20만 원을 잃고 매도 쪽은 8만 원을 얻어 비용 전 12만 원 손실이다. 손실이 여러 매수 종목에 퍼졌다면 몇 종목만 지워도 공통 노출이 남는다. 대형만 남겨 매수 쪽을 없애면 순매도 노출이 생긴다. 운영자는 코드 동등성과 별도로 펀딩의 평균, 종목별 편차와 실현 상관이 학습 시기와 얼마나 달라졌는지 확인한다.

펀딩 전략의 두 거래 방향에서 발생한 손익 크기
작은 토큰 매수 손실20만 원
대형 토큰 매도 이익8만 원
점선은 매도 이익 8만 원이다. 매수 손실 막대에서 점선을 넘어선 12만 원만큼 전체 손익이 줄었다.

외환 일일 신호와 주식 바스켓은 다른 지점을 검증한다

Foreign Exchange(외환, FX) 사례는 20개 통화쌍을 사용한 릿지 회귀 모델을 IBKR 모의 계좌에 연결했다. 주중 일일 가격과 현물 외환 주문을 같은 연결에서 얻고, 일중 호가로 만든 일일 입력이 연구의 일일 막대와 같은 경계를 쓰는지 확인했다. 금리 차에서 오는 Carry(보유 이익)와 단기 가격 흐름을 섞은 이 사례에서는 검증 구간과 최종 평가 구간의 성과 방향이 유지됐다. 같은 시장·주기를 써도 앞으로의 안정성은 별도로 감시한다.

미국 대형주 20종목을 20일 가격 변화로 순위 매기는 사례는 주문을 낼 세션에서 최근 가격을 읽었다. 순위와 주문 평가액이 같은 기준 가격을 사용하도록 하기 위해서다. 종목 확인과 조회 속도 제한 때문에 준비 시간이 늘어나므로, 요청을 한도 안에서 병렬화할 수 있다. 주문 뒤 주기적으로 보유량을 읽는 Polling(주기 조회)은 일일 주문 확인에는 단순하다. 체결의 시각과 순서를 즉시 알아야 하면 체결 이벤트를 구독하고 빠진 이벤트는 조회로 복구한다.