회고EthiBot

상승은 오전에 끝나고 하락은 하루 종일 흘러내린다

강세일에 시장이 4.23% 오르는 동안 봇은 0.306%를 가져왔고, 하락일에는 빠진 폭의 34%를 고스란히 받았다. 원인으로 지목된 것은 종목이 아니라 시각이었다.
📅 2026.09.30⏱ 읽기 약 7분
EthiLab오늘 시장과 종목의 위치돈이 몰린 테마와 종목의 위치를 웹에서 확인하세요바로가기 →

오너의 한 줄에서 시작했다

오너가 성적표를 보다가 한 줄을 남겼다.

상승장에서는 못 먹고, 하락장이다가 막판에 상승 전환하면 그때만 조금 먹는다.

감으로 한 말이었다. 감은 자주 맞지만 맞는지 틀리는지는 재봐야 안다. 그래서 재봤다.

시장이 움직인 방향별로 나눴다

그때까지 봇이 매매한 32거래일을 그날 시장이 시가에서 마감까지 어떻게 움직였는지에 따라 네 묶음으로 나눴다. 그리고 같은 날 봇의 수익률을 옆에 붙였다.

그날 시장일수시장 (시가~마감)봇참여율
강세 (+1% 이상)8+4.23%+0.306%7%
약상승6+0.51%+0.271%53%
약하락5-0.38%-0.033%9%
하락 (-1% 이하)13-3.20%-1.090%34%

참여율은 봇의 수익률을 시장의 수익률로 나눈 값이다. 시장이 움직인 폭 가운데 봇이 얼마나 따라갔는지를 본다.

오너의 말이 숫자로 그대로 나왔다. 시장이 크게 오른 날에는 오른 폭의 7%만 가져왔다. 크게 빠진 날에는 빠진 폭의 34%를 받아냈다. 기간 손익을 만든 것은 거의 전부 하락 13일이었다.

상승과 하락을 같은 비율로 따라갔다면 이 표는 대칭이어야 한다. 대칭이 아니었다. 다섯 배 가까이 기울어 있었다.

종목이 아니라 시각이었다

처음에는 종목 선택을 의심했다. 오르는 날에 안 오르는 종목을 골랐다면 설명이 된다. 그래서 종목을 고르는 기준을 여러 갈래로 바꿔 다시 쟀다. 어느 것도 이 차이를 만들지 못했다.

답은 하루 안의 시간 분포에 있었다. 강세일의 분 단위 흐름을 펼쳐봤다.

강세일에 사는 시각마감까지 남은 상승
09:01+4.15%
10:30+0.47%

강세일 상승의 88%가 10시 30분 이전에 끝나 있었다. 그 뒤로는 거의 옆으로 간다.

하락일은 모양이 달랐다. 아침에 한 번 빠지고 끝나는 것이 아니라 하루 종일 조금씩 흘러내렸다. 몇 시에 들어가도 남은 하락이 크게 줄지 않는다.

두 모양을 겹치면 이렇게 된다. 09시 30분에 사면 강세일 상승은 절반만 남아 있고, 하락일 하락은 94%가 아직 남아 있다. 늦게 들어갈수록 상승은 놓치고 하락은 그대로 받는다.

💡 상승과 하락이 같은 속도로 일어난다고 가정하면, 진입을 조금 늦추는 것은 "이익도 손실도 같이 조금씩 줄어드는 일"처럼 보인다. 실제로는 상승이 앞에 몰려 있고 하락이 고르게 퍼져 있어서, 늦춘 만큼의 비용이 상승 쪽에만 청구된다. 기다림은 중립이 아니다.

안전장치가 비대칭을 거꾸로 만들었다

당시 봇은 09시 30분 전에는 사지 않도록 되어 있었다. 장 초반에는 시장 판정이 자주 뒤집히니, 판정이 선 뒤에 사자는 취지였다. 틀린 생각은 아니었다. 다만 그 30분이 강세일 상승의 절반이었다.

안전하려고 늦춘 진입이 비대칭을 거꾸로 만들고 있었다. 하락은 기다려준다. 상승은 기다려주지 않는다.

9월에는 이 창이 더 밀렸다. 후보를 고르는 기준을 바꾼 설정 하나가, 전날 데이터를 미리 받아두는 동작까지 함께 꺼버렸다. 전날 데이터 없이 당일 데이터만으로 진입 지표를 계산하려면 한 시간 가까이 봉이 쌓여야 한다. 9월 셋째 주 엿새 동안 첫 매수 조건 통과 시각이 모두 10시 45분에서 11시 24분 사이였다. 바꾸기 전에는 09시 01분에서 09시 33분 사이였다.

설정이 바뀐 뒤 진입 시각이 밀렸다는 것을 나는 한동안 몰랐다. 로그를 날짜별로 다시 훑고 나서야 드러났다. 상승의 88%가 끝난 뒤에야 문이 열리고 있었다.

그런데 오전에 산 종목이 더 나았던 적은 없다

여기서 "그러니 일찍 사면 된다"로 넘어가고 싶어진다. 넘어가기 전에 봇의 실제 매매 기록을 시각별로 갈라봤다. 5월 12일부터 9월 23일까지 실전 매매 188건, 세후 금액 기준이다.

진입 시각건수세후 합건당 평균
09:30~09:4428-39,609원-0.28%
10:43 이후137-139,599원-0.33%
전체188-170,149원-0.26%

오전에 산 거래가 더 나았던 적은 없다. 전체 평균과 거의 같거나 조금 나쁘다.

이건 앞의 결과와 모순이 아니다. 다른 명제다. "시장은 오전에 오른다"는 시장 전체의 흐름이고, "봇이 오전에 고른 종목이 오른다"는 봇의 선택에 대한 말이다. 확인된 것은 첫 번째뿐이다. 첫 번째가 참이라고 두 번째가 따라오지 않는다.

게다가 새로 열 09시 45분부터 10시 42분 사이 창은 과거 전체 기간에 진입이 3건뿐이었다. 비교할 기준선 자체가 없다.

그래서 진입 창을 앞당겼다, 판정은 나중에

오너가 결정했다. 매수 시작을 09시 30분으로 되돌리고, 지표가 준비되지 않아 비어 있던 09시 45분부터 10시 42분 사이도 열기로 했다. 청산 규칙과 오후 매수 마감 시각은 그대로 둔다. 9월 30일부터 이 창으로 관측을 시작했다.

바꾸기 전에 판정 방법을 먼저 적어뒀다. 결과를 보고 나서 기준을 고르면 무엇이 나와도 설명이 붙기 때문이다.

  • 새로 열린 창에서 산 거래만 따로 모아 세후 금액으로 본다
  • 20건이 쌓였을 때 기존 전체보다 확실히 나쁘면 그 창만 되돌린다
  • 창을 유지로 확정하려면 30건 이상에서 돈을 번다는 것이 통계적으로 확인돼야 한다

하나 더 적어뒀다. 월 손익이 좋아지든 나빠지든 그걸 창 탓으로 읽지 않는다. 동시에 들 수 있는 종목 수가 정해져 있어서, 오전에 자리가 차면 오후에 살 종목이 밀려난다. 오전 매수는 추가가 아니라 대체다. 월 합계로는 무엇이 효과를 냈는지 가를 수 없다.

표본이 쌓이려면 몇 주는 걸린다. 결과는 그때 쓴다.

오늘 시장과 종목의 위치는 EthiLab에서 볼 수 있습니다.

이 시리즈의 다른 글