서론: 창이라는 이름의 빈 공간

이번 편은 시세를 받아 성과를 검증한 글이 아니라 규칙 자체를 해부한 글이다. 승률을 적지 않은 이유도 그래서다. 가격도, 수익률도, 신호가 몇 번 났는지도 이 글에는 없다. 있는 것은 정의와 조건문, 그리고 내 봇에 넣을 때 걸리는 지점들이다.

오늘 볼 것은 캔들 패턴 하나다. 트레이딩뷰에 “Rising Window - Bullish” 라는 이름으로 올라와 있는 스크립트다. 한국어로는 상승 갭, 또는 상승 창이라고 부른다. 일본 캔들 용어로는 창(窓)이라고 하는데, 두 봉 사이에 가격이 한 번도 거래되지 않은 빈 구간이 창문처럼 뚫려 있다는 뜻이다.

배정된 코인은 BNB다. 시세는 보지 않는다. 대신 BNB의 성격만 놓고 사고 실험을 한다. 이 패턴이 24시간 열려 있는 코인 시장에서 과연 성립하는가, 성립한다면 어떤 모양으로 나오는가가 이번 편의 질문이다. 주식 책에서 배운 패턴을 그대로 가져오면 안 되는 대표적인 사례라서 골랐다.

본문의 그림은 전부 실제 시세가 아니라 규칙을 설명하기 위한 모식도다. 그림 안에도 모식도(schematic)라고 적어 두었고, 가격 눈금은 일부러 지웠다.

무엇을 재는가

라이징 윈도우는 한 줄로 말하면 이렇다. 이번 봉의 저가가 직전 봉의 고가보다 높다. 두 봉의 가격 범위가 조금도 겹치지 않고, 이번 봉이 통째로 위에 떠 있다.

조건문으로 옮기면 이렇게 된다.

rising_window = low[0] > high[1]

여기서 [0]은 방금 닫힌 봉, [1]은 그 직전 봉이다. 이게 전부다. 지표처럼 길이나 기간을 넣는 자리가 없다. 파라미터가 없는 규칙이라서 최적화할 값 자체가 없고, 그래서 과최적화에서 자유롭다. 이 점은 장점이다. 반면에 규칙이 이렇게 단순하면 걸러 주는 것도 없다는 뜻이다. 필터가 없는 규칙은 노이즈도 그대로 통과시킨다.

라이징 윈도우 규칙을 보여 주는 모식도

그림 1이 그 정의다. 노란 띠가 창이다. 위 경계는 이번 봉의 저가이고 아래 경계는 직전 봉의 고가다. 이 띠 안에서는 그 두 봉 동안 거래가 한 건도 없었다고 가정한다. 이 가정이 바로 뒤에서 문제가 된다.

패턴이 가정하는 심리는 단순하다. 직전 봉이 끝난 뒤 매수 압력이 너무 강해서, 다음 봉이 열리자마자 직전 봉의 최고점보다 위에서 거래가 시작됐고 한 번도 그 아래로 내려오지 않았다. 팔려는 사람이 직전 구간에 한 명도 남아 있지 않았다는 이야기다. 그래서 상승 지속 신호로 읽는다. 창은 지지선처럼 작동하고, 가격이 나중에 창 안으로 돌아와도 닫히지 않으면 추세가 살아 있다고 해석한다.

여기서 확실히 해 둘 것이 하나 있다. 이건 심리에 대한 해석이지 측정된 사실이 아니다. 나는 이 해석이 맞는지 이번 편에서 재지 않았다. 해석을 소개하는 것과 그 해석이 통한다고 말하는 것은 다른 문장이다.

어떻게 계산하는가

계산은 비교 연산 한 번이지만, 구현하면서 갈리는 지점이 세 군데 있다.

첫째, 몸통으로 비교할지 꼬리까지 포함할지다. 정의대로라면 고가와 저가, 즉 꼬리 끝까지 쓴다. 몸통(시가와 종가)만 비교하는 느슨한 버전도 있다. 이 버전은 신호가 훨씬 자주 나지만 꼬리가 겹쳐 있어서 진짜 창이 아니다. 그림 2의 세 번째 칸이 그 경우다.

신호가 나는 경우와 나지 않는 경우를 나란히 놓은 모식도

그림 2의 왼쪽 칸만 정의를 통과한다. 가운데 칸은 위로 올라간 모양이지만 이번 저가가 직전 고가에 닿지 못했다. 오른쪽은 몸통 사이에만 틈이 있고 꼬리가 겹쳐 있다. 눈으로 보면 셋 다 “갭 상승” 같지만 규칙은 하나만 받아 준다. 사람의 눈과 규칙이 다른 대표적인 자리다.

둘째, 이번 봉이 양봉이어야 하는지다. 정의에 따라 양봉 조건을 같이 거는 구현이 있고 안 거는 구현이 있다. 창이 열렸어도 이번 봉이 음봉으로 닫히면 “위에서 시작했지만 매수세가 이어지지 못했다"는 이야기가 되어 해석이 약해진다. 나는 양봉 조건을 붙이는 쪽이 설명하기 쉽다고 본다. 다만 조건을 하나 붙이는 순간 파라미터 없는 규칙이라는 장점이 조금 줄어든다.

셋째, 최소 틈의 크기다. low[0] > high[1] 은 1원이든 1퍼센트든 똑같이 통과시킨다. 틈이 너무 작으면 호가 한 칸 차이일 뿐이라 의미가 없다. 그래서 변동성(ATR)의 일부보다 큰 틈만 받는 식으로 기준을 둘 수 있다.

gap = low[0] - high[1]
signal = gap > k * ATR(14)

ATR 14는 트레이딩뷰 기본 길이이고, k는 내가 정하는 값이다. 여기서 k를 얼마로 둘지가 곧 이 규칙의 유일한 파라미터가 된다. 그림 4는 같은 모양에서 k만 바꿔도 신호 여부가 갈린다는 걸 보여 준다. k를 0으로 두면 정의 그대로이고, 키울수록 신호는 드물어진다. 어느 값이 좋은지는 시세로 재 봐야 아는 문제이고, 이번 편은 재지 않았으므로 값을 추천하지 않는다.

최소 틈 기준을 바꾸면 신호 여부가 달라지는 모식도

24시간 시장이라는 함정

이 패턴이 코인에서 흔들리는 가장 큰 이유는 창이 만들어지는 방식에 있다.

주식은 장이 닫혔다가 다음 날 열린다. 밤사이 쌓인 뉴스와 주문이 시가 한 번에 반영되니 전날 고가보다 위에서 시작하는 일이 생긴다. 창은 장이 쉬는 동안 거래가 없었기 때문에 생기는 구조다. 반면 코인은 쉬지 않는다. 한 봉이 닫히는 순간 다음 봉이 같은 가격에서 이어진다. 시간 단위로 보면 가격은 끊기지 않고 연속적으로 움직인다. 그래서 일봉이든 시간봉이든 시가가 직전 종가와 거의 같다. 창이 생기려면 직전 봉의 고가보다 위로 저가가 형성되어야 하는데, 이는 한 번의 점프가 봉 경계 근처에서 일어났을 때만 가능하다.

더 불편한 사실은 일봉의 경계가 거래소가 정한 설정값이라는 점이다. 국내 거래소는 한국 시간(KST) 자정, 해외 거래소는 협정 세계시(UTC) 자정에서 하루를 끊는다. 두 시간대는 아홉 시간 차이가 난다. 같은 시간별 경로를 어디서 자르느냐에 따라 어떤 날은 창이 생기고 어떤 날은 생기지 않는다.

같은 경로를 KST와 UTC 경계로 잘랐을 때 창이 달라지는 모식도

그림 3에서 급등은 한 번 일어난다. UTC 경계로 자르면 그 점프가 두 봉 사이에 놓이니 창이 생기는 모양이 된다. 그런데 KST 경계로 자르면 점프가 한 봉의 한가운데에 들어가 버려서 그 봉이 길고 큰 양봉 하나가 될 뿐 창은 없다. 시장에서는 똑같은 사건이 일어났는데 신호 유무가 차트 설정에 달려 있다. 그림 1부터 그림 4까지 전부 모식도라서 숫자를 쓰지 않았지만, 이 구조 자체는 정의에서 곧바로 나오는 결론이다.

그래서 코인 일봉으로 라이징 윈도우를 쓴다면 어느 거래소의 어느 시간대 일봉인지를 먼저 정해야 한다. 전략 이름이 같아도 일봉 경계가 다르면 서로 다른 전략이다. 그 사실을 모르고 백테스트와 실거래를 서로 다른 소스로 돌리면 신호가 맞지 않는다.

시간 단위를 짧게 가져가면 어떨까. 분봉이나 시간봉에서는 창이 오히려 자주 생긴다. 호가가 얇을 때 몇 틱 점프하는 일이 흔하기 때문이다. 하지만 그건 의미 있는 매수 압력이라기보다 유동성이 얇아서 생기는 빈칸일 가능성이 크다. 규칙은 둘을 구분하지 못한다.

못 보는 것

규칙이 못 보는 것을 적어 둔다. 이게 이 글의 핵심이다.

하나. 창이 생긴 이유를 못 본다. 대형 거래소의 상장 같은 호재 때문에 오른 것인지, 얇은 호가 때문에 튄 것인지 봉 두 개만으로는 알 수 없다.

둘. 창이 얼마나 오래 유효한지 정의가 없다. 이 패턴은 진입 조건만 있고 청산 조건이 없다. 창이 닫히면 나가라는 식의 해석은 전해지지만 규칙으로 정해진 건 아니다. 청산이 없는 전략은 신호만 나오고 포지션 관리는 전부 내 몫이라는 뜻이다. 결국 규칙을 쓴다는 것은 청산 규칙을 내가 새로 만든다는 뜻이고, 그 순간부터 성과는 패턴이 아니라 내가 붙인 청산에서 나온다.

셋. 현물에서는 반대편이 비어 있다. 라이징 윈도우의 반대인 폴링 윈도우는 하락 신호인데, 현물 거래에는 공매도가 없으니 진입으로 쓸 수 없다. 청산 신호로만 쓸 수 있다. 그러면 대칭이어야 할 규칙의 절반이 의미를 잃는다.

넷. 신호 빈도를 모른다. 이번 편은 시세를 보지 않았으므로 이 패턴이 얼마나 자주 나는지 숫자로 말할 수 없다. 다만 앞에서 본 것처럼 24시간 연속 시장에서 일봉 창은 드문 구조라는 정도만 정의에서 도출된다. 드문 신호는 표본이 적다. 표본이 적으면 어떤 결과가 나와도 우연과 구분하기 어렵다.

BNB에 놓고 생각하기

BNB는 거래소 토큰이다. 이런 자산은 가격 논리에 거래소 자체의 사정이 섞인다. 소각 정책 같은 공급 쪽 이벤트가 알려져 있는 코인이라, 차트만 봐서는 설명되지 않는 움직임이 나올 수 있다. 발행량이나 소각의 구체적인 수치는 확신하지 못해 여기에 쓰지 않는다.

이 성격을 라이징 윈도우에 대 보면 두 가지가 보인다. 하나는 이벤트로 인한 점프가 창으로 찍힐 가능성이다. 이벤트 성격의 급등은 패턴이 가정한 지속적 매수 압력이 아니라 일회성 충격일 수 있다. 일회성이면 창은 열리자마자 되메워질 수 있다. 다른 하나는 반대로 이 패턴이 거래소 토큰의 이벤트를 걸러 주지 못한다는 점이다. 규칙은 이유를 묻지 않는다.

이건 BNB의 성과가 어땠는지를 말하는 게 아니다. 가격을 보지 않았으니 말할 수 없다. 단지 이런 성격의 자산에서는 신호 하나하나를 신뢰하기 전에 이벤트 필터가 필요할 것 같다는 사고 실험이다.

결론: 내 봇에 넣을 것인가

넣지 않기로 했다. 정확히는 단독 진입 조건으로는 넣지 않는다.

이유를 적어 둔다. 첫째, 일봉 기준에서는 24시간 시장 특성상 신호 자체가 드물고 일봉 경계 설정에 따라 신호가 달라진다. 이 정도로 설정에 민감한 규칙을 실거래 진입에 쓰려면 먼저 같은 설정으로 오래 기록해야 한다. 둘째, 청산 규칙이 없다. 셋째, 하위 시간봉에서는 호가가 얇아서 생기는 가짜 창과 구분이 안 된다. 넷째, 내 봇의 게이트는 거래량과 추세 필터를 먼저 통과해야 진입하게 되어 있는데, 이 규칙은 그런 필터를 하나도 갖고 있지 않다.

다만 버리는 건 아니다. 거래량이 같이 늘었는지를 확인하는 보조 조건으로 붙이는 건 생각해 볼 만하다. 창이 열린 봉에서 거래량이 직전보다 늘었다면 얇은 호가 때문에 생긴 빈칸일 가능성이 줄어든다. 이건 아직 가설이고 시세로 검증하지 않았다. 다음에 이 패턴을 다시 볼 때는 일봉 경계를 하나로 고정하고 창이 열린 뒤의 청산 규칙까지 정한 상태에서 측정부터 해야 한다.

이번 편은 시세를 받아 성과를 검증한 글이 아니라 규칙 자체를 해부한 글이다. 그래서 이 패턴이 잘 맞는다거나 안 맞는다는 결론은 내리지 않았다. 내린 결론은 하나, 지금의 내 봇 구조에는 단독으로 넣지 않는다는 것이다.

이 글은 투자 권유가 아니며, 모든 투자 판단과 책임은 본인에게 있다.

약어 풀이

  • BNB — 바이낸스 거래소의 토큰. 이 글에서는 사고 실험의 무대로만 썼다.
  • ATR (Average True Range) — 평균 실제 범위. 변동성 크기를 재는 지표. 기본 길이는 14.
  • KST (Korea Standard Time) — 한국 표준시. UTC보다 아홉 시간 빠르다.
  • UTC (Coordinated Universal Time) — 협정 세계시. 해외 거래소 다수가 일봉 경계로 쓴다.