서론: 눈으로는 쉬운데 코드로는 어려운 모양

차트 책을 펴면 약세 페넌트는 거의 언제나 첫 장 근처에 나온다. 급하게 떨어지다가 잠깐 숨을 고르고, 다시 같은 만큼 떨어진다. 그림으로 보면 너무 쉽다. 그런데 내 봇에 넣으려고 조건문으로 옮기기 시작하면 이야기가 달라진다. “급하게"가 몇 봉에 몇 퍼센트인지, “잠깐"이 몇 봉인지, “수렴"을 어떻게 판정하는지를 전부 내가 정해야 한다. 정해 주는 사람이 없다.

이번 편은 시세를 받아 성과를 검증한 글이 아니라 규칙 자체를 해부한 글이다. 승률을 적지 않은 이유도 그래서다. 이 시리즈는 가격 데이터를 한 줄도 쓰지 않는다. 그림도 전부 실제 시세가 아니라 규칙을 설명하기 위한 모식도이고, 그림 안에도 그렇게 적어 두었다. 배정된 코인은 페페(PEPE)다. 페페의 성과를 말하려는 게 아니라, 이 패턴을 밈코인이라는 성격의 자산에 얹으면 어디가 삐걱대는지 사고 실험을 해 보려는 것이다.

글의 순서는 이렇다. 무엇을 재는 패턴인가, 어떻게 코드로 옮길 수 있나, 무엇을 못 보나, 그래서 내 봇에 넣을 것인가.

본론 1: 약세 페넌트가 재는 것

약세 페넌트는 세 부분으로 이루어진다. 앞에서부터 깃대, 페넌트 본체, 이탈이다.

깃대(pole) 는 가파른 하락 구간이다. 이름 그대로 깃발이 매달린 막대 역할이다. 이 구간이 있어야 페넌트라는 이름이 붙는다. 깃대 없이 모양만 닮은 삼각형은 그냥 대칭 삼각형이다. 깃대가 필요한 이유는 이 패턴의 논리가 “하락 추세의 중간 휴식"이기 때문이다. 급하게 팔린 뒤 매수와 매도가 잠깐 균형을 이루고, 그 균형이 깨지면 원래 방향으로 간다는 서사다.

페넌트 본체는 깃대 끝에서 시작하는 작은 수렴 구간이다. 고점은 점점 낮아지고 저점은 점점 높아진다. 봉의 진폭이 줄어든다는 뜻이다. 위쪽 추세선은 우하향, 아래쪽 추세선은 우상향이고, 두 선이 오른쪽에서 만난다. 그림 1이 이 구조다.

약세 페넌트의 구조: 깃대, 수렴, 이탈 모식도

이탈은 아래쪽 추세선을 종가 기준으로 뚫고 내려가는 봉이다. 여기서부터가 신호다. 교과서는 여기에 목표가를 붙인다. 깃대의 길이를 이탈 지점에서 아래로 그대로 한 번 더 그어 보라는 것이다. 이걸 측정 목표(measured move)라고 부른다. 나는 이 목표가 규칙이 아니라 관습이라고 본다. 왜 하필 깃대 길이와 같아야 하는지 이론적인 근거를 본 적이 없다. 그래서 목표가는 이번 글의 판단 대상에서 뺀다.

거래량이 쓰는 이야기

패턴 설명에는 거래량 조건이 거의 항상 붙는다. 깃대에서는 거래량이 크고, 페넌트 구간에서는 마르고, 이탈 봉에서 다시 늘어야 한다. 그림 3이 그 모양이다.

깃대와 페넌트와 이탈 구간의 거래량 모식도

이 조건이 말하는 건 심리다. 급락 때는 서둘러 던지는 사람이 많다. 수렴 구간에서는 던질 사람은 던졌고 사려는 사람은 아직 확신이 없어서 거래가 줄어든다. 이탈 때 다시 거래가 터지면 새로 던지는 사람이 나왔다는 증거다. 이야기는 깔끔하다. 다만 이것은 서사일 뿐, 이 서사가 맞아떨어지는 비율은 내가 재지 않았다. 재지 않은 것은 말하지 않는다.

깃발, 대칭 삼각형과의 구분

약세 페넌트와 자주 헷갈리는 모양이 둘 있다. 약세 깃발(flag)은 되돌림 구간이 기울어진 평행 채널이다. 대칭 삼각형은 선이 수렴하는 건 같은데 앞선 깃대가 없다. 그림 2를 보면 눈으로는 구분이 쉽다.

페넌트와 깃발과 대칭 삼각형 비교 모식도

문제는 이 구분이 연속적이라는 점이다. 두 추세선이 완전히 평행하면 깃발, 뚜렷하게 수렴하면 페넌트인데, 그 사이 어디쯤은 사람마다 다르게 부른다. 규칙 기반 봇은 경계를 하나 정해야 하고, 그 경계가 곧 파라미터다. 파라미터가 생기면 과최적화의 문을 연 것이다. 바입다운 같은 파라미터 없는 규칙이 과최적화에서 자유로운 것과 정반대 지점에 이 패턴이 있다.

본론 2: 조건문으로 옮기면 생기는 일

약세 페넌트를 코드로 옮기면 대략 이런 조건들이 필요하다.

  1. 깃대: 최근 N봉 동안 고점에서 저점까지 하락폭이 일정 비율 이상일 것. 그리고 그 구간의 변동성이 평소보다 클 것.
  2. 본체: 깃대가 끝난 시점부터 M봉 이내에서 고점 연결선의 기울기가 음수, 저점 연결선의 기울기가 양수일 것. 두 선이 만나는 지점이 아직 앞에 있을 것.
  3. 되돌림 허용폭: 본체의 고점이 깃대 길이의 일정 비율을 넘어 올라가지 않을 것. 너무 많이 되돌리면 하락 추세가 끝난 것으로 본다.
  4. 이탈: 종가가 아래쪽 선보다 낮을 것. 거래량은 직전 몇 봉 평균보다 클 것.

여기에 등장한 N, M, 일정 비율, 허용폭은 모두 내가 정해야 하는 값이다. 트레이딩뷰의 RSI 14나 볼린저 20·2처럼 널리 합의된 기본값이 이 패턴에는 없다. 그래서 같은 이름의 패턴인데도 사람마다, 라이브러리마다 검출 결과가 다르다.

선을 어떻게 긋느냐가 판정을 바꾼다

가장 미묘한 부분이 추세선이다. 눈으로 볼 때 우리는 “대충 이 점들을 잇는” 선을 긋는다. 코드는 기준을 정해야 한다. 꼬리 끝(고가·저가)을 이을 것인가, 몸통 끝(종가)을 이을 것인가. 이 선택 하나가 결과를 뒤집는다. 그림 4는 같은 봉 배열에 두 방식을 적용한 모식도다.

같은 봉 배열에 선 긋는 기준만 바꾼 비교 모식도

왼쪽처럼 꼬리 끝까지 포함하면 긴 윗꼬리 하나가 상단선을 평평하게 눌러서 수렴이 약해 보인다. 오른쪽처럼 종가만 보면 같은 봉인데도 선이 가팔라지고 좁아져서 깔끔한 페넌트가 된다. 어느 쪽이 맞는지는 정답이 없다. 사람이 눈으로 찾을 때는 이 갈등을 무의식으로 처리하지만, 봇은 둘 중 하나를 골라야 하고 고른 순간 그 선택이 전략의 일부가 된다.

또 하나는 선이 점을 몇 개나 지나야 “유효한 추세선"이냐는 문제다. 보통은 고점 두 개 이상, 저점 두 개 이상이 닿아야 선이라고 부른다. 그런데 봉이 많지 않은 짧은 구간에서 점 네 개를 찾으려면 허용 오차를 넉넉하게 줘야 하고, 오차를 넉넉하게 주면 아무 구간에서나 페넌트가 검출된다. 엄격하게 주면 반대로 거의 아무것도 검출되지 않는다. 이 사이의 어디가 적당한지는 데이터로 맞춰 봐야 아는데, 그렇게 맞추는 순간 그 데이터에만 맞는 값이 된다.

본론 3: 이 패턴이 못 보는 것

약세 페넌트는 가격과 거래량의 모양만 본다. 이탈이 날지 안 날지, 어느 쪽으로 날지를 미리 말해 주는 건 없다. 패턴이 완성되는 시점은 이탈 봉이 확정된 뒤이므로, 정의상 이미 한 번 움직인 다음에야 신호가 난다. 후행성이 구조 안에 들어 있다.

더 근본적인 약점은 같은 모양이 반대로도 풀린다는 것이다. 수렴 끝에서 아래가 아니라 위로 이탈하는 경우다. 교과서는 이를 실패 사례로 따로 분류하지만, 모양만 보면 실패와 성공은 이탈하기 전까지 구별되지 않는다. 그래서 규칙을 “아래로 이탈하면 따라간다"로 쓰면 이 패턴은 사실상 하단선 이탈 전략과 같다. 페넌트라는 이름표가 하는 일은 후보를 거르는 필터 역할일 뿐이다. 그 필터가 후보를 의미 있게 걸러 주는지는 재 봐야 안다. 이번 글은 재지 않았다.

본론 4: 페페라는 무대에 얹어 보기

페페는 밈에서 출발한 코인이다. 이런 자산의 가격 논리는 펀더멘털이 아니라 이야기와 관심의 양으로 움직이는 부분이 크다고 알려져 있다. 이걸 약세 페넌트의 서사와 겹쳐 보면 두 가지 의문이 생긴다.

첫째, 페넌트의 심리 서사는 “서두른 매도 뒤의 숨 고르기"인데, 밈코인의 숨 고르기는 이야기가 식는 시간이다. 새 관심이 붙으면 수렴 구간이 순식간에 끝나고 위로 튈 수 있다. 하나의 소식으로 방향이 뒤집히는 자산에서는 앞서 말한 “위로 이탈하는 실패 사례"의 비중이 더 클 수 있다. 더 큰지 작은지는 내가 재지 않았으니 모른다. 다만 의심해야 할 방향이 어디인지는 분명하다.

둘째, 깃대의 정의가 흔들린다. 변동성이 큰 자산에서는 “급락"의 기준이 되는 하락폭이 상대적으로 쉽게 채워진다. 하락폭 임계값을 고정 비율로 쓰면 평소 진폭이 큰 자산에서는 깃대가 너무 자주 검출되고, 그 뒤에 수렴이 따라오는 모양만 대충 맞아도 페넌트가 된다. 이를 막으려면 임계값을 변동성(ATR)의 배수로 쓰는 방식이 낫다. 코인마다 평소 진폭이 다르다는 점을 자연스럽게 흡수하기 때문이다. 이 값 역시 또 하나의 파라미터이긴 하다.

본론 5: 코인 시장의 함정

이 패턴을 코인에 쓸 때 짚어야 할 함정이 셋 있다.

일봉 경계가 약속일 뿐이다. 주식은 장이 열리고 닫히는 시각이 있어서 일봉이 자연스럽게 끊긴다. 코인은 24시간이라 일봉의 경계가 거래소 설정일 뿐이다. 국내 거래소는 한국시간(KST) 자정, 해외 거래소는 협정세계시(UTC) 자정으로 끊는 경우가 많고 둘은 아홉 시간 차이가 난다. 페넌트는 종가로 이탈을 판정하므로, 아홉 시간 어긋난 종가가 하단선 아래냐 위냐를 뒤집는 날이 나올 수 있다. 같은 코인, 같은 패턴인데 어느 차트를 보느냐에 따라 신호가 나기도 하고 안 나기도 한다. 봇을 만들 때는 어느 경계를 기준으로 할지 먼저 못 박아야 한다.

휴장이 없어서 갭이 드물다. 주식에서는 주말과 휴일 사이에 갭이 생겨 패턴이 끊기기도 한다. 코인은 쉬지 않으므로 수렴 구간이 끊김 없이 이어진다. 선을 긋기에는 오히려 좋다. 반면 새벽 시간대의 얇은 호가에서 나오는 일시적인 꼬리가 많아서, 앞서 말한 꼬리 기준이냐 종가 기준이냐의 갈림이 더 커진다.

현물에는 공매도가 없다. 약세 패턴은 하락 신호다. 하락 신호가 났을 때 현물 계좌가 할 수 있는 일은 이미 가진 걸 파는 것뿐이다. 신규 진입은 없다. 선물에서 숏을 잡을 수는 있지만 내 봇은 현물 기준이라, 이 패턴은 진입 신호가 아니라 청산 또는 진입 보류 신호로만 쓸 수 있다. 이건 이 패턴을 쓸지 판단하는 데 결정적이다.

결론: 내 봇에 넣을 것인가

이번 편은 시세를 받아 성과를 검증한 글이 아니라 규칙 자체를 해부한 글이다. 그래서 “수익이 난다"든 “안 난다"든 어느 쪽도 말하지 않는다.

그 위에서 내린 결론은 넣지 않는다이다. 이유를 적어 둔다. 나중에 다시 판단할 때 이 이유가 남아 있어야 하기 때문이다.

  1. 파라미터가 많다. 깃대 기준, 본체 길이, 되돌림 허용폭, 선 긋는 방식, 거래량 조건이 모두 정해야 하는 값이다. 내 봇의 다른 게이트는 합의된 기본값이 있는 지표를 쓰는데, 이 패턴은 그렇지 않다. 값을 정하는 순간 과최적화의 위험이 들어온다.
  2. 같은 모양이 반대로도 풀린다. 이탈하기 전까지는 구별이 안 되니 결국 “하단선 이탈 후 따라간다"와 같아지고, 그럴 거면 이름표가 없는 단순한 규칙이 더 낫다.
  3. 내 봇은 현물이라 하락 신호를 진입에 못 쓴다. 청산 신호로만 쓰기에는 이미 있는 손절 규칙과 역할이 겹친다.
  4. 페페처럼 한 번의 소식으로 방향이 뒤집히는 자산에서는 이 패턴의 서사가 가장 약해질 수 있다고 의심한다. 다만 이건 의심이지 측정이 아니다.

다시 보게 될 조건은 하나다. 파라미터를 하나로 줄이는 방법, 예컨대 “ATR 배수로 깃대를 정의하고 본체는 고정 봉 수로 두는” 단순화가 나오고, 그 규칙을 따로 백테스트해서 단순한 하단선 이탈과 비교했을 때 의미 있는 차이가 나오면 그때 다시 본다. 그 전에는 눈으로 보는 참고 도구로만 둔다.

이 글은 투자 권유가 아니다.

약어 풀이

  • PEPE (Pepe) — 페페. 밈에서 출발한 코인의 심볼.
  • ATR (Average True Range) — 평균 실제 범위. 변동성 크기를 재는 지표.
  • RSI (Relative Strength Index) — 상대강도지수. 상승·하락 힘의 비율로 과열 정도를 재는 지표.
  • KST (Korea Standard Time) — 한국 표준시. UTC보다 아홉 시간 빠르다.
  • UTC (Coordinated Universal Time) — 협정 세계시. 해외 거래소가 일봉 경계로 많이 쓴다.