승률·손익비·기대값: 승률이 낮아도 수익이 남는 이유

안녕하세요, 흔한트레이더입니다.

승률 40.9%인 전략과 승률 48.9%인 전략이 있다면 두 번째 전략이 더 좋아 보입니다. 그러나 실제 거래 결과에서 첫 번째 전략의 거래당 기대값은 +9.34%, 두 번째 전략은 +3.76%였습니다.

차이는 평균 이익과 평균 손실에 있었습니다. 첫 번째 전략은 이기는 횟수는 적었지만 한 번 이길 때 평균 +39.00%를 얻었고, 질 때는 평균 -11.18%를 잃었습니다. 승률만으로는 볼 수 없는 손익 구조입니다.

이번 글에서는 같은 진입 조건에 네 가지 청산 규칙을 적용한 실제 거래를 이용해 승률, 평균손익비와 기대값을 연결합니다.

이번 글의 핵심 결론

  • 승률은 이긴 횟수를 보여줄 뿐, 한 번 이기고 질 때의 크기는 알려주지 않습니다.
  • 승률 40.90%인 고정 손절은 평균손익비 3.49 덕분에 거래당 기대값이 +9.34%였습니다.
  • 기대값은 장기 평균의 추정치이지, 다음 거래의 수익이나 계좌의 CAGR을 보장하는 숫자는 아닙니다.

1. 승률이 높으면 더 좋은 전략일까

비교에는 같은 돌파 진입에 네 가지 청산 규칙을 적용한 SYSTEM LAB 10의 완료 거래를 사용했습니다. 진입 규칙과 종목군은 같고 청산 방식만 다르므로, 승률과 평균손익의 관계를 비교하기에 적합합니다.

청산 규칙 완료 거래 승률 평균 이익 평균 손실 평균손익비 거래당 기대값
고정 손절 736회 40.90% +39.00% -11.18% 3.49 +9.34%
40일 보유 1,216회 48.85% +17.53% -9.39% 1.87 +3.76%
+20% 목표 1,091회 45.74% +21.40% -11.35% 1.89 +3.63%
3ATR 추적 1,145회 40.44% +19.39% -7.12% 2.72 +3.60%

승률이 가장 높은 40일 보유의 기대값은 +3.76%였습니다. 반면 고정 손절은 승률이 7.95%포인트 낮았지만 기대값은 약 2.5배였습니다. 소수의 큰 추세를 오래 보유한 결과 평균 이익이 크게 벌어졌기 때문입니다.

승률과 평균손익에 따른 거래당 기대값 비교

이 결과는 고정 손절이 항상 우월하다는 뜻이 아닙니다. 원본 백테스트에서는 전략별 거래 기간과 동시 보유, 자금 배분까지 함께 봐야 했습니다. 여기서는 청산 규칙이 승률과 손익 크기를 어떻게 바꾸는지에만 초점을 맞춥니다.

2. 승률·평균손익비·기대값 계산법

승률은 수익으로 끝난 거래가 전체 완료 거래에서 차지하는 비율입니다.

TEXT
승률 = 수익 거래 수 / 전체 완료 거래 수

평균손익비는 수익 거래의 평균 크기를 손실 거래의 평균 크기로 나눈 값입니다. 이 글에서는 평균 이익을 평균 손실의 절댓값으로 나눕니다.

TEXT
평균손익비 = 평균 이익 / |평균 손실|

기대값은 승률만큼 평균 이익을 받고, 나머지 확률만큼 평균 손실을 본다고 가정했을 때 한 거래에서 기대되는 산술 평균 수익률입니다.

TEXT
거래당 기대값
= 승률 × 평균 이익 + (1 - 승률) × 평균 손실

고정 손절 결과를 대입하면 다음과 같습니다.

TEXT
0.4090 × 39.00% + 0.5910 × (-11.18%)
= 15.95% - 6.61%
= 9.34%

열 번 중 네 번 정도만 이겨도 한 번의 평균 이익이 평균 손실보다 3.49배 컸기 때문에 양의 기대값이 남았습니다.

3. 손익분기 승률은 손익비에 따라 달라진다

거래비용이 이미 평균손익에 포함되어 있고 손익이 두 가지 결과로만 나뉜다면, 기대값이 0이 되는 승률은 다음처럼 계산할 수 있습니다.

TEXT
손익분기 승률 = 1 / (1 + 평균손익비)

평균손익비가 1이라면 필요한 승률은 50%입니다. 평균손익비가 2라면 약 33.3%, 3이라면 25%만 넘어도 산술 기대값은 양수가 됩니다.

고정 손절의 평균손익비는 3.49였으므로 손익분기 승률은 22.28%였습니다. 실제 승률 40.90%는 이보다 18.62%포인트 높았습니다.

다른 전략의 결과도 함께 보면 승률 자체에 절대적인 합격선이 없다는 사실이 더 분명해집니다. CCI 과매도 탈출에 추세·변동성 필터를 적용한 실험은 승률이 62.89%였지만 평균 이익 +4.98%, 평균 손실 -7.36%로 평균손익비가 0.68이었습니다. 필요한 손익분기 승률도 59.64%까지 올라갔고 실제 기대값은 +0.40%였습니다.

고정 손절과 CCI 필터는 진입 규칙과 검증 목적이 다른 별개의 실험입니다. 둘의 최종 우열을 가리기 위한 비교가 아니라, 손익비가 달라지면 필요한 승률도 달라진다는 구조를 보여주는 사례입니다.

4. 파이썬으로 기대값 계산하기

완료 거래의 요약값이 있다면 별도 패키지 없이 계산할 수 있습니다. 평균 손실은 음수로 전달합니다.

PYTHON
def calculate_expectancy(win_rate, average_win, average_loss):
    payoff_ratio = average_win / abs(average_loss)
    breakeven_win_rate = 1.0 / (1.0 + payoff_ratio)
    expectancy = (
        win_rate * average_win
        + (1.0 - win_rate) * average_loss
    )
    return payoff_ratio, breakeven_win_rate, expectancy

strategies = [
    {
        "name": "고정 손절",
        "win_rate": 0.408967,
        "average_win": 0.390000,
        "average_loss": -0.111810,
    },
    {
        "name": "40일 보유",
        "win_rate": 0.488487,
        "average_win": 0.175272,
        "average_loss": -0.093892,
    },
]

for strategy in strategies:
    payoff, breakeven, expectancy = calculate_expectancy(
        strategy["win_rate"],
        strategy["average_win"],
        strategy["average_loss"],
    )
    print(
        f'{strategy["name"]}: '
        f'평균손익비 {payoff:.2f}, '
        f'손익분기 승률 {breakeven:.2%}, '
        f'기대값 {expectancy:+.2%}'
    )

실행 결과는 다음과 같습니다.

TEXT
고정 손절: 평균손익비 3.49, 손익분기 승률 22.28%, 기대값 +9.34%
40일 보유: 평균손익비 1.87, 손익분기 승률 34.88%, 기대값 +3.76%

원본 거래 수익률이 있다면 각 거래 수익률의 산술 평균을 계산해도 같은 기대값이 나옵니다. 다만 수익 0%인 거래가 존재한다면 승리·손실 외에 중립 거래 비율을 따로 처리해야 합니다.

5. 기대값이 양수면 믿어도 될까

기대값은 과거 표본에서 계산한 추정치입니다. 거래 수가 적거나 몇 건의 큰 수익이 평균을 끌어올렸다면 다음 표본에서는 크게 달라질 수 있습니다.

이번에는 완료 거래를 같은 개수만큼 복원 추출하는 단순 부트스트랩을 1만 번 반복해 거래당 평균의 95% 구간을 확인했습니다.

전략 거래당 기대값 단순 재표본 95% 구간
고정 손절 +9.34% +6.25% ~ +12.87%
40일 보유 +3.76% +2.61% ~ +4.97%
+20% 목표 +3.63% +2.60% ~ +4.68%
3ATR 추적 +3.60% +2.30% ~ +5.02%
CCI 단독 +0.59% +0.25% ~ +0.93%
추세·변동성 필터 +0.40% -0.07% ~ +0.88%

CCI 필터의 구간은 0을 포함했습니다. 관측된 평균은 양수지만 거래를 다시 뽑으면 음의 평균도 충분히 나올 수 있었다는 뜻입니다.

이 구간은 각 거래가 서로 독립이고 과거 거래 분포가 반복된다는 단순 가정 아래의 참고치입니다. 같은 시장 국면에서 발생한 거래의 상관관계, 종목 간 동시 신호와 시계열 변화까지 반영한 백테스트 신뢰구간은 아닙니다.

6. 기대값을 볼 때 자주 놓치는 부분

거래당 기대값과 계좌 수익률은 다릅니다

거래당 +9.34%를 736번 단순 복리로 연결할 수는 없습니다. 여러 종목의 보유 기간이 겹칠 수 있고, 한 거래에 배분한 자본과 현금 대기 비중도 다릅니다. 계좌 전체 성과는 CAGR, MDD와 자산곡선으로 다시 확인해야 합니다.

평균은 손익의 모양을 숨깁니다

같은 기대값이라도 자주 작게 벌고 드물게 크게 잃는 전략과, 자주 작게 잃고 드물게 크게 버는 전략의 체감은 완전히 다릅니다. 중앙값, 최대 손실, 연속 손실과 손익 분포를 함께 봐야 합니다.

비용과 체결 조건을 먼저 맞춰야 합니다

수수료, 세금과 슬리피지를 빼기 전에는 양수였던 기대값이 비용 반영 후 음수가 될 수 있습니다. 이번 수치는 원본 LAB 백테스트의 체결 비용이 반영된 완료 거래 수익률을 사용했습니다.

표본 수만 많다고 충분하지 않습니다

거래가 많아도 특정 상승장이나 소수 종목에 몰렸다면 독립적인 증거가 많다고 보기 어렵습니다. 기간별·종목별 결과와 표본외 성과를 나눠 확인해야 합니다.

7. 함께 확인할 성과지표

  • Profit Factor는 총이익을 총손실의 절댓값으로 나눠 전체 손익 규모를 비교합니다. 다음 글에서 소수 대형 수익이 이 비율을 어떻게 왜곡하는지 확인합니다.
  • CAGR은 거래당 평균이 실제 계좌의 연복리 성장으로 이어졌는지 보여줍니다.
  • MDD와 칼마 비율은 양의 기대값을 얻는 과정에서 감수한 최대 낙폭을 확인합니다. 칼마 비율 계산법에서는 연복리수익률과 MDD를 함께 비교했습니다.
  • 샤프·소르티노 비율은 거래 단위가 아니라 기간 수익률의 변동성과 하방 위험을 평가합니다. 샤프 비율소르티노 비율은 같은 전략도 위험 정의에 따라 순위가 달라지는 사례를 다룹니다.

8. 정리

승률은 전략의 한 부분입니다. 낮은 승률도 큰 평균 이익과 작은 평균 손실이 결합되면 양의 기대값을 만들 수 있고, 높은 승률도 평균 손실이 더 크면 작은 우위만 남을 수 있습니다.

실제 전략을 확인할 때는 승률, 평균 이익, 평균 손실을 먼저 분리하고 손익분기 승률과 기대값을 계산합니다. 그다음 표본 수와 손익 분포를 확인하고, 마지막으로 CAGR·MDD처럼 계좌 단위의 성과와 연결하는 편이 안전합니다.

다음 글에서는 총이익과 총손실의 비율인 Profit Factor를 살펴보겠습니다. 기대값이 같아 보여도 소수의 큰 수익에 의존할 때 Profit Factor와 결과의 안정성이 어떻게 달라지는지 확인합니다.