본문 바로가기

실전 원칙

테스트 자동화가 실제 계정 잔고를 참조하면 안 되는 이유

문제 제기: 테스트가 실계좌 잔고를 읽으면 무슨 일이 생기나

자동매매나 백테스트, 전진검증(walk-forward)을 만들 때 흔히 저지르는 실수가 있다. 실행 권한만 분리하고 자본 기준은 실제 계좌를 그대로 참조하는 것이다. "어차피 주문은 안 나가니까 괜찮다"고 생각하기 쉽다.
하지만 가상 자동매매가 실계좌 잔고를 참조하면 포지션 크기 계산이 운영 계좌 상태에 종속된다. 실계좌 잔고가 오르내릴 때마다 테스트의 가상 성과와 위험 규모가 함께 흔들린다는 뜻이다.


왜 위험한가: 재현성과 위험 규모가 무너진다

실제 개발 과정에서 국내주식 dry-run 자동매매를 추가하며 확인한 점은 이렇다. 가상 포지션 크기를 실계좌 잔고 기준으로 계산하면 다음 문제가 생긴다.

  • 재현 불가: 같은 전략을 같은 시점에 돌려도, 실계좌 잔고가 달라지면 가상 결과가 달라진다. 검증 결과를 신뢰하기 어려워진다.
  • 위험 규모의 종속: 가상 매매의 위험 크기가 운영 계좌 상태에 묶여, 테스트가 독립적인 실험이 아니게 된다.
  • 성과·위험의 종속: 가상 성과와 위험 규모가 운영 계좌 상태에 종속되어, 계좌 상황이 바뀌면 검증 조건 자체가 흔들린다.

실행 권한(주문을 낼 수 있는가)뿐 아니라 자본 기준(어떤 잔고로 크기를 계산하는가)까지 분리해야 재현 가능한 전진검증이 된다는 것이 핵심 교훈이었다.


확인 절차: 자본 기준이 분리됐는지 검증하는 법

테스트 자동화가 실계좌와 제대로 분리됐는지 다음 순서로 확인할 수 있다.

  • 1. 플래그 분리 확인: 가상 실행과 실주문 실행을 서로 다른 플래그로 나눴는지 코드에서 직접 확인한다. 하나의 스위치가 두 경로를 모두 켜지 않아야 한다.
  • 2. 자본 출처 추적: 가상 포지션 크기 계산식이 참조하는 잔고 변수가 무엇인지 따라간다. 별도의 dry-run 자본만 참조하는지 검증한다.
  • 3. 실계좌 값 변조 테스트: 실계좌 잔고 값을 (테스트 환경에서) 크게 바꿔본다. 가상 결과가 그대로 유지되면 분리가 잘 된 것이다.
  • 4. 승인 경로 확인: 실주문에는 별도 승인 단계(예: 메신저 승인, 이중 옵트인)가 남아 있는지 확인한다.

체크리스트

  • 가상 실행과 실주문 실행 플래그를 물리적으로 분리했는가?
  • 가상 포지션 크기가 실계좌가 아닌 별도 dry-run 자본만 참조하는가?
  • 실계좌 잔고를 바꿔도 가상 검증 결과가 재현되는가?
  • 실주문에 승인·이중 옵트인 같은 되돌릴 여지가 있는 관문이 있는가?
  • AI가 "분리되어 있다"고 답하면, 코드와 실제 동작으로 재확인했는가?
  • 작은 테스트 케이스를 직접 실행해 자본 출처를 눈으로 확인했는가?

적용 예시

국내주식 dry-run 자동매매를 예로 들면, 다음과 같이 분리할 수 있다.

  • 가상 자동 실행 플래그와 실주문 자동 실행 플래그를 각각 둔다.
  • 가상 포지션 크기는 별도로 설정한 dry-run 자본(예: 임의로 정한 가상 자본금)만 기준으로 계산한다.
  • 실주문 경로에는 기존의 메신저 승인과 이중 옵트인을 그대로 유지한다.

이 구조에서는 실계좌 잔고가 어떻게 변하든 가상 검증의 조건이 고정되므로, 전략 결과를 반복 재현하고 비교할 수 있다. 이 방식은 자동매매뿐 아니라, 외부 상태를 참조하는 모든 테스트 자동화(사용량 기반 과금, 재고 연동 로직 등)에도 일반화해 적용할 수 있다.


한계와 주의사항

자본 기준을 분리한다고 해서 검증 결과가 실제 운영 성과를 보장하는 것은 아니다. dry-run은 어디까지나 실행 전 확인 수단이며, 시장 상황·체결 지연·수수료 등 실제 환경 요인은 별도로 고려해야 한다.
또한 여기서 소개한 절차는 특정 개발 경험에서 얻은 원칙을 일반화한 것이다. 시스템 구조에 따라 분리 방식과 승인 단계는 달라질 수 있으므로, 각자 환경에서 작은 테스트로 검증한 뒤 적용하기를 권한다. 어떤 방법도 손실이나 성과를 보장하지 않는다.
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

반응형