이름의 뜻부터

샹들리에는 천장에 매달린 조명이다. 이 지표의 이름이 거기서 왔다. 손절선을 바닥에서 쌓아 올리는 게 아니라 천장에서 내려 매단다는 뜻이다.

보통 손절은 진입가 기준으로 잡는다. 10,000원에 샀으면 -5%인 9,500원. 이 방식의 문제는 가격이 12,000원까지 올라가도 손절선이 여전히 9,500원에 있다는 것이다. 이익이 2,000원 쌓였는데 방어선은 진입 시점에 묶여 있다.

샹들리에 엑시트는 기준점을 옮긴다. 진입가가 아니라 진입 이후의 최고가에서 재는 것이다.

공식 — 기준점이 다르다
기본값: 기간 22, 배수 3.0 (원저자 척 르보 권장)
롱 청산선  = 최근 n봉 최고가  −  ATR(n) × 배수
숏 청산선  = 최근 n봉 최저가  +  ATR(n) × 배수
핵심 성질: 청산선은 절대 내려가지 않는다 (롱 기준)
  고점이 갱신되면 → 청산선도 따라 올라감
  고점이 그대로면 → 청산선도 그대로 (ATR 변화분만 반영)
비교
  고정 손절    진입가 − 5%        가격이 올라도 그대로
  샹들리에     최고가 − 3×ATR     이익을 따라 올라간다
단, ATR 이 커지면 청산선이 내려갈 수 있다 — 구현 시 max() 로 잠가야 한다

마지막 줄이 실전 구현의 함정이다. 공식만 그대로 쓰면 변동성이 급증했을 때 ATR이 커지면서 청산선이 아래로 내려간다. 이익을 지키려고 만든 장치가 방어선을 후퇴시키는 셈이다. 그래서 대부분의 구현은 “이전 청산선보다 낮아지지 않는다"는 잠금을 추가로 건다.

손절선의 기준점이라는 문제

이 지표의 핵심은 수식이 아니라 기준점을 어디에 두느냐다. 이 질문 자체가 잘 안 다뤄지는 것 같아서 좀 더 파보려 한다.

손절선을 정할 때 쓸 수 있는 기준점은 여러 개다.

손절선의 기준점 후보들
① 진입가
   "내가 산 가격에서 −5%"
   장점: 손실 계산이 직관적. 리스크 관리에 바로 쓰인다
   단점: 시장은 내 진입가를 모른다. 아무 의미 없는 가격이다
② 진입 이후 최고가
   "고점에서 3×ATR 아래" — 샹들리에 방식
   장점: 이익을 따라 올라간다. 시장이 아는 가격(고점)이 기준
   단점: 보유 기간이 짧으면 작동할 시간이 없다
③ 구조적 지점
   "직전 스윙 저점 아래" — 이 자리가 깨지면 시나리오가 틀린 것
   장점: 논리적. 엘리엇의 무효화 라인과 같은 발상
   단점: 스윙 확정에 지연. 거리가 종목마다 제각각
④ 변동성 절대치
   "진입가에서 2×ATR 아래" — ①과 ②의 절충
내 봇은 ① 을 쓴다. 관성이기도 하고, 계산이 단순해서이기도 하다

①번의 단점을 다시 읽어보자. 시장은 내 진입가를 모른다. 이건 당연한 사실인데도 손절을 설계할 때 자주 잊힌다.

내가 10,000원에 샀다는 사실은 나에게만 의미가 있다. 시장이 9,500원까지 밀릴지 말지는 내 진입가와 무관하게 정해진다. 그런데도 대부분의 사람이 진입가 기준으로 손절을 잡는 건, 그게 자기 손익을 계산하기 편해서다.

계산의 편의가 방어선의 위치를 정하고 있는 셈이다. 이 지적이 샹들리에 엑시트를 공부하면서 얻은 가장 큰 소득이다.

그럼 왜 아직 안 바꿨나. 두 가지 이유다. 하나는 현행 손절값이 실측으로 확정돼 있어서다. 매매 58건을 손절선별로 재현했을 때 −2.5%에서 기대값이 −0.072%에서 +0.209%로 뒤집혔고, 이후 다층 방어가 완성되면서 −5%까지 넓어졌다. 근거가 있는 값을 근거 없이 바꿀 수는 없다.

다른 하나는 이익 구간 체류시간 중앙값이 0분이라는 실측 때문이다. 고점 기준 트레일링은 고점이 갱신될 시간이 있어야 의미가 있는데, 그 시간이 없다.

ATR을 쓰는 이유

왜 하필 ATR(평균 실제 범위)일까. 퍼센트로 하면 안 되나.

퍼센트 손절 vs ATR 손절
종목 A — 하루 평균 진폭 2%   |   종목 B — 하루 평균 진폭 12%
퍼센트 방식: 둘 다 −5%
  A 에서는 하루 진폭의 2.5배 → 거의 안 걸린다 (너무 느슨)
  B 에서는 하루 진폭의 0.4배 → 정상 출렁임에 계속 베인다 (너무 타이트)
ATR 방식: 둘 다 3×ATR
  A 에서는 좁게, B 에서는 넓게 — 자동으로 종목에 맞춰진다
ATR = 아래 셋 중 최댓값의 평균 (와일더 평활)
  고가 − 저가
  |고가 − 전일종가|      ← 갭 상승을 포착
  |저가 − 전일종가|      ← 갭 하락을 포착
단순 고저폭이 아니라 갭까지 넣는 게 '실제(True)' 범위라는 이름의 이유다

이 논리는 내 봇의 손절 이력과도 맞닿아 있다. 손절폭이 -2.5% → -2% → -5%로 움직였는데, 마지막 확장의 근거가 “노이즈 밴드 탈출"이었다. 정상적인 출렁임 범위 안에 손절선을 두면 방향이 맞아도 계속 베인다는 것. ATR 방식은 그 노이즈 밴드를 종목마다 자동으로 재주는 도구다.

배수 3은 어디서 왔나

원저자 권장값은 3.0인데, 이게 어디서 나온 숫자인지 따져볼 필요가 있다.

배수를 바꾸면 무엇이 달라지나
배수 작음 (1.5~2)   청산선이 가깝다
  이익 반납이 적다 · 손실이 작다
  정상 출렁임에 자주 털린다 · 큰 추세를 못 탄다
배수 큼 (4~5)       청산선이 멀다
  추세를 끝까지 탄다 · 휩쏘에 안 털린다
  꺾인 뒤 청산까지 반납분이 크다 · 손실 한 건이 커진다
3.0 은 일봉·주식·중장기 추세추종에서 나온 값이다
15분봉 코인에 그대로 가져오면 맞을 이유가 없다
확인해야 할 것: 내 보유 기간의 분포
  며칠씩 들고 가는 전략이면 3.0 이 말이 된다
  몇 시간 안에 끝나는 전략이면 청산선이 한 번도 안 닿는다

마지막 지적이 내 봇에는 치명적이다. 실측해보니 이익 구간에 머무는 시간의 중앙값이 0분이었다. 오르는 순간 바로 되돌아오는 패턴이 절반이라는 뜻이다. 이런 분포에서 3×ATR짜리 청산선은 사실상 발동하지 않는다. 발동하기 전에 이익이 사라지니까.

그래서 내 봇의 수확 방식이 지금 형태가 됐다. 개별 종목의 트레일링이 아니라 계좌 합산 기준으로 목표 금액에 닿으면 전량 수확하고, 스테이 시간도 60분에서 30분으로 줄였다. 스윕 결과가 30분 8회 +209,203원, 60분 6회 +159,530원이었다. 긴 대기는 회당 크기를 못 키우고 사이클 수만 깎았다.

ATR이라는 지표 자체에 대하여

샹들리에의 재료인 ATR도 한 번 짚고 가자. 이 코너에서 여러 번 언급했는데 정면으로 다룬 적은 없다.

ATR(Average True Range)은 와일더가 만든 변동성 지표다. RSI를 만든 그 사람이다. 이름의 “True"가 붙은 이유가 계산식에 있다.

왜 '진짜' 범위인가
단순한 방법: 고가 − 저가
  문제 — 갭이 있으면 실제 움직임을 과소평가한다
  전일 종가 1,000 → 오늘 950 에서 시작해 940~960 사이 움직임
  고저폭은 20 이지만 실제로는 60 만큼 움직였다
True Range = 다음 셋 중 최댓값
  ① 고가 − 저가
  ② |고가 − 전봉 종가|      ← 갭 상승 포착
  ③ |저가 − 전봉 종가|      ← 갭 하락 포착
ATR = True Range 를 와일더 평활한 값
코인 시장은 24시간이라 일봉 갭이 거의 없다
  그래도 ②③ 을 넣는 이유: 거래소 점검·급락 시 캔들이 튈 때 잡아준다
  그리고 무엇보다 원본과 값을 맞추기 위해서다

ATR이 유용한 진짜 이유는 종목별로 다른 자를 자동으로 대준다는 것이다. 퍼센트 기반 규칙은 하루 평균 2% 움직이는 종목과 12% 움직이는 종목에 같은 잣대를 댄다. ATR 기반이면 각 종목의 평소 진폭을 기준으로 재게 된다.

내 봇에도 변동성 조건이 있는데 하한과 상한이 함께 있다. 너무 조용한 종목은 움직임이 없어 못 먹고, 너무 요동치는 종목은 손절선이 의미를 잃기 때문이다. 이 상하한 구조도 처음부터 설계한 게 아니라, 박스장에서 하한을 계속 내리다가 이번엔 정상 범위를 한참 벗어난 종목이 들어오면서 만들어졌다.

한 가지 주의할 점은 ATR이 방향을 모른다는 것이다. 크게 오르든 크게 내리든 ATR은 똑같이 커진다. 그래서 ATR만으로는 아무 판단도 못 한다. 항상 방향 정보와 짝지어 써야 하는 보조 축이다.

다른 트레일링 방식들과 나란히

고점을 따라가는 청산선을 만드는 방법은 여럿이다. 셋을 나란히 놓으면 각각이 무엇을 가정하는지 보인다.

트레일링 방식 비교
퍼센트 트레일   청산선 = 최고가 × (1 − p)
  가정: 되돌림의 크기가 가격에 비례한다
  장점: 계산이 가장 단순. 파라미터 하나
  단점: 종목의 변동성 차이를 무시한다
샹들리에      청산선 = 최고가 − ATR × k
  가정: 되돌림의 크기가 그 종목의 변동성에 비례한다
  장점: 종목마다 자동 조정. 대부분의 경우 퍼센트보다 합리적
  단점: ATR 이 급변하면 청산선이 흔들린다 (잠금 필요)
파라볼릭 SAR   시간이 갈수록 가속해서 따라붙는다
  가정: 추세가 오래될수록 끝날 확률이 높다
  장점: 추세 말미에 빠르게 잠근다
  단점: 가속 계수가 두 개라 과적합하기 쉽다 · 횡보장에서 최악
셋 다 '고점 대비 얼마' 라는 뼈대는 같다. 다른 건 그 '얼마' 를 무엇으로 재느냐
퍼센트=가격 · 샹들리에=변동성 · SAR=시간

마지막 줄이 이 코너에서 반복되는 이야기와 이어진다. 아룬 편에서 시간을 재는 지표의 특이함을 다뤘는데, SAR도 같은 계열이다. 무엇을 자로 삼느냐가 지표의 성격을 결정하고, 자가 다르면 못 보는 사각도 다르다.

ATR을 직접 구현할 때의 함정

샹들리에를 이식하려면 ATR부터 정확해야 한다. 여기서 값이 틀리면 청산선 전체가 틀어진다.

python — ATR 과 청산선
def atr(df, n=22):
    pc = df["close"].shift(1)
    tr = pd.concat([df["high"]-df["low"],
                    (df["high"]-pc).abs(),
                    (df["low"] -pc).abs()], axis=1).max(axis=1)
    return tr.ewm(alpha=1/n, adjust=False).mean()   # 와일더 평활
ce_long = df["high"].rolling(22).max() - atr(df,22) * 3.0
ce_long = ce_long.cummax()          # 내려가지 않도록 잠금
# 함정 1: ATR 을 rolling().mean() 으로 구하면 원본과 다르다 — 와일더 평활이 맞다
# 함정 2: cummax() 는 포지션 단위로 리셋해야 한다
#         전체 시계열에 한 번 걸면 예전 포지션의 청산선이 계속 따라온다
# 함정 3: 최고가 창(22)과 ATR 창(22)을 꼭 같게 둘 이유는 없다 — 분리 가능한 축이다

함정 2가 실제로 잘 나는 버그다. 백테스트 코드를 벡터 연산으로 짜다 보면 포지션 경계를 잊기 쉽다. 그러면 지난달에 세워둔 청산선이 이번 달 포지션에 그대로 적용돼서, 현실에는 없는 방어선이 백테스트를 지켜준다. 결과가 실전보다 좋게 나오는 전형적인 경로다.

함정 3은 튜닝 여지다. 최고가를 재는 창과 변동성을 재는 창을 분리하면 축이 하나 늘어난다. 축이 늘면 과적합 위험도 늘지만, 두 창이 서로 다른 역할을 한다는 점에서 분리할 이유는 있다.

내 봇의 본전 사수와 비교하면

내 봇에도 트레일링 성격의 장치가 있다. 본전 사수라고 부르는 것인데, 구조가 샹들리에와 다르다.

두 방식의 구조 비교
샹들리에 엑시트
  기준점: 최고가
  폭: ATR × 배수 (변동성에 따라 자동 조정)
  성격: 연속적 — 고점이 오르면 계속 따라 오른다
내 봇의 본전 사수 (SAFE)
  기준점: 진입가
  구조: 무장선 +0.8% 도달 → 바닥 +0.4% 로 잠금
  성격: 이단 — 한 번 무장되면 그 자리에 고정, 계속 따라가지 않는다
왜 이단 구조가 됐나 — 실측이 시켰다
  본전 청산 27건 실측: 바닥을 +0.2% 에 뒀는데 평균 실현 +0.017%
  원인은 슬리피지가 아니라 호가 관통
    443원짜리 코인에서 호가 한 칸이 0.226% — 바닥선이 호가 사이 허공에 떴다
  관통 0.183%p + 왕복 수수료 0.10% = 손익분기 0.283%  →  바닥 0.4%
  무장선도 함께 0.8% 로 올림 (간격이 좁으면 무장 즉시 청산돼 승자를 못 키운다)
  60건 재현: 본전 손익 −33,203원 → +44,906원

이 비교에서 배울 게 있다. 샹들리에는 가격 공간이 연속적이라고 가정한다. 최고가에서 3×ATR 내려간 자리에 청산선을 두면 그 가격에 팔린다는 전제다. 그런데 실제 시장은 호가 단위로 끊겨 있다. 저가 코인에서는 그 간격이 0.2%를 넘기도 한다.

퍼센트로 설계한 규칙이 호가라는 이산적인 세계와 충돌하는 지점이다. 이걸 겪고 나서 나는 아예 호가 한 칸이 가격의 0.15%를 넘는 종목은 진입을 금지하는 게이트를 만들었다. 겪고 보정하는 대신 안 겪는 쪽으로 구조를 바꾼 것이다.

이익을 지키는 다른 방법 — 내 봇이 고른 길

트레일링이 안 맞는다면 이익은 어떻게 지키나. 내 봇이 도달한 답은 개별 종목이 아니라 계좌 단위로 수확하는 것이었다.

포트폴리오 익절이라는 축
발상 전환
   개별 종목 익절 → 계좌 합산 평가손익이 목표에 닿으면 전량 청산
왜 이 축으로 갔나 — 눌림목 진입 18건 실측
   최대 평가이익 중앙값 +3.09%
   +3% 이상 도달 9/18 · +8% 이상 6/18 · +13% 이상 5/18
   그 5건 중 2건은 −2% 를 먼저 맞고 죽었다 → 실효 3건
   어떤 익절 수준을 골라도 결과 중앙값이 −2.100% 로 고정
   즉 개별 익절 지점 선택이 결과를 못 바꾼다
   손절 11건(61%) 이 전부였다
그래서 축을 바꿨다
   현행: 계좌 합산 예상실현 2만원 도달 → 전량 수확, 스테이 30분
   '예상실현' — 수수료·슬리피지를 뺀 뒤에도 2만원이 남는 시점

마지막 줄의 ‘예상실현’이 중요한 디테일이다. 처음엔 평가손익 기준으로 만들었는데, 평가 3만원에 팔면 실현은 3만원이 안 된다. 당연한 산수인데 임계값을 정할 때는 다들 평가 기준으로 생각한다.

목표는 언제나 비용 후 기준으로 정의해야 한다. 이 원칙으로 시스템의 모든 임계값을 다시 감사해보면, 생각보다 많은 곳에서 비용이 무시되고 있다. 손익분기라고 믿었던 지점이 실제로는 적자인 채로.

스테이 시간도 실측으로 정했다. 60분에서 30분으로 줄인 근거는 재현 결과였다 — 30분 8회 +209,203원, 60분 6회 +159,530원. 긴 대기는 회당 크기를 못 키우고 사이클 수만 깎았다. 이익 구간 체류시간 중앙값이 0분이라는 관찰과도 일치한다.

이 설계가 샹들리에보다 우월하다는 뜻은 아니다. 이 전략의 이익 분포에 맞는 설계라는 뜻이다. 분포가 다르면 답도 달라진다.

그래도 도입한다면

샹들리에 엑시트를 내 봇에 넣는다면 어디일까. 지금 전략에는 잘 안 맞지만, 조건이 바뀌면 얘기가 달라진다.

도입 조건과 검증 설계
현행 전략에는 부적합
  이익 구간 체류 중앙값 0분 · 계좌 합산 수확 · 슬롯 회전 빠름
  → 트레일링이 작동할 시간 자체가 없다
맞는 조건
  ① 보유 기간이 길어질 때 (스윙 전략으로 전환한다면)
  ② 큰 추세를 노리는 별도 슬롯을 둘 때
  ③ 유동성 좋은 대형 종목만 다룰 때 (호가 관통 문제가 작아짐)
검증 설계
  축: 기간 n {14, 22, 30} × 배수 {1.5, 2.0, 3.0} × 잠금 유무
  대조군: 현행 고정 손절 −5% + 본전 사수 이단 구조
  목적함수: 평균수익 · 승률 · 손절권 진입률 — 셋 동시 개선일 때만 채택
  예상: 현행이 이길 가능성이 높다. 체류 시간 분포가 트레일링에 불리하다
  그래도 돌려볼 가치는 있다 — 지면 '이 전략에 트레일링은 안 맞는다' 가
  느낌이 아니라 측정으로 확정되기 때문이다

마지막 줄이 이 실험의 진짜 목적이다. 나는 이미 트레일링을 한 번 붙였다 뗐다. 포지션을 절반으로 나눠 한쪽은 규칙대로 확정하고 다른 쪽은 큰 상승을 기다리게 하는 설계였는데, 하루 만에 철회했다. 이 전략의 이익 분포에서 러너가 기다릴 큰 꼬리가 통계적으로 드물었기 때문이다.

그때는 판단으로 접었다. 샹들리에 방식으로 다시 재보면, 같은 결론을 숫자로 확정하거나 아니면 내가 틀렸다는 걸 알게 된다. 어느 쪽이든 남는 장사다.

트레일링이 정말 필요한가라는 질문

마지막으로 한 걸음 물러나서 생각해볼 게 있다. 트레일링 스톱이 항상 좋은 것인가.

트레일링이 유리한 조건 · 불리한 조건
유리한 조건
  · 이익 분포에 긴 꼬리가 있다 (크게 가는 건이 실제로 존재)
  · 보유 기간이 길다 (따라 올릴 시간이 있다)
  · 호가가 촘촘하다 (설계한 가격에 실제로 팔린다)
불리한 조건
  · 이익이 짧게 왔다 사라진다 (체류 시간 중앙값이 0에 가깝다)
  · 회전이 빠르다 (트레일이 무장되기 전에 청산 사이클이 끝난다)
  · 저가·저유동성 종목을 다룬다 (호가 관통으로 설계가 무너진다)
내 봇은 오른쪽에 가깝다 — 그래서 트레일링 대신 다른 답을 골랐다
  개별 트레일링 ✗  →  계좌 합산 목표 금액 도달 시 전량 수확
  긴 대기 ✗       →  스테이 30분 (60분 대비 실측 우위 확인)
이건 트레일링이 나쁜 방법이라는 뜻이 아니라, 이 전략의 이익 분포와 안 맞는다는 뜻이다

트레일링 스톱은 트레이딩 교육에서 거의 무조건 좋은 것처럼 가르쳐진다. 이익을 지키면서 상승 여지를 남긴다는 서사가 매력적이기 때문이다. 그런데 그 서사가 성립하려면 상승 여지가 실제로 존재해야 한다. 이익이 오자마자 사라지는 분포에서는 지킬 이익도 남길 여지도 없다.

그래서 트레일링을 붙일지 말지는 기법의 우열이 아니라 분포의 문제다. 내 이익 분포를 먼저 그려보고, 꼬리가 있으면 붙이고 없으면 안 붙이는 것. 순서가 이렇게 되어야 한다.

배수를 정하는 다른 방법

배수를 3으로 할지 2로 할지 스윕으로 정하는 게 정석이지만, 표본이 부족할 때 쓸 수 있는 방법이 하나 더 있다. 되돌림 분포에서 역산하는 것이다.

과거 데이터에서 상승 구간마다 “고점 찍고 얼마나 되돌렸다가 다시 갔는지"를 모은다. 그 되돌림 폭을 ATR로 나눠 분포를 만들면, 예컨대 중앙값이 1.2×ATR이고 상위 80퍼센타일이 2.5×ATR이라는 식의 값이 나온다. 그러면 배수를 2.5 근처로 두면 정상적인 되돌림의 80%는 견디고 나머지에서만 털린다는 계산이 선다.

이 방법의 장점은 손익 결과가 아니라 가격의 구조에서 값을 뽑는다는 것이다. 손익 기반 스윕은 표본이 적으면 쉽게 과적합되는데, 되돌림 분포는 매매를 안 해도 캔들만 있으면 만들 수 있어서 표본이 훨씬 많다.

물론 이렇게 정한 값도 결국 실제 매매로 검증해야 한다. 다만 스윕의 출발점을 어림짐작이 아니라 분포에서 가져온다는 것만으로도 탐색 범위가 크게 줄어든다.

트레일링을 붙였다 뗀 실제 기록

이 얘기를 좀 더 구체적으로 적어두는 게 이 글에 도움이 될 것 같다. 나는 트레일링 성격의 설계를 실제로 넣었다가 하루 만에 뺐다.

포지션 이분할 — 하루짜리 실험
설계 의도
   포지션을 core / runner 로 이분할
   core   → 규칙대로 확정 (짧게)
   runner → 큰 상승을 기다린다 (트레일링)
   '확정이냐 꼬리냐' 의 긴장을 절반씩 갖는 절충안
함께 한 일
   매수 체결액 기준으로 레그를 재분할 (전 경로 무결성 감사)
   청산선 표시가 core 만 설명하던 문제도 같이 고침
다음 날 철회
   이 전략의 이익 분포에서 러너가 기다릴 큰 꼬리가 통계적으로 드물었다
   기다림의 비용(변동 노출)이 기대 이익을 넘었다
   트레일을 TP 직전으로 당기고 손실 최소화 우선으로 정리
실험 비용: 이틀 · 얻은 것: '이 전략에 러너는 없다' 는 확인

이 실험을 실패라고 부르지 않는 이유가 있다. 붙였다 떼는 데 이틀이 걸렸다는 건 되돌리기 쉬운 구조를 갖고 있었다는 뜻이다.

모듈이 분리돼 있고, 청산 로직이 한 곳에 모여 있고, git으로 이력이 남고, 기능이 스위치로 관리되기 때문에 가능했다. 단일 파일 시절이었다면 같은 실험에 훨씬 오래 걸렸을 것이고, 그러면 애초에 시도도 안 했을 것이다.

되돌리기 쉬운 구조는 과감한 실험을 싸게 만든다. 실험 비용이 싸지면 아이디어를 아낄 필요가 없어진다. 아키텍처의 품질은 결국 실험의 가격으로 측정된다고 생각한다.

샹들리에 엑시트를 지금 붙여본다면 아마 비슷한 결과가 나올 것이다. 그래도 재볼 가치가 있다고 앞에서 적은 이유는, 그때는 판단으로 접었지만 이번엔 숫자로 확정할 수 있기 때문이다. 판단과 측정은 결론이 같아도 무게가 다르다.

숏 방향은 왜 안 다루나

공식에 숏 청산선도 있는데 이 글은 롱만 다뤘다. 이유는 단순하다. 업비트 현물만 거래하니 숏 포지션 자체가 없다.

그런데 이 제약이 전략 설계에 생각보다 큰 영향을 준다.

현물만 다룰 때의 구조적 제약
할 수 있는 선택
   산다 · 안 산다 · 판다
할 수 없는 선택
   하락에 베팅한다
여기서 나오는 결론
   하락장에서 할 수 있는 최선은 '아무것도 안 하기' 다
   그래서 레짐 차단이 그토록 중요해진다
   BTC 4시간봉 하락장이면 신규 진입 자체를 안 하는 규칙
양방향 거래가 가능했다면 같은 상황에서 다른 답이 나왔을 것이다
   하락장 = 숏 기회 → 차단이 아니라 방향 전환
즉 '안 사는 것도 포지션이다' 라는 말은 현물 계좌의 논리다

이 제약을 인정하고 나면 전략의 설계 공간이 좁아지는데, 나쁘기만 한 건 아니다. 선택지가 적으면 결정이 단순해지고, 단순한 시스템은 검증하기 쉽다.

7주 연속 마이너스를 겪고 나서 내린 결론이 “하락장에는 안 산다"였는데, 이건 사실 굉장히 소극적인 대응이다. 양방향이 가능했다면 그 구간을 기회로 바꿀 수도 있었을 것이다. 다만 그러려면 숏의 리스크 관리를 새로 설계해야 하고, 그건 지금 봇을 통째로 다시 만드는 수준의 일이다.

지금은 할 수 있는 범위에서 최선을 찾는 쪽을 택했다. 확장은 지금 것이 안정된 다음의 문제다.

청산 규칙이 여럿일 때의 관리

방어선이 여섯 겹이라는 얘기를 했는데, 겹칠수록 생기는 문제가 있다. 어느 규칙이 실제로 발동했는지 추적해야 한다는 것이다.

청산 사유를 기록해야 하는 이유
기록 안 하면 생기는 일
   손익만 남고 '왜 팔았는지' 가 안 남는다
   손절을 −5% 로 넓혔는데 성과가 나빠졌을 때
   그게 손절 탓인지 본전 사수 탓인지 구분이 안 된다
기록하면
   청산 사유별 손익 집계가 가능해진다
   "본전 사수로 나간 27건의 합계가 마이너스" 같은 발견이 여기서 나온다
실제로 그 27건 실측이 호가 관통 문제를 찾아낸 출발점이었다
필요한 필드
   청산 사유 · 진입가 · 청산가 · 보유 시간 · 그때의 지표값
   그리고 진입 시점의 시장 레짐

본전 사수 27건 이야기가 좋은 예다. 전체 손익만 봤다면 그 장치가 적자를 내고 있다는 걸 몰랐을 것이다. 청산 사유별로 갈라 보니 “이익을 지키라고 만든 장치가 손실을 내고 있다"는 게 드러났고, 거기서 호가 관통이라는 원인까지 갔다.

만약 샹들리에 엑시트를 추가한다면 청산 경로가 하나 더 늘어난다. 그러면 사유 코드도 하나 늘고, 집계 항목도 늘고, 서로 간섭하는 경우의 수도 는다. 이게 앞에서 “들어갈 자리가 없다"고 한 이유의 실무적 측면이다.

새 장치를 넣는 비용은 그 장치의 구현 난이도가 아니라, 그 장치가 기존 체계와 만드는 상호작용의 수로 계산해야 한다.

마무리

샹들리에 엑시트에서 가져갈 것은 공식이 아니라 관점의 전환이다. 손절선의 기준점을 진입가에서 최고가로 옮긴다는 발상 하나.

진입가는 내가 산 자리일 뿐, 시장에는 아무 의미가 없는 숫자다. 시장이 아는 건 고점과 저점이다. 그런데도 대부분의 사람이 손절을 진입가 기준으로 잡는 건, 그게 자기 손익을 계산하기 편해서다. 계산의 편의가 방어선의 위치를 정하고 있는 셈이다.

내 봇의 본전 사수도 여전히 진입가 기준이다. 실측으로 값을 정하긴 했지만 기준점 자체는 관성으로 남아 있다. 이 글을 쓰면서 그걸 알아챘고, 그게 오늘의 수확이다.

덧붙임 — 방어 장치의 계보

이 봇의 청산·방어 장치가 어떤 순서로 쌓였는지 정리해두면, 왜 지금 트레일링이 안 맞는지가 더 분명해진다.

방어선이 쌓여온 순서
개별 손절        가장 먼저. 한 번 제거했다가 복원한 이력 있음
   58거래 실측으로 −2.5% 채택 → 이후 다층 방어 완성 후 −5% 로 확장
본전 사수        이익이 손실로 뒤집히는 것을 막는다
   +1.5% → +0.5% → 무장 +0.8% / 바닥 +0.4% (호가 관통 실측 반영)
일일 손실 한도    하루에 얼마까지 잃으면 멈추나
주간 손실 한도    한 주 단위의 상한
자산 서킷브레이커  총자산이 특정 선 아래로 내려가면 정지
레짐 차단        BTC 4시간봉 하락장이면 신규 진입 자체를 안 함
여섯 겹. 각각 못 막는 상황이 다르다
손절폭을 −5% 까지 넓힐 수 있었던 건 나머지 다섯 겹이 있어서다
홑겹일 때의 −2% 와 여섯 겹일 때의 −5% 는 같은 말의 다른 문장이다

마지막 줄이 이 글 전체와 연결된다. 손절폭이든 트레일링이든, 하나만 떼어놓고 “이 값이 적당한가"를 논하는 건 공허하다. 방어 체계 전체의 함수로 봐야 한다.

샹들리에 엑시트가 이 목록에 들어온다면 어느 자리일까. 본전 사수와 개별 손절 사이 어딘가일 것이다. 그런데 그 자리는 이미 두 장치가 나눠 맡고 있고, 셋이 겹치면 서로 간섭한다. 청산 경로가 늘어나면 손익이 어느 경로로 확정됐는지 귀속시키기도 어려워진다.

그래서 결론은 같다. 좋은 지표라도 들어갈 자리가 없으면 안 넣는 게 맞다. 자리를 만들려면 기존 장치 하나를 빼야 하는데, 그건 별개의 실험이 필요한 일이다.