DayBot

2026-08-05 (수) 회고

완화 후 첫 거래 — 한 종목에서 2연속 손절, −0.43%

거래 2건 모두 SK이노베이션 손절이며, 옛 상한이었으면 발생하지 않았을 거래였고 손절 1초 뒤 같은 종목에 재진입한 것이 두 번째 손실을 만들었다.

결과

항목 값
신호 / 체결 / 미체결4 / 2 / 2
거래2건, 0승 2패
총손익 → 순손익−3,254원 → −4,257원 (−0.43%)
비용1,003원
MDD0.43%
워치독 발동 / API 오류0 / 0
관찰정적 17 → 동적 9

시간 순서 — 전부 종목 하나(096770 SK이노베이션)에서 일어났다.

시각 일
09:44:25첫 신호(이탈 −1.04%), 지정가 110,200 → 미체결
09:45:33재신호(−1.13%), 110,100 → 09:46:10 체결
10:00:04손절 109,236, 순 −1.01%
10:00:05손절 1초 뒤 같은 종목 재신호(−1.57%), 109,300 → 미체결
10:01:12재신호(−1.39%), 109,500 → 10:01:16 체결
11:34:16손절 108,737, 순 −0.93%
이후하루 2회 진입 한도 소진, 무거래. 15:40 리포트, 17종목 6,664봉 보관

진입 시점 VWAP가 111,459 → 111,142로 계속 내려갔다. 하루 내내 내려가는 종목에 두 번 들어갔다. 조건 B(하락 멈춤)가 어떤 값으로 통과했는지는 원자료에 없어 확인하지 못했다.

손실 분해

항목 거래#1 거래#2
손절 기준−0.60%−0.60%
실제 청산(체결가 대비)−0.78%−0.70%
기준 초과0.18%p0.10%p
명시비용(수수료+세금)0.23%p0.23%p
순손익률−1.01%−0.93%
자본 대비−0.223%−0.203%

8/4에 쓴 왕복비용 0.38% 가정은 명시비용 0.23% + 실행 초과 0.10~0.19% 로 재구성되며 실측 총합 0.33~0.42%와 부합한다. 즉 "손절 2회면 그날 한도가 끝난다"는 계산이 그대로 실현됐다 — 일 한도 −0.5%에 −0.43%. 다만 초과분이 비용이 아니라 손절 실행가에서 나왔고, 두 거래의 초과폭이 0.18 vs 0.10으로 달랐던 이유는 모른다.

replay 비교

재생 관찰 거래 결과
현재 파라미터92−4,457원 (−0.45%), 승률 0%
트레일링 끔92완전 동일
옛 유니버스 상한40표본 없음
3단계 지수차단 −1.592완전 동일
4단계 −1.5/+2.5/13%92−2,025원 (−0.20%), 승률 50%

(a) 트레일링 — 차이 없음. 두 거래 모두 무장선 +3.0%에 닿은 적이 없고 손절로 끝났다. 트레일링 로직이 호출될 구간에 들어가지도 못했으므로 당연한 결과다. 이 날은 트레일링에 대해 아무것도 말해주지 않는다.

(b) 옛 상한이면 이 거래는 없었다. SK이노베이션은 갭 +0.81%로 옛 갭 상한(+3.0)도 통과하지만 30분 변동폭 3.49% 가 옛 상한 2.5를 넘는다. 옛 상한에서 남는 4종목은 기아·삼성중공업·셀트리온·현대힘스뿐이고, LG전자는 변동폭 2.52로 0.02 차 탈락한다. 어제 완화한 것이 만든 첫 거래가 2연속 손절이었다. 반대로 갭 상한 완화(+6)로 새로 들어온 미래에셋증권(3.80)·일진전기(5.39)에서는 신호가 없었다 — 오늘 손익은 전부 RANGE_MAX 완화분이다.

(c) 4단계는 오늘 유리했다. 손실이 −0.45% → −0.20%로 줄었다. 다만 내용을 보면 승패가 바뀐 게 아니다: 손절폭 −1.5%가 첫 거래를 13:12까지 살려두었다가 더 깊게(−1.92%) 잘렸고, 두 번째 거래가 14:50 시간청산으로 +0.08% — 사실상 본전이다. 거래당 기대값은 여전히 −0.918% 로 음수다. 자본 타격이 절반이 된 것은 포지션 25%→13%의 산수 효과이고, 규칙이 더 맞았기 때문이 아니다. 표본은 하루 2건이다.

3단계는 오늘 검증 불가. 지수가 하루 종일 +4.57~+6.65% 구간이라 −1.0이든 −1.5든 차단이 0분이다.

재생 충실도

실전 재생
1차 체결가110,100110,200
1차 청산10:00 / 109,23610:00 / 109,336
2차 청산11:34 / 108,73712:29 / 108,537
순손익−4,257원−4,457원

건수·종목·청산 사유는 일치하고 손익은 200원(0.02%p) 차이다. 청산 시각이 55분 벌어진 것은 재생이 1분봉, 실전이 실시간 호가를 쓰기 때문으로 보이지만 코드를 확인하지 않았다. 재생을 손익 소수점 근거로 쓰기 전에 이 차이의 상한을 알아야 한다.

조건 C

blocked_minutes = 0 / 390분. 차단 없음. 지수는 최저 +4.57%였다.

이틀 표본이 정반대다 — 8/4은 −1.0 기준으로 진입창의 50%를 막았고, 8/5은 0%다. 2일로는 3단계를 판단할 수 없다. 8/4에 정한 "1주 후" 일정을 유지한다.

결함 — #2~5 조치 완료

# 징후 원인 조치
1손절 1초 뒤 같은 종목 재진입 (10:00:04 청산 → 10:00:05 신호)종목별 재진입 쿨다운이 없다. 같은 하락 추세에 두 번 맞았다미적용. 표본 1일 2건이므로 지금 규칙을 바꾸지 않는다
2watchdog INFO 4,402건당일에는 "루프 하트비트"로 추정했으나 틀렸다. Restart=always 인데 장 종료 시 워치독이 exit 0 으로 스스로 끝나 systemd 가 5초마다 되살린 것이다. 15시 647건 → 16~20시 시간당 1,310건(5.5초당 2건)이 RestartSec=5 와 맞고, NRestarts=9552 로 확인했다RestartPreventExitStatus=0. 크래시는 계속 되살리되 정상 종료만 존중한다
3order 8건인데 주문은 6건미체결 취소 요청 2건이 같은 type 으로 기록됐다. 진입 4 + 청산 2 + 취소 2 = 8 로 정확히 맞는다취소를 cancel type 으로 분리
4미체결 2건 — 진입이 1~1.5분 지연취소 로그는 원래 있었고 order 에 묻혀 있었다. 유효시간은 어디에도 안 남았다취소 로그에 경과 시간과 유효시간(60초)을 함께 기록
5손절 실행가가 기준선보다 0.10~0.19%p 아래PaperBroker 시장가 슬리피지 상수 0.15% + 판정에서 체결까지 한 루프(3초) 지연. 체결가 109,236 = round(109,400 × 0.9985), 108,737 = round(108,900 × 0.9985) 로 역산이 맞는다청산 체결 로그에 판정가 대비 %를 남긴다

#5 는 위 손실 분해를 되돌린다. 왕복비용을 "명시비용 0.23% + 실행 초과 0.10~0.19%"로 재구성했지만, 그 초과분은 실측이 아니라 broker.py 에 우리가 써넣은 상수다. 4단계 산수에 이 값을 넣으면 자기 가정을 되먹인다. live 전환 전까지 실행 비용의 실측치는 없다.

warnings 는 0건이다.

어제 남긴 질문에 대한 답

질문 답
완화된 상한에서 관찰이 잡히는가잡힌다. 0개 → 9개 (정적 17 중)
옛 상한 재채점으로 완화분 분리됐다. 옛 상한 4종목·0건 → 오늘 손익 전액이 RANGE_MAX 완화분
신호가 조건 C에 막혔는가아니다. 차단 0분. 3단계 근거는 못 얻었다
변동폭 중앙값 5.64%는 레짐 상수인가아니다. 오늘 17종목 중앙값 3.30%. 이틀 만에 5.64 → 3.30. 상한 5.0은 오늘 분포에서 상위 24%p 선

또 8/4에 "아직 바인딩되지 않는다"고 쓴 하루 2회 진입 한도가 오늘 바인딩됐다 — 11:34 이후 장 마감까지 관찰 9종목에 대해 아무 진입도 하지 않았다.

내일 확인할 것

  • 관찰 9종목 중 왜 SK이노베이션 하나에서만 신호가 났는가. 나머지 8종목의 밴드 체류 분 수가 원자료에 없어 판단할 수 없었다
  • 손절 직후 재진입이 규칙상 허용된 것인지, 쿨다운이 있는데 동작하지 않은 것인지
  • 재생과 실전의 청산 시각 55분 차이의 원인과 상한
  • 손절 실행 초과 0.10~0.19%p가 매일 나오는지, 이틀치로 재확인
  • 지수가 +5% 급등하는 날 홀로 내려가는 종목의 VWAP 회귀 — 표본 1건이라 아무 결론도 못 낸다. 같은 형태(지수 상승 + 개별 하락)가 다시 나오는지 세어둔다

조치 — 달력을 조건으로 바꾼다

포지션 25% → 13% 는 8/6 부터 적용한다. 4단계 묶음에서 이것만 뗐다. 승률과 거래당 기대값을 바꾸지 않고 자본 타격만 선형으로 줄이는 값이라 표본을 기다릴 대상이 아니다. 묶음의 근거는 "손절만 넓히면 1회 −0.47%로 하루가 끝난다"였는데, 그것은 손절을 넓힐 때 비중이 함께 줄어야 한다는 뜻이지 비중을 먼저 줄이면 안 된다는 뜻이 아니다.

나머지는 "1주 후 / 2주 후"를 버린다. 달력으로는 어차피 판정되지 않는다 — 하루 평균 1건(8/4 0건, 8/5 2건)이라 2주가 약 10건이고, 4단계 손익분기 승률 47%를 그 표본으로 재면 표준오차가 ±15.8%p 다. 47%인지 31%인지 63%인지 구분하지 못한다. ±5%p 로 재려면 약 100건, 곧 5개월이 필요하다.

단계 바꿀 조건 왜 달력이 아닌가
3 조건 C −1.5지수가 진입창에서 −1% 아래로 내려간 날 1회거래 표본이 아니라 레짐 표본이 필요하다. 8/4 은 50% 차단, 8/5 은 0%. 그런 날이 오면 그날 판단하고, 계속 안 오면 임계값 자체가 무의미하다
4 손절 −1.5손절 거래 10건 누적replay 가 청산 시각을 55분 틀리므로, 보유가 길어지는 변경일수록 replay 로는 볼 수 없다
4 익절 +2.5고점 +3.0% 에 닿은 거래 1건 이상검증할 데이터가 지금 0건이다. 2주를 기다려도 0건이면 그대로 0건이다
5 거래량비없다 — 지금 replay 로 판정 가능유니버스 필터는 진입·청산 규칙과 독립이라 "4 이후"라는 순서에 근거가 없다

이 판단은 8/4 회고가 갭·변동폭 상한에 이미 쓴 논리와 같다 — "'한 번에 하나씩'을 여기 적용하면 두 주를 쓰고 아무것도 못 배운다". 그 논리를 3~5단계에 적용하지 않은 것이 불일치였다.

13% 의 대가 두 가지

  1. 일 한도가 더 이상 바인딩되지 않는다. 2회 손절이 자본 −0.255% 라 −0.5% 에 닿지

않는다. 하루 2회 진입 한도가 먼저 걸리므로 브레이크 자체는 남지만, PRD §6.2 가 설계한 "여유 0.01%p = 의도된 조기 경보"는 손절폭을 −1.5% 로 넓힐 때까지 꺼져 있다

  1. 투입금보다 비싼 종목이 0주가 되는 문제는 자금 증액으로 함께 풀었다. 100만원 ×

13% = 13만원이라 8/5 정적 통과 17종목 중 4종목, 동적 통과 9종목 중 2종목(셀트리온 185,500 · LG전자 166,200)이 관찰만 되고 진입은 불가능했다. 운용자금을 1,000만원으로 올려 1회 투입을 130만원으로 되돌렸다. paper 는 실제 돈이 나가지 않으므로 이것은 PRD §6.1 Phase 3 진입이 아니라 표본을 만드는 축척의 조정이며, live 전환 시에는 Phase 1 의 100만원으로 되돌린다

8/6 에는 두 가지가 함께 바뀐다. "한 번에 한 가지"를 어기는 셈이지만 두 값의 축이 달라 사후에 갈린다 — 비중은 거래당 위험을, 자금은 유니버스 폭을 정한다. 결과를 읽을 때 거래당 순손익률(비중·자금 어느 쪽에도 반응하지 않는다)과 관찰 대비 진입 가능 종목 수 (자금에만 반응한다)를 따로 본다.