왜 코인 봇 블로그에서 주식 차트를 보나

이 랩은 업비트 크립토 트레이딩 봇 기록이다. 그런데 차트 패턴은 자산을 안 가린다. 사람이 모여서 값을 매기는 곳이면 비슷한 모양이 반복된다 — 문제는 그 모양을 코드로 옮길 수 있느냐다.

그동안 RSI, 볼린저, 아룬 같은 수식으로 계산되는 지표를 다뤘다. 이번엔 성격이 다른 걸 해본다. 헤드 앤 숄더, 플래그, 이중 천장 같은 눈으로 보는 패턴이다. 이런 건 사람이 차트를 보면 “아 저거네” 하는데, 봇에게 시키려면 어깨가 뭔지 넥라인이 어딘지를 숫자로 정의해야 한다.

그 간극을 확인하기에 2026년 6~8월 삼성전자만 한 표본이 없다. 50거래일 만에 고점 대비 반토막이 났다가 45% 되돌아왔다. 교과서 패턴이 성립하기도 하고 처참하게 깨지기도 한 구간이다.

이 글의 데이터 범위
종목    삼성전자 (005930)
구간    2026-06-05 ~ 2026-08-14 · 50 거래일
출처    stockanalysis.com 일봉 (2026-08-14 조회)
--------------------------------------------------
기간 최고  374,500원  (6/19 고가)
기간 최저  189,200원  (7/29 저가)
최종 종가  274,500원  (8/14)
--------------------------------------------------
고점 → 저점   −49.48%
저점 → 현재   +45.08%
고점 대비 현재 −26.70%

숫자부터 밝혀둔다. 이 글의 모든 가격은 위 출처의 일봉이고, 내가 만들어낸 값은 하나도 없다. 계산식이 들어간 곳은 식을 같이 적었다.

이 글은 차트 패턴을 코드로 옮기는 방법을 다루는 학습 기록이다. 특정 종목의 매수·매도 권유가 아니다.


1. 먼저 무슨 일이 있었나

패턴 얘기를 하기 전에 배경을 짚어야 한다. 이 구간의 모양은 개별 종목 사정이 아니라 시장 전체 사건에서 나왔다.

삼성전자 일봉 전체 구간

7월 말에 국내 증시가 이틀 만에 무너졌다. 공개된 지수 수치는 이렇다.

2026년 7월 말 코스피 (출처: 리치 플랫폼)
  7/27  6,755.75
  7/28  6,023.66   −10.84%
  7/29  5,663.24   −5.98%
  --------------------------------------------------
  이틀 누적 약 −16.2% · 서킷브레이커 발동
  --------------------------------------------------
  8/14  6,923.87   +1.62%   (출처: stockinfo7)
  외국인 순매수 10,992억 · 개인 순매도 6,816억

원인으로 지목된 건 하나가 아니라 다섯 가지가 얽힌 구조였다 — 지수 내 반도체 대형주 쏠림, AI 투자의 순환 출자 구조에 대한 의심, SK하이닉스가 사상 최대 실적을 냈는데도 눈높이에 못 미친 것, ADR 전환 일정에 따른 유동성 불확실성, 그리고 반대매매와 레버리지 ETF 리밸런싱이 만든 기계적 매도.

마지막 항목이 차트 관점에서 중요하다. 반대매매는 가격을 안 본다. 담보 비율이 깨지면 시장가로 던진다. 이때 만들어지는 캔들은 수급이 아니라 강제 청산의 흔적이고, 그래서 교과서 패턴이 잘 안 먹는다.

삼성전자 · 이 구간의 극단값
  최대 하락일  7/28  −13.39%   종가 220,000
  최저가       7/29  189,200   거래량 61,720,190주 (기간 최대)
  최대 상승일  7/31  +26.81%   종가 262,500
  --------------------------------------------------
  이틀 만에 −13% → 다음날 저가 −9% → 그 이틀 뒤 +27%
  이런 구간에서 "종가 기준 진입" 은 사실상 무의미하다

7월 29일 거래량 6,172만 주는 기간 평균의 두 배가 넘는다. 그리고 그날이 저점이었다. 이걸 뭐라고 부르느냐가 이 글의 출발점이다.


2. 캡처한 아홉 개 패턴, 하나씩 대본다

받은 패턴 목록은 이렇다. 각각을 삼성전자 실제 데이터에 대보고, 성립하면 근거를, 안 되면 왜 안 되는지를 적는다. 억지로 끼워맞추면 그 순간 이 글은 쓸모가 없어진다.

9개 패턴 판정 (삼성전자 · 2026-06-05 ~ 08-14)
  ✔ 약세 플래그          7/20~7/23  교과서적으로 성립
  ✔ 역 헤드 앤 숄더      7/20~8/13  넥라인 돌파까지 완성
  △ 강세 플래그          7/31~8/12  성립하나 되돌림이 깊다
  ✘ 이중 바닥            두 저점이 20% 차이 — 아님
  ✘ 이중 천장            봉우리가 하나뿐
  ✘ 헤드 앤 숄더(정방향)  왼쪽 어깨에 해당하는 고점 없음
  ✘ 컵 앤 핸들           바닥이 U자가 아니라 V자
  ✘ 인버티드 컵 앤 핸들   해당 구간 없음
  △ 엘리어트 파동        셀 수는 있으나 사후 해석 — 뒤에서 따로

아홉 개 중 확실히 성립하는 건 둘, 조건부가 둘, 나머지 다섯은 없다. 이 비율이 정상이다. 패턴 책을 펴놓고 차트를 보면 다 보이는 것 같지만, 기준을 숫자로 고정하는 순간 대부분 탈락한다.


3. 약세 플래그 — 이 구간에서 가장 깨끗했던 패턴

먼저 성립한 것부터. 7월 중순 하락 구간에 약세 플래그가 하나 있다.

삼성전자 약세 플래그

약세 플래그 구성 요소 (실측)
  깃대(flagpole)
    7/15 고가 284,500 → 7/20 저가 240,000
    3 거래일 만에 −15.6%
 
  깃발(flag)
    7/21 종가 259,000 → 7/22 260,500 → 7/23 270,000
    완만한 우상향 · 낙폭의 약 2/3 되돌림
 
  이탈
    7/24 종가 249,500 → 7/28 220,000 → 7/29 저가 189,200
  --------------------------------------------------
  급락 → 좁은 되돌림 → 같은 방향 재이탈. 정의 그대로다

약세 플래그의 논리는 단순하다. 급락 뒤 반등은 매수세가 아니라 숏 커버링과 저가 매수의 일시적 균형이고, 그 균형이 풀리면 원래 방향으로 간다는 것. 되돌림 구간의 거래량이 깃대보다 적으면 신뢰도가 올라간다고들 한다.

여기서 실제로 확인해보자.

깃대 vs 깃발 거래량 (실측)
  깃대 구간   7/15  24,247,740
              7/16  26,605,500
              7/20  24,304,800     평균 25,052,680
 
  깃발 구간   7/21  20,353,870
              7/22  21,248,990
              7/23  15,996,110     평균 19,199,657
  --------------------------------------------------
  깃발 거래량이 깃대의 76.6% — 교과서가 말하는 "감소" 조건 충족
  특히 7/23은 기간 최저 거래량. 되돌림의 힘이 빠진 자리였다

7월 23일 거래량 1,599만 주는 이 50거래일 중 가장 적다. 가격은 3일째 오르는데 거래량은 바닥이었다. 그 다음날부터 무너졌다.

이걸 코드로 옮기면

문제는 여기서 시작된다. 사람 눈에는 명확한데, 봇에게 시키려면 이렇게 정의해야 한다.

약세 플래그를 규칙으로 쓰면
  1. 깃대: 최근 N봉 안에 X% 이상 하락       N? X?
  2. 깃발: 이후 M봉이 좁은 상승 채널        M? 채널 폭 허용치?
  3. 거래량: 깃발 평균 < 깃대 평균          이건 명확
  4. 진입: 깃발 하단 이탈 시 숏             "이탈" 을 종가로? 장중으로?
  --------------------------------------------------
  자유 파라미터 5개. 각각을 정하는 순간 과최적화가 시작된다
  RSI 는 파라미터가 기간 1개, 문턱 1개였다

내 봇의 RSI 게이트는 조절할 값이 둘이다. 기간과 문턱. 그래서 8.9일치 매매기록을 전수로 훑어 45라는 숫자를 뽑을 수 있었다. 플래그는 자유도가 다섯이다. 같은 데이터로 다섯 개를 동시에 맞추면, 그건 최적화가 아니라 과거에 곡선을 그려 넣는 일이다.

3시대 모놀리스 시절에 이걸 몸으로 배웠다. 지표를 늘리면 판단이 좋아지는 게 아니라 설정의 복잡도가 먼저 는다.


4. 역 헤드 앤 숄더 — 이 구간의 주인공

이 글에서 가장 흥미로운 발견이다. 7월 말 폭락과 8월 반등이 완성된 역 헤드 앤 숄더를 만들었다.

삼성전자 역 헤드 앤 숄더

역 헤드 앤 숄더 구성 요소 (실측)
  왼쪽 어깨   7/20 저가  240,000
  머리        7/29 저가  189,200   ← 기간 최저 · 최대 거래량
  오른쪽 어깨 8/11 저가  227,500
  넥라인      7/31 고가  267,000
  --------------------------------------------------
  돌파        8/13 종가  268,000   넥라인 위 마감
              8/14 종가  274,500   추가 상승 확인
  --------------------------------------------------
  어깨 비대칭   왼쪽 240,000 vs 오른쪽 227,500 (5.2% 차이)
  시간 간격     어깨→머리 6봉 · 머리→어깨 8봉 (비교적 대칭)

교과서적으로 꽤 잘 맞는다. 어깨 높이가 5.2% 차이 나는 건 허용 범위로 보는 게 일반적이고, 시간 간격도 6봉 대 8봉이면 균형이 나쁘지 않다. 머리 자리에서 거래량이 기간 최대였다는 것도 정석이다 — 항복 매물이 나온 자리가 머리라는 게 이 패턴의 논리니까.

계측 목표라는 것

이 패턴에는 목표가를 뽑는 공식이 붙어 있다.

계측 목표(measured move) 계산
  머리 깊이 = 넥라인 − 머리
            = 267,000 − 189,200
            = 77,800
 
  목표      = 넥라인 + 머리 깊이
            = 267,000 + 77,800
            = 344,800
  --------------------------------------------------
  8/14 종가 274,500 기준 +25.6% 지점
  기간 최고 374,500 대비로는 아직 −7.9% 자리
  --------------------------------------------------
  ※ 이건 예측이 아니라 패턴의 산술이다. 맞을 이유가 없다

이 숫자를 어떻게 대해야 하는지가 중요하다. 344,800은 전망이 아니다. 그냥 패턴 정의에 딸린 산술일 뿐이고, 도달할 근거는 어디에도 없다. 다음 글에서 SK하이닉스 사례를 보면 이 목표치가 정확히 맞았다가 곧바로 크게 깨지는 장면이 나온다.

내가 이런 숫자를 다룰 때 쓰는 기준은 하나다. 검증할 수 있느냐. 손절 −2.5%는 실측 58건을 다시 계산해서 기대값 +0.209%를 확인하고 채택했다. 344,800은 그런 검증이 불가능하다. 표본이 1건이니까.

코드로 옮길 때의 진짜 난관

역 헤드 앤 숄더를 봇에 넣으려면 어깨를 찾아야 한다. 어깨는 스윙 저점이고, 스윙 저점은 이렇게 정의한다.

스윙 저점 탐지 — k값에 따라 결과가 바뀐다
  정의: 좌우 k봉보다 저가가 낮으면 스윙 저점
  --------------------------------------------------
  k=3  6/11 · 6/23 · 7/02 · 7/20 · 7/29 · 8/11   6개
       → 7/20, 7/29, 8/11 이 잡힌다 (어깨·머리·어깨)
 
  k를 키우면  어깨가 사라진다
  k를 줄이면  노이즈 저점이 어깨로 잡힌다
  --------------------------------------------------
  즉 "패턴이 있다" 는 결론 자체가 k에 종속된다
  k=3 을 고른 근거? 없다. 그게 예쁘게 나와서다

이게 시각적 패턴의 근본 문제다. 패턴을 찾는 파라미터를 내가 고르고, 그 파라미터가 패턴의 존재 여부를 결정한다. RSI는 안 그렇다. 기간 14로 계산한 RSI 값은 누가 계산해도 같다. 문턱을 어디 두느냐는 다툴 수 있지만 값 자체는 객관적이다.

5시대에 앵커드 VWAP을 봇에서 뺀 이유와 정확히 같은 문제다. 사람이 앵커를 찍으면 강력한데, 앵커 선택 규칙을 만드는 순간 그 규칙이 또 하나의 튜닝 대상이 된다. 좋은 지표와 자동화하기 좋은 지표는 다르다.


5. 강세 플래그 — 성립하지만 교과서보다 깊다

8월 반등 구간에도 플래그가 있다. 다만 정직하게 말하면 교과서보다 헐겁다.

삼성전자 강세 플래그

강세 플래그 · 되돌림 비율 점검
  깃대   7/30 종가 207,000 → 7/31 종가 262,500  (+26.81%)
         깃대 폭 = 55,500
 
  깃발   8/03 종가 239,500 → 8/11 종가 230,000
         8/11 저가 227,500
  --------------------------------------------------
  되돌림 = (262,500 − 227,500) ÷ 55,500 = 63.1%
  --------------------------------------------------
  교과서는 보통 38~50% 되돌림을 플래그로 본다
  63%면 "깃발" 보다 "조정" 에 가깝다 — 나는 △로 판정했다
 
  돌파   8/12 종가 255,500 → 8/13 268,000 → 8/14 274,500

결과만 보면 돌파했으니 맞은 패턴이다. 그런데 결과로 패턴을 판정하면 아무것도 못 배운다. 되돌림이 63%까지 갔다는 건, 그 시점에 실시간으로 보고 있었다면 “플래그가 깨졌다"고 판단했을 가능성이 높다는 뜻이다.

이게 사후 판정의 함정이다. 차트를 다 그려놓고 보면 8월 3~11일이 예쁜 눌림으로 보이는데, 8월 11일 장중에는 그냥 계속 흘러내리는 차트였다.

8/3 ~ 8/11 을 실시간으로 봤다면
  8/03  239,500   전일 262,500 대비 −8.8%
  8/04  240,000
  8/05  246,000   반등하나?
  8/06  230,500   −6.3%
  8/07  231,000
  8/10  230,000   7/31 급등분의 절반 반납
  8/11  239,500   장중 저가 227,500 찍고 마감은 +4.1%
  --------------------------------------------------
  6거래일 연속 하락 압박. "깃발" 이라고 부를 배짱이 있었을까
  8/11 의 아래꼬리(227,500 → 239,500)가 사실상 유일한 신호였다

6. 성립하지 않는 것들 — 여기가 더 중요하다

패턴 글은 대개 맞은 것만 보여준다. 안 맞은 걸 적어야 기준이 생긴다.

이중 바닥이 아니다

7월 29일 저점과 8월 11일 저점을 보고 이중 바닥이라 부르고 싶어진다. 숫자를 보면 아니다.

이중 바닥 판정
  첫 저점  7/29  189,200
  둘째 저점 8/11  227,500
  --------------------------------------------------
  차이 = (227,500 − 189,200) ÷ 189,200 = +20.2%
  --------------------------------------------------
  이중 바닥은 두 저점이 대체로 3% 이내여야 한다는 게 통설
  20%면 같은 바닥이 아니라 그냥 "더 높은 저점" 이다
  → 이건 이중 바닥이 아니라 역 H&S 의 오른쪽 어깨다

같은 두 점을 놓고 “이중 바닥"이라 부르면 틀리고 “오른쪽 어깨"라 부르면 맞다. 패턴 이름은 데이터가 정하는 게 아니라 내가 고르는 것이라는 게 여기서 드러난다. 위험한 성질이다.

컵 앤 핸들도 아니다

컵 앤 핸들은 완만한 U자 바닥 뒤에 작은 손잡이가 붙는 모양이다. 이 구간의 바닥은 U가 아니다.

바닥 모양 판정
  7/27  254,000
  7/28  220,000   −13.39%
  7/29  208,500   저가 189,200
  7/30  207,000
  7/31  262,500   +26.81%
  --------------------------------------------------
  바닥 체류 3거래일. 낙하 2일 · 반등 1일
  U자가 아니라 완벽한 V자다 → 컵 앤 핸들 불성립
  V자 바닥은 "축적" 이 없다는 뜻 — 컵의 논리와 정반대

컵 앤 핸들의 논리는 긴 바닥에서 매물이 소화된다는 것이다. 3일 만에 튀어 오른 바닥에는 소화할 시간이 없었다. 모양이 안 맞으면 논리도 안 맞는다.

정방향 헤드 앤 숄더와 이중 천장도 없다

고점 쪽을 보면 6월 19일 374,500이 유일한 봉우리다. 왼쪽 어깨에 해당할 만한 직전 고점이 이 구간 안에 없고, 6월 25일 362,500은 봉우리라기보다 하락 과정의 반등이다. 두 번째 봉우리가 없으니 이중 천장도 성립하지 않는다.

참고로 다음 글의 SK하이닉스는 여기가 완전히 다르다. 같은 시장, 같은 기간인데 하이닉스에는 교과서적인 이중 천장이 있다. 종목마다 모양이 다르다는 게 패턴 분석의 재미이자 함정이다.


7. 엘리어트 파동 — 셀 수는 있는데

받은 목록에 엘리어트가 있으니 짚고 넘어간다. 이 랩에는 이미 엘리어트를 다룬 글이 있고, 결론은 “봇에 넣을 수 없다"였다. 이번 데이터로 다시 확인해보자.

하락 5파로 세어보면
  ①  6/19 374,500 → 7/02 종가 286,000
  ②  7/02 → 7/06 종가 318,000        되돌림
  ③  7/06 → 7/20 종가 244,000        가장 긴 파동
  ④  7/20 → 7/23 종가 270,000        되돌림
  ⑤  7/23 → 7/29 저가 189,200        최종 하락
  --------------------------------------------------
  그럴듯하다. ③이 가장 길다는 규칙도 지켜진다
  문제: 이 파동 구분을 7/29 이전에 할 수 있었나?
  ⑤가 끝났는지 ⑤ 안의 소파동인지는 끝나야 안다

파동 카운팅의 문제는 끝나야 셀 수 있다는 것이다. ⑤파가 189,200에서 끝났다는 건 지금 뒤돌아보니까 아는 것이고, 7월 30일 시점에는 ⑤파가 더 이어질지 ⑥파는 없으니 반등할지 알 수 없었다.

그래서 이 랩의 판정은 여전히 같다. 엘리어트는 해석 도구지 신호 도구가 아니다. 봇에게 시킬 수 있는 건 “지금이 몇 파인가"가 아니라 “지금 RSI가 45 이하인가” 같은 질문뿐이다.


8. 낙폭·회복 곡선과 항복의 흔적

패턴에서 잠깐 떨어져서, 이 구간의 성격을 두 장으로 보자.

기간 최고가 대비 낙폭

기간 최고가를 0%로 놓고 종가를 환산한 그림이다. 삼성전자는 −47.9%까지 갔다가 −26.7%로 올라왔고, SK하이닉스는 더 깊이 갔다가 덜 올라왔다. 같은 사이클인데 진폭이 다르다.

거래량과 등락률의 관계

이 산점도가 개인적으로는 가장 실용적이다. 가로축이 거래량, 세로축이 등락률인데 평균 거래량 오른쪽에 큰 하락과 큰 반등이 몰려 있다.

거래량 상위 4일의 등락률
  7/29  61,720,190주   −5.23%   저가 189,200 (기간 최저)
  7/31  57,878,850주   +26.81%  최대 상승일
  7/30  46,149,140주   −0.72%
  6/24  47,809,959주   +9.84%
  --------------------------------------------------
  기간 평균 거래량  30,236,517주
  --------------------------------------------------
  바닥과 최대 반등이 거래량 1·2위 날에 함께 있었다
  다만 이건 사후 관찰이다 — 7/29 당시엔 그냥 폭락일이었다

“거래량 터진 날이 바닥"이라는 말은 맞기도 하고 틀리기도 하다. 여기서는 맞았다. 그런데 7월 28일에도 4,035만 주가 터졌고 그날은 바닥이 아니었다. 거래량 급증은 전환의 필요조건일 수는 있어도 충분조건이 아니다.

내 봇이 거래량을 게이트로 쓰는 방식도 이래서 소극적이다. “거래량이 터지면 산다"가 아니라 **“거래량이 너무 없으면 안 산다”**로 쓴다. 사도 못 파는 종목을 거르는 용도지 신호가 아니다.


9. 그래서 봇에 넣을 것인가

정리하면 이렇다.

시각적 패턴 vs 계산 지표 — 자동화 관점
                       차트 패턴            계산 지표(RSI 등)
  값의 객관성          탐지 파라미터 종속     누가 계산해도 동일
  자유 파라미터        4~6개                1~2개
  실시간 판정          완성돼야 안다         매 봉 계산 가능
  검증 가능성          표본이 극히 적다      전 구간 재계산 가능
  사후 편향            매우 큼              작음
  --------------------------------------------------
  결론: 패턴은 읽는 데 쓰고, 규칙은 계산 지표로 만든다

안 넣는다. 다만 버리지도 않는다.

차트 패턴이 쓸모없다는 게 아니다. 이 구간을 패턴 언어로 읽으니 “7월 말에 항복이 나왔고 8월에 어깨를 만들며 넥라인을 넘었다"는 서술이 가능해졌다. 이건 “RSI가 30 아래로 갔다가 50을 회복했다"보다 훨씬 많은 걸 담는다.

문제는 그 서술을 사전에 할 수 있느냐다. 못 한다. 그래서 패턴은 사후 복기와 시장 이해에 쓰고, 진입 규칙은 계산 가능한 지표로 만든다. 역할을 나누는 것이다.

4시대 병렬 실험기에서 배운 게 이거였다. 좋은 아이디어 두 개를 한 계좌에 넣으면 둘 다 나빠질 수 있다. 한 봇은 한 성격만. 패턴 인식과 게이트 판정은 성격이 다른 일이고, 섞으면 어느 쪽이 틀렸는지 알 수 없게 된다.


10. 남기고 싶은 세 문장

첫째, 안 맞는 패턴을 세는 게 맞는 패턴을 찾는 것보다 유용하다. 아홉 개 중 다섯은 없었다. 이 비율을 알고 나면 “차트에 패턴이 보인다"는 말이 얼마나 헐거운지 감이 온다.

둘째, 패턴의 존재 여부가 탐지 파라미터에 종속된다면 그건 관찰이 아니라 선택이다. k=3으로 스윙을 잡으니 어깨가 셋 나왔다. k를 바꾸면 결론이 바뀐다. 값 자체가 객관적인 지표와는 다른 종류의 물건이다.

셋째, 계측 목표는 예측이 아니라 산술이다. 344,800이라는 숫자에 근거가 있다고 믿는 순간 위험해진다. 다음 글에서 이 숫자가 정확히 맞았다가 곧바로 크게 깨지는 실제 사례를 보게 된다.

시장이 틀린 게 아니라 사람이 틀린 거라는 제시 리버모어의 말을 차트 패턴에 옮기면 이렇게 바꿔 말하고 싶다 — 패턴이 틀린 게 아니라, 패턴을 찾는 기준을 내가 정했다는 걸 잊은 게 틀린 거다.


이 글은 개인의 학습 기록이며 투자 권유가 아닙니다. 모든 가격은 stockanalysis.com 일봉(2026-08-14 조회) 기준이며, 지수 수치의 출처는 본문에 표기했습니다.