볼린저 밴드는 가격이 최근 변동성 대비 어디쯤 있는지를 재는 도구다. 중심에 이동평균선을 두고, 그 위아래로 표준편차의 배수만큼 밴드를 그린다. 가격이 밴드 바깥으로 나가면 통계적으로 드문 움직임이라는 뜻이고, 대개는 평균으로 되돌아올 가능성에 무게를 싣는 신호로 쓰인다. 문제는 밴드 자체가 최근 가격으로 다시 계산되는 움직이는 잣대라는 점이다. 변동성이 커지면 밴드도 같이 벌어지고, 그러면 정작 변동성이 커진 구간에서는 이탈 신호가 잘 안 뜬다. 밴드가 좁을 때는 작은 움직임도 밖으로 튀어나오지만, 밴드가 한번 넓어지고 나면 어지간한 등락은 다 그 안에 들어가 버린다.
현대모비스는 이 구간을 시험하기에 적당한 종목이었다. 6월 중순 고점을 찍은 뒤 6주 만에 저점까지 38.70% 밀렸고, 저점 이후 8월 24일 종가까지는 다시 18.67% 올라왔다. 낙폭도 크고 반등도 빨라서, 밴드가 급변하는 변동성을 얼마나 늦게 따라잡는지 보기 좋은 구간이었다. 자동차 부품 업종 특성상 완성차 판매나 환율 같은 외부 변수에 실적이 좌우되는 편인데, 이 글에서는 그런 재료를 따지지 않고 오로지 가격과 거래량으로만 지표를 채점한다.
종목 현대모비스 (012330)
구간 2026-06-12 ~ 2026-08-24 (50거래일)
출처 stockanalysis.com/quote/krx/012330
--------------------------------------------------
구간 최고 686,000원 (06/16)
구간 최저 420,500원 (07/28)
시작 종가 607,000원 (06/12)
종료 종가 499,000원 (08/24)
고점 대비 낙폭 38.70%이 글은 투자 조언이 아니다. 수집한 일봉으로 지표를 계산하고 신호의 적중 여부를 기록한 것뿐이다.
계산식과 파라미터
볼린저 밴드는 세 줄로 이뤄진다. 중심선은 종가의 N일 단순이동평균이고, 상단과 하단은 그 위아래로 같은 기간의 표준편차에 배수 K를 곱한 값을 더하고 뺀다.
중심선 SMA = mean(Close, N)
표준편차 STD = std(Close, N) (표본이 아닌 모집단 표준편차, ddof=0)
--------------------------------------------------
상단 Upper = SMA + K × STD
하단 Lower = SMA - K × STD
--------------------------------------------------
채택값 N = 20, K = 2N은 20을 썼다. 코스피 한 달 거래일수와 거의 같고, 원 개발자 존 볼린저가 제시한 기본값이자 대부분의 차트 프로그램이 기본으로 깔아 두는 값이라 다른 글이나 매매 화면과 비교하기도 쉽다. K는 2를 썼다. 종가 분포를 정규분포로 가정하면 평균에서 표준편차 2배 안쪽에 약 95%가 들어오므로, 밴드 바깥은 통계적으로 드문 구간이라는 해석이 성립한다. 물론 실제 주가 수익률은 정규분포보다 꼬리가 두껍다는 게 정설이라, 이 95%라는 숫자를 곧이곧대로 믿을 근거는 약하다. 뒤에서 K를 1.5와 2.5로 바꿔서 그 민감도를 따로 확인했다.
50거래일 중 처음 19일은 20일치 데이터가 안 쌓여 밴드값이 없다. 첫 유효값은 7월 9일이다. 즉 6월 16일 고점부터 7월 9일까지, 이 구간에서 가장 극적으로 움직인 3주 반은 애초에 밴드 신호를 낼 수 없는 예열 구간이었다.

신호 전수 검증
밴드가 유효해진 뒤에도 곧바로 신호가 뜨지는 않았다. 7월 9일의 표준편차는 60,462원으로, 상단이 660,225원, 하단이 418,375원까지 벌어져 있었다. 6월의 급등락이 20일 창 안에 그대로 남아 있었기 때문이다. 이 창이 좁혀지는 데 시간이 걸렸고, 밴드폭(상단-하단을 중심선으로 나눈 값)은 7월 9일 44.84%에서 7월 21일 11.34%까지 줄었다. 밴드가 좁아진 뒤에야 첫 이탈 신호가 나왔다.

50거래일 동안 종가가 밴드를 벗어난 날은 세 번이다. 평가 기준은 이탈 다음 날부터 5거래일 안에 종가가 그날의 중심선을 다시 넘어왔는지(하단 이탈이면 위로, 상단 이탈이면 아래로)로 잡았다.
07/23 상단 종가 524,000 > 상단 523,140 (+0.16%)
5일 내 최저 종가 440,000 (-16.03%) → 중심선 하회, 적중
07/28 하단 종가 440,000 < 하단 448,620 (-1.92%)
5일 내 최고 종가 493,500 (+12.16%) → 중심선 상회, 적중
08/14 상단 종가 547,000 > 상단 542,350 (+0.86%)
5일 내 최저 종가 496,000 (-9.32%) → 중심선 미도달, 불발3건 중 2건은 적중이고 1건은 불발이다. 7월 23일 신호는 밴드를 살짝 넘긴 정도였는데도 이후 닷새 사이에 종가가 16.03% 빠지면서 크게 맞아떨어졌다. 8월 14일은 다르다. 그날 종가는 상단보다 4,650원 높은 547,000원으로 마감했고, 이후 종가가 9.32%까지 밀리긴 했지만 닷새 안에 중심선(489,000원) 아래로는 내려오지 않았다. 위쪽으로 튄 만큼 다시 눌리긴 했어도, 이 지표가 기대하는 만큼의 평균회귀는 아니었다.
세 신호를 거래량으로도 갈라 봤다. 이탈 당일 거래량을 직전 20거래일 평균과 비교하면 7월 23일은 298,791주로 20일 평균(384,432주)의 0.78배에 그쳤고, 7월 28일은 386,385주로 평균(369,384주)과 거의 같은 1.05배, 8월 14일은 352,348주로 평균(320,790주)의 1.10배였다. 셋 다 뚜렷한 거래량 급증이라 부르기는 어려운 수준이다. 적중한 두 신호도, 불발한 신호도 거래량만으로는 구분되지 않았다는 뜻이라 거래량을 필터로 얹는다고 이 세 사례의 결과가 달라졌을 것 같지는 않다. 표본이 세 번뿐이라 적중률 숫자 자체에 큰 의미를 두긴 어렵다. 다만 세 번 중 한 번은 밴드를 넘긴 뒤에도 가격이 새 레인지를 만들며 버텼다는 사실은 남는다.
가장 아쉬운 대목은 신호가 하나도 없었던 6월 16일부터 7월 9일까지다. 6월 16일 장중 고가 686,000원에서 7월 9일 종가 465,000원까지, 이미 32.22% 빠진 뒤였다. 그런데도 20일 창이 그 급락 이전의 높은 가격을 계속 끌고 있었던 탓에 밴드가 너무 넓어서 하단 이탈이 뜨지 않았다. 이 지표를 놓고 보면 가장 큰 낙폭 구간에서는 조용했고, 그 낙폭이 20일 창 밖으로 밀려난 다음에야 비로소 말을 걸기 시작했다.
파라미터를 바꾸면
K=1.5 상단 이탈 3회, 하단 이탈 4회
K=2.0 상단 이탈 2회, 하단 이탈 1회
K=2.5 상단 이탈 0회, 하단 이탈 0회
--------------------------------------------------
N=10, K=2.0 상단 이탈 3회, 하단 이탈 1회 (유효 41일 기준)
K를 1.5로 낮추면 신호가 7건까지 늘어난다. 다만 늘어난 신호 대부분은 밴드에 살짝 닿았다 들어가는 수준이라 앞서 본 8월 14일 사례처럼 얕은 이탈이 많아진다. K를 2.5로 올리면 이 50일 구간에서는 밴드를 넘긴 날이 아예 없다.
기간을 20일에서 10일로 줄이면 이야기가 조금 달라진다. 상단 이탈이 7월 22일, 23일, 8월 14일 세 번, 하단 이탈이 한 번인데, 그 하단 이탈이 하필 7월 9일이다. N=20에서는 예열 구간이라 아무 신호도 없었던 바로 그날, N=10 기준으로는 종가 465,000원이 하단 468,975원보다 낮아 이탈로 잡힌다. N=10은 창이 짧은 만큼 예열 구간도 짧아서(첫 유효값이 6월 25일로, N=20보다 열흘 빠르다), 6월 급락이 한창이던 구간에도 한 번은 말을 걸었다는 뜻이다. 다만 이 신호는 저점(7월 28일, 420,500원)보다 훨씬 위인 465,000원 지점이라, 급락의 끝이 아니라 그 도중 한 지점을 잡은 것뿐이다. 오히려 진짜 저점인 7월 28일에는 N=10도 이탈을 내지 않았다. 짧은 기간이 예열은 줄여 주지만 저점을 정확히 짚어 준다는 보장까지는 아니다. 그 대신 밴드 자체가 좁아 사소한 반등에도 쉽게 걸린다. 이 구간만 놓고 보면 N=20, K=2가 신호 빈도와 신호 하나하나의 무게 사이에서 가장 균형이 맞았다.

밴드폭 차트를 보면 7월 21일에 밴드폭이 11.34%로 구간 중 가장 좁았고, 그 이틀 뒤인 7월 23일과 이어서 28일에 연달아 이탈이 나왔다. 좁아진 밴드 뒤에 방향성 있는 움직임이 따라오는 패턴 자체는 이 구간에서도 확인됐다. 다만 그 방향성이 이후 며칠 안에 다시 꺾이는 경우(7월 23일)와 새 레인지를 만드는 경우(8월 14일)가 섞여 있어서, 스퀴즈 뒤 이탈만 보고 방향에 베팅하기는 아직 근거가 얇다.
봇 게이트에 넣을 것인가
이번 구간 결과로는 단독 게이트로 넣기 어렵다. 신호가 50일에 세 번뿐이라 표본이 너무 적고, 그중 한 번은 밴드 바깥에서 새 레인지가 만들어지는 밴드워크였다. 앞서 본 대로 거래량은 세 신호를 구분해 주지 못했으니 거래량 필터를 얹는 건 근거가 약하다. 대신 밴드폭이 좁아진 뒤에 이탈이 몰렸다는 관찰은 이번 구간에서도 그대로 확인됐다. 그래서 밴드 이탈 자체를 매수·매도 신호로 쓰기보다는, 밴드폭이 최근 분포에서 하위 몇 퍼센트로 좁아졌는지를 변동성 국면 판별용 보조 지표로 쓰고, 실제 진입 여부는 다른 조건과 함께 판단하는 쪽이 이번 데이터로는 더 설득력 있어 보인다. 무엇보다 가장 크게 흔들린 구간에서 밴드가 침묵했다는 사실 하나만으로도, 이 지표를 유일한 진입 조건으로 세우기는 위험해 보인다.
남는 것
이번 구간에서 확인한 건 두 가지다. 하나는 밴드 이탈이 뜬 세 번 중 두 번은 예상대로 되돌아왔다는 것. 다른 하나는 그 세 번의 신호가, 이 종목이 실제로 가장 크게 흔들린 구간과는 겹치지 않았다는 것이다. 지표가 늦게 반응하는 이유는 결함이 아니라 설계 자체가 그렇다. 최근 변동성으로 밴드를 그리니, 변동성이 막 커지는 시점에는 밴드도 아직 안 벌어져 있다.
거래량을 같이 보면서 조금 놀랐던 대목도 있다. 밴드를 넘긴 세 날 모두 거래량이 평소보다 튀지 않았다는 점이다. 가격은 밴드 바깥으로 나갔는데 거래량은 평범했다. 소수의 큰손이 몰아붙인 흔적이라기보다는, 매수와 매도가 비슷한 규모로 계속 맞붙는 와중에 가격만 조금씩 밀려난 쪽으로 읽힌다. 이게 다른 종목이나 다른 구간에서도 반복되는 패턴인지는 이번 한 편으로는 알 수 없다.
8월 14일 신호가 닷새 뒤에도 중심선까지 못 내려온 이유가 거래량 때문이 아니라면 무엇 때문인지는 이 데이터만으로는 가르지 못했다. 다음에 같은 종목을 다시 다룰 기회가 있으면 그 구간의 다른 조건들을 더 얹어서 다시 봐야 할 대목으로 남겨둔다.
약어 풀이
- 이 글에 나온 영어 약어를 풀어 둔다.
- SMA (Simple Moving Average): 단순이동평균. 기간 안의 종가를 같은 가중치로 평균한 값. 볼린저 밴드의 중심선이다.
- STD (Standard Deviation): 표준편차. 가격이 평균에서 얼마나 흩어져 있는지를 재는 값. 볼린저 밴드의 폭을 결정한다.