서론: 윗꼬리가 길면 정말 팔아야 하나

차트를 보다 보면 위로 길게 솟았다가 도로 내려온 봉이 눈에 들어온다. 몸통은 작고 윗꼬리만 길다. 트레이딩뷰 스크립트 목록에 “긴 상단 그림자 - 약세(Long Upper Shadow - Bearish)“라는 이름으로 들어 있는 바로 그 모양이다.

이번 편은 시세를 받아 성과를 검증한 글이 아니라 규칙 자체를 해부한 글이다. 승률을 적지 않은 이유도 그래서다. 몇 번 맞았는지 세지 않았고, 세지 않은 것을 맞는다고 말할 수도 없다.

배정된 코인은 밈코어(M)다. 이 글에서 밈코어는 분석 대상이 아니라 사고 실험의 무대다. 이름에서 보듯 밈 문화를 내건 코인이라는 정도만 전제로 두고, 발행 구조나 최근 일정처럼 확신하지 못하는 내용은 쓰지 않는다. 가격을 보지 않았으니 그 코인이 어떻게 움직였는지도 말하지 않는다. 던질 질문은 하나다. 이 캔들 규칙을 내 봇의 매도 조건으로 넣어도 되는가.

그림은 전부 직접 그린 설명용 그림이다. 실제 시세가 아니라 규칙을 설명하기 위한 모식도이고, 각 그림 안에도 모식도(schematic)라고 적어 두었다. 가로세로 눈금에는 가격 숫자를 넣지 않았다.

본론 1: 무엇을 재는가

봉 하나는 네 개의 값으로 만들어진다. 시가, 고가, 저가, 종가다. 묶어서 OHLC라고 부른다. 이 네 값이 정해지면 봉을 세 조각으로 나눌 수 있다.

긴 상단 그림자 봉의 구조 모식도

  • 몸통 = |종가 − 시가|
  • 윗꼬리 = 고가 − max(시가, 종가)
  • 아랫꼬리 = min(시가, 종가) − 저가

긴 상단 그림자란 이 중 윗꼬리가 비정상적으로 긴 봉이다. 비정상적이라는 말이 문제다. 얼마나 길어야 긴 것인가. 널리 쓰이는 설명은 “윗꼬리가 몸통의 두 배 이상"이고, 여기에 “아랫꼬리는 거의 없다"를 붙이는 경우가 많다. 다만 이 두 배라는 숫자는 누가 정한 법칙이 아니라 관습이다. 스크립트마다 비율이 다를 수 있고, 내가 쓰는 도구의 정의를 열어 보기 전에는 모른다. 이 글의 그림에서 쓴 비율도 설명을 위해 임의로 둔 정의일 뿐이다.

이름에 “약세(Bearish)“가 붙은 이유는 해석 때문이다. 해석은 이렇다. 이 봉이 만들어지는 동안 가격은 위로 한참 올라갔다. 그런데 매수세가 그 높이를 지키지 못하고 되밀려 시가 근처에서 마감했다. 위쪽에서 팔자는 물량이 받아쳤다는 흔적이므로, 다음 봉이 약할 것이라는 가정을 얹는다.

여기서 눈여겨볼 점은 이 규칙이 “관측"이 아니라 “가정"이라는 것이다. 윗꼬리의 길이는 봉이 끝난 뒤에 확정된 사실이다. 그 사실에서 다음 봉의 방향을 끌어내는 것은 규칙이 얹은 이야기다. 윗꼬리가 길었다는 사실과 다음 봉이 내린다는 결론 사이에는 계산식이 없다.

본론 2: 어떻게 판정하나

조건문으로 옮기면 짧다.

body        = abs(close - open)
upper       = high - max(open, close)
lower       = min(open, close) - low
signal_bear = upper >= k * body  and  lower <= small

k는 위에서 말한 배수(관습상 2), small은 아랫꼬리가 “거의 없다"고 볼 상한이다. 이 정의에는 파라미터가 둘 있다. 지표라면 RSI 14처럼 널리 통하는 기본값이 있지만, 캔들 패턴에는 그런 합의된 기본값이 약하다. 그래서 조금만 값을 바꿔도 신호가 나는 봉의 집합이 달라진다.

그림 2는 신호가 나는 자리와 안 나는 자리를 나란히 놓은 것이다.

신호가 나는 봉과 나지 않는 봉의 대비

A는 조건을 만족한다. B는 윗꼬리가 몸통의 두 배에 못 미쳐서 탈락한다. C는 윗꼬리만 보면 조건을 넘지만 아랫꼬리도 길다. 이런 봉은 보통 십자형 계열로 따로 불리고 약세 한쪽으로만 읽기 어렵다.

몸통이 거의 0에 가까운 봉에서는 특이한 일이 생긴다. 조건이 upper >= k * body라서 몸통이 0이면 윗꼬리가 아무리 짧아도 조건을 통과한다. 시가와 종가가 같은 십자형이 전부 “긴 상단 그림자"로 잡히는 것이다. 그래서 몸통 하한이나 전체 범위 대비 비율 같은 보조 조건을 따로 둔다. 곱셈 비교 대신 upper / (high - low) >= 0.6처럼 전체 범위 대비 비율을 쓰면 0으로 나누는 문제가 고가와 저가가 같은 봉에서만 남는다. 어느 쪽이든 코드에 방어 조건이 하나 더 들어간다.

이 규칙의 지연은 한 봉이다. 봉이 마감돼야 정의의 세 값이 확정되기 때문이다. 일봉 기준이면 하루가 끝나야 신호가 나고, 그 신호로 주문을 내는 시점은 다음 봉 시가 근처다. 윗꼬리가 길다는 사실이 이미 가격에 반영된 뒤에 움직이는 셈이다. ATR 같은 변동성 지표로 “꼬리가 평소 변동폭의 몇 배인가"를 재서 쓰기도 하는데, 그건 이 스크립트 정의에는 들어 있지 않은 별도 장치다.

본론 3: 무엇을 못 보는가

첫째, 맥락이다. 같은 모양의 봉이 어디에서 나오느냐에 따라 의미가 달라진다.

같은 모양의 봉이 놓이는 세 가지 맥락

상승 추세 끝에서 나오면 매수 소진 가설과 맞는다. 하락 추세 안에서 나오면 반등을 시도했다가 실패했다는 읽기도 되고, 그냥 되돌림 한 번이라는 읽기도 된다. 횡보 구간에서는 위아래로 흔들리는 폭 안의 한 점일 뿐이다. 규칙 자체에는 직전 추세를 확인하는 항이 없다. 그러니 “긴 상단 그림자 - 약세"라는 이름을 믿고 모든 자리에서 매도 신호로 쓰면, 이름이 말하는 상황이 아닌 곳에서도 신호가 난다. 필요하면 직전 몇 봉이 올랐는지 같은 선행 조건을 내가 따로 붙여야 한다.

둘째, 거래량이다. 윗꼬리가 길었다는 것은 가격이 위로 갔다가 돌아왔다는 뜻이지, 얼마나 많은 거래가 그 구간에서 이뤄졌는지는 알려 주지 않는다. 얇은 호가창에서 한 번 훑고 지나간 꼬리와 두꺼운 매물대를 소화하며 만들어진 꼬리는 모양이 같아도 성격이 다르다. 이 규칙은 모양만 본다.

셋째, 꼬리가 만들어진 순서다. 봉은 네 개의 숫자로 압축된 결과라서, 고가를 먼저 찍고 내려왔는지, 한참 횡보하다 마지막에 한 번 찔렀는지 알 수 없다. 둘 다 같은 봉이다. 더 짧은 주기의 봉을 열어 보지 않는 한 구별되지 않는다.

넷째, 코인이라는 자산의 성격이다. 밈 계열 코인은 이야기와 분위기에 가격이 크게 좌우되는 자산으로 알려져 있다. 그런 자산에서 윗꼬리는 “매수세가 힘이 빠졌다"는 신호이기도 하지만, 한 번 휘청인 뒤 다시 분위기를 타고 위로 가는 일과도 공존할 수 있다. 가격을 보지 않은 이 글에서 어느 쪽이 더 흔한지는 말할 수 없다. 다만 뉴스나 분위기에 방향이 뒤집히기 쉬운 자산이라면, 캔들 한 개의 모양이 담고 있는 정보가 상대적으로 얇을 수 있다는 의심은 정당하다. 그 의심을 숫자로 확인하는 것은 이 시리즈가 하지 않는 일이다.

본론 4: 코인 시장의 함정, 일봉은 어디서 끊기나

주식은 장이 열리고 닫힌다. 일봉의 시가와 종가는 개장과 마감이라는 사건이 정해 준다. 코인 시장은 24시간 돌아간다. 일봉의 경계는 거래소가 정한 설정값일 뿐이다.

일봉 경계를 두 가지로 끊었을 때의 차이

국내 거래소는 한국 표준시 자정(KST 0시)을 기준으로 하루를 끊는 곳이 많고, 해외 거래소와 차트 도구는 협정 세계시 자정(UTC 0시)을 기준으로 하는 곳이 많다. 두 시각은 아홉 시간 차이다. 같은 가격 흐름이어도 어디서 끊느냐에 따라 시가와 종가가 달라지고, 그에 따라 몸통 크기가 바뀌고, 윗꼬리가 몸통의 두 배를 넘는지도 달라진다. 한쪽에서는 신호가 나고 다른 쪽에서는 안 나는 날이 생긴다.

이건 이 규칙에 특히 아프다. 판정이 몸통과 꼬리의 비율이라는 아주 작은 차이에 걸려 있기 때문이다. 이동평균처럼 여러 봉을 평균 내는 지표는 경계가 아홉 시간 밀려도 모양이 조금 변할 뿐이지만, 봉 하나로 결론 내는 규칙은 경계 하나에 신호가 켜졌다 꺼진다.

그래서 봇에 넣는다면 내가 보는 차트와 봇이 읽는 차트의 경계를 맞춰 두는 것이 먼저다. 눈으로 본 신호가 봇에서는 안 나는 일이 생기면 대개 이 이유다.

이 함정 말고도 코인 시장 특유의 사정이 둘 더 있다. 하나는 주말이나 휴장이 없어서 갭이 드물다는 점이다. 주식에서는 전날 종가와 다음날 시가 사이에 큰 간극이 생기고 그것이 봉 모양에 영향을 주는데, 24시간 시장에서는 그 간극이 거의 없다. 캔들 패턴 해석 중 갭을 전제하는 부분은 코인에서 그대로 옮겨지지 않는다. 다른 하나는 현물에는 공매도가 없다는 점이다. 약세 신호를 받아도 현물 계좌로는 이미 가진 물량을 파는 것밖에 못 한다. 파생 상품으로 숏 포지션을 잡는 길이 있긴 하지만, 그건 증거금과 청산이라는 다른 위험을 끌고 오는 별개의 결정이다.

결론: 내 봇에 넣을 것인가

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

이유를 적어 둔다. 첫째, 규칙에 선행 추세를 확인하는 항이 없어서 어디서든 켜진다. 둘째, 판정 비율과 아랫꼬리 상한이라는 두 파라미터에 합의된 기본값이 약하다. 셋째, 일봉 경계가 거래소 설정에 따라 바뀌는 코인 시장에서는 봉 하나의 모양이 그날의 경계에 지나치게 민감하다. 넷째, 한 봉으로 결론을 내리는 규칙은 결과를 검증하기 전에는 결론이 가정에 머문다.

다만 버리지는 않는다. 쓰임새는 필터나 경고다. 내 봇이 이미 보유 중일 때 윗꼬리가 긴 봉이 나오면 비중을 줄이거나 손절선을 올려 보는 경계 신호 정도다. 단독으로 진입이나 청산을 결정하게 두지 않고, 추세 조건과 거래량 조건 뒤에 붙이는 보조 조건으로만 다시 검토한다. 이 판단도 시세로 확인한 것이 아니라 규칙의 구조를 따져 얻은 것이다. 나중에 실측을 한다면 같은 규칙을 경계 두 가지로 나눠서 돌려 보는 것이 첫 번째 할 일이다.

다시 한 번 밝히면, 이번 편은 시세를 받아 성과를 검증한 글이 아니라 규칙 자체를 해부한 글이다. 어떤 수익이나 승률도 주장하지 않는다. 이 글은 투자 권유가 아니다.

약어 풀이

  • OHLC (Open, High, Low, Close) — 시가·고가·저가·종가. 봉 하나를 이루는 네 값.
  • RSI (Relative Strength Index) — 상대강도지수. 기본값은 14봉이며, 본문에서는 기본 파라미터의 예로만 언급했다.
  • ATR (Average True Range) — 평균 실제 범위. 변동성 크기를 재는 지표.
  • KST (Korea Standard Time) — 한국 표준시. 협정 세계시보다 9시간 빠르다.
  • UTC (Coordinated Universal Time) — 협정 세계시. 해외 거래소와 차트 도구가 많이 쓰는 기준 시각.