코어가 이틀 만에 돌아왔다 — 그런데 지수가 6.55% 오른 날 봇은 0.66%
오래 들고 가는 계좌가 8/14 이후 처음으로 다시 주식을 사서 아직 안 판 이익 72,312원이 붙었지만, 하루 만에 사고파는 계좌는 1번 사서 6,282원(내 돈 1,000만 원의 −0.063%)을 잃었고, 같은 날 지수는 6.55% 올랐다.
오늘 한눈에
- 지수가 크게 오른 날(하루 중 최고 +6.67%)이었고, 봇은 '사도 되는 날'로 봤다.
- 오래 들고 가는 계좌가 09:30에 두 종목을 샀다. 이틀 동안 0이던 것이 정상으로 돌아왔다.
- 하루 만에 사고파는 계좌는 1번 샀다가 정해둔 선까지 떨어져서 팔았다. −6,282원.
- 지금 전부 판다고 치면 오늘 하루는 +66,030원 (내 돈의 +0.66%)이다.
아직 안 판 이익 72,312원에서 오늘 확정된 손실 6,282원을 뺀 값이다.
- 지난 기록으로 다시 돌려본 결과가 실제와 손실 크기에서 6배 차이가 났다.
오늘 지수를 이겼나?
아니다. 크게 졌다. 지수가 많이 오르는 날에는 지수를 그냥 사서 들고만 있는 쪽이 유리한데, 봇은 그만큼 못 따라갔다.
| 항목 | 오늘 하루 | 4일 모아서 |
|---|---|---|
| 봇 (지금 전부 판다고 치면) | +0.660% (+66,030원) | +0.5502% |
| 지수를 그냥 사서 들고만 있기 | +6.548% | +0.9555% |
| 차이 | −6.610%p | −0.4053%p |
같은 날인데 차이가 두 개다. 하나는 −6.610%p, 하나는 −0.4053%p. 이유는 계산에 쓰는 봇 값이 다르기 때문이다. 하루짜리는 실제로 팔아서 확정된 돈(−0.063%)만 쓰고, 12일짜리는 지금 전부 판다고 친 값(+0.5502%)을 쓴다. 같은 표에 다른 자를 두 개 놓은 셈이다. 이건 하루 기록만으로 확실한 잘못이라 아래 진화 블록에 적었다.
주의할 것 하나. 위 오른쪽 칸은 4일치다. 실제로 팔아서 확정한 쪽은 12일치로 −0.9632%다. 둘을 섞어 읽으면 안 된다.
오늘 내 돈 1,000만 원 중 약 614만 원이 주식에 들어가 있었다. 어제(8분만 들어가 있던 날)와 달리 오늘은 비교가 성립한다. 그래서 진 것이 진 것이다.
코어는 정말 돌아왔나?
돌아왔다. 이게 오늘 가장 큰 소식이다.
| 시각 | 무슨 일 |
|---|---|
| 09:30:16 | 069500(코스피 지수를 따라가는 상품) 22주를 105,645원에 샀다 |
| 09:30:17 | 379800 149주를 24,140원에 샀다 |
| 종가 시점 | 목표 60.0%, 실제 59.9425% — 차이는 0.06%p뿐 |
8/18·8/19 이틀 동안 목표 60%인데 실제 0%였던 문제(D7)가 오늘 풀렸다. 봇이 남긴 기록에도 두 건 다 "체결"로 찍혔다. 사려던 값과 실제로 산 값의 차이도 0이었다.
하루 사고판 건 어떻게 됐나?
한 번 사서 한 번 졌다. 1번 중 0번 이겼다 — 하루치라 이 숫자로는 아무 판단도 못 한다.
| 시각 | 무슨 일 |
|---|---|
| 10:28:19 | 229200(코스닥150) 68주를 14,645원에 사겠다고 냈다 |
| 10:28:22 | 3초 만에 14,645원에 그대로 샀다 |
| 11:53:52 | 14,557원까지 떨어져서 정해둔 선에 걸려 팔았다 |
- 잃은 돈: 가격에서 −5,984원, 수수료 −298원 → 합쳐 −6,282원 (−0.63%)
- 사고 나서 제일 올랐을 때 +0.44%, 제일 떨어졌을 때 −0.61%
- 팔린 값 −0.601%는 정해둔 선 −0.6%와 거의 정확히 맞다
지수가 +3.39% 오르는 날인데, 봇이 산 코스닥150은 산 뒤로 계속 밀렸다. 사고 판 게 1번뿐이라 규칙이 나쁘다고 말할 수 없다.
지난 기록으로 다시 돌려보면?
오늘 실제로 돌려본 건 일곱 가지다.
| 다시 돌려본 것 | 거래 | 결과 |
|---|---|---|
| 지금 쓰는 방식 | 1번 | −39,004원 (−0.39%) |
| 자동 매도선 끄기 | 1번 | 위와 완전히 똑같음 |
| 옛날 방식 | 2번 | +8,646원 (+0.09%) |
| 옛날 방식 + 자동 매도선 끄기 | 2번 | +8,646원 (똑같음) |
| 옛날 방식 + 살 회사 조건 좁히기 | 0번 | 볼 게 없음 |
| 옛날 방식 + 지수 떨어지면 멈춤 강화 | 2번 | +8,646원 (똑같음) |
| 옛날 방식 + 손절 넓히고 조금씩 사기 | 2번 | +12,829원 (+0.13%) |
여기서 두 가지가 확실하게 어긋난다.
첫째, 팔린 값이 다르다. 다시 돌려본 쪽은 14,655원에 사서 14,545원에 팔아 −0.78%다. 정해둔 선 −0.6%대로면 14,567원이어야 한다. 22원 더 깊다. 그런데 오늘 실제 봇은 −0.601%로 정확했다. 다시 돌려보는 쪽만 틀린다.
둘째, 잃은 돈 크기가 6배다. 같은 1번 거래인데 실제는 −6,282원, 다시 돌려본 쪽은 −39,004원. 실제로는 약 100만 원어치를 샀는데, 다시 돌려보는 쪽은 약 500만 원어치를 산 것으로 계산하고 있다는 뜻이다.
이 둘은 하루 기록만으로 확실히 잘못이라 진화 블록에 적었다.
셋째, 손절을 넓히니 지는 거래가 사라졌다. 086520이 −0.98%에 잘리던 것이 −0.15%로 끝났다. 하지만 이 비교군은 손절 넓히기와 조금씩 사기를 같이 바꿨다. 어느 쪽 덕인지 모른다. 그래서 가설로 넘긴다.
지수 떨어지면 멈추는 규칙은?
오늘은 0분이다. 지수가 하루 종일 +2.0% 위에 있었으니 당연하다. 그리고 이 숫자는 옛날 방식으로 다시 돌려볼 때만 쓰는 것이고, 지금 실제로 돌아가는 봇에는 이 규칙 자체가 없다. 봇이 남긴 기록에도 그렇게 적혀 있다.
아직 못 고친 문제는?
오늘은 D7 한 건뿐이었고, 그 한 건이 오늘 풀렸다.
| 번호 | 나이 | 결과 |
|---|---|---|
| D7 | 3일 | 해결. 오늘 두 종목 다 샀고, 목표와 실제 차이가 0.06%p로 줄었다 |
지금까지 고친 것 14건, 버린 것 2건, 확인 중 1건이다.
가설은 몇 개나 판정됐나?
하나도 안 됐다. 12개가 줄 서 있는데 오늘 돌아간 건 0개다. 이유는 가설을 적을 때 "60거래일 재생에서 비교한다" 같은 글로만 써놨기 때문이다. 기계가 읽고 돌릴 수 있는 형태가 아니다. 이것도 진화 블록에 적었다.
봇이 남긴 기록에 이상한 건?
없다. 21건이고 경고는 0건이다. 주문 4건, 체결 4건 — 오늘 산 3건과 판 1건에 정확히 맞는다. 같은 종류가 수천 번 반복되는 일도 없다.
| 종류 | 건수 |
|---|---|
| 봇 알림 | 5 |
| 주문 / 체결 | 각 4 |
| 살 회사 고르기 | 3 |
| 나머지 | 5 |
내일 다시 볼 것
- 하루 사고파는 계좌가 오르는 날인데 왜 떨어지는 쪽을 샀나. 1번뿐이라 아직 모른다
- 069500은 오늘도 하루 사고파는 쪽에서 한 번도 안 샀다
- 살 만한지 지켜본 26개 중 4개만 통과했다. 옛날 조건으로 좁히면 0개였다
조치 — 설정값은 바꾸지 않는다
실제로 사고판 건 오늘 1번, 다 합쳐 12번(2번 이김)이다. 500번이 안 되므로 눌림폭·손절·목표·크기를 손대지 않는다.
| 단계 | 조건 | 지금 |
|---|---|---|
| 3 | 지수가 −1.0~−1.5 사이에 있을 때 살 일이 1번 | 오늘 지수가 계속 +2% 위 — 12일 연속 못 채움 |
| 4 손절 | 실제 손절 10번 쌓기 | 8번 (오늘 1번 늘어남) |
| 4 목표 | 사고 나서 +3.0%까지 오른 거래 1번 | 0번. 오늘 최고 +0.44% |
| 5 | 다시 돌려보기가 실제를 그대로 재현한 뒤 판정 | 오늘도 손실 크기 6배 차이 — 보류 |
12거래일 정리
| 날짜 | 거래 / 이김 | 확정된 손익률 |
|---|---|---|
| 8/4~8/10 (v2 5일) | 6 / 0 | −0.90% 합 |
| 8/11~8/14 (v4 4일) | 1 / 1 | +0.118% |
| 8/18 | 2 / 1 | −0.0022% |
| 8/19 | 2 / 0 | −0.1069% |
| 8/20 | 1 / 0 | −0.0628% |
다 합쳐 12번 사고팔아 2번 이겼고, 확정 손익은 −0.9632%다. 제일 많이 깎였을 때는 −0.956%로 오늘도 그대로다.
오늘 얻은 것은 코어 복구 하나다. 잃은 것은 다시 돌려보기가 여전히 실제와 다르다는 확인이다. 크기가 6배 다르면 그 결과로는 아무것도 정할 수 없다.
숫자 출처
| 본문 표현 | 원자료 필드 |
|---|---|
| 지금 전부 판다고 치면 +0.660% | daily.mtm_pnl_pct |
| 확정 손실 −6,282원 (−0.063%) | daily.net_pnl / net_pnl_pct |
| 아직 안 판 이익 72,312원 | daily.unrealized_pnl |
| 하루 차이 −6.610%p | daily.alpha_pct |
| 12일 차이 −0.4053%p (4일치) | rolling.20d.alpha_pct / alpha_days / alpha_bot_pct |
| 12일 확정 −0.9632% | rolling.20d.bot_realized_pct |
| 주식에 들어간 비율 61.39% | daily.exposure_pct |
| 코어 목표 60.0 / 실제 59.9425 | daily.core_expected_pct / core_actual_pct |
| 지수 떨어지면 멈춤 0분 | index.blocked_minutes / block_applies_to |
| 다시 돌려본 이름 원문 | replay[].label |
진화 블록
| 종류 | 내용 | 검증 |
|---|---|---|
| 결함 | 일별 alpha_pct 는 실현(net_pnl_pct)만 쓰고 rolling 의 alpha_bot_pct 는 시가평가를 써서 같은 날 −6.610%p 와 −0.405%p 가 나온다 | 사람이 일별 알파와 롤링 알파의 봇 항을 한쪽 정의로 통일하고 어느 쪽인지 출력에 표기한다 |
| 결함 | 재생 손절 체결가가 파라미터보다 깊다 — 재생 진입 14,655 기준 −0.6%는 14,567인데 14,545에 체결(−0.75%), 같은 날 실전은 −0.601%로 정확 | 사람이 replay_etf.py 의 손절 체결가가 분봉 저가를 쓰는지 확인한다 |
| 결함 | 재생 사이징이 실전과 다르다 — 같은 1거래에서 재생 −39,004원(명목 약 5,000,000원 역산) 대 실전 −6,282원(명목 995,860원) | 사람이 replay_etf.py 의 포지션 비중 파라미터가 실전 10%와 같은지 확인한다 |
| 결함 | 가설 12건이 queued 인데 sweeps_run 이 빈 배열이다 — test_spec 이 산문이라 스윕 실행기가 돌릴 격자가 없다 | 사람이 큐에 있는 가설 중 재생 파라미터로 답할 수 있는 것을 스윕 형식으로 재등록한다 |
| 가설 | 손절 폭 단독으로 기대값이 개선되는가 — 오늘 4단계 세트에서 086520 이 −0.98% 손절에서 −0.15% time_exit 으로 바뀌었으나 사이즈 0.13 과 묶여 있다 | sweep:replay.py STOP_LOSS_PCT=-0.6,-1.0,-1.5 |
| 해결 | D7 | sql:core_orders 가 8/20 069500 22주·379800 149주 체결을 반환했고 core_actual_pct 59.9425 대 기대 60.0 으로 격차가 −0.06%p 로 축소됐다 |