🛠️ Dev & Tools (투자 도구 개발)

[계좌 리팩토링] 15편(알고리즘). 실전과 테스트의 경계를 허물다: VWAP + EMA 눌림목 전략과 백테스팅 시스템 구축기

코딩버핏 2026. 5. 28. 22:19

VWAP + EMA 눌림목 전략과 백테스팅 시스템 구축기

1. 봇에게 'Parker Brooks'라는 이름을 지어주다

안녕하세요! 내 계좌와 코드를 튼튼하게 다지는 [계좌 리팩토링] 시리즈 15편입니다. 1편부터 지금까지 인프라와 배포 파이프라인을 구축하며 하드웨어적인 뼈대를 완성했다면, 이제는 봇에게 진정한 '두뇌'를 심어줄 차례입니다. 저는 이 고도화된 자동매매 봇 프로젝트에 'Parker Brooks'라는 이름을 붙였습니다.

어떤 유튜브를 보다가 파커 브룩스라는 트레이더의 매매 방식을 알게되었습니다.

자동매매를 개발하다 보면 필연적으로 이런 질문에 부딪힙니다. "내가 만든 이 매매 로직, 진짜로 돈을 벌어다 줄까?" 실전에서 내 피 같은 돈을 태우기 전에, 과거의 데이터로 수백, 수천 번의 모의고사를 치러보는 백테스팅(Backtesting)은 선택이 아닌 필수입니다. 이번 편에서는 Parker Brooks의 핵심 전략과, 이 전략을 과거 데이터로 검증하는 백테스팅 시스템의 딥한 엔지니어링 과정을 공유합니다.

2. 전략 소개: VWAP와 EMA가 그리는 '눌림목'의 예술

Parker Brooks는 국내 주식(KR)과 미국 주식(US, 특히 변동성이 큰 종목) 모두에서 동작하며, 그 핵심 엔진은 VWAP + EMA 눌림목 전략입니다. 비전공자나 주린이도 이해할 수 있도록 쉽게 풀어보겠습니다.

  • VWAP (거래량 가중 평균가): 단순히 가격만 평균 낸 것이 아니라, '얼마나 많은 거래량이 터졌는가'를 반영한 진짜 평균 단가입니다. 보통 기관 투자자들의 평단가로 불리며, 강력한 지지/저항선 역할을 합니다. 제 봇은 "오직 주가가 VWAP 위쪽에 있을 때만 롱(매수) 포지션을 잡는다"는 철칙을 가집니다. 역추세는 타지 않겠다는 뜻이죠.
  • EMA (지수이동평균): 최근 가격에 더 큰 가중치를 두어 추세를 민감하게 보여주는 선입니다. (기본 9일선 사용)
  • 눌림목 (Pullback): 주가가 상승 추세(VWAP 위)를 타다가 잠시 숨을 고르며 EMA 라인 근처까지 떨어졌다가 다시 반등하는 찰나를 노립니다. 달리는 말에 무작정 타는 게 아니라, 말이 잠시 물을 마실 때 올라타는 안전한 진입 전략입니다.

3. 백테스팅 시스템 구조: "라이브와 테스트는 한 몸이어야 한다"

대부분의 자동매매 개발자들이 겪는 가장 뼈아픈 실패는 "백테스트에서는 수익률이 엄청났는데, 실전에 돌리니 박살이 나더라"입니다. 이를 방지하기 위해 Parker Brooks는 라이브 트레이딩과 백테스팅이 완전히 동일한 전략 함수(evaluateTick)를 공유하도록 설계되었습니다.

백테스팅은 웹 UI가 아닌, 빠르고 강력한 CLI(커맨드 라인 인터페이스) 환경에서 실행됩니다.

# 미국 주식 특정 날짜 백테스트
node parker.js --test-us 260421

# 국내 주식(삼성전자) 백테스트
node parker.js --test-kr 005930

CLI 명령어를 치면, 과거의 1분봉 원본 데이터를 가져와 실시간처럼 5분봉으로 리샘플링하며 evaluateTick 함수에 틱(Tick) 단위로 데이터를 밀어 넣습니다. 웹 UI에서 파라미터를 수정하면 즉시 이 CLI 백테스트 로직에 반영되어, 실전과 시뮬레이션 간의 코드 괴리를 0%로 만들었습니다.

4. 파라미터 튜닝 여정: 봇을 정교하게 깎아내는 시간

완벽한 로직 하나만으로 시장을 이길 수는 없습니다. 시장 상황에 맞게 수많은 파라미터를 조합하고 최적값을 찾는 과정이 필수적입니다. Parker Brooks가 감시하는 주요 파라미터는 다음과 같습니다.

  • 기본 지표: 1분봉을 몇 분봉으로 묶어 판단할지(기본 5분봉), EMA 기간은 며칠로 할지 결정합니다.
  • 거래량 프로파일(HVN) 필터: 가격대별 거래량을 분석하여, 바로 머리 위에 거래가 빽빽하게 일어난 저항대(HVN)가 있다면 진입을 포기합니다. 먹을 자리가 없기 때문이죠.
  • 장전 레벨 (PMH/PML): 특히 미국 주식에서 중요합니다. 프리마켓(장전) 고가인 PMH를 돌파할 때만 진입을 허용하되, 너무 빨리 사서 물리지 않도록 'PMH 진입 버퍼(%)'를 두어 확실한 돌파 시에만 매수합니다.
  • 리스크 & 횡보 필터: 최근 캔들이 VWAP 위아래를 뱀처럼 뚫고 다니면 '추세 없는 횡보장'으로 판단해 진입을 차단합니다. 또한 ADX(추세 강도 지표)가 일정 수치 이하이거나, 장대음봉이 터진 직후에는 쿨다운 시간을 갖습니다.

5. 백테스트의 눈물: 배운 점과 뼈아픈 한계들

수도 없이 백테스트를 돌리며 깨달은 점들이 있습니다.

  1. 과최적화(Overfitting)의 늪: 특정 날짜(예: 260421)에만 승률이 100%가 나오도록 파라미터를 깎는 것은 아무 의미가 없었습니다. 여러 날짜와 종목에 걸쳐 '일관되게 살아남는' 파라미터가 진짜 실전용입니다.
  2. 매수는 기술, 매도는 예술: 진입 조건을 아무리 기가 막히게 짜도, 청산 타이밍이 나쁘면 순식간에 손실로 바뀝니다. 그래서 청산 시그널이 떠도 EMA가 여전히 상승 중이면 버티는 'EMA 기울기 가드'와 종가가 VWAP 위면 이탈을 무시하는 'VWAP 가드' 등 복잡한 청산 방어 로직을 추가해야만 했습니다.
  3. 실시간 통신의 중요성: 초기에는 REST API 폴링 방식을 썼더니 5분봉 정렬이 미세하게 어긋나며 백테스트와 실전의 진입 타이밍이 달라지는 치명적 버그가 있었습니다. 결국 웹소켓 실시간 수신 방식으로 구조를 완전히 엎고 나서야 백테스트의 신뢰도를 확보할 수 있었습니다.

6. 마무리하며: 끝없는 최적화의 길

Parker Brooks는 이제 단순한 스크립트를 넘어, 제 트레이딩 아이디어를 즉각적으로 검증해 주는 강력한 연구소(Lab)가 되었습니다. 분할 익절 로직(목표 수익 도달 시 절반 매도 후 본절 세팅)까지 탑재하며 점차 기관들의 트레이딩 시스템을 닮아가고 있습니다.

자동매매의 끝은 완벽한 로직을 찾는 것이 아니라, 시장의 변화에 맞춰 파라미터를 꾸준히 적응시켜 나가는 시스템을 구축하는 것입니다. 뼈대와 엔진은 모두 완성되었습니다. 이제 남은 것은 매일 아침 Parker Brooks와 함께 시장을 분석하고, 더 나은 파라미터를 향해 끝없이 튜닝해 나가는 즐거운 항해뿐입니다.