이번 편은 시세를 받아 성과를 검증한 글이 아니라 규칙 자체를 해부한 글이다. 승률을 적지 않은 이유도 그래서다. C1에서 비트코인과 바입다운을, C2에서 이더리움과 볼린저 밴드 전략을 다뤘는데, 이번엔 이름이 비슷해서 헷갈리기 쉬운 이웃 전략을 다룬다. 트레이딩뷰 내장 전략 목록에는 “Bollinger Bands Strategy"와 “Bollinger Bands Strategy Directed"가 따로 있다. C2에서 다룬 건 앞의 것이었고, 이번엔 뒤의 것이다. 이름만 비슷할 뿐 진입 논리가 전혀 다르다. C2는 밴드 돌파를 추세추종으로 썼는데, 이번 것은 정반대로 평균회귀를 정지주문으로 실행한다. 게다가 진입 방향을 통째로 고를 수 있는 스위치가 내장돼 있다. 그 스위치가 스팟 코인 거래소의 오래된 문제 하나를 어떻게 접는지가 이번 글의 중심이다.
무대는 BNB로 잡았다. BNB는 바이낸스 거래소가 발행한 자산이라 성격이 비트코인이나 이더리움과 다르다. 거래소 토큰은 거래소의 실적과 물량 정책이 가격 논리에 섞여 들어온다. 바이낸스는 분기마다 거래소 수익 일부를 태워 유통량을 줄이는 소각 프로그램을 운영해왔다. 이 프로그램이 정확히 몇 개를 언제 태우는지는 시기마다 달라지니 이 글에서 숫자로 다루지 않는다. 다만 이런 정책이 존재한다는 사실 자체가 통계적 규칙과 충돌하는 지점이 있다. 볼린저 밴드는 최근 20일 종가의 분포만 보는데, 소각처럼 예정된 이벤트가 그 분포 자체를 일시적으로 왜곡할 수 있다. 규칙은 그 이벤트를 모르고, 그냥 통계적으로 이례적인 움직임인지만 본다. 가격을 보지 않으니 실제로 그런 왜곡이 있었는지는 여기서 확인하지 않는다. 이 글은 투자 권유가 아니다.
규칙을 조건문으로 옮기기
볼린저 밴드의 세 선은 C2에서 다룬 것과 정의가 같다. 중심선(basis)은 20일 단순이동평균(SMA)이고, 상단·하단은 여기에 표준편차의 두 배를 더하고 뺀 값이다.
basis = SMA(종가, 20)
표준편차 = STDEV(종가, 20)
상단 = basis + 2 × 표준편차
하단 = basis − 2 × 표준편차
아래부터 나오는 봉·선 그림은 전부 실제 시세가 아니라 규칙을 설명하기 위해 손으로 만든 모식도다. 축 눈금도 실제 가격이 아닌 상대값이다.

계산식은 같은데 진입 논리가 다르다. Directed 버전은 시장가가 아니라 **정지주문(stop order)**을 밴드 위치에 미리 걸어 둔다.
롱 진입: 하단 값에 매수 정지주문을 건다 (BBandLE)
숏 진입: 상단 값에 매도 정지주문을 건다 (BBandSE)
정지주문은 지정가와 반대로 움직인다. 매수 정지주문을 하단 아래에 걸어두면, 가격이 떨어져 하단을 뚫고 내려갔다가 다시 그 값을 상향 통과할 때 체결된다. 즉 하단을 뚫고 내려간 뒤 반등해서 원래 하단 자리로 되돌아오는 순간을 사는 것이다. 숏도 대칭이다. 상단을 뚫고 올라갔다가 다시 그 값 아래로 꺾이는 순간에 판다. 매수 정지주문 자리가 원본 이름에서 BBandLE(Bollinger Band Long Entry), 매도 정지주문 자리가 BBandSE(Bollinger Band Short Entry)다.

이 규칙에는 별도의 청산 조건이 없다. 대신 두 주문이 OCA(One-Cancels-All) 묶음으로 걸려 있어서, 한쪽이 체결되면 반대쪽 대기 주문이 취소된다. 그리고 포지션을 들고 있는 동안에도 반대쪽 밴드에 새 정지주문이 계속 갱신된다. 롱을 들고 있는데 가격이 올라가 상단을 뚫었다가 다시 꺾이면, 그 자리의 매도 주문이 롱을 청산하는 동시에 새 숏을 연다. 청산이 별도로 존재하는 게 아니라 반대 방향 진입이 곧 청산이다. C1의 바입다운은 청산 규칙 자체가 없어서 반대 신호가 날 때까지 무한정 들고 가는 구조였는데, 이 규칙은 청산이 없는 게 아니라 청산과 진입이 한 몸이라는 점에서 다르다. 포지션이 있는 한 계속 시장 안에 있는 상시 반전형(stop-and-reverse) 구조다.
파라미터는 왜 20과 2인가, 그리고 왜 이번엔 그게 걸림돌인가
기본값 20일·2표준편차는 C2에서 다룬 것과 같은 통계적 관행이다. 가격 변화가 정규분포에 가깝다고 가정하면 평균에서 ±2표준편차 구간에 관측치의 약 95%가 들어온다. 그 바깥으로 나가는 움직임을 “통계적으로 드문 일"로 규정하고, 이 규칙은 그 드문 일이 일어난 뒤 평균으로 돌아오는 쪽에 건다. 20일은 존 볼린저 본인이 제안한 표준 길이다.
C1의 바입다운과 비교하면 이 지점에서 완전히 갈린다. 바입다운은 파라미터가 없어서 과최적화 자체가 성립하지 않는 규칙이었다. 이 규칙은 파라미터가 두 개(기간, 표준편차 배수)이고, 게다가 정지주문이 정확히 어느 가격에 걸리는지가 그 파라미터 값에 직접 좌우된다. 배수를 2에서 1.5로만 낮춰도 정지주문이 걸리는 자리가 안쪽으로 당겨져서 체결 빈도가 크게 늘어난다. 20·2가 특정 자산에 맞춰 역산한 값이 아니라 널리 쓰이는 표준값이라는 점에서 과최적화 위험이 조금은 낮지만, 파라미터가 있는 이상 그 위험 자체가 없어지지는 않는다.
Direction 스위치 — 스팟의 공매도 문제를 규칙 안에서 끈다
이 전략에는 다른 두 편에 없던 설정이 하나 있다. Strategy Direction이라는 입력값인데, 0이면 롱·숏 둘 다 허용하고 1이면 롱만, −1이면 숏만 허용한다. C2에서는 스팟 거래소에 공매도가 없다는 문제를 실행 단계에서 “숏 신호를 무시한다"는 식으로 사후에 걸러야 했다. 이 규칙은 그 필터가 아예 내장돼 있다. Direction을 1로 두면 숏 진입 주문 자체가 걸리지 않는다.

다만 스위치를 켜는 순간 규칙의 성격이 바뀐다는 점을 짚어야 한다. both 모드에서는 반대쪽 밴드를 건드릴 때마다 포지션이 반전하므로 봇이 항상 시장 안에 있다. long-only로 두면 상단을 건드리는 사건이 더 이상 새 숏을 여는 게 아니라 그냥 롱을 접는 신호로 격하된다. 그 뒤 하단을 다시 건드릴 때까지는 무포지션 구간이 생긴다. 상시 반전형이 부분적으로 상시 보유형에서 이탈하는 것이다. 아래 그림에서 위쪽(both)은 포지션이 끊기지 않고 색만 바뀌는데, 아래쪽(long-only)은 회색 구간, 즉 아무것도 들고 있지 않은 구간이 중간에 낀다.

이 차이가 실전에서 갖는 의미는 크다. both 모드는 자금이 늘 어느 한쪽 포지션에 묶여 있어서 새 기회에 대응할 여력이 없다. long-only는 그 대신 플랫 구간마다 자금이 비고, 그 구간에는 규칙이 아무것도 하지 않는다. 스팟 거래소 특성상 어차피 숏을 못 쓰니 이 봇에 얹는다면 long-only가 유일한 선택지인데, 그렇다면 원래 상시 반전형으로 설계된 규칙을 일부러 상시 보유형이 아닌 형태로 깎아 쓰는 셈이다. 원본 설계 의도와 실제로 실행 가능한 형태 사이에 이런 틈이 있다는 걸 스위치 하나 읽는 걸로 확인한 셈이다.
이 규칙이 못 보는 것
가장 먼저 짚을 건 방향성이다. 이 규칙은 평균회귀를 전제로 한다. 밴드 밖으로 나간 가격은 곧 안으로 돌아온다고 본다. 그런데 추세가 강하게 붙으면 가격이 밴드를 뚫은 채로 계속 밀린다. 그 경우 정지주문은 반등이 아니라 추세의 초입에서 체결돼, 롱을 잡자마자 물리는 모양이 나온다. C2에서 다룬 돌파형 전략의 약점이 스퀴즈 구간의 짧은 되돌림이었다면, 이 규칙의 약점은 정반대로 강한 추세 구간이다. 같은 밴드, 같은 파라미터를 쓰는 두 전략이 정확히 반대되는 시장 상태에서 망가진다는 점이 흥미롭다.
둘째, 이 규칙은 가격이 밴드를 왜 뚫었는지 모른다. 통계적 이탈이 일시적 매물 소화인지, 대형 매도인지, 위에서 짚은 소각 이벤트 같은 예정된 재료인지 구분하지 못한다. 그냥 최근 20일 분포에서 얼마나 벗어났는지만 잰다.
셋째는 코인 시장 특유의 함정이다. 코인은 24시간 거래되니 일봉의 경계 자체가 거래소 설정값이다. 업비트는 KST 자정을, 해외 거래소 다수는 UTC 자정을 하루의 경계로 쓰는데 그 사이에 아홉 시간 차이가 있다. SMA(20)과 STDEV(20)은 정의상 “최근 20개의 종가"를 쓰는데, 어느 거래소의 일봉을 기준으로 하루를 끊느냐에 따라 그 20개 표본에 들어가는 실제 값이 달라진다. 표본이 달라지면 basis와 표준편차가 달라지고, 정지주문이 걸리는 가격 자체가 달라진다. 주식은 장 마감 시각이 거래소 규칙으로 못박혀 있어 이런 문제가 없는데, 코인은 그 기준을 봇이 직접 정해야 한다. 실전에 옮긴다면 이 규칙을 쓰기 전에 어느 거래소, 어느 시간대 기준 일봉을 쓸지부터 고정해야 한다.
내 봇에 넣을 것인가
넣지 않기로 했다. 이유는 두 가지다.
하나는 위에서 짚은 대로, long-only로 깎으면 원본이 상시 반전형으로 설계한 규칙을 부분적으로 다른 성격의 규칙으로 바꿔 쓰는 셈이 된다는 점이다. 그 변형판의 행동(플랫 구간이 얼마나 자주, 얼마나 길게 생기는지)을 시세 없이는 가늠할 수 없다. 다른 하나는 평균회귀 전제 자체가 내 봇의 다른 게이트와 부딪힌다는 점이다. 내 봇은 눌림목 반등을 노리는 쪽에 가까운데, 이 규칙도 결과적으로 눌림에서 사는 모양이라 방향은 겹친다. 다만 진입 트리거가 이 규칙은 밴드 정지주문 하나뿐이고 내 봇은 여러 게이트를 겹쳐 거른다. 겹치는 신호를 또 하나의 독립 규칙으로 얹는 게 실제로 필터링 효과가 있을지, 아니면 그냥 같은 신호를 중복으로 세는 꼴이 될지 판단이 안 선다. 넣지 않기로 한 결론이지만 버린 이유는 남겨둔다. 나중에 시세를 붙여 실측할 때, 특히 both 모드와 long-only 모드의 체결 빈도 차이를 직접 재보고 다시 판단할 수 있게.
남는 생각
이 규칙에서 가장 눈에 띄는 건 청산이 별도로 없는 게 아니라 진입과 한 몸이라는 구조다. C1은 청산이 아예 정의되지 않았고, C2는 청산이 별도 조건(베이시스 복귀)으로 있었는데, 이번 건 청산이 반대 방향 진입 그 자체다. 세 규칙을 나란히 놓고 보니 “청산을 어떻게 정의하는가"만으로도 전략의 성격이 완전히 갈린다는 걸 다시 확인했다. 존 볼린저는 밴드를 두고 상대적 고점·저점을 판단하는 도구일 뿐 그 자체로 매매 시스템은 아니라고 말한 적이 있는데, 트레이딩뷰는 같은 밴드 위에 정반대 성격의 진입 논리를 두 벌이나 만들어 얹은 셈이다. 이 글은 투자 권유가 아니며, 실린 수치는 전부 규칙의 정의값이거나 모식도용 가상의 값이다.
약어 풀이
- BNB (원래 Binance Coin, 2022년부터 바이낸스가 “Build and Build"로 재해석) — 바이낸스 생태계에서 쓰이는 거래소 발행 자산.
- SMA (Simple Moving Average) — 단순이동평균. 정해진 기간의 종가를 같은 가중치로 평균한 값.
- STDEV (Standard Deviation) — 표준편차. 값들이 평균에서 얼마나 흩어져 있는지를 재는 통계량.
- OCA (One-Cancels-All) — 한 주문이 체결되면 같은 묶음의 나머지 대기 주문이 자동 취소되는 주문 방식.
- KST (Korea Standard Time) — 한국 표준시, UTC+9.
- UTC (Coordinated Universal Time) — 협정 세계시. 다수 해외 거래소의 일봉 마감 기준.