서론: 이름은 별인데 하는 일은 세 줄짜리 조건문이다
이번 편은 시세를 받아 성과를 검증한 글이 아니라 규칙 자체를 해부한 글이다. 승률을 적지 않은 이유도 그래서다. 이더리움 차트를 열어 몇 번 맞았는지 세지 않았고, 그럴 수도 없게 일부러 시세를 받지 않았다. 대신 “약세 도지 스타"라는 캔들 패턴이 정확히 무엇을 요구하는지, 그 요구가 24시간 돌아가는 코인 시장에서 말이 되는지만 따져 본다.
내 봇에는 진입 전에 거치는 게이트가 몇 개 있다. 추세 필터, 변동성 필터, 거래량 필터 같은 것들이다. 캔들 패턴은 그 게이트 앞에서 “여기서 방향이 바뀔 수도 있다"고 속삭이는 역할을 맡기기 좋아 보인다. 문제는 이 속삭임이 얼마나 믿을 만한가인데, 믿을 만한지는 정의를 뜯어보면 절반쯤 보인다. 그래서 정의부터 시작한다.
이 패턴은 책마다 이름이 조금씩 다르다. 한쪽에서는 이브닝 도지 스타의 앞 두 봉이라고 부르고, 다른 쪽에서는 도지 스타 약세형이라고 부른다. 내가 쓰는 트레이딩뷰 스크립트 이름은 “Doji Star - Bearish"다. 이름이야 어떻든 말하려는 것은 같다. 오르던 시장이 한 봉 동안 망설였고, 그 망설임을 다음 봉이 꺾었다는 이야기다.
본론 1: 무엇을 재는가
이 패턴이 재는 것은 가격의 크기가 아니라 합의의 붕괴다. 상승봉이 이어지는 동안 시장 참여자들은 “더 오른다"에 동의하고 있다. 그러다 한 봉에서 시가와 종가가 거의 같아진다. 그 봉 안에서 위로도 가 보고 아래로도 가 봤지만 결국 출발점에서 끝났다는 뜻이다. 사는 쪽도 파는 쪽도 이기지 못했다. 이게 도지다.

위 그림은 실제 시세가 아니라 규칙을 설명하기 위한 모식도다. 축에 숫자를 쓰지 않았고 봉 모양도 손으로 만들었다. 세 봉의 역할은 이렇다.
- 직전 봉이 몸통이 긴 상승봉이다. 오르던 흐름이 있었다는 전제를 만든다.
- 가운데 봉이 도지다. 몸통이 거의 없고, 별(star)이라는 이름이 붙으려면 직전 봉의 몸통에서 떨어져 위쪽에 떠 있어야 한다.
- 마지막 봉이 음봉이다. 도지가 만든 의문에 “아래쪽"이라는 답을 확정해 준다.
조건문으로 옮기면 이런 모양이 된다. 변수 이름은 내가 붙인 것이다.
prior_up = close[2] > open[2] and body[2] 가 최근 평균 몸통보다 크다
is_doji = abs(close[1] - open[1]) <= ratio * (high[1] - low[1])
star_gap = min(open[1], close[1]) > close[2]
confirm_dn = close[0] < open[0] and close[0] < min(open[1], close[1])
signal = prior_up and is_doji and star_gap and confirm_dn
여기서 ratio가 도지의 엄격함을 정한다. 구현마다 값이 다르고, 트레이딩뷰 스크립트 중에는 이 값을 설정창에서 바꾸게 해 둔 것도 있다. 파라미터가 하나라도 생기면 과최적화의 여지가 생긴다는 점은 기억해 둘 만하다. 이 규칙에는 ratio, “긴 몸통"의 기준, 평균을 내는 봉 수까지 숨은 파라미터가 적어도 셋 있다. 두 줄짜리 규칙처럼 깨끗하지 않다.
본론 2: 어떻게 계산하나
계산이랄 것은 몸통 대 범위의 비율 하나뿐이다. 분자는 시가와 종가의 차이, 분모는 고가와 저가의 차이다. 분자가 몸통, 분모가 그 봉이 그날 지나간 전체 길이다. 분자가 0에 가까우면 도지다.

이 그림도 설명용 모식도다. 비율 5퍼센트와 10퍼센트를 도지의 예시로 든 것이지 표준값이 아니다. 어디까지 도지로 받아줄지는 구현자의 선택이고, 그 선택이 신호 개수를 크게 바꾼다. 몇 개나 바꾸는지는 말하지 않는다. 세어 보지 않았기 때문이다.
한 가지 짚을 것이 있다. 비율은 상대값이라서 봉의 절대 크기를 보지 않는다. 범위가 아주 작은 봉에서는 몸통이 조금만 있어도 비율이 커지고, 범위가 아주 큰 봉에서는 상당한 몸통도 도지처럼 보인다. 그래서 어떤 구현은 범위 대신 최근 평균 범위를 분모로 쓰기도 한다. 이 경우 ATR 같은 변동성 지표와 같은 계열의 계산이 된다. 어느 쪽이든 “작다"는 말이 무엇에 비해 작다는 것인지 정해야 한다.
후행성도 따져 봐야 한다. 이 패턴은 세 번째 봉이 마감해야 확정된다. 도지가 나온 시점에 이미 망설임은 일어났고, 확인 음봉이 마감할 때쯤이면 하락의 첫 부분은 지나간 뒤다. 일찍 알려주지 못한다는 점이 이 규칙의 구조적 한계다. 확인 봉을 빼면 일찍 알지만 거짓 신호가 늘고, 확인 봉을 넣으면 거짓 신호가 줄지만 늦다. 둘 중 어느 쪽이 나은지는 시세를 돌려봐야 아는 문제라서 이번 편의 범위를 벗어난다.
본론 3: 무엇을 못 보는가
규칙이 못 보는 것을 구체적으로 적어 둔다. 이게 이 글의 핵심이다.
첫째, 선행 추세의 질을 못 본다. 직전 봉이 상승봉이라는 조건은 한 봉짜리다. 석 달을 오른 끝인지, 하루 반등한 것인지 구분하지 못한다. 그림 3의 가운데처럼 하락 중에 나온 도지는 애초에 천장 신호가 아니다. 그런데 “상승봉 하나 뒤의 도지"라는 형식만 보면 어느 구간에나 붙을 수 있다.

둘째, 거래량을 못 본다. 같은 도지라도 거래가 말라서 생긴 도지와 큰 물량이 서로 부딪혀서 생긴 도지는 의미가 다르다. 정의에는 거래량이 한 번도 나오지 않는다. 내 봇의 거래량 게이트를 뒤에 세워야 하는 이유다.
셋째, 갭이 필요한 별 규칙이 이더리움 같은 24시간 시장과 안 맞는다. 이 부분이 이번 편에서 가장 불편한 대목이다. 별(star)이라는 이름은 도지가 직전 봉의 몸통에서 떨어져 떠 있는 모양에서 왔다. 주식 시장에서는 장이 닫혔다 열리면서 갭이 자연스럽게 생긴다. 이더리움은 쉬지 않고 거래된다. 한 봉의 종가와 다음 봉의 시가가 거의 붙어 있어서, 엄밀한 갭 조건을 걸면 신호가 거의 나오지 않는다. 그래서 코인용 구현은 “몸통이 직전 몸통의 위쪽에 있으면 된다"처럼 갭 조건을 느슨하게 푼다. 느슨하게 풀면 신호는 나오지만 그건 원래의 패턴과 다른 규칙이다. 이름만 같고 가정한 심리가 다르다.
넷째, 일봉 경계가 거래소 설정값일 뿐이다. 24시간 시장에는 자연스러운 하루의 끝이 없다. 업비트는 한국 시간 자정에 일봉을 끊고, 해외 거래소는 UTC 자정에 끊는다. 아홉 시간 차이다. 같은 이더리움 흐름도 어디서 끊느냐에 따라 한 봉으로 뭉쳐서 도지가 되기도 하고, 두 봉으로 쪼개져서 몸통이 생기기도 한다.

그림 4는 손으로 만든 곡선이라 어떤 거래소의 어떤 날도 나타내지 않는다. 다만 원리는 분명하다. 도지는 “그 봉 안에서 시가와 종가가 같다"는 아주 경계 의존적인 정의라서, 경계가 움직이면 판정이 뒤집힌다. 내 봇이 어느 거래소의 봉을 기준으로 삼느냐에 따라 같은 규칙이 다른 날 신호를 낸다는 뜻이다. 신호의 재현성이 그만큼 약하다.
다섯째, 현물에서는 약세 신호를 진입으로 못 쓴다. 약세 도지 스타는 이름부터 하락 신호다. 선물이나 마진이면 공매도 진입의 근거가 될 수 있지만, 현물만 하는 봇에게는 “이제 팔아라"라는 청산 신호로만 쓸 수 있다. 진입 신호가 아니라는 점을 처음부터 분명히 해 둬야 설계가 꼬이지 않는다.
코인의 성격과 이 규칙
배정된 이더리움은 이번 편에서 분석 대상이 아니라 사고 실험의 무대다. 이더리움은 시장에서 널리 쓰이는 스마트 컨트랙트 플랫폼이고, 수수료 소각이나 스테이킹 같은 네트워크 요인이 가격 논리에 섞인다는 정도는 알려진 사실이다. 이런 요인은 캔들만으로는 보이지 않는다. 약세 도지 스타가 한 번 나왔을 때, 그 원인이 단순한 차익 실현인지 네트워크 쪽 이벤트인지 규칙은 구분하지 못한다. 시세를 보지 않았으니 이더리움에서 이 패턴이 잘 맞았다는 말도, 안 맞았다는 말도 할 수 없다. 이 글이 그런 말을 안 하는 이유다.
결론: 내 봇에 넣을 것인가
넣지 않기로 했다. 정확히는 단독 신호로는 넣지 않는다. 이유를 남겨 둔다.
- 숨은 파라미터가 많다. 도지 비율, 긴 몸통 기준, 평균 구간까지 세 곳에서 임의의 선택이 들어간다.
- 갭 조건이 24시간 시장에서는 의미를 잃거나, 느슨하게 풀면 다른 규칙이 된다.
- 일봉 경계에 따라 판정이 뒤집힐 수 있다.
- 확인 봉을 기다리는 구조라 신호가 늦는다.
- 현물 봇에서는 진입이 아니라 청산 후보로만 쓸 수 있다.
다만 완전히 버리지는 않는다. 이미 추세 필터가 “상승 구간"이라고 말하고 있을 때, 보유 중인 포지션의 청산 경계 알림으로는 쓸 만하다고 본다. 청산을 이 신호 하나로 결정하지 않고, 다른 조건이 같이 흔들릴 때 한 표를 보태는 정도다. 이 판단도 시세로 검증한 결론이 아니라 규칙의 구조를 보고 내린 설계상의 선택이다. 나중에 직접 돌려 보고 결과가 다르면 이 결론을 고칠 것이고, 지금은 버린 이유를 기록해 둔다.
이 글은 규칙을 이해하려는 개인 개발자의 학습 기록이고 투자 권유가 아니다.
약어 풀이
- ETH (Ethereum) — 이더리움.
- UTC (Coordinated Universal Time) — 협정 세계시. 해외 거래소가 일봉을 끊는 기준 시각.
- KST (Korea Standard Time) — 한국 표준시. UTC보다 아홉 시간 빠르다.
- ATR (Average True Range) — 평균 실제 범위. 변동성 크기를 재는 지표.