← 블로그로 돌아가기
퀀트 개념

크립토 백테스트의 샤프·소르티노·최대낙폭 읽는 법 (스스로를 속이지 않고)

2026-08-15·PRUVIQ Research·6 분 소요

백테스트 보고서는 세 개의 위험 수치를 건네줍니다: 샤프(Sharpe), 소르티노(Sortino), 최대낙폭(MDD). 셋 다 훌륭해 보이면서도 여전히 거짓말일 수 있습니다 — 수학이 틀려서가 아니라, 입력이 어떻게 만들어졌는지와 지금 보고 있는 결과를 고르기 전에 주사위를 몇 번 굴렸는지 때문입니다.

이 글은 PRUVIQ 시뮬레이터가 각 지표를 정확히 어떻게 계산하는지 — 교과서 근사가 아니라 우리 엔진에서 실제로 도는 공식 — 그리고 그 숫자를 부풀리는 세 가지 함정을 설명합니다. 수익 쪽 동반 지표는 수익 팩터 완전 정리에서 다뤘고, 백테스트 위생 규칙 전체는 크립토 전략 백테스트 하는 법을 참고하세요.

샤프: 전체 변동성 단위당 수익

샤프 비율이 답하는 질문: 상승과 하락을 가리지 않은 모든 변동성 한 단위당 전략이 얼마나 벌었는가?

PRUVIQ는 일별 수익률로 계산하고 √365로 연율화합니다. 크립토는 365일 내내 거래되기 때문입니다:

Sharpe = mean(daily_returns) / std(daily_returns, sample) × √365

공식보다 더 중요한 구현 디테일이 둘 있습니다:

거래 없는 날은 ‘없음’이 아니라 0으로 셉니다 — 그리고 채움 창은 백테스트 전체여야 합니다. 대표 시뮬레이터 결과(/simulate)에서 엔진은 표준편차를 계산하기 전에 백테스트 창 전체의 무거래일을 0으로 채웁니다. 미묘한 실패 방식은 채움을 건너뛰는 게 아니라 창을 너무 좁게 잡는 것입니다. 실측(BTCUSDT 1D, 20232024)에서, 거래가 백테스트 창의 10%만 덮은 평균회귀 전략은 첫 거래마지막 거래 사이만 0으로 채우면 샤프 1.78 — 채움을 창 전체로 넓히자 정직한 0.56이 나왔습니다. 같은 거래, 같은 공식인데 3배 차이입니다. 정직한 공시 하나: SL/TP 옵티마이저의 그리드 셀들은 현재 셀별 샤프를 거래일만으로 계산합니다 — 우리 수리 목록에 있는 알려진 비대칭이고, 그리드를 판결이 아니라 지도로 봐야 하는 이유가 하나 더 늘어나는 셈입니다.

트랙 레코드가 너무 얇으면 추정 대신 0을 반환합니다. 전략의 거래 구간이 5일 미만이면 연율화가 의미를 잃습니다 — +5% 단일 거래를 0으로 패딩하면 샤프 8.5로 연율화됩니다 — 그래서 엔진은 노이즈에서 외삽하는 대신 샤프(와 소르티노)를 0.0으로 보고합니다.

샤프가 말해 줄 수 없는 것: 상방 변동성을 하방과 똑같이 벌점 처리합니다. 크게 이긴 날이 몇 번 있는 전략은 바로 그 원하는 특성 때문에 샤프에서 불이익을 받습니다. 그걸 위해 소르티노가 있습니다.

소르티노: 하방 변동성 단위당 수익

소르티노는 분모의 전체 변동성을 목표 하방 편차(TDD) — 음(-)의 일별 수익률만의 제곱평균제곱근 — 로 바꿉니다:

Sortino = mean(daily_returns) / TDD × √365
TDD     = √( mean( min(daily_returns, 0)² ) )

올바른 소르티노와 부풀려진 소르티노를 가르는 디테일: TDD는 하락한 날만이 아니라 전체 N일로 평균합니다. 이것이 원전인 Sortino & van der Meer (1991)의 정의이고, 우리 엔진이 구현한 방식입니다. 흔한 지름길처럼 하락일 수로 나누면, 거의 지지 않는 전략일수록 소르티노가 체계적으로 부풀려집니다 — 숫자가 정직해야 할 바로 그 순간에요.

샤프와 소르티노는 함께 읽으세요: 소르티노가 샤프보다 훨씬 높으면 그 전략의 변동성은 대부분 상방(비대칭 승자)입니다. 둘이 비슷하면 이익과 손실이 대략 대칭입니다.

최대낙폭: 최악의 고점 대비 하락 — 스코프가 핵심

최대낙폭(MDD)은 자본 곡선의 가장 깊은 고점 대비 저점 하락입니다. 그런데 “무엇의 퍼센트인가”가 백테스트가 조용히 속이는 지점이라, 우리 스코프를 정확히 밝힙니다:

PRUVIQ의 MDD는 계좌 곡선 기준, 피크 시점 계좌 자본 대비 퍼센트입니다. 엔진은 0에서 시작하는 퍼센트 포인트 누적 PnL 곡선(고정 명목, 비복리)을 만들고, 시작 자본을 100으로 두고 이렇게 계산합니다:

drawdown = (peak − equity) / (100 + peak) × 100    # 상한 100%

100% 상한은 장식이 아닙니다 — 누적 손실 −100은 계좌가 사라졌다는 뜻이고, 엔진은 애초에 체결될 수 없었던 거래를 시뮬레이션하는 대신 곡선을 거기서 멈춥니다.

스코프 공시가 왜 중요한가: 0-기점 곡선에서 “피크 수익 대비”로 낙폭을 재면 초기 피크가 작을 때 분모가 붕괴해 쓰레기 값이 나옵니다. 우리도 직접 겪었습니다 — 같은 BTC 63개 거래가 계좌 기준으로는 MDD 19.33, 망가진 수익-피크 기준으로는 허위 100.0으로 측정됐습니다. 도구 간 MDD를 비교할 때는 먼저 분모가 무엇인지 물으세요.

MDD는 구조적으로 과거만 봅니다: 이 표본에서 일어난 최악의 낙폭일 뿐, 다음 낙폭은 더 나쁠 수 있습니다. 포지션 사이징과 “바닥에서 이 전략을 계속 돌릴 수 있었을까?”라는 질문에 쓰고, 상한선으로 쓰지 마세요.

함정 1: 짧은 창 + 연율화 = 외삽

연율화는 외삽입니다: √365는 창이 보여준 것을 1년 전체로 늘려 폅니다. 창이 짧을수록 외삽은 거칠어집니다.

가장 깔끔한 예가 우리 엔진이 함께 보고하는 칼마(Calmar, 연수익 / MDD)입니다. 30일 +10% 구간을 순진하게 연율화하면 연 +219%가 되고, MDD 3%에 대면 칼마 73 — 무의미한 숫자가 엘리트 전략으로 분장한 값이 나옵니다. GIPS 2020 표준이 1년 미만 기간의 수익률은 연율화해서는 안 된다고 못 박는 이유이고, 우리 칼마가 1년 미만 창에는 창 수익률을 그대로 쓰는 이유입니다.

정직한 공시: 시뮬레이터의 샤프와 소르티노는 창 길이와 무관하게 √365로 연율화됩니다. 업계 관례이고 전략 간 비교를 가능하게 하지만, 짧은 창의 샤프는 관측이 아니라 외삽이라는 뜻이기도 합니다. 지표는 항상 그것이 나온 기간과 나란히 읽고, 데이터가 허락하는 가장 긴 창을 선호하세요.

함정 2: 얇은 표본

거래 몇 건 위의 훌륭한 비율은 통계가 아니라 일화입니다. 제품에는 두 가지 가드가 있습니다:

  • 하드 플로어: 일별 수익률 관측 5개 미만 → 샤프와 소르티노는 0.0으로 보고 (위 참조).
  • low_sample 플래그: 전략 랭킹에서 100건 미만 거래로 만들어진 결과는 통계적으로 얇다고 플래그됩니다 (자연히 거래가 적은 1일 창은 20건 미만). 플래그는 조용히 숨기는 대신 UI에 표시됩니다 — 화면 밖의 유리한 사실보다 화면 위의 불리한 사실이 낫습니다.

플래그가 보이면 그 행의 모든 비율을 잠정치로 취급하세요. 숫자를 증거로 바꾸는 것은 더 많은 거래, 더 긴 창, 코인 전반의 폭입니다.

함정 3: 여러 번 시도한 것 중 최고를 골랐다

완벽한 공식조차 살아남는 함정입니다. 수십 개 셀의 손절/익절 그리드를 돌리고 최고 샤프를 고르면: 그 승자의 샤프는 많은 무작위 추첨의 최댓값이고, 많은 추첨의 최댓값은 어떤 전략에도 진짜 엣지가 없어도 위로 편향됩니다.

보정이 Bailey & López de Prado (2014)의 Deflated Sharpe Ratio(DSR) 입니다. “이 샤프가 0보다 높은가?” 대신 DSR은 이렇게 묻습니다: “후보를 몇 개나 시도했는지를 감안할 때, 이 샤프가 운만으로 기대되는 최댓값보다 높은가?” 시도 수 전체에 걸쳐 진짜 실력이 0이라는 귀무가설 하의 기대 최고 샤프를 계산한 뒤, 승자의 샤프가 그 기준선을 진짜로 넘는 확률을 보고합니다 — 크립토 수익률은 정규분포와 거리가 머니, 그 수익률의 왜도와 첨도까지 반영해서요.

/ko/simulate/의 SL/TP 옵티마이저에서 그리드를 돌리면 PRUVIQ가 그리드 승자의 DSR을 자동으로 계산해 히트맵 아래에 표시합니다 — 단, 유효 셀이 2개 이상이고 승자의 일별 관측이 30개 이상일 때만이며, 아니면 가짜 0으로 보여주는 대신 생략합니다. 읽는 법:

  • DSR > 0.95 는 승자가 5% 유의수준에서 다중검정 보정을 통과했다는 뜻 — 그 성과가 단지 가장 운 좋은 셀일 가능성이 낮습니다.
  • 높은 샤프에 낮은 DSR은 선택에 의한 과최적화의 고전적 서명입니다: 숫자는 진짜지만, 그 뒤의 시도 횟수도 진짜였다는 뜻입니다.

DSR도 만능 통행증이 아니고, 논문 스스로 그렇게 말합니다. 첫째, 시도 수에는 공개된 시도 — 실제로 돌린 그리드 셀 — 만 들어갑니다. 이 그리드 전에 시험하고 버린 아이디어(“파일 서랍”)는 세어지지 않고, 시도 수를 과소 집계하면 DSR이 과대평가됩니다. 그래서 응답에는 세 가지 시도 수 — 대략 그리드의 8분의 1, 그리드 전체, 그리드의 열 배 — 에서의 민감도 값이 함께 실려, 판정이 그 가정에 얼마나 취약한지 볼 수 있습니다. 둘째, DSR은 선택을 보정할 뿐 망가진 백테스트를 보정하지 않습니다: 룩어헤드 편향이나 빠진 수수료는 탐지할 수 없습니다. 쓰레기가 들어가면, 디플레이트된 쓰레기가 나옵니다.

읽기 체크리스트

위험조정 수치를 믿기 전에:

  1. : 얼마나 길고, 하나 이상의 시장 레짐을 지나는가? 1년 미만은 연율화하는 순간 외삽입니다.
  2. 표본: low_sample 플래그가 켜져 있는가? 100건 미만 거래는 얇습니다.
  3. 스코프: MDD는 무엇의 퍼센트인가? (우리 기준: 계좌 자본, 피크 대비, 비복리, 100% 상한.)
  4. 선택: 이것이 보이기 전에 몇 개의 설정이 시도됐는가? 그리드에서 나왔다면 DSR을 확인하세요.
  5. 교차 검증: 비대칭성은 샤프 vs 소르티노로, 생존 가능성은 MDD로, 엣지 품질은 수익 팩터로. 하나의 숫자는 결코 답이 아닙니다.

전체 공식과 데이터 정책은 방법론 페이지에 문서화되어 있습니다. 그리고 직관을 기르는 가장 좋은 방법은 검사할 수 있는 전략 위에서 이 숫자들을 직접 만들어 보는 것입니다: PRUVIQ 시뮬레이터에서 전략을 하나 돌리고, 세 가지 함정을 염두에 두고 그 샤프·소르티노·MDD를 읽어 보세요.

공유하기

InstagramLinkedIn

직접 전략을 테스트해보세요

320개 이상 코인에서 트레이딩 전략을 시뮬레이션하세요. 무료.