안녕하세요, 흔한트레이더입니다.
Profit Factor가 1.85라면 총손실 1원당 총이익 1.85원을 얻었다는 뜻입니다. 숫자만 보면 충분한 여유가 있어 보입니다. 그러나 실제 3ATR 추적 전략에서 수익 거래 중 상위 10%를 제외하자 Profit Factor는 1.02까지 내려갔습니다.
상위 수익 거래 46건이 전체 총이익의 44.96%를 만들고 있었습니다. 이 거래들이 우연이었다고 단정할 수는 없지만, 전략의 수익이 일부 큰 추세에 집중되어 있다는 사실은 분명합니다.
이번 글에서는 같은 진입 조건에 네 가지 청산 규칙을 적용한 실제 완료 거래로 Profit Factor를 계산하고, 같은 숫자 뒤에 숨은 수익 집중도를 확인합니다.
이번 글의 핵심 결론
- Profit Factor는 총이익을 총손실의 절댓값으로 나눈 값이며 1.0이 손익분기점입니다.
- 3ATR 추적의 Profit Factor는 1.85였지만 상위 수익 거래 10%를 제외하면 1.02였습니다.
- 높은 Profit Factor만 볼 것이 아니라 거래 수, 최대 수익 기여도, 비용과 기간별 안정성을 함께 확인해야 합니다.
1. Profit Factor란 무엇인가
Profit Factor는 수익 거래에서 얻은 이익을 모두 더하고, 손실 거래에서 발생한 손실을 모두 더해 비교하는 지표입니다. 국내에서는 수익팩터 또는 손익비율로 부르기도 합니다.
Profit Factor = 총이익 / |총손실|
계산 결과가 1.0이면 총이익과 총손실이 같습니다. 1.0보다 크면 분석한 표본에서 총이익이 더 컸고, 1.0보다 작으면 총손실이 더 컸습니다.
예를 들어 수익 거래의 합이 +30%, 손실 거래의 합이 -20%라면 Profit Factor는 1.5입니다.
Profit Factor = 30% / 20% = 1.5
이 숫자는 투자금이 1.5배가 됐다는 뜻이 아닙니다. 총손실의 크기와 총이익의 크기를 비교한 비율입니다.
2. 평균손익비와 Profit Factor의 차이
앞 글에서 계산한 평균손익비는 한 번 이긴 거래의 평균과 한 번 진 거래의 평균을 비교합니다. Profit Factor는 여기에 이긴 횟수와 진 횟수까지 반영한 전체 합의 비율입니다.
| 구분 | 계산 | 알려주는 것 |
|---|---|---|
| 평균손익비 | 평균 이익 ÷ 평균 손실의 절댓값 | 한 번 이기고 질 때의 크기 차이 |
| Profit Factor | 총이익 ÷ 총손실의 절댓값 | 표본 전체의 이익·손실 기여 비율 |
수익 0%인 거래가 없을 때 두 지표는 다음 관계로 연결됩니다.
Profit Factor
= 승률 × 평균 이익
÷ ((1 - 승률) × |평균 손실|)
평균손익비가 높아도 승률이 너무 낮으면 Profit Factor는 1보다 작을 수 있습니다. 반대로 평균손익비가 1보다 낮아도 승률이 충분히 높으면 Profit Factor는 1보다 클 수 있습니다.
3. 실제 네 가지 청산 규칙 비교
비교에는 같은 돌파 진입에 네 가지 청산 규칙을 적용한 SYSTEM LAB 10의 완료 거래를 사용했습니다. 종목군, 진입 규칙과 거래비용 조건은 같고 청산 규칙만 다릅니다.
각 거래에 같은 비중을 둔 순거래수익률을 더해 Profit Factor를 계산했습니다.
| 청산 규칙 | 완료 거래 | 수익 거래 | 손실 거래 | Profit Factor | 최대 거래 수익 |
|---|---|---|---|---|---|
| 고정 손절 | 736회 | 301회 | 435회 | 2.41 | +808.25% |
| 3ATR 추적 | 1,145회 | 463회 | 682회 | 1.85 | +346.63% |
| 40일 보유 | 1,216회 | 594회 | 622회 | 1.78 | +276.80% |
| +20% 목표 | 1,091회 | 499회 | 592회 | 1.59 | +73.87% |
고정 손절의 Profit Factor가 2.41로 가장 높았습니다. 그러나 최대 거래 수익도 +808.25%로 가장 컸습니다. 큰 추세를 끝까지 보유한 거래가 전체 총이익에 얼마나 기여했는지 확인하지 않으면 2.41이라는 숫자의 성격을 알기 어렵습니다.

4. 상위 수익 거래 10%를 제외해보면
수익으로 끝난 거래만 큰 순서로 정렬한 뒤 상위 10%를 제외하는 스트레스 테스트를 적용했습니다. 이는 실제 성과를 다시 계산해 낮추려는 것이 아니라, 총이익이 소수 거래에 얼마나 의존하는지 확인하기 위한 진단입니다.
| 청산 규칙 | 제외 거래 | 상위 10%의 총이익 기여도 | 원래 Profit Factor | 제외 후 Profit Factor |
|---|---|---|---|---|
| 고정 손절 | 30회 | 40.05% | 2.41 | 1.45 |
| 3ATR 추적 | 46회 | 44.96% | 1.85 | 1.02 |
| 40일 보유 | 59회 | 37.62% | 1.78 | 1.11 |
| +20% 목표 | 50회 | 16.66% | 1.59 | 1.32 |
3ATR 추적은 수익 거래 46건을 제외하자 1.85에서 1.02로 내려갔습니다. 전체 1,145건 중 약 4%에 해당하는 거래가 사라지자 총이익과 총손실이 거의 같아진 것입니다.
반면 +20% 목표는 원래 Profit Factor가 1.59로 가장 낮았지만 상위 수익 거래의 기여도는 16.66%였습니다. 제외 후에도 1.32가 남았습니다. 목표 수익에서 이익을 확정해 한 거래가 지나치게 커지지 않은 청산 구조가 반영된 결과입니다.
그렇다고 +20% 목표가 더 좋은 전략이라는 결론은 아닙니다. 큰 추세를 제한하면 수익의 집중도는 낮아질 수 있지만 전체 수익도 함께 줄어듭니다. 실제 LAB 10에서도 청산 방식에 따라 누적수익률과 거래 횟수가 달랐습니다.
5. 같은 Profit Factor도 수익 구조는 다르다
다음 두 거래 묶음은 모두 Profit Factor가 2.0입니다.
balanced_returns = [0.02] * 5 + [-0.01] * 5
concentrated_returns = [0.096] + [0.001] * 4 + [-0.01] * 5
def calculate_profit_factor(trade_returns):
gross_profit = sum(value for value in trade_returns if value > 0.0)
gross_loss = abs(
sum(value for value in trade_returns if value < 0.0)
)
return gross_profit / gross_loss
for name, returns in {
"고른 수익": balanced_returns,
"집중 수익": concentrated_returns,
}.items():
wins = sorted(
(value for value in returns if value > 0.0),
reverse=True,
)
largest_win_share = wins[0] / sum(wins)
print(
f"{name}: Profit Factor {calculate_profit_factor(returns):.2f}, "
f"최대 수익 기여도 {largest_win_share:.0%}"
)
실행 결과는 다음과 같습니다.
고른 수익: Profit Factor 2.00, 최대 수익 기여도 20%
집중 수익: Profit Factor 2.00, 최대 수익 기여도 96%
첫 번째 거래 묶음은 다섯 번의 수익이 같은 크기입니다. 두 번째는 한 번의 +9.6% 수익이 총이익 대부분을 만들었습니다. Profit Factor만 보면 둘을 구분할 수 없습니다.
6. Profit Factor도 하나의 확정값은 아니다
원본 거래를 같은 개수만큼 복원 추출하는 단순 부트스트랩을 1만 번 반복했습니다.
| 청산 규칙 | Profit Factor | 단순 재표본 95% 구간 |
|---|---|---|
| 고정 손절 | 2.41 | 1.91 ~ 3.03 |
| 3ATR 추적 | 1.85 | 1.51 ~ 2.23 |
| 40일 보유 | 1.78 | 1.52 ~ 2.09 |
| +20% 목표 | 1.59 | 1.40 ~ 1.80 |
네 전략 모두 이 단순 구간의 하단이 1보다 높았습니다. 관측 표본에서는 총이익이 총손실보다 컸다는 결과가 비교적 일관되게 나타났습니다.
다만 각 거래를 독립적으로 다시 뽑았기 때문에 같은 시장 국면에 발생한 종목 간 상관관계와 시간에 따른 전략 변화는 반영하지 못합니다. 상위 수익 거래 제거 결과는 별도의 스트레스 테스트이고, 부트스트랩 구간은 과거 분포가 반복된다는 가정 아래의 참고치입니다.
7. Profit Factor를 볼 때 확인할 조건
금액 손익과 수익률을 섞지 않습니다
실제 거래마다 투입 금액이 다르다면 거래 수익률을 단순 합산하는 대신 각 거래의 금액 손익을 합산해야 합니다. 이번 비교는 모든 거래에 같은 비중을 둔 백테스트의 순거래수익률을 사용했습니다.
거래비용을 먼저 반영합니다
수수료, 세금과 슬리피지를 빼기 전 총이익과 총손실을 사용하면 Profit Factor가 부풀어 오릅니다. 특히 거래 횟수가 많은 전략은 작은 비용 차이가 전체 비율을 크게 바꿀 수 있습니다. 이번 결과는 원본 LAB의 비용 반영 조건을 그대로 사용했습니다.
미청산 거래를 확인합니다
검증 종료일에 큰 손실 포지션을 열어둔 채 완료 거래만 계산하면 Profit Factor가 좋아 보일 수 있습니다. 강제 청산 여부와 평가손익 처리 기준을 공개해야 합니다.
절대 합격선을 정하지 않습니다
1.0보다 크다는 것은 해당 표본의 총이익이 총손실보다 컸다는 뜻일 뿐입니다. 1.5 또는 2.0 같은 숫자를 모든 시장과 전략에 공통으로 적용할 근거는 없습니다. 같은 기간, 비용, 포지션 크기와 체결 조건으로 비교해야 합니다.
손익의 순서를 보여주지 않습니다
이익과 손실의 발생 순서를 바꿔도 합계가 같으면 Profit Factor는 같습니다. 연속 손실, MDD와 전략을 실제로 유지할 수 있는지는 별도로 확인해야 합니다.
8. 함께 확인할 성과지표
- 승률·평균손익비·기대값은 총이익과 총손실이 어떤 빈도와 평균 크기로 만들어졌는지 분해합니다.
- CAGR은 거래 단위의 이익 우위가 계좌의 연복리 성장으로 이어졌는지 보여줍니다.
- MDD와 칼마 비율은 수익을 얻는 과정의 최대 낙폭을 확인합니다. 칼마 비율 계산법에서는 CAGR과 MDD의 순위 차이를 비교했습니다.
- 시장 노출과 회전율은 같은 성과를 위해 자본을 얼마나 오래 사용했고 비용이 얼마나 반복됐는지 보여줍니다. 다음 글에서 다룰 주제입니다.
9. 정리
Profit Factor는 전략의 총이익과 총손실을 빠르게 비교할 수 있는 직관적인 지표입니다. 하지만 높은 숫자가 고른 수익을 뜻하지는 않습니다.
실제 결과를 볼 때는 Profit Factor를 계산한 뒤 최대 수익 거래와 상위 수익 거래의 기여도를 확인합니다. 그다음 거래비용, 표본 수, 기간별 변화와 MDD를 함께 봐야 숫자가 반복 가능한 우위인지 판단할 수 있습니다.
다음 글에서는 시장 노출과 회전율을 살펴보겠습니다. 같은 수익률이라도 자본을 오래 묶는 전략과 자주 사고파는 전략의 효율이 어떻게 달라지는지 확인합니다.