초퍼니스 지수(Choppiness Index)는 방향이 아니라 ‘얼마나 뒤엉켜 있는가’를 잰다. 값이 높으면 가격이 오르내림을 반복하며 제자리를 맴돈다는 뜻이고, 값이 낮으면 한쪽으로 밀리고 있다는 뜻이다. 이동평균이나 RSI처럼 위아래를 가리키는 지표가 아니라서, 다른 지표를 켤지 끌지 결정하는 ‘문지기’ 역할로 자주 쓰인다.

삼성화재(000810)를 이번 시험대로 고른 이유는 최근 두 달 흐름이 이 지표가 무력화되는 조건을 그대로 갖추고 있어서다. 종가는 6월 23일 646,000원에서 7월 16일 701,000원까지 오르내림을 반복하며(그 사이 7월 9일에도 하루 -7.30%가 있었다) 올랐다가, 사흘 뒤인 7월 20일 하루에 -14.12% 빠지며 602,000원으로 주저앉았다. 이후로도 7월 29일 587,000원까지 한 번 더 밀렸다. 명백한 추세 구간과 명백한 급락 구간이 붙어 있는 셈인데, 초퍼니스 지수가 이 구간에서 ‘추세’라고 제대로 알렸는지를 그대로 대조할 수 있다.

이 글의 데이터 범위
종목       삼성화재 (000810)
구간       2026-06-23 ~ 2026-09-02 (50거래일)
출처       stockanalysis.com 일봉
구간 최고   706,000원 (6/23 장중)
구간 최저   571,000원 (7/29 장중)
시작 종가   646,000원 → 끝 종가 657,000원 (+1.70%)
 
참고 7/16 종가 701,000원에서 7/29 종가 587,000원까지 -16.26%

이 글은 투자 조언이 아니다. 여기 실린 계산과 판단은 참고용이며 매매 결정과 그 결과는 전적으로 읽는 사람의 몫이다.

수집한 일봉은 stockanalysis.com에서 두 번 나눠 받아 겹치는 구간의 시가·고가·저가·종가·거래량이 전부 일치하는 것을 확인했다. 다만 해당 페이지의 표는 한 번에 최근 50거래일까지만 열람할 수 있어, 애초 목표였던 60거래일 확보에는 못 미쳤다. 이후 페이지(더 과거 구간)는 버튼 클릭으로만 넘어가는 구조라 이번 수집 방식으로는 닿지 않았다. 50거래일이라는 한계를 감안하고 아래 계산을 읽어주기 바란다.

삼성화재 캔들과 거래량

계산, 실측, 검증

초퍼니스 지수는 트루레인지(TR, True Range)의 합과 그 기간의 고가·저가 폭을 비교해서 만든다. 계산식은 다음과 같다.

계산식
TR   max( 고가-저가, |고가-전일종가|, |저가-전일종가| )
CI   100 × log10( ΣTR(n일) / (n일 최고 − n일 최저) ) / log10(n)
 
해석 CI가 61.8 이상이면 박스권, 38.2 이하면 추세로 읽는 게 관행이다

TR을 그대로 더한 값이 n일 고저폭보다 훨씬 크면, 가격이 오르내리며 갈지자로 움직였다는 뜻이라 CI가 높게 나온다. 반대로 TR 합이 고저폭과 비슷하면 가격이 거의 곧장 한 방향으로 걸어간 것이므로 CI가 낮아진다. 로그를 씌우고 log10(n)으로 나누는 건 n을 바꿔도 값의 범위가 대략 0~100 사이에 들어오게 맞추기 위해서다.

기간 파라미터는 14일로 잡았다. TradingView 기본값이기도 하고, ADX 같은 다른 방향성 지표와 같은 창을 쓰면 나중에 비교하기 쉽다는 실용적 이유도 있다. 문제는 50거래일짜리 데이터로 14일 CI를 돌리면 예열 구간 14일이 통째로 날아가 유효값이 36개밖에 안 남는다는 점이다. 그래서 20일짜리도 같이 돌려 뒤에서 비교했는데, 그쪽은 유효값이 30개로 더 줄어든다. 예열이 길수록 신뢰도는 올라가지만 쓸 수 있는 구간은 짧아지는 맞교환이 여기서도 그대로 나타났다.

삼성화재 종가와 초퍼니스 지수

실측값부터 적으면, 14일 CI는 36개 유효값 구간에서 최저 54.17(8월 5일), 최고 70.38(8월 20일), 평균 62.00으로 나왔다. 38.2 밑으로는 단 한 번도 내려가지 않았다. 7월 20일 하루 -14.12%짜리 급락과 그 뒤 이어진 하락이 있었는데도 지표는 그 구간을 ‘추세’로 분류하지 않았다.

가장 눈에 띄는 지점은 급락 당일이다. 7월 20일 종가가 하루 만에 701,000원대에서 602,000원으로 무너진 바로 그날, 14일 CI는 67.95였다. 61.8선을 훌쩍 넘겨 오히려 박스권 쪽에 가깝게 읽힌 값이다. 직전 13거래일 동안 오르내림이 잦았던 탓에 TR 합이 부풀어 있었고, 그 결과 하루짜리 대형 갭이 CI 값을 추세 쪽으로 끌어내리기에는 역부족이었다. 지표가 계산 구조상 여러 날의 등락을 누적해서 보는 이상, 단 하루의 충격은 쉽게 묻힌다는 뜻이다.

61.8선을 기준으로 CI가 아래에서 위로 올라간 시점(박스권 선언)과 위에서 아래로 내려간 시점(박스권 해제)을 전부 뽑아 그 뒤 5거래일 순변동률을 대조했다.

날짜신호CI5거래일 뒤 순변동판정
8/7진입(박스권 선언)63.40-4.65%빗나감
8/19진입(박스권 선언)67.89+10.93%빗나감
7/29이탈(박스권 해제)60.28+8.52%적중
8/11이탈(박스권 해제)61.43-4.37%적중
8/26이탈(박스권 해제)60.72-3.38%적중

신호별 5일 뒤 변동률

박스권을 선언한 두 번은 둘 다 틀렸다. 8월 7일 종가 645,000원에서 박스권을 선언한 뒤 가격은 8월 10일 630,000원, 12일 628,000원으로 조금씩 밀리다가 13일 611,000원까지 주저앉았다. 13일 거래량은 190,872주로 평균(약 115,156주)의 1.6배 넘게 튀었는데, 박스권이라던 구간치고는 거래도 값도 한쪽으로만 움직였다. 8월 19일 선언은 더 심했다. 종가 613,000원에서 시작해 21일 661,000원, 26일 680,000원까지 5거래일 만에 +10.93% 뛰어올랐다. 둘 다 옆으로 기지 않고 한쪽으로 걸어간 구간이었다.

반대로 박스권을 해제한 세 번은 세 번 다 ±3%를 넘는 실제 움직임으로 이어졌으니 적중으로 잡았다. 7월 29일 해제 시점의 종가 587,000원은 구간 저점이었고, 이날 거래량 272,269주는 50거래일 전체에서 가장 컸다. 다만 이 해제 신호는 가격이 이미 크게 흔들린 뒤에야 뒤늦게 따라온 값이라, 지표가 급락을 미리 알렸다고 보기는 어렵다. 미리 알리는 쪽인 진입 신호만 놓고 보면 이 종목, 이 구간에서 초퍼니스 지수의 적중률은 0/2다.

기간을 14일에서 20일로 늘리면 어떻게 달라지는지도 봤다. 20일 CI는 최저 56.91, 최고 66.04, 평균 61.82로 14일보다 폭이 좁아지고 더 매끄러워졌지만, 결론은 바뀌지 않았다. 38.2 밑으로는 역시 한 번도 안 내려갔고, 8월 19일 급등 직전 구간도 여전히 60대 초반에 머물러 있었다. 기간을 늘려도 이 지표가 이번 급락과 반등을 ‘추세’로 잡아내지 못한다는 점은 그대로였다.

14일과 20일 초퍼니스 지수 비교

이 결과를 놓고 보면 초퍼니스 지수를 단독 게이트로 쓰기는 어렵다. 61.8과 38.2라는 관행적 문턱이 이 종목의 실제 변동성 규모와 안 맞았을 수도 있고, 50거래일이라는 짧은 표본 안에서 문턱을 다시 잡아야 할 수도 있다. 다만 이건 계산이 잘못됐다는 뜻이 아니다. 애초에 방향까지 알려주도록 설계된 지표가 아닐 뿐이다. 방향 판단이 필요한 자리라면 ADX나 이동평균 기울기 같은 지표를 같이 두고, 초퍼니스 지수는 그 지표들의 신뢰도를 낮추는 필터 정도로만 쓰는 편이 이번 데이터로는 더 맞아 보인다.

남는 것

이번 구간에서 눈에 띈 건 지표가 틀린 방향이었다. 박스권이라고 선언했을 때 오히려 크게 움직였다는 건, 이 지표를 신호로 오해하면 손실 방향으로 확신을 얻는 꼴이 된다는 뜻이다. 필터로만 쓰라는 관행적 조언이 왜 나왔는지 이번 계산으로 조금 더 납득이 갔다.

하나 더 남기자면, 급락 당일 CI가 오히려 박스권 쪽으로 읽혔다는 사실이다. 데이터 50거래일이라는 좁은 창으로 확인한 결과라 다른 종목, 다른 구간에서도 같은 일이 반복될지는 아직 모른다. 그 확인은 다음 몫으로 미뤄둔다.

윌리엄 오닐은 시장이 조용해 보일 때일수록 다음 움직임에 대비하라고 했다. 이번 데이터를 보면 그 말은 초퍼니스 지수가 낮을 때만이 아니라 지표가 ‘조용하다’고 잘못 읽은 순간에도 똑같이 적용되는 것 같다.

이 글에 나온 계산은 수집한 일봉을 numpy로 직접 처리한 결과이며, 매수·매도를 권하지 않는다. 실제 투자 판단에 쓰려면 더 긴 구간과 다른 종목에서 같은 문턱이 성립하는지부터 따로 확인해야 한다. 다음 회차에서 다른 종목으로 같은 지표를 다시 시험해볼 여지는 남겨둔다.

약어 풀이

  • 이 글에 나온 영어 약어를 풀어 둔다.
  • CI (Choppiness Index): 가격이 방향성 없이 뒤엉켜 움직이는 정도를 0~100 사이 값으로 나타내는 지표.
  • TR (True Range): 하루 동안의 실질 변동폭. 당일 고저폭과 전일 종가 대비 갭을 함께 고려해 계산한다.
  • ADX (Average Directional Index): 추세의 강도를 재는 지표. 방향은 알려주지 않고 세기만 알려준다.
  • RSI (Relative Strength Index): 최근 상승폭과 하락폭의 비율로 과매수·과매도를 가늠하는 지표.