이번 편은 시세를 받아 성과를 검증한 글이 아니라 규칙 자체를 해부한 글이다. 승률을 적지 않은 이유도 그래서다. C1에서 비트코인과 바입다운 전략을 같은 방식으로 다뤘는데, 이번엔 이더리움을 무대로 볼린저 밴드 전략을 뜯는다. 트레이딩뷰 내장 전략 목록에 있는 “Bollinger Bands Strategy"는 지표가 아니라 완결된 매매 규칙이다. 진입 조건과 청산 조건이 이미 정의돼 있고, 파라미터도 기본값이 박혀 있다. 그래서 이 회차는 계산식을 뜯는 것으로 안 끝난다. 조건문 자체를 옮겨 적고, 그 조건문이 실제로 뭘 하는 규칙인지, 그리고 스팟 거래소라는 조건 위에서 그 조건문이 온전히 실행 가능한지를 따진다.

이더리움을 무대로 고른 이유는 단순하다. 비트코인처럼 “디지털 금” 서사로 추세가 오래 붙는 자산도 아니고, 밈코인처럼 뉴스 한 방에 방향이 뒤집히는 자산도 아니다. 스마트 컨트랙트 플랫폼이라 온체인 지표(가스비, 스테이킹 물량, 레이어2 이전 추세 같은 것들)가 따로 있고 그게 캔들만 봐서는 안 보인다. 그 성격이 평균회귀형 규칙과 어떻게 부딪히는지가 이 글의 관심사다. 가격을 보지 않으니 이더리움의 실제 최근 움직임은 여기서 다루지 않는다. 이 글은 투자 권유가 아니다.

규칙을 조건문으로 옮기기

볼린저 밴드는 세 선으로 이뤄진다. 중심선(basis)은 20일 단순이동평균(SMA)이고, 상단·하단 밴드는 여기에 표준편차의 두 배를 더하고 뺀 값이다.

basis = SMA(종가, 20)
표준편차 = STDEV(종가, 20)
상단 = basis + 2 × 표준편차
하단 = basis − 2 × 표준편차

볼린저 밴드의 세 선 — 실제 시세가 아니라 규칙을 설명하기 위한 모식도

트레이딩뷰 내장 전략의 규칙은 이렇다.

if 종가가 상단을 상향 돌파:
    포지션이 숏이면 청산
    롱 진입
if 종가가 하단을 하향 돌파:
    포지션이 롱이면 청산
    숏 진입

여기서 눈여겨볼 게 하나 있다. 원본 트레이딩뷰 전략은 밴드 돌파만으로 진입·반전을 하고, 베이시스는 진입 판단에 안 쓴다. 그런데 실전에서 이 규칙을 그대로 쓰면 상단을 뚫은 롱이 하단을 뚫을 때까지 계속 물려 있는다는 뜻이 된다. 그래서 이 전략을 다루는 변형 대부분은 베이시스 하회·상회를 별도 청산 조건으로 끼워 넣는다. 이 글에서도 그 변형을 기준으로 삼는다.

if 롱 포지션 중 종가가 basis를 하향 돌파: 롱 청산
if 숏 포지션 중 종가가 basis를 상향 돌파: 숏 청산

진입·청산 조건의 흐름 — 실제 시세가 아니라 규칙을 설명하기 위한 모식도

이 규칙에서 청산은 별도의 손절·목표가가 아니라 평균으로 되돌아왔다는 사실 그 자체다. 익절 폭도 손절 폭도 미리 정해져 있지 않다. 가격이 상단을 뚫고 계속 올라가면 롱은 계속 들고 가고, 반대로 뚫자마자 되돌리면 아주 짧게 먹거나 잃는다. 청산 기준이 가격 수준이 아니라 “평균과의 관계"이기 때문에 손익비가 매 트레이드마다 달라진다. 이건 결함이 아니라 이 규칙이 원래 그렇게 설계됐다는 뜻이다. 다만 봇에 넣는다면 손절을 별도로 씌울지부터 정해야 한다는 뜻이기도 하다.

파라미터는 왜 20과 2인가

기본값 20일·2표준편차는 이 시장, 이 코인에 맞춰 최적화한 값이 아니라 통계적 관행이다. 가격 변화가 정규분포를 따른다고 가정하면 평균에서 ±2표준편차 안에 전체 관측치의 약 95%가 들어온다. 그러니까 상단·하단 밴드 밖으로 나가는 건 정의상 “흔치 않은 일"이 되고, 그 흔치 않은 일이 추세의 시작이라고 보는 게 이 전략의 전제다. 20일은 한 달 남짓의 거래일 수로, 볼린저 밴드를 처음 소개한 존 볼린저 본인이 제안한 기본값이다.

파라미터가 두 개(기간, 표준편차 배수)나 있다는 점은 짚어야 한다. 파라미터가 없는 규칙이라면 과최적화 걱정 자체가 성립하지 않겠지만, 이 규칙은 그렇지 않다. 다만 이 20·2가 이더리움 데이터로 역산해서 짜맞춘 값이 아니라 자산·기간에 무관하게 쓰이는 표준값이라는 점에서, 특정 구간에 과최적화된 파라미터보다는 신뢰도가 조금 낫다. “덜 위험하다"는 것이지 “안전하다"는 뜻은 아니다. 아래 그림에서 배수를 1·2·3으로 바꿔봤는데, 배수가 작을수록 밴드가 좁아져 돌파가 잦아지고, 배수가 클수록 밴드가 넓어져 돌파 자체가 드물어진다. 어떤 배수가 “맞는” 값인지는 시세 없이는 답할 수 없다. 여기서 확인할 수 있는 건 배수가 신호 빈도를 얼마나 크게 흔드는지, 그 민감도뿐이다.

표준편차 배수에 따른 밴드 폭 변화 — 실제 시세가 아니라 규칙을 설명하기 위한 모식도

이 규칙이 못 보는 것

베이시스는 20일 평균이라 후행이다. 변동성이 갑자기 커져도 밴드 폭은 그걸 며칠에 걸쳐서야 반영한다. 아래 그림 오른쪽처럼 밴드 폭이 좁아진 구간(스퀴즈)에서는 짧은 튐만으로도 밴드를 순간 돌파했다가 바로 안으로 되돌아오는 경우가 잦다. 규칙상 이건 분명히 “신호"지만, 되돌림이 워낙 빨라 청산 조건(베이시스 하회·상회)이 사실상 바로 뒤따라와 버린다. 진입과 청산이 몇 봉 사이에 붙어버리는 셈이다. 반대로 왼쪽처럼 추세가 붙으면 가격이 상단 밴드를 타고 계속 이어지고, 그 사이엔 청산 신호가 거의 안 나온다. 같은 규칙이 시장 상태에 따라 완전히 다르게 작동한다는 뜻이고, 이 전략 자체에는 지금이 스퀴즈 국면인지 추세 국면인지 구분하는 장치가 없다.

신호가 이어지는 자리와 무효화되는 자리 — 실제 시세가 아니라 규칙을 설명하기 위한 모식도

또 하나, 이 규칙은 가격이 왜 움직였는지 전혀 모른다. 통계적 이탈이 추세의 시작인지, 대형 지갑의 일시적 매도인지, 청산 캐스케이드인지 밴드는 구분하지 못한다. 이더리움처럼 온체인에서 대량 언스테이킹이나 레이어2 정산 물량이 가끔 튀는 자산에서는, 통계적으로는 “이례적"으로 보이는 움직임이 실은 알려진 이벤트의 결과인 경우가 있다. 이 규칙은 그런 맥락을 읽지 못하고 오직 최근 20일 분포에서 얼마나 벗어났는지만 본다.

코인 시장의 함정 — 스팟엔 숏이 없다

이 규칙이 코인 시장에서 특히 걸리는 지점이 있다. 원본 전략은 상단 돌파를 롱, 하단 돌파를 숏으로 쓰는 양방향 규칙이다. 그런데 스팟(현물) 거래소에는 공매도가 없다. 이미 들고 있는 코인을 파는 건 되지만, 갖고 있지 않은 코인을 빌려서 파는 건 별도의 마진·선물 계좌가 있어야 가능하다. 내 봇은 스팟만 쓰는데, 그렇다면 이 전략이 내는 신호의 절반—하단 돌파에 대한 숏 진입—은 애초에 실행할 방법이 없다. 실행하려면 선물 계좌를 새로 열거나, 하단 돌파 신호를 “숏 진입"이 아니라 “롱 청산 확인” 정도로 격하해서 써야 한다. 이건 사소한 구현 디테일이 아니라 전략의 절반을 통째로 못 쓴다는 뜻이라 처음부터 규칙을 반쪽으로 재정의하고 시작해야 한다.

덧붙이자면 코인 시장은 24시간 돌아가서 일봉의 경계 자체가 거래소 설정값이다. 업비트는 KST 자정을, 해외 거래소 다수는 UTC 자정을 기준으로 하루를 끊는데 그 사이에 아홉 시간 차이가 있다. 같은 날 같은 코인이라도 어느 거래소의 일봉을 쓰느냐에 따라 20일 SMA와 표준편차 계산에 들어가는 종가 자체가 달라질 수 있다. 이 글은 시세를 안 쓰니 그 차이를 실측하진 않지만, 실전에 옮긴다면 봇이 어느 거래소의 일봉 마감 기준을 쓰는지부터 고정해야 한다는 뜻이다.

내 봇에 넣을 것인가

넣는다면 반쪽만 넣을 것 같다. 상단 돌파를 롱 진입, 베이시스 하회를 청산으로 쓰는 롱 온리 버전으로 줄이고, 숏 쪽은 아예 빼는 거다. 다만 그렇게 줄여도 스퀴즈 구간의 잦은 되돌림 문제는 그대로 남는다. 이걸 다루려면 밴드 폭 자체를 필터로 얹어야 한다—밴드 폭이 최근 몇 주 대비 충분히 벌어져 있을 때만 돌파 신호를 받아들이는 식으로. 그 필터가 없는 순수 버전은 지금 게이트에 넣지 않기로 했다. 이유는 남겨둔다. 언제든 밴드 폭 필터를 붙여 다시 판단할 수 있게.

C1에서 다룬 바입다운 전략과 비교해보면 성격이 정반대다. 바입다운은 두 줄짜리 조건만으로 끝나는, 파라미터가 거의 없는 규칙이었다. 이번 볼린저 밴드 전략은 파라미터가 두 개고, 청산 기준마저 통계적 정의(평균 회귀)에 기대는 규칙이라 손절선이 따로 없다. 봇 게이트에 여러 규칙을 나란히 놓고 보면, 파라미터 수와 청산 방식이 서로 다른 규칙을 섞어 쓸 때 포지션 관리 로직을 규칙별로 따로 짜야 한다는 게 이번에 새로 걸린 지점이다. 바입다운처럼 진입만 정의된 규칙은 청산을 내가 직접 설계해야 했는데, 볼린저 밴드 전략은 청산까지 정의돼 있는 대신 그 청산이 손익비를 예측 불가능하게 만든다. 어느 쪽이 낫다기보다, 게이트에 두 규칙을 동시에 쓴다면 포지션 사이징 로직을 규칙 종류별로 분기해야 한다는 걸 확인한 셈이다.

남는 생각

이 규칙에서 가장 눈에 띄는 건 청산이 손절·익절이 아니라 “평균으로 돌아왔다"는 사실 그 자체로 정의돼 있다는 점이다. 편한 만큼 손익비를 예측할 수 없다는 대가가 따른다. 존 볼린저는 밴드를 두고 “밴드 자체는 매매 시스템이 아니라 상대적 고점·저점을 판단하는 도구"라고 말한 적이 있다. 트레이딩뷰가 여기에 진입·청산 조건을 씌워 완결된 전략으로 만든 셈인데, 그 완결판이 스팟 코인 시장에서는 반쪽만 쓸 수 있다는 걸 이번에 확인했다. 이 글은 투자 권유가 아니며, 실린 수치는 전부 규칙의 정의값이거나 모식도용 가상의 값이다.

약어 풀이

  • BB (Bollinger Bands) — 볼린저 밴드. 중심선과 그 위아래 표준편차 밴드로 이뤄진 통계적 채널.
  • SMA (Simple Moving Average) — 단순이동평균. 정해진 기간의 종가를 같은 가중치로 평균한 값.
  • ETH (Ether) — 이더리움 네트워크의 기본 자산 티커.
  • KST (Korea Standard Time) — 한국 표준시, UTC+9.
  • UTC (Coordinated Universal Time) — 협정 세계시. 다수 해외 거래소의 일봉 마감 기준.