sgkstudio.
엔지니어링

물타기 효과 실측: 승률은 올랐지만 수익률 개선은 없었다

물타기 효과는 승률에서만 보였고 실현 수익률에서는 나타나지 않았습니다. 왕복 거래 33,364건을 다시 분석해 보니, 추가 매수한 거래의 최종 승률은 49.7%로 단일 진입 거래의 41.4%보다 높았습니다. 그런데 물타기가 수익률에 보탠 몫은 중위값 기준 -0.37%포인트였습니다. 이 글은 상위 투자자의 회복력을 흉내 내려던 가설이 어디서 틀렸는지, 처음 믿었던 수치가 왜 재현되지 않았는지, 회복을 실제로 만든 요인이 무엇이었는지를 순서대로 남긴 기록입니다.

2026-11-02재현 분석: 파이썬 스크립트 hero_recovery_analysis.py, 왕복 거래 33,364건, 결합 커버리지 45.5%분석 일자: 2026년 7월 18일. 첫 주장은 2026년 7월 15일 기록물타기: 추가 매수 거래의 최종 승률 49.7%, 단일 진입 41.4%, 이득 지표 중위값 -0.37%포인트재현 전후: 5분 승률 40% → 최종 67.5%(+27.5%포인트) 주장이 풀링 코호트에서 41.6% → 46.2%(+4.5%포인트)깊은 손실(MAE -3% 이하): 최종 패자 저점 후 23분 내 청산, 최종 승자 저점 후 중위 1,078분 보유미채택: 후보 규칙 네 개는 백테스트 검증 전이라 전략에 넣지 않았다

물타기 효과를 왜 따져 봤나: 최종 승률 22% 전략

물타기 효과를 따져 본 출발점은 물타기 자체가 아니라 손실 난 거래를 되살리지 못하는 전략이었습니다. 매매 전략 V15의 최종 승률은 22%였고, 뒤집어 말하면 손실률이 78%였습니다. 진입 직후의 성적은 나쁘지 않았습니다. 진입 5분 뒤 승률은 45~50% 수준이었습니다. 처음 5분까지는 멀쩡한 전략이 끝날 때 22%로 떨어진다는 뜻입니다.

거래가 잠시 밀리면 손절이 발동했고, 회복할 시간 없이 그대로 손실로 확정했습니다. 원래 기록에는 이 상태를 “회복 0, stop까지 감”이라고 적어 두었습니다. 손절선을 조금 넓히거나 좁히는 정도로 풀릴 문제가 아니라는 의심이 여기서 나왔습니다.

손익비도 약했습니다. 평균 이익을 평균 손실로 나눈 손익비(payoff ratio)가 V15는 1.22배였습니다. 승률이 낮으면 손익비가 그만큼 높아야 버티는데, 둘 다 낮았습니다. 승률과 손익비를 동시에 끌어올린 사례가 필요했고, 비교 대상으로 누적수익 상위 10% 투자자의 거래 기록을 골랐습니다.

주식을 하지 않는 독자라도 이 사례는 익숙할 수 있습니다. 잘하는 쪽의 숫자를 가져와 우리 규칙을 고치려는 일은 어느 업무에나 있고, 그 숫자가 정말 재현되는지, 그 숫자를 만든 행동이 무엇인지는 대개 나중에야 묻습니다. 이 글은 그 질문을 먼저 던져 본 기록이기도 합니다.

손실 구간에서 버티는 행동과 빨리 끊는 행동 사이의 선택은 앞서 쓴 생존자 편향 없이 비교한 손절 규칙 글에서도 다룬 주제입니다. 이번 글은 그 선택 가운데 추가 매수, 곧 물타기가 실제로 돈을 벌어 줬는지를 잰 기록입니다.

처음 잰 숫자: 5분 승률 40%에서 최종 67.5%로

2026년 7월 15일, 상위 투자자의 성적을 V15와 나란히 놓았습니다. 진입 5분 뒤 승률은 40%였습니다. 거래의 60%가 처음에는 손실 쪽으로 움직였다는 뜻이고, 이 값만 보면 V15보다 오히려 낮습니다. 그런데 최종 승률은 67.5%, 손익비는 2.29배였습니다.

표. 진입 5분 뒤 승률은 상위 투자자 40%, V15 45~50%. 최종 승률은 상위 투자자 67.5%, V15 22%. 손익비는 상위 투자자 2.29배, V15 1.22배.
출발은 V15가 앞섰는데 끝은 뒤집혔다. 이 표가 회복력이라는 가설을 낳았다

이 표를 보고 내린 해석은 분명했습니다. 상위 투자자를 가르는 특성은 진입 실력이 아니라 회복력이라는 해석입니다. 60%가 손실로 출발한 거래 가운데 절반 이상을 되찾았다는 계산이 나왔고, 손익비도 V15의 1.9배였습니다. 당시 기록에는 V15의 손실률 78%가 진입의 문제가 아니라 회복 메커니즘의 부재라고 적었습니다.

다만 그때도 이렇게 적어 두었습니다. “복원 메커니즘의 정체는 불명”. 숫자는 있는데 그 숫자를 만든 행동을 몰랐습니다. 그리고 이날의 기록에는 숫자 자체를 다시 계산했다는 언급이 없습니다. 뒤에서 보겠지만 이 빈칸이 첫 번째 실수였습니다.

상위 투자자는 손실 구간에서 무엇을 했을까?

7월 15일 기록에는 다음 분석으로 넘길 질문 세 개가 남아 있습니다. 진입 후 5분에서 30분 사이에 무엇을 하는가, 같은 구간에서 손절이 왜 이들에게는 발동하지 않는가, 회복이 같은 종목에서 일어나는가 아니면 다른 종목의 이익으로 메우는가. 모두 행동을 묻는 질문입니다.

7월 18일 분석에서는 이 질문을 검증 가능한 가설 네 개로 바꿨습니다.

  • 물타기 가설: 상위 투자자는 손실 중인 종목을 더 사서 승률을 높인다
  • 인내 가설: 진입 5분 시점의 손실 구간(0~-3%)에서 더 오래 들고 간다
  • 선별 손절 가설: 모든 손실을 버티지 않고, 깊어지는 거래만 골라 끊는다
  • 회복 원천 가설: 회복의 수익이 어디서 오는지 물타기와 가격 반등으로 나눠 본다

측정은 파이썬 스크립트 `hero_recovery_analysis.py` 하나로 했습니다. 왕복 거래 33,364건을 불러와 체결 기록과 가격 데이터를 이어 붙이고, 투자자를 데이터의 리그 구분에 따라 ranked와 loss 두 그룹으로 나눴습니다. ranked는 분석 대상인 상위권 쪽, loss는 대조군입니다. 승패는 거래가 끝난 뒤의 최종 결과로 가렸고, 차이가 우연인지는 p값으로 확인했습니다.

비교 값은 대부분 평균이 아니라 중위값으로 읽었습니다. 거래 수익률은 소수의 큰 거래가 평균을 끌고 가기 쉬워서, 한가운데 값이 전형적인 거래를 더 잘 보여 주기 때문입니다. 글에 나오는 “%포인트”는 두 비율의 차이이고, “회복폭”은 최종 승률에서 5분 승률을 뺀 값입니다.

물타기 가설이 처음에 그럴듯해 보인 이유는 직관에 맞았기 때문입니다. 평균 매입가를 낮추면 작은 반등에도 이익으로 돌아설 수 있으니, 낮은 5분 승률이 높은 최종 승률로 바뀌는 그림과 잘 어울립니다. 그래서 첫 결과가 이 가설을 지지했을 때 더 조심했어야 했습니다.

가설이 틀린 지점 1: 재현되지 않은 +27.5%포인트

행동을 분석하기 전에 출발 수치부터 흔들렸습니다. 같은 스크립트로 오래 순위에 남은 ranked 투자자의 거래를 한데 합쳐(풀링) 계산하니, 5분 승률 41.6%에서 최종 승률 46.2%로 회복폭이 +4.5%포인트였습니다. 7월 15일의 40%에서 67.5%로, 회복폭 +27.5%포인트라는 값은 재현하지 못했습니다.

5분 승률은 40%와 41.6%로 거의 같았습니다. 달라진 쪽은 최종 승률이었습니다. 67.5%가 46.2%로 내려오면서 “거래의 절반 이상을 되찾는다”는 이야기의 힘이 크게 빠졌습니다.

막대그래프. 5분 승률에서 최종 승률까지의 회복폭. 7월 15일 주장 +27.5%포인트, 풀링 코호트 재현값 +4.5%포인트, 투자자별 상위 3명 +44.4%포인트, +31.2%포인트, +27.8%포인트.
코호트 평균은 주장에 크게 못 미치지만, 상위 3명은 오히려 주장 근처에 있다

주장이 완전히 허구였던 것도 아닙니다. 투자자별로 나눠 보니 편차가 컸습니다. 상위 3명의 회복폭은 각각 +44.4%포인트, +31.2%포인트, +27.8%포인트로 원래 주장에 가까웠습니다. 그래서 판정을 전면 기각이 아니라 부분 반증으로 적었습니다. 풀링한 코호트 수준에서는 틀렸고, 특정 소수 투자자에게는 맞을 수 있습니다.

왜 이런 차이가 났는지는 끝내 확정하지 못했습니다. 원래 수치를 만든 스크립트가 저장소에 없어서 복원할 수 없었습니다. 특정 상위 투자자 소수 표본에서 나온 값일 가능성이 높다고 추정할 뿐입니다. 산출 코드 없이 남은 숫자는 틀렸다고 증명하기도, 맞다고 지키기도 어렵습니다.

이 편차는 규칙을 만드는 쪽에도 경고를 줍니다. 평균이 작고 소수만 크다면, 상위 몇 명의 행동을 모든 거래에 옮겨도 같은 결과가 나온다는 보장이 없습니다. 그 몇 명이 남다른 판단력을 가졌는지, 표본이 적어 운이 크게 잡혔는지도 이 값만으로는 알 수 없습니다.

물타기 효과는 왜 수익률로 이어지지 않았나?

물타기 가설의 앞부분은 맞았습니다. ranked 그룹의 57.2%가 추가 매수를 했고 loss 그룹은 52.3%였습니다(p=0.019). 추가 매수한 거래의 최종 승률은 ranked 기준 49.7%로, 단일 진입 거래의 41.4%보다 높았습니다. 여기까지만 보면 물타기가 답처럼 보입니다.

뒷부분에서 가설이 깨졌습니다. 진입 5분 시점의 손실을 이익으로 뒤집은 회복 거래 가운데 75.7%가 추가 매수를 동반했습니다. 그런데 물타기의 이득을 재는 지표 `avg_down_benefit_pct`의 중위값은 -0.37%포인트였습니다. 승률은 높였지만 실현 수익률 개선은 없었고, 원래 기록은 이를 저점 매수 실패로 판정했습니다.

통계 카드. 추가 매수 거래의 최종 승률 49.7%, 단일 진입 41.4%, 회복 거래의 추가 매수 동반율 75.7%, 물타기 이득 지표 중위값 -0.37%포인트.
승률 칸만 보면 물타기를 채택했을 것이다. 수익률 칸이 그 결론을 막았다

이 결과가 주는 교훈은 지표 선택입니다. 승률은 이긴 횟수만 세고, 얼마나 벌었는지는 세지 않습니다. 회복 거래의 75.7%에 추가 매수가 있었다는 숫자도 함께 일어났다는 뜻일 뿐, 추가 매수가 회복을 일으켰다는 뜻은 아닙니다. 물타기 효과를 판단할 때 승률만 보면 이 차이를 놓칩니다.

승률과 수익률이 갈리는 현상은 일반론으로도 설명할 수 있습니다. 평균 매입가가 내려가면 이익으로 바뀌는 지점이 가까워지므로, 같은 반등에도 이긴 거래로 기록되기 쉽습니다. 하지만 이긴 거래가 늘어도 추가로 산 물량이 충분히 싼 값에 들어가지 못했다면 돈은 늘지 않습니다. 이 설명은 일반 원리이고, 이번 데이터가 직접 확인한 내용은 이득 지표가 음수였다는 사실과 저점 매수에 실패했다는 판정까지입니다.

이것이 가설 네 개 가운데 가장 비싼 오답이었습니다. 승률 비교로 멈췄다면 V15에 조건 없는 추가 매수 규칙이 들어갔을 테고, 위험 노출은 늘면서 수익률은 나아지지 않는 전략이 나왔을 것입니다.

회복을 만든 진짜 원인은 무엇이었나?

회복의 주 원천은 추가 매수가 아니라 가격 자체의 반등이었습니다. 회복 거래의 가격 반등 중위값은 +4.52%였습니다. 그리고 그 반등을 받아 낼 수 있었던 조건은 두 가지였습니다. 얕은 손실은 오래 들고 가고, 깊은 손실은 사후에 극단적으로 갈렸습니다.

인내 가설부터 보겠습니다. 진입 5분 시점의 모든 손실 구간(0~-3%)에서 ranked 그룹은 loss 그룹보다 오래 보유했고, 최종 승률도 동등하거나 높았습니다. 작은 손실을 즉시 끊지 않았다는 뜻입니다.

선별 손절 가설도 살아남았습니다. 승자의 MAE 중위값은 -1.59%, 패자는 -2.13%였습니다(p=0.019). 승자도 손실을 겪지만 패자보다 얕게 겪습니다. 차이가 가장 뚜렷한 곳은 MAE가 -3% 이하로 깊어진 거래였습니다.

표. MAE -3% 이하 거래. 최종 패자는 저점 후 23분 내 청산, 반등 +3.14%포인트. 최종 승자는 저점 후 중위 1,078분 보유, 반등 +12.18%포인트.
같은 깊은 손실인데 패자는 분 단위로, 승자는 하루 가까이 움직였다

최종 패자는 저점을 찍고 23분 안에 청산했고, 그때까지 반등은 +3.14%포인트였습니다. 최종 승자는 저점 후 중위 1,078분, 약 18시간을 보유한 뒤 +12.18%포인트 반등에서 청산했습니다. 18시간이면 장을 넘겨 다음 날까지 들고 간다는 뜻입니다.

두 숫자를 나란히 놓으면 패자의 모습이 보입니다. 패자도 저점 뒤 반등을 겪었지만 작은 반등에서 거래를 정리했습니다. 승자는 그보다 훨씬 긴 시간을 버티며 더 큰 반등까지 기다렸습니다. 깊은 손실에서 손을 뗀 시점이 승패를 나눈 것처럼 보이는데, 이 해석에 붙는 단서는 마지막 절에서 따로 적습니다.

여기서 처음의 질문이 바뀌었습니다. 5분에서 30분 구간의 전술을 찾으려 했는데, 회복은 빠른 전술이 아니라 여러 날에 걸친 인내에 가까웠습니다. 이 해석은 앞선 실험과도 맞습니다. 조기 시간 손절(early_time_loss) 실험은 이미 실패로 끝났습니다. 회복 창이 수백 분에서 하룻밤까지 걸린다면 5분 시간 손절류는 구조적으로 맞지 않습니다.

조치: 수치를 정정하고 규칙은 후보로만 남겼다

첫 조치는 기록 정정이었습니다. 7월 15일 항목 맨 위에 부분 반증 표시를 달고, 재현값과 근거 스크립트를 함께 적었습니다. 원문은 지우지 않았습니다. 당시 무엇을 믿었는지가 남아 있어야 다음 분석이 같은 길로 들어서지 않습니다.

그다음 V15에 옮길 후보 규칙 네 개를 정리했습니다. 넷 다 2026년 7월 18일 기준으로 백테스트 검증 전이고, 그래서 채택하지 않았습니다.

표. 후보 규칙 네 개. 진입 5분 시점 손실 0~-3%는 즉시 손절 금지, 깊은 MAE 절단 경계 후보 -4.4%, 추가 매수는 조건부 1회, 5분 시간 손절류는 부적합. 모두 백테스트 전 미채택.
규칙마다 근거가 다르다. 넷 다 분석에서 나온 후보일 뿐 검증한 규칙이 아니다

첫째, 얕은 손실은 즉시 손절을 금지합니다. 둘째, 깊은 손실의 절단 경계 후보로 -4.4%를 둡니다. ranked 그룹의 25분위 값에서 가져왔습니다. 셋째, 추가 매수는 조건을 걸어 1회로 제한합니다. 앞에서 본 대로 자동으로 수익이 되지 않으니, 이득 지표의 부호를 확인한 경우에만 허용합니다. 넷째, 5분 시간 손절류는 쓰지 않습니다.

규칙 네 개는 서로 맞물려 있습니다. 첫째 규칙이 얕은 손실을 버티게 하므로, 어디서 멈출지를 둘째 규칙이 정해야 합니다. 경계값 -4.4%는 앞서 본 승자의 MAE 중위값 -1.59%보다 훨씬 깊습니다. 전형적인 승자가 겪는 손실 폭까지는 끊지 않겠다는 설계입니다. 다만 부호를 확인하는 셋째 규칙을 실제 매매 중에 어떻게 구현할지는 기록에 없습니다. 이득 지표는 거래가 끝나야 계산되는 값일 수 있어, 백테스트에 앞서 풀어야 할 문제입니다.

세 번째 규칙이 이번 분석의 결과를 가장 잘 보여 줍니다. 승률만 봤다면 “물타기를 넣자”가 됐을 자리에, “이득이 확인될 때만, 1회만”이라는 제한이 붙었습니다.

재측정 결과: +27.5%포인트가 +4.5%포인트로

이번 건에서 다시 잰 대상은 전략 성과가 아니라 처음 믿었던 주장입니다. V15에 규칙을 넣지 않았으므로, 전략의 최종 승률 22%가 얼마로 올랐다는 숫자는 없습니다. 전후를 표로 놓으면 아래와 같습니다.

7월 15일 주장과 7월 18일 재현 분석 비교
지표7월 15일 주장7월 18일 재현
진입 5분 뒤 승률40%41.6%
최종 승률67.5%46.2%
회복폭+27.5%포인트+4.5%포인트
추가 매수와 회복의 관계미상승률 49.7% 대 41.4%, 이득 지표 -0.37%포인트
회복의 주 원천미상가격 반등 중위 +4.52%

재현 분석: hero_recovery_analysis.py, 왕복 거래 33,364건. 7월 15일 값은 산출 스크립트가 없어 근사 비교다.

흐름도. 7월 15일 회복력 주장 기록, 7월 18일 재현 분석으로 회복폭 +4.5%포인트 확인, 부분 반증 표시, 후보 규칙 4개 정리, 백테스트 전이라 미채택.
사흘 사이에 바뀐 것은 전략이 아니라 전략을 고치는 근거였다

가설별 판정도 정리합니다. 물타기가 승률을 높인다는 부분은 지지, 수익률을 높인다는 부분은 기각입니다. 인내와 선별 손절은 지지입니다. 회복 원천은 추가 매수가 아니라 가격 반등으로 판정했습니다. 첫 주장에서 살아남은 문장은 “상위 투자자는 손실 후 기다린다” 정도이고, 숫자의 크기는 크게 줄었습니다.

전략 성과의 재측정은 아직 남아 있습니다. 후보 규칙을 백테스트에 넣는다면 비교 기준은 이 글 첫머리의 값입니다. 최종 승률 22%와 손익비 1.22배가 얼마나 움직이는지, 그때 손실 거래를 더 오래 들고 간 대가가 얼마인지를 같이 재야 합니다. 승률만 올라가고 금액이 따라오지 않는다면, 물타기에서 본 함정을 다른 규칙으로 되풀이하는 셈입니다.

남는 한계: 왜 아직 전략에 넣지 않았나?

가장 큰 한계는 검증 범위입니다. 후보 규칙 넷 다 백테스트(과거 데이터로 전략을 돌려 보는 시험)를 거치지 않았습니다. 상위 투자자의 거래에서 관찰한 패턴일 뿐, V15에 넣었을 때 성과가 나아진다는 증거는 아직 없습니다.

데이터에도 빈틈이 있습니다. 결합 커버리지가 45.5%라서, 왕복 거래 33,364건 모두를 모든 비교에 쓴 것이 아닙니다. 코호트를 좁히고 표본을 나눌수록 비교마다 실제 표본은 더 작아집니다. 7월 15일 값과의 비교도 근사치입니다. 원래 표본은 누적수익 상위 10%, 재현 표본은 순위 유지 그룹이라 정의가 다르고, 원래 스크립트도 없습니다.

해석에도 주의가 필요합니다. 승자와 패자는 거래가 끝난 뒤에 나눈 분류입니다. “오래 들고 있어서 이겼다”와 “이길 거래였기에 오래 들고 있었다”를 이 데이터만으로는 가릴 수 없습니다. 저점이 언제인지도 사후에야 압니다. 그래서 1,078분이라는 값을 보유 규칙으로 그대로 옮길 수 없습니다.

운영 충돌도 남아 있습니다. 여러 날 보유하는 인내를 옮기면 V15의 일일 손실 한도, 오버나이트 정책과 부딪힙니다. 다음 날까지 들고 가는 거래를 허용하는 순간 위험 관리 틀 자체를 다시 봐야 합니다. 이 검토를 끝내기 전에는 규칙을 넣을 수 없습니다. 이 글은 특정 매매 방식을 권하는 글이 아니며, 수치는 분석 표본 안에서만 유효합니다.

이번 분석을 거치며 수치를 믿기 전에 확인할 질문도 분명해졌습니다.

  • 이 수치를 다시 계산할 코드가 저장소에 있는가
  • 비교하는 두 표본의 정의가 같은가
  • 평균이 작은데 소수의 값만 큰 분포는 아닌가
  • 승률처럼 보기 좋은 지표 옆에 금액을 재는 지표를 함께 놓았는가

매매가 아닌 영역에도 남길 만한 점이 두 가지 있습니다. 판단 근거가 된 수치는 산출 코드와 함께 저장해야 다시 잴 수 있고, 지표 하나가 좋아 보일 때는 그 지표가 세지 않는 값을 같이 봐야 합니다. 과거 데이터 검증에서 빠지기 쉬운 함정은 백테스트 갭 반영 누락 글에도 정리했습니다. 업무 데이터에서 어떤 숫자를 믿어도 될지 함께 따져 보고 싶다면 상담으로 문의해 주세요.

같은 방식으로 우리 업무를 재보고 싶다면

이 글에 쓴 계측·판정·자동화는 저희가 실제로 매일 돌리는 방식 그대로입니다. 어떤 작업을 자동화할 수 있고 어디를 사람이 잡아야 하는지, 현재 업무 흐름을 놓고 같이 짚어 드립니다.

새 글이 올라오면 알려 드립니다

이런 계측 기록을 새로 쓰면 메일로 한 통 보냅니다. 광고나 판촉은 보내지 않습니다.