매매기법 · 13/13강 · 2분 읽기
전문가는 신호를 만드는 게 아니라 걸러낸다: ATR 손절, 순이익 필터, 수급 컨펌
좋은 트레이더와 전문 트레이더의 차이
8~12강에서 서로 다른 근거로 신호를 만드는 11개 전략을 살펴봤습니다. 그런데 실전 시스템에서는 "전략이 신호를 냈다"와 "실제로 주문이 나간다" 사이에 공통 필터 3개가 하나 더 있습니다. 이 필터들은 어떤 전략에서 신호가 나왔든 상관없이 똑같이 적용됩니다.
이 강의가 이 코스에서 가장 중요할 수 있는 이유가 여기 있습니다. 아마추어 트레이더는 "언제 사야 하는가"에 대부분의 에너지를 씁니다. 전문 트레이더는 그만큼(또는 그 이상)을 "이 신호를 걸러야 하는 이유"에 씁니다. 좋은 진입 아이디어 하나보다, 나쁜 진입을 걸러내는 필터 세 개가 계좌를 더 오래 지켜줍니다.
필터 1: 손절폭이 "노이즈"보다는 넓어야 한다
신호가 나왔다고 바로 주문을 넣지 않고, 먼저 손절폭(진입가와 손절가의 거리)을 두 가지 기준으로 검사합니다.
① 고정 최소폭: 손절폭이 진입가의 0.15%(min_stop_distance_pct) 미만이면 신호를 버립니다. 신호를 계산한 봉의 데이터와 실제 주문이 체결되는 시점의 시세 사이에는 항상 약간의 시차와 오차가 있습니다. 손절폭이 이 오차보다도 좁으면, 신호 계산은 맞았는데 체결 시점 가격 차이만으로 손절가 자체가 무의미해지는 상황이 생깁니다.
② 종목의 평소 변동성(ATR) 대비 최소폭: 손절폭이 ATR(14봉, atr_period)의 0.5배(min_stop_atr_mult) 미만이면 역시 버립니다. 왜 고정 비율(①) 하나로 충분하지 않을까요? "0.15% 고정"은 하루 종일 거의 안 움직이는 조용한 종목에는 헐렁하고, 하루에도 몇 %씩 오가는 변동성 큰 종목(특히 크립토)에는 사실상 아무 의미가 없습니다. 예를 들어 하루 평균 변동폭이 3%인 종목에 0.15% 손절을 걸면, 방향을 정확히 맞혀도 정상적인 가격 노이즈만으로 손절에 먼저 튕겨나가기 십상입니다. 종목마다 다른 "평소 흔들리는 폭"을 손절폭의 최소 기준으로 삼아야, 방향이 맞았는데 노이즈에 먼저 잘려나가는 걸 막을 수 있습니다.
💡 이 두 검사는 "손절을 더 타이트하게"가 아니라 "손절을 무의미할 만큼 타이트하게 잡지 말라"는 필터입니다. 손절을 넓히라는 게 아니라, 애초에 의미가 없을 정도로 좁은 손절로 계산된 신호 자체를 걸러내는 것입니다.
필터 2: 수수료와 슬리피지를 다 빼고도 남아야 한다
두 번째 필터는 "목표가까지 도달했을 때 실제로 손에 쥐는 순이익"을 계산합니다.
비용 = (수수료율 × (진입가 + 목표가)) + max(0, 슬리피지) × 진입가
순이익 = |목표가 - 진입가| - 비용
이 순이익이 0 이하이거나, 진입가의 1.0%(min_net_profit_pct) 미만이면 신호를 버립니다.
여기서 중요한 디테일: 청산은 지정가로 나간다고 가정하므로 청산 슬리피지는 비용에 넣지 않습니다. 진입은 시장가로 체결된다고 보고 슬리피지를 반영하지만, 목표가 도달 시 청산은 미리 걸어둔 지정가 주문이 체결되는 것으로 가정하기 때문입니다. 이렇게 백테스트의 체결 가정과 실거래의 비용 계산 방식을 정확히 맞춰두는 이유는, 백테스트 결과와 실거래 결과가 서로 다른 가정 때문에 어긋나는 걸 방지하기 위해서입니다. 이건 전문 퀀트 트레이더들이 시스템을 만들 때 가장 많이 저지르는 실수 중 하나를 예방하는 장치입니다 — 백테스트에서는 수수료를 대충 계산해놓고 실거래에서는 다른 체결 가정을 쓰면, 백테스트 성적과 실제 성적이 이유 없이 계속 어긋나 보입니다.
왜 이 필터가 중요한가: 목표가가 아무리 논리적으로 타당해도, 손익비가 아슬아슬하게 1.5R을 넘기는 수준이라면 수수료와 슬리피지를 빼고 나면 실질적으로 남는 게 거의 없거나 마이너스일 수 있습니다. 특히 매매 빈도가 높은 스캘핑성 전략일수록 이 필터의 영향이 큽니다 — 신호 자체는 맞아도, "먹을 게 없는" 신호를 걸러내는 것이 장기 계좌 곡선에 결정적입니다.
필터 3: 수급(매수세/매도세)이 정면으로 반대일 땐 진입하지 않는다
봉 데이터(OHLCV)만으로는 실제 호가창을 볼 수 없습니다. 대신 "종가가 그 봉의 어디에서 마감했는가"를 거래량으로 가중해서 매수/매도 우위를 추정합니다 — 이게 차이킨 자금흐름(Chaikin Money Flow, CMF)입니다.
- 고가 근처에서 마감 = 그 봉 동안 사려는 쪽이 이겼다 → 매수 우위(+)
- 저가 근처에서 마감 = 팔려는 쪽이 이겼다 → 매도 우위(−)
최근 20봉(pressure_period)의 CMF와, 방금 마감한 봉 하나의 매수/매도 우위 점수를 반반씩 섞어서 최종 점수(−1~+1)를 만듭니다. 이 점수가 임계값(기본 0.15, pressure_threshold)을 기준으로 신호 방향과 얼마나 일치하는지에 따라 두 가지 동작 모드가 있습니다.
| 모드 | 동작 | 성격 |
|---|---|---|
confirm (기본값) |
수급 점수가 신호 방향과 같은 쪽으로 임계값을 넘어야만 진입 허용 | 엄격 — 확실한 동의가 있어야 진입 |
block |
수급 점수가 신호와 정반대로 임계값을 넘을 때만 차단 | 관대 — 명백히 반대일 때만 막음 |
기본값은 confirm 모드입니다. 즉 "가격 패턴상으로는 매수 신호인데, 실제 그 봉 동안의 매수/매도 힘겨루기에서는 매도 쪽이 이기고 있었다"면 진입을 보류합니다. 판단할 수 있는 거래량 데이터가 없거나 봉이 부족하면, 필터가 막지 않고 통과시킵니다(정보가 없을 때 보수적으로 차단하지 않는다는 방침 — 다른 필터들과 일관됩니다).
⚠️ 이 필터는 진짜 호가창(오더북)을 보는 게 아니라 캔들 하나의 마감 위치로 수급을 추정하는 근사치라는 한계를 분명히 알아야 합니다. 실제 대형 기관의 물량이 몇 개의 봉에 걸쳐 조용히 들어오는 경우, 이 지표는 그걸 잡아내지 못할 수 있습니다.
세 필터가 함께 만드는 것: "신호는 필요조건이지 충분조건이 아니다"
전략이 신호를 낸다는 것은 "진입 후보가 나왔다"는 뜻이지 "지금 사도 좋다"는 뜻이 아닙니다. 실제 주문까지 가려면 순서대로:
- 전략의 고유 조건(8~12강에서 다룬 것들)을 만족하고
- 손절폭이 노이즈 수준보다는 넓어야 하고 (필터 1)
- 비용을 다 떼고도 최소 이익 기준을 넘어야 하고 (필터 2)
- 수급이 정면으로 반대되지 않아야 (필터 3)
넷을 전부 통과해야 실제 신호가 됩니다. 이 구조의 장점은 전략을 하나 추가할 때마다 리스크 관리 로직을 처음부터 다시 짤 필요가 없다는 것입니다. 11개 전략 전부가 이 3중 필터를 그대로 상속받기 때문에, 새 전략을 설계할 때는 오직 "언제 신호를 낼 것인가"에만 집중하면 됩니다 — 그 신호가 실제로 주문할 가치가 있는지는 이미 공통 계층이 검증해줍니다.
정리
- 좋은 진입 아이디어보다 나쁜 진입을 걸러내는 필터가 계좌를 더 오래 지킵니다.
- ATR 기반 최소 손절폭: 종목의 평소 변동성보다 좁은 손절은 노이즈에 먼저 잘려나갈 뿐입니다.
- 수수료·슬리피지 차감 후 순이익 필터: 손익비가 숫자상으로 맞아도 비용을 빼면 남는 게 없을 수 있습니다. 백테스트와 실거래의 체결 가정을 일치시키는 것도 이 필터의 역할입니다.
- 수급(CMF) 컨펌 필터: 캔들 마감 위치로 추정한 매수/매도 우위가 신호와 정면으로 반대면 보류합니다 — 다만 진짜 호가창이 아니라 근사치라는 한계는 항상 인지해야 합니다.
- 어떤 전략을 쓰든, 이 3중 필터를 통과하지 못하면 그 신호는 애초에 존재하지 않았던 것으로 취급됩니다.