
승률 95%의 트레이딩 이력 2,150건을 분석했더니, 패배의 원인은 '시장'이 아니라 '단 하나의 행동'이었다
요약
2,150건의 FX 거래 이력을 Python으로 분석하여 승률 95%의 시스템이 자산 곡선을 무너뜨리는 근본 원인을 규명했습니다. 분석 결과, 시장 상황이 아닌 미실현 손실 포지션을 다음 날로 넘기는 '오버나이트' 행동이 주요 패배 요인임을 밝혀냈습니다.
핵심 포인트
- 승률 95% 중 상당수는 이익 기여도가 낮은 미니 로트의 착시 효과임
- 실질적인 이익의 96%는 통상 로트에서 발생함
- 패배의 진범은 통화쌍이나 방향성이 아닌 '오버나이트' 행동임
- 데이터 분석을 통해 강점과 약점의 상관관계를 특정함
이 기사는 자신의 FX 거래 이력 2,150건을 Python (pandas)로 분석한 기록입니다.
구체적인 손익 금액은 숨기고, 모두 비율·지수·배율로 표현했습니다. 금액 그 자체보다,
"어떻게 범인을 좁혀 나갔는가"라는 분석 프로세스에 가치가 있다고 생각하기 때문입니다.
- 승률 95%의 시스템이, 때때로 자산 곡선을 크게 무너뜨리고 있었다
- "매도가 나쁘다" → "EUR/JPY 매도가 나쁘다" → "EUR/JPY 매도의 오버나이트(Overnight)가 나쁘다"라고 범인을 좁혀 나갔더니,
- 마지막에 남은 것은
통화쌍에도 방향성에도 의존하지 않는, 단 하나의 행동이었다: "미실현 손실을 안고 있는 포지션을 손절하지 않고 다음 날로 넘기는 것(Overnight)" - 더욱 깊이 파고들면,
그 약점은 승률 95%를 만드는 "끈기"와 동일한 성질의 뒷면이었다 (강점과 약점은 표리일체) - 이것은 차트 예측도 경제 지표도 아닌,
자신의 행동 이력만에서 도출되었다 - 기법의 개선이 아니라 "
자신이 어떤 때에 무너지는가 / 왜 이기고 있는가"의 특정이다
| 항목 | 내용 |
|---|---|
| 데이터 | 증권사의 월간 거래 보고서 (12개월분)에서 추출한 결제 이력 |
| ... | |
| PF (Profit Factor) = 총 이익 ÷ 총 손실. 1.0이면 손익분기점, 클수록 좋다. |
분석은 데이터 사이언스의 전형적인 흐름을 따랐습니다 ――
처음에는 "속성"을 의심했고, 통제 변수를 늘려가는 가운데 마지막에 남은 설명 변수가 "행동"이었다는 전개입니다.
| 단계 | 의심한 범인 | 검증 결과 |
|---|---|---|
| 1 | 로트 사이즈 (Lot Size) | ✗ 미니(Mini)든 통상(Normal)이든 똑같이 패배 |
| ... | ◎ 진범 | |
전체 승률은 95%이지만, 이는 과대평가된 것이었다. 건수의 약 절반을 차지하는 "미니 로트(최소 단위)"가,
이익에 거의 기여하지 않으면서 승률만 끌어올리고 있었기 때문이다.
| 구분 | 건수 점유율 | 이익 점유율 | 승률 | PF |
|---|---|---|---|---|
| 미니 (최소 로트) | 46% | 4% | 97.4% | 1.41 |
| 통상 로트 | 54% | 96% | 92.8% | 2.49 |
이익의 96%는 통상 로트가 만들어내고 있다. 미니는 실질적으로 리스크 없는 연습·간보기용으로, 승률을 부풀리고 있을 뿐이다.
이후, "본업의 성적"은 통상 로트로 본다.
같은 통상 로트라도, 청산 방식을 바꾸면 성적이 완전히 달라지는 4가지 구분이 나타난다.
손익은 총 손익을 100으로 보았을 때의 기여도 지수로 나타낸다 (금액 비공개).
| 구분 | 건수 | 이익 기여도 (총 손익=100) | PF | 성질 |
|---|---|---|---|---|
| 통상 매수 데이트레이딩 (1일 이내) | 728 | 83 | 23.11 | 🏭 이익 공장 |
| 통상 스윙 (매수 1일 초과 보유) | 125 | 19 | 2.95 | 보조 이익원 |
| 통상 매도 | 297 | -6 | 0.88 | ⚠️ 불안정 요소 |
| 미니 전반 | 1,000 | 4 | 1.41 | ⚪ 노이즈 |
여기서 첫 번째 중요한 수정이 들어간다. 당초에는 "스윙 (장기 보유) = 괴멸"이라고 생각했으나, 그것은
매도와 매수를 섞어 놓았기 때문이었다. 매수 포지션의 1일 초과 보유만 따지면 PF 2.95의 흑자.
파괴하고 있는 것은 "길게 가져가는 것" 자체가 아니다.
매수라면 며칠간 보유해도 이기고 있다. 위험 요소는 이후에 특정된다.
이익 공장 (통상 매수 데이트레이딩)의 월간 손익을, 그 12개월 평균으로 나눈 비율 = 가동률로 정의한다.
금액 그 자체를 보는 것보다, "공장이 풀 가동 중인가 / 속도가 줄었는가"를 한눈에 알 수 있다.

상단: 각 구분의 월간 손익을 "이익 공장의 월 평균 = 1.0"으로 정규화. 하단: 이익 공장의 가동률 (%).
| 페이즈 | 기간 | 가동률 | 해석 |
|---|---|---|---|
| 호황기 | 초반 4개월 | 154% → 127% → 293% → 186% | 시장과의 궁합이 좋아 풀 가동 |
| 침체기 | 중반 4개월 | 26% → 18% → 56% → 42% | 엔진 정지가 아닌 출력 저하 (흑자는 유지) |
| 회복? | 최근 -1 | 99% | 평균까지 복귀. 하지만 전체 손익은 적자 → 후술 |
| 현황 | 최근 | 30% | 공장은 저출력. 흑자는 "큰 사고가 없었기 때문" |
발견: 침체는 최근 달에 시작된 것이 아니라, 중반부터 계속되고 있다 (최근 6개월 중 5개월이 평균 미달).
전체 성적이 계속 성장할 수 있었던 것은, 호황기의 저축과 "사고가 일어나지 않았던 달" 덕분에 지탱되고 있었다.
가동률이라는
비율로 변환함으로써, 생(raw) 손익 금액 그래프에서는 보이지 않았던 "조용한 속도 저하"가 가시화되었다.
매도는 방향별로 구조적인 적자(PF 0.84)였다. "만약 처음부터 매도를 하지 않았다면"을 반사실적 가상(Counterfactual)으로 재계산했다
(트레이드를 시계열로 나열하여 누적 손익·드로다운(Drawdown)·월간 안정성을 재구성).
손익·DD는 실적을 100으로 둔 지수로 표시한다.
| 시나리오 | 손익 지수 (실적=100) | PF | 최대 DD 지수 (실적=100·작을수록 좋음) | 플러스 달 |
|---|---|---|---|---|
| ①실적 (전체) | 100 | 2.34 | 100 | 10/12 |
| ②통상 매도 제외 | 106 | 5.41 | 30 | 11/12 |
| ③전체 매도 제외 | 110 | 9.05 | 11 | 12/12 |
이익은 거의 줄어들지 않는다 ― 오히려 늘어난다. 매도는 순손실이므로, 제외하면 손익 지수는 오히려 올라간다.
동시에 최대 DD는 약 1/10로 줄어들고, 적자 달은 소멸한다 (12개월 모두 흑자).
"매도를 제한해야 하는가"는 더 이상 논쟁의 여지가 없었다. 문제는 "어느 수준에서 제한할 것인가"였다.
하지만 "매도 전부가 나쁜 것"은 아니었다. 통상 매도를 페어별로 나누어 보면, 범인은 단 하나로 좁혀진다.
손익은 방향·부호만을 나타냄 (금액 비공개).
| 통상 매도 페어별 | 수지 |
|---|---|
| EUR/JPY 매도 | ❌ 대폭 마이너스 (원흉) |
| USD/JPY 매도 | ✅ 플러스 (오히려 우수) |
| GBP/JPY 매도 | ✅ 플러스 |
| NZD/JPY·AUD/JPY 매도 | ✅ 소폭 플러스 |
EUR/JPY 매도 단 하나만 마이너스이며, 다른 매도는 오히려 흑자였다.
"EUR/JPY 매도만 금지"했을 경우, 손익 지수는 모든 시나리오 중 최상위권까지 치솟는다.
EUR/JPY 매도를 보유 시간으로 나누자, 정체가 드러났다.
| EUR/JPY 매도 내역 | 건수 | 승률 | PF |
|---|---|---|---|
| 당일 중 (≤1일) | 133 | 96.2% | 9.00 |
| 오버나이트 (1일 초과) | 27 | 63.0% | 0.03 |
EUR/JPY 매도의 당일 중 트레이드는 오히려 최우수 클래스(PF 9.00)였다. 파괴하고 있었던 것은 오버나이트 27건뿐이었다.
게다가 그중에서도 **상위 3건(모두 반년 가까이 방치된 종목)이 오버나이트 손실의 약 87%**를 차지하고 있었다.
실질적으로, EUR/JPY 매도의 적자는
단 3건의 방치된 종목이 만들어내고 있었다.
제외해야 할 조건이 "EUR이라서" 혹은 "매도라서"가 아니라,
"1일을 초과하여 오버나이트한 패배라서"에 가까워졌다.
마지막 질문: 위험한 것은 "오버나이트"인가, 아니면 "손실을 떠안은 채의 오버나이트"인가.
모든 페어·모든 방향의 1일 초과 보유를, **승리(수익 방향으로 오버나이트함)**와 **패배(손실을 떠안은 채 방치됨)**로 나누었다.
| 페어×방향 | 승리 오버나이트 건수 | 패배 오버나이트 건수 | 순수지 |
|---|---|---|---|
| GBP/JPY 매수 | 58 | 6 | ✅ 흑자 |
| ... |
그리고 결정적인 비대칭성:
| 지표 | 값 |
|---|---|
| 승리 오버나이트(263건)의 평균 이익을 1이라고 할 때 | 1.0 |
| 패배 오버나이트(58건)의 평균 손실은 | 8.5 |
| (참고) 당일 중 패배/승리 배율 | 불과 1.8 |
오버나이트하는 순간, 패배만이 8.5배로 불어난다. 승리는 불어나지 않는다. 이것은 기대값의 문제가 아니라
구조적인 비대칭성이다. "오버나이트"라는 행위에 에지(Edge)가 있는 것이 아니라,
패배를 거대화시키는 부작용만 있을 뿐이다. EUR/JPY 매도가 돌출되었던 것은 "정도"의 문제였을 뿐,
"종류"는 모든 페어·모든 방향에서 공통적이었다.
| 시나리오 | 손익 지수 (실적=100) | PF | 최대 DD 지수 (실적=100) | 플러스 달 |
|---|---|---|---|---|
| ①실적 | 100 | 2.34 | 100 | 10/12 |
| ③전체 매도 금지 | 110 | 9.05 | 11 | 12/12 |
| A: 익일 오버나이트 전면 금지 | 131 | 19.14 | 7 | 12/12 |
| B: 손실 오버나이트만 회피 ※ | 167 | 24.11 | 7 | 12/12 |
B(이상적 규칙)가 모든 지표에서 최강임. 손익 지수 167, 최대 DD(Drawdown)는 실적의 약 1/15, 적자 월 제로, PF(Profit Factor) 24. - B는 A보다 손익이 높음에도 불구하고, 최대 DD 지수는 동일하게 7. → 승리 포지션을 오버나이트(Overnight)로 남겨두어도 DD는 악화되지 않음. 포지션을 넘겨서 위험한 것은 오직 패배뿐이라는 증명.
B는 결과론(Hindsight)이며, 실제 운용에서는 도달 불가능한 "천장"입니다.
"어떤 포지션의 오버나이트가 최종적으로 패배할지"를 사전에 알고 있다는 전제가 깔려 있기 때문입니다. 미실현 손실(Floating Loss) 상태로 오버나이트한 포지션 중 일부는 현실에서 반등하여 수익으로 전환되기도 하며, 이를 기계적으로 자르면 수익을 깎아먹게 됩니다.
구현 가능한 현실적인 해답은 A "오버나이트를 일절 하지 않음 (전부 당일 결제 / 손절 철저)"입니다.
Hindsight가 필요 없는 순수한 규칙임에도 불구하고, 여전히 손익 지수 131 · 최대 DD 지수 7 · 적자 월 제로를 기록합니다.
매도 금지, EUR 매도 금지 규칙보다 손익과 DD 양면에서 모두 우수합니다.
여기까지에서 진범(미실현 손실의 오버나이트)을 특정했습니다. 하지만 가장 흥미로운 발견은 이 다음에 있습니다 ――
승률 95%(강점)와 물리기(약점)가 동일한 하나의 성질에서 비롯되고 있다는 사실입니다.
"승리한 트레이드는 처음부터 순행(Trend-following)했는가(=진입이 훌륭했는가), 아니면 한 번 미실현 손실로 가라앉았다가 돌아왔는가(=손절하지 않고 버텼는가)"를 구분하고 싶었습니다. 하지만 각 트레이드의 보유 중 가격 움직임은 로우 데이터(Raw data)에 없으므로, 모든 포지션의 진입가와 청산가를 시계열로 나열하여 가격 시리즈를 근사 재구성(Approximate reconstruction) 하여, 승리한 트레이드가 청산 전에 진입가보다 불리한 가격으로 가라앉았는지(MAE: Maximum Adverse Excursion의 근사치)를 추정했습니다.
⚠️ 재구성은 트레이드당 중앙값 3점의 희소 샘플링(Sparse sampling)을 사용했으므로, "가라앉은 비율"은 과소평가되었을 가능성이 있습니다(실제로는 더 높음).
| 보유 시간 | 한 번이라도 미실현 손실로 가라앉은 후 승리한 비율 |
|---|---|
| 1시간 이내 | 30% |
| ... | 1일 초과 |
승률 95%에는 두 개의 서로 다른 엔진이 있습니다:
- 단기(대부분의 건수) = 진짜 에지(Edge): 1시간 이내의 승리는 7~8할이 처음부터 순행. 빠른 익절 + 추세 추종 매수.
- 장기 보유(소수) = 버텨서 승리로 전환: 1일 초과의 승리는 84%가 한 번 미실현 손실로 가라앉았다가 생환. 본래라면 패배였을 거래를 손절하지 않고 버텨서 승리로 바꾸고 있음.
| 엔진 | 내용 | 평가 |
|---|---|---|
| 제1 엔진 | 추세 추종 매수 (추세에 순행) | 강점 |
| 제2 엔진 | 빠른 익절 (이익 제한: 승리의 71%가 소폭 익절) | 강점 |
| 제3 엔진 | 버티는 습관 (미실현 손실을 손절하지 않고 보유) | 양날의 검 |
핵심은 제3 엔진입니다. 보통은 결점으로 취급되지만, 매수 스윙(Swing)이 흑자(PF 2.95)였던 것처럼 완전한 결점은 아닙니다.
| 같은 "버티는" 행동이... | 추세 추종 매수 | 역추세 매도 |
|---|---|---|
| 결과 | 돌아와서 승리 (매수 스윙 흑자) | 돌아오지 않고 물림 → 폭발 |
| 세상의 명칭 | "끈기" | "물리기(Salted/Bag-holding)" |
만약 "매수든 매도든 즉시 손절"했다면, 승률 95%는 절대 나오지 않았을 것입니다. 고승률을 만드는 요소 중 일부가 바로 이 "버티는 습관" 그 자체이기 때문입니다. 따라서 처방전은 "버티는 습관을 없애라"가 아니라 **"버텨도 되는 상황(추세 추종)과 안 되는 상황(역추세)을 나누라"**가 됩니다.
한 마디로 말하자면, 저는 **"시장을 읽는 사람"이라기보다 "확률적으로 유리하다고 생각한 가설을 끈기 있게 계속 검증하는 사람"**이었습니다.
| 그 성질이 나타나는 상황 | 나타나는 방식 |
|---|---|
| 데이터 분석 | 강점 (결론을 서두르지 않고 "정말로 그러한가"를 몇 번이고 확인함) |
| ... |
강점(끈기)과 약점(손절 지연)은 별개의 장단점이 아니라, 동일한 하나의 성질의 양면이었습니다.
트레이딩 서적의 "손절이 중요하다"라는 추상론과는 차원이 다릅니다. 이번에는 2,150건의 이력을 통해 손절하지 못했던 수십 건이 추출되었고, 나아가 그중 몇 건이 장기 수익을 크게 깎아먹었다는 사실까지 확인되었습니다.
평소의 트레이드는 충분히 우수했습니다:
- 일반 매수 데이트레이딩 (PF 23.11)
- 당일 EUR 매도 (PF 9.00)
- 단기 결제 전반
하지만 몇 달에 한 번씩 "이번에는 돌아올 거야"라는 생각이 발동하고, 그 몇 건이 자산 곡선을 파괴합니다.
| 당신이 망가지는 시점은 | 검증 |
|---|---|
| "매도했을 때"가 아니다 | USD/GBP 매도 · 당일 EUR 매도는 흑자 |
| "EUR을 건드렸을 때"도 아니다 | EUR/JPY 매수 · 당일 EUR 매도는 흑자 |
| "패배를 인정하지 못하고 다음 날로 넘겼을 때" | 모든 페어 · 모든 방향에서 재현됨. 진범 |
승률 95%의 이면에 자산을 깎아먹고 있었던 것은 시장이 아니라, 바로 이 하나의 행동이었다.
그리고 그 행동은 승률 95%를 만들어내고 있는 '끈기'와 동일한 성질의 뒷면이었다.
얻어낸 것은 "손절(Stop-loss)이 중요하다"라는 일반론이 아니라, **"나의 강점(끈기 있는 가설 검증)과 약점(손절 지연)은 사실 하나의 동일한 성질의 양면이었다"**라는 자신만의 자화상이다.
그것이
차트 예측도 경제 지표도 아닌, 자기 자신의 행동 이력으로부터 도출되었다는 점에 가치가 있다.
제9장의 발견으로부터, 규칙은 "버티는 습관을 없애기"가 아니라 **"버텨도 되는 상황과 안 되는 상황을 나누기"**로 바뀐다.
습관을 100% 없애면 물리기(약점)도 사라지지만, 승률과 매수 스윙(Buy Swing)의 흑자(강점)도 일부 깎여 나가기 때문이다.
| 우선순위 | 규칙 |
|---|---|
| 🔴 최우선 | 역추세(Trend Counter) 미실현 손실은 즉시 손절 / 추세 추종(Trend Following) 미실현 손실만 허용 ― 습관을 없애지 않고 상황을 나눔 |
| 🔴 망설여질 때 | 판단이 망설여지는 상황은 익일 오버나잇 금지(전부 당일 결제)로 처리 (구현 용이 · 과적합(Overfitting) 없음) |
| 🟡 이행기 | 우선 "가장 확실하게 유죄인 행동" (특정 페어의 매도 물리기)부터 끊어냄 |
| 🟢 지속 | 수익 공장의 가동률을 매월 모니터링 (2개월 연속 평균 미달 시 점검 필요) |
| ⚪ 의식 | 주요 지표는 노이즈를 제외한 본업 구분으로 확인 |
단계적 접근 (과적합을 피하는 순서):
- 우선 가장 확실하게 유죄인 행동(특정 물리기 패턴)만을 중단한다.
- 수개월 운용하여 결과를 재검증한다.
- 효과가 확인되면 "역추세 미실현 손실은 즉시 손절 / 추세 추종은 허용"으로 확장한다 (=강점은 남기고 약점만 끊어냄).
"이길 수 있는 기법을 찾는" 기사는 세상에 넘쳐나지만, 이번에 한 일은 그 반대로, 이미 이기고 있는 자신이 어디에서 자멸하고 있는가를 데이터로 밝혀내는 작업이었다.
흥미로운 점은 답이 시장 분석이 아니라 자신의 행동 로그 안에 있었다는 것이다.
그리고 최종적으로 도달한 것은 "손절이 중요하다"라는 격언이 아니라,
자신의 강점과 약점이 동일한 성질의 양면이었다라는, 조금 의외인 자화상이었다.
그렇기에 개선의 지침도 "약점을 없애기"가 아니라 "강점은 남기고, 약점이 나타나는 상황만 봉쇄하기"가 된다.
마찬가지로 거래 이력을 가지고 있는 사람은 꼭 한 번 pandas를 사용하여
"보유 시간 × 승패"의 교차 집계(Cross Tabulation)를 해보길 바란다. 당신을 망가뜨리고 있는 행동도,
그리고 당신을 승리하게 만드는 행동도, 의외로 같은 하나의 습관일지도 모른다.
본 기사는 개인의 거래 이력 분석 기록이며, 투자 조언이 아닙니다. 수치는 모두 비율·지수로 표시되어 있으며, 반사실적 시나리오 B는 사후 확신 편향(Hindsight Bias)을 포함한 이론적 상한선으로, 실제 운용의 기대치가 아닙니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기