연평균 수익률이 높아도 그 과정에서 계좌가 크게 무너졌다면 편하게 얻은 성과는 아닙니다. 반대로 수익률이 조금 낮더라도 최대 낙폭을 크게 줄였다면 위험 대비 효율은 더 높을 수 있습니다.
실제 자동매매 전략 6개를 비교하니 돈치안 돌파의 CAGR은 6.56%로 5위였습니다. 하지만 MDD가 -13.96%로 상대적으로 작아 칼마 비율은 0.47, 전체 3위까지 올라갔습니다.
반대로 ROC 추세는 CAGR 9.28%로 3위였지만 MDD가 -23.94%로 가장 깊어 칼마 비율 순위는 5위로 내려갔습니다.
칼마 비율(Calmar Ratio)은 연평균 복리 성장률을 관측된 최대 낙폭의 절댓값으로 나눈 지표입니다. 수익의 속도와 최악의 손실을 하나의 비율로 연결합니다.
성과지표 006 핵심 정리
- 칼마 비율: CAGR을 MDD 절댓값으로 나눈 최대 낙폭 대비 수익 효율
- 같은 CAGR이면 MDD가 작을수록 값이 높음
- 같은 MDD이면 CAGR이 높을수록 값이 높음
- 비교 기간이 다르면 CAGR과 관측된 MDD가 함께 달라질 수 있음
- 칼마 비율은 낙폭의 지속 시간과 반복 횟수를 보여주지 않음
1. 칼마 비율은 어떤 질문에 답하는가
칼마 비율이 답하는 질문은 다음과 같습니다.
관측된 최대 낙폭 1단위를 감수하고 연평균 복리수익을 얼마나 얻었는가?
샤프 비율은 수익률 분포 전체의 표준편차를 분모로 사용하고, 소르티노 비율은 목표 아래의 하방편차를 사용합니다. 칼마 비율은 평균적인 흔들림 대신 실제 자산곡선에서 발생한 가장 깊은 낙폭 하나를 사용합니다.
| 지표 | 수익 측정값 | 위험 측정값 |
|---|---|---|
| Sharpe | 평균 초과수익 | 전체 변동성 |
| Sortino | 평균 초과수익 | 하방편차 |
| Calmar | CAGR | MDD 절댓값 |
칼마 비율은 최악의 고점 대비 손실이 연복리 성장률에 비해 어느 정도였는지 직관적으로 보여줍니다. 특히 자산곡선의 큰 낙폭을 중요하게 보는 추세 추종·자동매매 전략을 비교할 때 유용합니다.
2. 칼마 비율 계산식
계산에는 CAGR과 MDD가 필요합니다.
CAGR = (최종 자산 ÷ 시작 자산)^(1 ÷ 투자 연수) - 1
현재 낙폭 = 현재 자산 ÷ 현재까지의 최고 자산 - 1
MDD = 전체 현재 낙폭 중 가장 작은 값
Calmar = CAGR ÷ |MDD|
CAGR이 10%, MDD가 -20%라면 칼마 비율은 0.5입니다.
0.10 ÷ 0.20 = 0.50
CAGR과 MDD는 모두 소수 또는 백분율 중 같은 단위를 사용해야 합니다. 10 ÷ 0.20처럼 서로 다른 단위를 섞으면 50이라는 잘못된 값이 나옵니다.
MDD가 0이라면 분모가 0이므로 일반적인 칼마 비율을 계산할 수 없습니다. CAGR이 음수라면 칼마 비율도 음수가 되며, 이 경우 위험 대비 효율 순위보다 전략이 성장하지 못한 원인을 먼저 확인해야 합니다.
3. 수익률은 비슷하지만 Calmar는 0.56과 0.34
누적수익률은 비슷하지만 MDD가 1.6배 달랐던 SYSTEM LAB 04의 두 청산 전략을 다시 사용했습니다.
2018년부터 2025년까지 국내 주식 30종목을 동일 비중으로 구성했습니다. 진입 조건과 종목 필터는 같고 청산선만 20일 이동평균선과 40일 이동평균선으로 바꿨으며, 매수와 매도에 각각 0.05% 비용을 반영했습니다.

| 전략 | 누적수익률 | CAGR | MDD | Calmar |
|---|---|---|---|---|
| 20일선 청산 | +40.72% | 4.37% | -7.83% | 0.56 |
| 40일선 청산 | +39.16% | 4.22% | -12.35% | 0.34 |
누적수익률 차이는 1.56%포인트이고 CAGR 차이도 0.15%포인트에 불과합니다. 수익성만 보면 두 전략은 거의 비슷해 보입니다.
하지만 40일선 청산의 MDD는 -12.35%로 20일선 청산의 -7.83%보다 약 1.6배 깊었습니다. 이 차이가 분모에 반영되면서 칼마 비율은 0.56과 0.34로 벌어집니다.
20일선 청산의 Calmar는 40일선 청산보다 약 1.63배 높습니다. 최종 수익이 비슷하더라도 최대 낙폭을 기준으로 보면 두 전략의 효율은 같지 않았습니다.
4. Python으로 CAGR·MDD·Calmar 계산하기
아래 코드는 시작점, 고점, 저점과 최종값으로 단순화한 두 요약 경로에서 칼마 비율을 계산합니다. 설명용으로 관측점을 줄인 경로이며 실제 백테스트에서는 매 거래일의 전체 자산곡선을 사용해야 합니다.
import pandas as pd
def calculate_calmar(equity: pd.Series) -> dict[str, float]:
elapsed_years = (equity.index[-1] - equity.index[0]).days / 365.25
cagr = (equity.iloc[-1] / equity.iloc[0]) ** (1.0 / elapsed_years) - 1.0
drawdown = equity / equity.cummax() - 1.0
mdd = float(drawdown.min())
if mdd == 0.0:
raise ValueError("MDD가 0이면 칼마 비율을 계산할 수 없습니다.")
return {"cagr": float(cagr), "mdd": mdd, "calmar": float(cagr / abs(mdd))}
dates = pd.to_datetime(["2018-01-02", "2020-01-02", "2022-01-03", "2025-12-30"])
examples = {
"20일선 요약 경로": pd.Series([1.0, 1.2, 1.2 * (1.0 - 0.0782723616), 1.4072439530], index=dates),
"40일선 요약 경로": pd.Series([1.0, 1.2, 1.2 * (1.0 - 0.1235186224), 1.3916305686], index=dates),
}
for name, equity in examples.items():
result = calculate_calmar(equity)
print(f"{name}: CAGR {result['cagr']:.2%}, MDD {result['mdd']:.2%}, Calmar {result['calmar']:.2f}")
실행 결과는 다음과 같습니다.
20일선 요약 경로: CAGR 4.37%, MDD -7.83%, Calmar 0.56
40일선 요약 경로: CAGR 4.22%, MDD -12.35%, Calmar 0.34
자산곡선의 시작일과 종료일이 달라지면 CAGR이 변하고, 더 긴 기간을 포함하면 새로운 최대 낙폭이 추가될 수 있습니다. 같은 코드를 사용해도 측정 구간이 다르면 칼마 비율은 달라집니다.
5. 실제 LAB 6개 전략의 Calmar 순위
자동매매 중지·재개 규칙에서 사용한 LAB 6개 전략을 2022년 1월 4일부터 2025년 12월 30일까지 같은 기간으로 비교했습니다.
| 전략 | CAGR | 순위 | MDD | Calmar | 순위 | 최장 낙폭 기간 |
|---|---|---|---|---|---|---|
| EMA 20·100 | 16.41% | 1 | -21.18% | 0.77 | 1 | 488일 |
| EMA 35·120 | 15.88% | 2 | -22.57% | 0.70 | 2 | 485일 |
| 돈치안 돌파 | 6.56% | 5 | -13.96% | 0.47 | 3 | 813일 |
| ATR 돌파 | 7.05% | 4 | -15.77% | 0.45 | 4 | 815일 |
| ROC 추세 | 9.28% | 3 | -23.94% | 0.39 | 5 | 818일 |
| CCI 역추세 | 1.76% | 6 | -5.96% | 0.30 | 6 | 847일 |
EMA 20·100과 EMA 35·120은 CAGR과 Calmar에서 모두 1위와 2위를 유지했습니다. 높은 CAGR이 깊은 MDD를 보상하고도 상대적으로 높은 비율을 만들었습니다.
돈치안 돌파는 CAGR 5위에서 Calmar 3위로 올라갔습니다. CAGR은 6.56%로 낮은 편이지만 MDD가 -13.96%로 ROC·EMA·ATR 전략보다 얕았습니다.
ROC 추세는 반대로 CAGR 3위에서 Calmar 5위로 내려갔습니다. CAGR 9.28%는 돈치안보다 높았지만 MDD -23.94%가 여섯 전략 중 가장 깊었습니다.
6. 돈치안과 ROC의 순위가 뒤집힌 이유
돈치안 돌파와 ROC 추세를 직접 비교하면 칼마 비율의 역할이 분명해집니다.
| 항목 | 돈치안 돌파 | ROC 추세 |
|---|---|---|
| CAGR | 6.56% | 9.28% |
| MDD | -13.96% | -23.94% |
| Calmar | 0.47 | 0.39 |
| CAGR 순위 | 5위 | 3위 |
| Calmar 순위 | 3위 | 5위 |
ROC 추세의 CAGR은 돈치안보다 약 1.41배 높습니다. 하지만 MDD 절댓값은 약 1.71배 큽니다. 수익 증가보다 최대 낙폭 증가 폭이 더 컸기 때문에 Calmar는 오히려 낮아졌습니다.
칼마 비율은 수익률이 낮은 전략을 무조건 높게 평가하지 않습니다. CCI 역추세는 MDD가 -5.96%로 가장 얕았지만 CAGR도 1.76%에 그쳐 Calmar 0.30, 전체 6위였습니다.
분자와 분모 중 하나만 작거나 큰 것으로는 충분하지 않습니다. 연복리 성장률이 최대 낙폭을 얼마나 보상했는지를 비율로 확인해야 합니다.
7. Calmar 3위여도 회복에는 813일이 걸렸다
돈치안 돌파의 Calmar는 3위지만 최장 낙폭 기간은 813일입니다. ROC 추세의 818일보다 5일 짧을 뿐이고, EMA 전략의 485~488일보다는 훨씬 깁니다.
칼마 비율의 분모에는 MDD의 깊이만 들어갑니다. 다음 정보는 계산에서 사라집니다.
- 최대 낙폭을 회복하는 데 걸린 시간
- 작은 낙폭이 반복된 횟수
- 측정 종료일에도 진행 중인 낙폭
- 최악의 손실이 초반과 후반 중 언제 발생했는지
MDD가 가장 얕은 CCI 역추세가 회복에는 847일 걸린 결과도 같은 한계를 보여줍니다. Calmar 0.30이라는 숫자에는 847일의 기다림이 직접 반영되지 않습니다.
따라서 칼마 비율이 높아졌다는 사실을 회복이 빠르다 또는 운용하기 편하다로 바꿔 해석하면 안 됩니다.
8. 칼마 비율을 해석할 때 주의할 점
비교 기간이 같아야 한다
기간이 길어지면 CAGR은 평준화되고 새로운 최대 낙폭을 만날 가능성은 커집니다. 2년 Calmar와 10년 Calmar를 같은 기준으로 단순 비교하기 어렵습니다.
MDD 한 번에 결과가 좌우된다
측정 종료 직전에 새로운 최악의 손실이 발생하면 Calmar가 급격히 낮아질 수 있습니다. 반대로 큰 하락장이 표본에서 빠지면 값이 과대평가될 수 있습니다.
MDD가 작을 때 비율이 크게 뛸 수 있다
짧은 상승장에서 MDD가 우연히 매우 작으면 분모가 0에 가까워져 Calmar가 크게 나타납니다. 높은 값과 함께 측정 연수와 시장 국면을 확인해야 합니다.
손실의 빈도와 분포는 보이지 않는다
한 번의 -20% 낙폭과 여러 번의 -19% 낙폭은 MDD가 비슷할 수 있습니다. 평소 변동성과 하방편차는 샤프·소르티노 비율로 따로 확인해야 합니다.
비용과 레버리지를 같은 조건으로 맞춰야 한다
거래비용은 CAGR을 낮추고 레버리지는 CAGR과 MDD를 모두 바꿉니다. 서로 다른 비용·포지션 크기로 계산한 칼마 비율을 전략 구조의 차이로만 해석하면 안 됩니다.
9. Calmar를 성과표에서 보는 순서
칼마 비율은 다음 순서로 확인하면 좋습니다.
- 누적수익률과 CAGR이 실제로 충분한지 확인합니다.
- MDD의 고점·저점과 계산 기간을 확인합니다.
- CAGR과 MDD의 단위가 같은지 확인하고 Calmar를 계산합니다.
- MDD 회복 기간과 종료일 현재 낙폭을 추가합니다.
- Sharpe·Sortino로 평소 수익률 분포까지 확인합니다.
칼마 비율은 CAGR과 MDD를 한 칸으로 압축하지만 원래 두 숫자를 지우기 위한 지표는 아닙니다. 성과표에는 CAGR 6.56% / MDD -13.96% / Calmar 0.47처럼 구성 요소를 함께 표시해야 합니다.
다음 성과지표 007에서는 거래 단위로 내려가 승률, 평균손익비와 기대값을 비교하겠습니다. 승률이 낮아도 한 번 이길 때의 수익이 충분히 크면 전략이 이익을 낼 수 있는지 실제 거래 데이터로 확인할 예정입니다.
10. 정리
첫째, 칼마 비율은 CAGR을 MDD 절댓값으로 나눈 최대 낙폭 대비 수익 효율입니다. 같은 수익이면 MDD가 얕을수록 값이 높습니다.
둘째, 돈치안 돌파는 CAGR 5위였지만 MDD가 상대적으로 얕아 Calmar 0.47로 3위가 됐습니다. ROC 추세는 CAGR 3위에서 Calmar 5위로 내려갔습니다.
셋째, Calmar는 낙폭의 깊이만 반영하고 회복 시간은 보여주지 않습니다. 돈치안 돌파는 Calmar 3위여도 최장 낙폭 기간이 813일이므로 낙폭 기간과 함께 해석해야 합니다.
이 글은 학습과 정보 제공을 위한 자료이며 특정 종목이나 전략의 매수·매도를 권유하지 않습니다. 데이터와 계산 조건을 바꾸면 결과도 달라질 수 있으며 최종 투자 판단과 책임은 투자자 본인에게 있습니다.