몬테카를로 시뮬레이션
과거 수익률을 무작위로 재배열해 수천 개의 가상 시나리오를 만들고, 최대낙폭 분포로 전략의 숨은 리스크를 가늠하는 검증 기법이다.
난이도 · 고급 신뢰도 ★★★★☆ 널리 검증됨 한국 시장미국 시장 업데이트 · 2026년 7월 21일
개요와 원리
몬테카를로 시뮬레이션은 특정 전략의 과거 수익률(또는 개별 거래 손익) 표본을 무작위로 재배열하거나 복원추출로 다시 뽑아, 수천 개의 가상 자산곡선을 만들어내는 검증 기법이다. 실제 백테스트는 시장이 걸어온 단 하나의 경로만 보여준다. 같은 수익률들이 조금 다른 순서로 나타났다면 최종 성과, 특히 최대낙폭(MDD)은 전혀 다른 모습이 됐을 수 있다. 몬테카를로 시뮬레이션은 이 “순서의 우연성”을 걷어내고, 전략이 실제로 가진 통계적 성질을 들여다보는 도구다.
기본 절차는 다음과 같다. 먼저 백테스트에서 나온 개별 거래 수익률(또는 일간 수익률) 목록을 확보한다. 이 목록의 순서만 무작위로 뒤섞어 새로운 자산곡선을 만들거나, 복원추출(부트스트랩) 방식으로 원래 표본에서 중복을 허용해 새로운 수익률 시퀀스를 구성한다. 이 과정을 수천 회 반복하면 시뮬레이션마다 최종 누적수익률, 최대낙폭, 샤프비율 등의 분포가 만들어진다. 단일 숫자가 아니라 “이 전략이 가질 수 있는 성과의 범위”를 확률분포로 확인하는 것이 핵심이다.
특히 실전에서 가장 중요하게 보는 것은 최대낙폭(MDD)의 분포다. 원래 백테스트의 MDD가 -15%였다 해도, 같은 수익률을 다르게 배열한 시뮬레이션 상위 5% 구간에서는 -35%, -40%까지 낙폭이 벌어질 수 있다. 이 분포를 미리 알아야 실제로 그 손실을 견딜 자본과 심리적 여유가 있는지 자금 투입 전에 가늠할 수 있다. 단일 백테스트 결과만 보고 판단하는 것은, 주사위를 한 번 던져 나온 눈으로 그 주사위 전체의 확률분포를 단정하는 것과 다르지 않다.
핵심 규칙
진입
몬테카를로 시뮬레이션은 개별 매매의 진입 신호가 아니라, 전략을 실전에 투입하기 전에 거치는 일종의 관문 심사에 가깝다.
- 시뮬레이션 결과 하위 구간(예: 최악 5%) 시나리오에서도 손익이 감내 가능한 범위 안에 있는지 확인한 뒤에만 실계좌 투입을 결정한다.
- 전체 시뮬레이션 중 최종 수익이 마이너스로 끝나는 비율이 일정 수준(예: 10% 이하)을 넘지 않는지 확인한다. 이 비율이 지나치게 높다면 표본 크기가 부족하거나 전략 자체의 우위가 약하다는 신호다.
- 포지션 크기는 백테스트의 낙관적인 숫자가 아니라 시뮬레이션이 보여준 변동성과 낙폭 분포를 기준으로 정한다. 켈리공식으로 계산한 이론적 배팅 비율을, 시뮬레이션에서 나온 최악 낙폭 구간을 반영해 절반 이하로 낮춰 적용하는 식이 대표적이다.
청산과 손절
전략 차원의 손절선(kill switch)은 시뮬레이션에서 얻은 MDD 분포의 상위 구간을 근거로 정한다.
- 예컨대 시뮬레이션 상위 5% 낙폭이 -30%라면, 실계좌 운용 중 누적 낙폭이 이 수준의 1.2~1.5배에 근접하는 시점을 전략 중단 및 재점검 기준으로 삼는다.
- 단일 백테스트의 MDD만 기준으로 삼으면 실제로는 훨씬 자주, 훨씬 크게 손실이 발생할 수 있다는 점을 놓치게 된다.
- 실거래 데이터가 쌓일 때마다 시뮬레이션을 다시 돌려, 실제 낙폭 경로가 원래 시뮬레이션의 최악 구간에 근접해 가는지 주기적으로 대조하는 것도 청산 판단의 일부다. 재시뮬레이션 결과가 계속 악화된다면 전략의 우위 자체가 소멸했을 가능성을 의심해야 한다.
실전 적용
한국 시장에서는 개인 투자자가 국내 HTS·MTS의 기본 백테스트 기능만으로 몬테카를로 시뮬레이션을 수행하기는 어렵다. 대개 증권사 API(키움 OpenAPI 등)로 체결 데이터를 확보한 뒤 파이썬 등으로 별도 코드를 작성해 재배열·재표본 작업을 돌리는 방식이 일반적이다. 한국은 개별 종목에 상하 ±30% 가격제한폭이 있어 하루 단위 수익률의 극단값이 어느 정도 제한되지만, 연속 하한가처럼 여러 날에 걸쳐 누적되는 급락 위험은 여전히 시뮬레이션에 반영해야 한다.
미국 시장은 수십 년치 장기 데이터와 QuantConnect, backtrader, zipline 같은 오픈소스 퀀트 프레임워크가 잘 갖춰져 있어, 몬테카를로 시뮬레이션을 라이브러리 수준에서 비교적 손쉽게 실행할 수 있다. 개별 종목에는 가격제한폭이 없고(지수 차원의 서킷브레이커만 존재) 하루 급락 폭이 한국보다 훨씬 커질 수 있으므로, 시뮬레이션에서 갭다운 시나리오의 꼬리를 더 두껍게 반영해야 한다. 두 시장 모두 슬리피지와 수수료를 수익률 표본에 미리 반영했는지 반드시 확인해야, 시뮬레이션 결과가 실제 상황과 괴리되지 않는다.
장단점
| 장점 | 단점 |
|---|
| 단일 백테스트의 우연성을 걷어내고 전략의 통계적 강건성을 확인할 수 있다 | 원본 표본 자체의 편향(생존편향, 특정 국면 편중)은 시뮬레이션으로도 해결되지 않는다 |
| 최대낙폭 분포를 통해 실제 감내해야 할 리스크 범위를 사전에 파악할 수 있다 | 단순 셔플은 실제 수익률의 자기상관과 변동성 군집을 무시해 결과가 과도하게 낙관적으로 보일 수 있다 |
| 포지션 크기와 손절 기준을 통계적 근거 위에서 설계할 수 있다 | 정규분포를 가정한 난수 생성은 실제 시장의 두꺼운 꼬리(fat tail)를 과소평가하기 쉽다 |
흔한 실수
- 단순 셔플만 사용하는 실수: 순서만 무작위로 바꾸는 방식은 실제 시장의 추세 지속성과 변동성 군집 현상을 무시한다. 구간을 통째로 묶어 재표본하는 블록 부트스트랩을 병행해야 이런 왜곡을 줄일 수 있다.
- 시뮬레이션을 확정적 예측으로 오해하는 실수: 시뮬레이션은 과거 표본 안에서 가능한 경로들을 보여줄 뿐, 표본 자체의 구조적 편향까지 교정해주지는 않는다.
- 반복 횟수 부족: 수십~수백 회 정도만 반복하면 분포 자체가 불안정하다. 최소 수천 회 이상 반복해야 신뢰할 만한 분포를 얻는다.
- 불리한 결과를 무시하는 확증편향: 시뮬레이션 결과가 실망스럽게 나와도 무시하고 원래 백테스트의 낙관적인 숫자만 믿는 경우가 흔하다.
같이 쓰면 좋은 기법
워크포워드 분석과 결합하면 표본 외 구간에서의 실제 성과까지 함께 검증할 수 있어, 몬테카를로만으로는 잡아내기 어려운 시간에 따른 전략 열화를 확인할 수 있다. 자기상관을 보존하는 블록 부트스트랩은 단순 셔플의 한계를 보완하는 방법으로 함께 쓰인다. 켈리공식 기반 포지션 사이징은 몬테카를로가 산출한 변동성·낙폭 분포를 반영해 베팅 비율을 조정하는 데 쓰인다. 여러 전략을 함께 운용할 때는 리스크 패리티 관점에서 각 전략의 시뮬레이션 결과를 합산해, 포트폴리오 차원의 낙폭을 다시 점검하는 것이 바람직하다.
⚠️ 이 글은 교육 목적의 정리 자료입니다. 특정 종목의 매수·매도 추천이 아니며, 어떤 기법도
수익을 보장하지 않습니다. 과거에 유효했던 기법이 미래에도 유효하다는 보장은 없으며,
모든 투자 판단과 책임은 투자자 본인에게 있습니다.