코스피200 자동매매를 처음부터 정직하게
지난 이야기
지난 장에서 우리는 코스피200 200개 종목의 11년치 데이터를 모았다. 2015년 1월부터 2026년 7월까지, 약 50만 개의 행. 자동매매 실험의 첫 번째 벽돌을 놓은 것이다.
그리고 나는 이렇게 끝맺었다 — "데이터를 모았다고 끝이 아니다. 이제 그것을 의심할 차례다."
이번 장이 그 의심의 기록이다. 결론부터 말하면, 겉보기엔 멀쩡한 데이터 속에서 나는 세 개의 함정을 찾아냈다. 그리고 그중 하나는, 함정인 줄 알았다가 오히려 아름다운 사실로 밝혀졌다.
왜 데이터를 의심해야 하는가
요리를 시작하기 전, 좋은 요리사는 재료를 검사한다. 상한 고기가 하나라도 섞이면, 아무리 솜씨가 좋아도 요리 전체를 망치기 때문이다.
데이터도 똑같다. 아니, 더 위험하다. 상한 고기는 냄새라도 나지만, 오염된 데이터는 겉보기에 멀쩡하다. 숫자는 여전히 숫자처럼 보이고, 그래프는 여전히 그래프처럼 그려진다. 문제는 그 안에 섞인 '틀린 숫자' 하나가, 나중에 전략의 수익률 계산을 통째로 왜곡한다는 데 있다.
그래서 나는 데이터를 처음 보는 것처럼 훑었다. 내가 이미 아는 문제가 아니라, 내가 모르는 문제를 찾기 위해서. 발견한 것만 다시 확인하는 건 검증이 아니라 자기 위안이다.
그렇게 찾아낸 세 개의 함정을 하나씩 풀어놓겠다.
함정 ① — 배당이 사라진 가격: 매년 12월의 착시
가장 먼저, 그리고 가장 자주 나타나는 함정이다.
우리 데이터를 살펴보니, 매년 12월 말이 되면 수많은 종목이 거의 동시에 하락하고 있었다. 우연이 아니었다. 11년간 무려 1,895번, 이런 '집단 하락'이 기록되어 있었다.


원인은 배당락이다. 회사가 주주에게 배당금을 나눠주기로 하면, 그 권리가 확정되는 날(배당락일) 주가는 나눠줄 배당만큼 자동으로 조정된다. 예를 들어 1주에 1,000원을 배당하는 회사의 주가가 5만 원이었다면, 배당락일엔 4만 9천 원에서 시작한다. 주주 입장에서는 손해가 아니다 — 주가는 1,000원 내렸지만, 대신 배당금 1,000원을 받으니까.
문제는 데이터에는 이 하락만 찍히고, 배당금은 안 찍힌다는 것이다. 그래서 가격만 보면 '떨어진 것'처럼 보인다. 실제로는 주머니로 들어간 배당을 감안하면 손해가 아닌데도 말이다.
그런데 여기서 한 가지 의문이 든다. 정말로 주가가 '배당만큼' 정확히 낮아질까? 아니면 그냥 그날따라 떨어진 걸 배당락이라 부르는 걸까? 이걸 확인해봤다.
방법은 이렇다. 하루의 주가 움직임을 두 조각으로 분해한다. 하나는 '시초가 갭' — 어제 종가 대비 오늘 아침 얼마나 낮게 출발했는가. 다른 하나는 '장중 변동' — 출발한 뒤 하루 동안 얼마나 움직였는가. 배당락 효과는 아침 출발점에 나타나야 한다. 배당만큼 낮춰서 시작할 테니까.
결과는 명확했다. 배당락일 아침, 주가는 전날보다 평균 0.97% 낮게 출발했다. 반면 평범한 날은 오히려 살짝(+0.10%) 높게 출발했다. 이 차이가 순수한 배당락 효과다. 그리고 더 흥미로운 건, 실제로 낮게 출발한 경우들의 하락 폭이 평균 **-1.82%**였다는 점이다. 이 숫자는 한국 상장사의 평균 배당수익률(대략 1.5~2.5%)과 거의 정확히 일치한다. 배당금 액수가 데이터에 없어도, 하락 폭이 배당수익률과 맞아떨어진다는 사실이 '주가는 배당만큼 낮아진다'는 것을 증명한다. 이것이 우연일 확률은 통계적으로 0에 가까웠다.


이게 왜 함정인가? 만약 어떤 사람이 "매년 12월 말에 주가가 떨어지네? 그럼 12월엔 팔아야겠다"는 전략을 만든다면, 그는 매년 같은 착각을 반복하게 된다. 실제로는 배당을 받는 정상적인 조정을, 하락 신호로 오해하는 것이다.
우리 데이터에서 배당락일의 평균 하락폭은 **-0.78%**였다. 작아 보이지만, 200종목이 매년 12월에 일제히 겪는 현상이라 무시할 수 없다.
흥미로운 건, 배당락일이라고 모두 하락하지는 않았다는 점이다. 전체 1,895번의 배당락 중 약 62%는 하락했지만, 나머지 38%는 오히려 상승했다. 어떻게 배당락일에 주가가 오를 수 있을까? 앞서 나눈 '시초가 갭'과 '장중 변동'으로 분해해보면 답이 보인다. 상승한 날들을 뜯어보니, 이들은 배당락 부담이 애초에 작았던 데다(시초가가 거의 안 낮아짐), 장중에 시장이 강해 평균 2%나 더 올랐다. 즉 배당락이라는 약한 역풍을, 그날의 강한 순풍이 덮어버린 것이다. 이 38%는 '배당락이 없었다'가 아니라 **'배당락을 딛고도 올랐다'**는 뜻이다. 데이터를 볼 때는 이렇게 표면의 숫자 뒤에 숨은 메커니즘까지 읽어야 한다.

여기서 정직하게 짚을 것이 하나 있다. 흔히 "한국 주식은 12월에만 배당락을 조심하면 된다"고 하는데, 데이터는 조금 다르게 말했다. 배당락의 86%는 확실히 12월에 몰려 있었지만, 3월에도 159번이나 있었다. 일부 기업은 12월이 아닌 다른 시기에 배당하기 때문이다. "12월만 조심"이 아니라 "12월이 대부분이되, 3월도 있다"가 더 정확한 그림이다.
그리고 배당락이라고 다 같은 것도 아니었다. 대부분은 1~2% 안팎의 조정이지만, 11년간 딱 6번은 배당락일에 10% 넘게 떨어졌다. 기업은행(-10.7%), 한일시멘트(-10.2%) 같은 종목들이다. 이건 일반적인 배당락으로는 설명되지 않는다. 은행이나 시멘트처럼 배당을 많이 주는 회사가 특별히 큰 배당을 실시했거나, 배당락과 다른 악재가 겹친 경우다. 데이터를 다룰 때는 이런 '예외의 예외'까지 봐야 한다 — 같은 '배당락'이라는 이름표가 붙어 있어도, 그 안에는 전혀 다른 사연들이 숨어 있다.
함정 ② — 900% 유령: 있을 수 없는 수익률
두 번째 함정은 훨씬 극적이다.
데이터를 훑다 보면, 이따금 하루에 +903% 오르고 다음 날 -90% 떨어지는 기록이 나타난다. 상식적으로 불가능하다. 한국 주식은 하루 등락 제한이 ±30%인데, 900%라니?
이건 실제 수익이 아니라 허깨비다. 회사가 액면병합(여러 주를 하나로 합치는 것)이나 감자 같은 조치를 하면, 주식의 '단위'가 바뀐다. 그런데 이 단위 변경이 데이터에 제대로 반영되지 않으면, 마치 하루아침에 가격이 폭등하거나 폭락한 것처럼 기록된다. 실제로는 아무 일도 없었는데 말이다.
이런 유령 데이터는 딱 하나만 섞여 있어도 치명적이다. 수익률을 계산할 때 이 900%가 끼어들면, 전략의 성과가 완전히 엉터리로 부풀려진다.
그런데 여기서 반전이 있다. 우리 실험 데이터에서 이런 유령을 세어보니 — 0건이었다.
어떻게 된 걸까? 답은 지난 장의 결정에 있다. 우리는 데이터를 2015년부터만 쓰기로 했다. 그리고 이런 유령 데이터는 대부분 그 이전, 2000년대 초반의 오래된 기록에 몰려 있었다. 즉 2015년으로 자르는 순간, 가장 위험한 오염이 함께 잘려 나간 것이다.
대신 진짜 급등락은 남아 있었다. 하루에 25~30% 움직인 '진짜 상한가·하한가'는 267번 있었다. 가짜 유령은 0건, 진짜 격변은 267건. 우리 데이터엔 허깨비는 없고, 시장의 진짜 격렬함만 남은 것이다.


이것이 지난 장에서 내가 2015년을 고른 두 번째 이유를 증명한다. 오래된 데이터일수록 더 더럽다. 데이터가 많다고 무조건 좋은 게 아니다.
함정 ③ — 한 종목의 두 개의 삶: 함정인 줄 알았던 아름다운 사실
세 번째는, 처음엔 심각한 오류인 줄 알았다가 오히려 감탄하게 된 경우다.
데이터를 상장일과 대조하다가, 이상한 걸 발견했다. 8개 종목의 데이터가, 그 종목의 상장일보다 앞서 시작하고 있었다. 예를 들어 어떤 종목은 상장일이 2024년인데, 데이터는 2015년부터 있었다. 회사가 상장하기도 전의 주가가 있다니, 물리적으로 불가능한 일이다.
처음엔 '한 종목 코드에 다른 두 회사가 섞인 오류'라고 생각했다. 그런데 그 8개 종목의 이름을 하나씩 확인하고, 나는 생각을 바꿔야 했다.
그 목록은 이랬다 — 카카오, 셀트리온, 포스코DX, 포스코퓨처엠, 엘앤에프, 더블유게임즈, 파라다이스, 동서.하나같이 우리가 아는 큰 회사들이다.
이들의 공통점은 무엇일까? 모두 코스닥에서 시작해, 코스피(유가증권시장)로 옮겨온 회사들이었다. 한국 주식시장은 코스닥(주로 중소·벤처)과 코스피(주로 대기업)로 나뉘는데, 코스닥에서 크게 성공한 기업이 코스피로 '승격'하는 경우가 있다. 이걸 이전상장이라 부른다.
- 카카오는 원래 코스닥에 있다가, 다음과 합병한 뒤 2017년 코스피로 왔다.
- 셀트리온은 바이오 기업으로 코스닥에서 시작해 2018년 코스피로 이전했다.
- 포스코DX는 원래 '포스코ICT'라는 이름으로 코스닥에 있다가, 사명을 바꾸고 2024년 코스피로 옮겼다.
즉, 데이터에 기록된 '상장일'은 이들이 코스피에 상장한 날이고, 2015년부터의 데이터는 이들이 코스닥 시절부터 쌓아온 기록이었던 것이다. 회사는 처음부터 끝까지 같은 회사다. 단지 무대를 옮겼을 뿐이다.
데이터는 오류를 낸 게 아니었다. 오히려 기업의 일대기를 정직하게 기록하고 있었다. 코스닥 새내기 시절부터, 코스피 우량주가 되기까지의 여정을 하나도 빠짐없이 담고 있었던 것이다.


흥미로운 사실을 하나 덧붙이면, 이런 '이전상장'은 종종 주가 상승의 신호이기도 하다. 코스닥에서 코스피로 옮길 만큼 성장했다는 뜻이니까. 실제로 셀트리온은 이전상장을 발표한 뒤 마지막 코스닥 거래일까지 주가가 크게 올랐다. 데이터 속의 '이상한 상장일'이, 알고 보면 한 기업의 성공 스토리를 품고 있었던 셈이다.
내가 오류라고 의심했던 것이, 사실은 데이터가 정직하다는 증거였다. 검증이란 이런 것이다 — 이상한 것을 발견하면, 성급히 '오류'라 단정하지 말고, 왜 그런지 끝까지 물어야 한다.
보이지 않는 함정 — 빠진 데이터
지금까지의 세 함정은 모두 '잘못된 값'에 관한 것이었다. 그런데 데이터에는 이보다 더 은밀한 함정이 있다. 바로 **'빠진 값'**이다.
무슨 뜻인가. 전략은 대개 "어제 대비 오늘 얼마나 올랐나"를 계산한다. 그런데 만약 중간에 어느 하루가 데이터에서 빠져 있다면? 프로그램은 그것도 모른 채, 엉뚱한 두 날을 '어제와 오늘'로 착각하고 계산한다. 이건 눈에 보이지도 않는다. 숫자는 여전히 그럴듯하게 나오니까. 그래서 잘못된 값보다 더 위험하다.
그래서 나는 200종목 각각이, 자기가 상장해 있던 기간 동안 거래일을 하루도 빠짐없이 갖고 있는지 검사했다. 결과는 놀라웠다 — 단 하나의 결측도 없었다. 11년간 2,832개의 거래일 동안, 200개 종목 중 어느 것도 데이터가 빠진 날이 없었다. 우리가 쓸 데이터의 뼈대가 완벽하다는 뜻이다.

(물론 '큰 간격'이 아예 없지는 않았다. 데이터를 보니 2017년 10월에 열흘 넘는 공백이 있었는데, 확인해보니 그해 추석 연휴였다. 온 시장이 함께 쉰 것이라 결측이 아니라 정상이다. 데이터에서 이상한 걸 발견하면, 성급히 오류라 단정하지 말고 이유를 확인해야 한다는 걸 여기서도 배운다.)
검증이 끝나고 — 우리가 딛고 선 땅
여러 각도에서 데이터를 살펴봤다. 정리하면 이렇다.
- **배당락(1,895건)**은 우리 데이터에 실제로 남아 있다. 매년 12월(그리고 일부는 3월), 배당을 나눠준 만큼의 정상적 조정. 이건 '오염'이라기보다 '이해하고 감안해야 할 특성'이다. 나중에 전략을 만들 때, 이 배당락을 신호로 착각하지 않도록 표시해둘 것이다.
- **유령 데이터(0건)**는 우리 데이터에 없다. 2015년으로 자르면서 가장 위험한 오염이 사라졌다. 남은 것은 진짜 시장의 급등락뿐.
- 이전상장 8종목은 오류가 아니라 기업의 역사였다. 데이터는 거짓말하지 않았다.
- 빠진 데이터는 없었다. 200종목의 뼈대가 하루의 결측도 없이 완전했다.
한 가지 정직하게 덧붙이면, 완벽하지 않은 구석도 찾았다. 거래대금 같은 보조 지표에서, 아주 드물게(전체의 0.04%) 숫자가 살짝 어긋나는 경우가 있었다 — 주로 주가가 백만 원이 넘는 고가주에서 반올림 때문에 생기는 것으로 보였다. 하지만 이것이 우리가 실제로 쓸 '종가'에는 영향을 주지 않고, 비율도 극히 미미하다. 이상 현상은 존재하지만, 그 영향은 무시할 수 있다. 이런 것까지 확인하고 넘어가는 것이 검증이다.

이 검증의 결론은 단순하지 않다. "데이터가 완벽하다"가 아니다. 오히려 **"데이터에 무엇이 있고, 무엇을 조심해야 하는지 정확히 안다"**가 결론이다. 배당락은 감안하고, 유령은 없음을 확인하고, 이전상장은 이해했다. 이제 나는 이 데이터를 믿을 수 있다 — 맹목적으로가 아니라, 그 한계까지 알기에.
재료 검사가 끝났다.
다음 장에서 — 드디어, 요리를 시작한다
두 개의 장을 지나는 동안, 우리는 아직 전략을 한 줄도 만들지 않았다. 데이터를 모으고(1장), 그것을 의심했을(2장) 뿐이다. 지루하게 느껴졌을지도 모른다.
하지만 이 지루한 준비가 이 프로젝트의 정직함이다. 화려한 전략을 자랑하기 전에, 그 전략이 딛고 설 땅이 단단한지부터 확인하는 것. 저 수많은 '연 40% 후기'들이 건너뛰는 바로 그 과정이다.
이제 땅은 단단하다. 다음 장에서, 나는 드디어 이 데이터로 첫 번째 전략을 세운다. 가장 단순한 것부터 시작할 것이다. 그리고 지난 장에서 못 박은 질문을, 마침내 데이터에 던진다.
이 시장에, 정말로 돈 벌 방법이 남아있는가?
나는 그 답을 안다고 믿는다. 하지만 믿음과 증명은 다르다. 다음 장에서, 그 첫 번째 시험이 시작된다.
(3장에서 계속)
이 시리즈의 모든 데이터와 검증 과정은 재현 가능합니다. 데이터 출처: 한국투자증권 KIS Open API · 분석 환경: Google Colab Pro. 다음 장에서는 첫 번째 매매 전략을 세우고 검증합니다.
'주식 자동매매' 카테고리의 다른 글
| 백테스트는 거짓말을 한다 ① 자동매매로 정말 돈을 벌 수 있을까 (0) | 2026.07.20 |
|---|