[DOCS] HFT Backtest 원리, 환경설정, 프로세스

Wong
2025.12.06조회수 79회

Wong
구독자 22명구독중 4명
안녕하세요. 개발과 경제에 관심있는 ADAS 연구원입니다.
https://github.com/Wong-Woo


과거 시장 데이터를 사용하여 틱(tick) 단위로 오더북을 재구성하고, 주문의 체결 과정을 시뮬레이션하는 것입니다. 일반 백테스트와 달리, HFT 백테스트는 다음을 정밀하게 시뮬레이션합니다:
오더북의 실시간 변화 (호가 추가/삭제)
주문이 호가창에서 대기하는 큐(Queue) 위치
주문 전송 및 응답 레이턴시(Latency)
부분 체결(Partial Fill) 가능성
T=0T=0 시점에 오더북의 초기 상태를 설정
시간: 00:00:00.000
┌─────────────────────┐
│ Ask (매도 호가) │
├─────────────────────┤
│ $61,010 → 0.5 BTC │
│ $61,005 → 1.2 BTC │
│ $61,000 → 2.0 BTC │ ← Best Ask
├─────────────────────┤
│ $60,995 → 1.8 BTC │ ← Best Bid
│ $60,990 → 1.5 BTC │
│ $60,985 → 0.8 BTC │
├─────────────────────┤
│ Bid (매수 호가) │
└─────────────────────┘
T>0T>0 이후, 실시간으로 오더북 업데이트
이벤트 1 (T=100ms): 새로운 매도 호가 추가
→ $61,000에 0.3 BTC 추가
→ 호가창: $61,000 → 2.0 + 0.3 = 2.3 BTC
이벤트 2 (T=150ms): 매수 호가 취소
→ $60,995에서 0.5 BTC 제거
→ 호가창: $60,995 → 1.8 - 0.5 = 1.3 BTC
이벤트 3 (T=200ms): 시장가 매수 체결
→ Best Ask($61,000)에서 1.0 BTC 체결
→ 호가창: $61,000 → 2.3 - 1.0 = 1.3 BTC
호가창에 제출한 내 주문의 대기 순서와 체결 시뮬레이션
시나리오: $61,000에 매도 지정가 주문 0.5 BTC 제출
초기 상태:
$61,000 호가창: 2.0 BTC 대기 중
내 주문: 2.0 BTC 뒤에 대기 (큐 포지션 = 2.0)
이벤트 1: 0.8 BTC 시장가 매수 체결
→ 큐 포지션: 2.0 - 0.8 = 1.2 BTC
이벤트 2: 1.2 BTC 시장가 매수 체결
→ 큐 포지션: 1.2 - 1.2 = 0
→ ✅ 내 주문 체결 시작
이벤트 3: 0.5 BTC 시장가 매수 체결
→ ✅ 내 주문 0.5 BTC 전량 체결 완료
.data(data)백테스트에 사용할 피드 데이터 설정
Parameters:
data (str | List[str] | ndarray): 파일 경로 또는 numpy 배열
Example:
asset.data(['BTCUSDT_20240626.npz'])
.initial_snapshot(snapshot)백테스트 시작 시점의 초기 오더북 스냅샷 설정
Parameters:
snapshot (str | ndarray): 초기 스냅샷 파일 경로 또는 numpy 배열
Example:
asset.initial_snapshot('BTCUSDT_20240626.npz')
.linear_asset(contract_size)선형 계약 자산 설정 (USDT-margined futures, BTC-marin 거래소에서 백테스트시 inverse_asset을 사용하는데 지금은 거의 사용하지 않음)
Parameters:
contract_size (float): 계약 크기 (1계약당 거래 수량, 거래소마다 수량 다를 수 있음. 일반적으로는 1임)
Example:
asset.linear_asset(1.0)...
오, 저도 이 프로젝트 한때 봤었는데 반갑네요

안녕하세요~ 반갑습니다

노틸러스 트레이더 프로젝트도 참고해보시면 좋을 것 같네요.