이름은 거창한데

샹들리에. 천장에 매달린 그 조명 맞다. 이름이 거기서 왔다는데 지표 이름치고는 멋을 좀 부렸다 싶다. 뜻 자체는 단순하다. 손절선을 천장에서 내려 매단다는 것.

보통 손절은 진입가에서 잡는다. 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 단독으로는 아무 판단도 못 한다. 항상 방향 정보와 짝을 지어야 하는 보조 축이다.

트레일링 세 가지를 나란히

고점을 따라 올리는 방법은 하나가 아니다. 셋을 붙여 놓으면 각자 무엇을 가정하는지가 드러난다.

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

마지막 줄이 이 코너에서 계속 나오는 얘기와 이어진다. 아룬 편에서 시간을 자로 삼는 지표의 특이함을 다뤘는데, SAR도 그 계열이다. 무엇을 자로 삼느냐가 지표의 성격을 정하고, 자가 다르면 못 보는 사각도 달라진다.

직접 짜다 보면 밟는 것들

이식하려면 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% 는 같은 말의 다른 문장이다

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

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

그래서 결론은 그대로다. 자리를 만들려면 기존 장치 하나를 빼야 한다. 어느 걸 뺄지는 아직 못 정했다. 이건 이것대로 따로 재봐야 하는 일이라, 일단 적어만 두고 덮는다.


약어 풀이

* 이 글에 나온 영어 약어를 풀어 둔다.

  • RSI (Relative Strength Index): 상대강도지수. 일정 기간 평균 상승폭과 평균 하락폭의 비율을 0~100 으로 나타내 과매수·과매도를 재는 모멘텀 오실레이터.
  • ATR (Average True Range): 평균진폭. 고가·저가·전일 종가를 아우르는 하루 실제 변동폭(True Range)의 이동평균. 변동성 지표.
  • SAR (Parabolic SAR (Stop And Reverse)): 파라볼릭 SAR. 가격을 따라 붙는 점이 추세가 꺾이면 반대편으로 뒤집히는 추세 추종·손절 지표.
  • BTC (Bitcoin): 비트코인. 이 블로그에서는 코인 시장 전체의 방향(레짐)을 재는 기준 자산.
  • TP (Take Profit): 익절. 목표 수익에서 포지션을 정리하는 것. TP1·TP2·TP3 는 분할 익절 단계.