성과 재판정, 조기진입 실거래, 자금이동 코드리뷰 — 숫자를 두 번씩 확인한 한 주
지수 대비 성과를 냉정하게 재판정하고 조기진입을 실거래에 올린 한편, 리포트 침묵 버그와 자금이동 기능의 숨은 결함을 직접 재확인으로 잡아낸 한 주였습니다.
인프라를 먼저 정리했다
주초에는 증권사 경로를 주력 하나로 좁히는 작업을 마무리했습니다.
보조 증권사 코드와 인증키는 지우지 않고 남겨뒀습니다. 대신 모의 계좌로 완전자동매매를 먼저 검증하는 트랙(새 창)에서 쓰던 비교 축을, 보조 증권사 계좌 흉내 내기 방식에서 직접 만든 시뮬레이션 브로커 기반으로 하루 만에 갈아탔습니다.
전환과 동시에 핵심 상태를 사람 없이 점검해 알림으로 보내는 점검기도 만들어뒀습니다. 큰 전환일수록 다음 날 아침 로그를 처음부터 읽는 방식으로는 놓치는 게 생긴다는 판단이었습니다.
체감과 증거를 구분해 성과를 다시 판정했다
누적 수익률을 보던 중 "지수보다 못하면 계속할 이유가 없다"는 생각이 들어, AI 자문에게 봐주는 것 없이 엄격한 판정을 요청했습니다.
결과는 체감과 달랐습니다. 벤치마크 대비 열위는 아니었지만, 종목 선택이 잘 되고 있다는 증거도 없었습니다. 손실은 대부분 시장 전체 탓이었고, 회전율에서 나오는 비용만 확정적으로 빠져나가고 있었습니다.
이어서 "감시 규칙 말고 실제로 돈 버는 구조"를 다시 요청했고, 자본 대부분을 지수 추종에 묶어 하방을 막고 나머지 소규모만 검증된 영역에 베팅하는 두 층 구조 제안이 돌아왔습니다. 두 결과 모두 코드에는 손대지 않고 승인 대기 상태로 남겨뒀습니다.
조기진입은 실거래에, 두 층 구조는 재원 문제로 보류됐다
랭킹을 미리 얼리고 첫 매매 라운드를 앞당기는 조기진입 구조를 다음 날 아침 실거래에 배포했고, 첫날 동결·체결·후속 라운드가 전부 예상대로 돌았습니다.
같은 날 두 층 구조의 실행 코드도 완성해 병합했지만, 활성화는 하지 않았습니다. 투입 재원으로 "신규 입금 활용" 안이 나왔는데, 신규 입금도 보유 종목 매도도 없다는 전제를 다시 확인하면서 안이 폐기됐고 구조 자체가 보류됐습니다. 코드는 올라가 있어 재원이 정해지면 바로 켤 수 있습니다.
사전등록해둔 검증 가설 여섯 개도 이날 돌렸는데 전부 통계적으로 의미 있는 신호를 못 보여줬습니다. 그중 하나는 구현 버그까지 섞여 있었고, 버그를 고쳐도 결론은 바뀌지 않았습니다. 가설 단위 검증 대신 더 길고 엄격한 기준으로 다시 등록했고 판정은 내년 초로 넘어갔습니다.
회전율 상한을 라운드 단위에서 하루 단위로 통합하자는 자문이 나왔을 때, 보고된 수치에 반론을 제기해 재점검을 요청했습니다. 처음 지목된 손실 거래 일부가 실제로는 회전율 상한이 아니라 다른 제한 때문에 거부된 거래였다는 게 드러났고, 귀속을 바로잡은 뒤 상한을 다소 올리는 수정안으로 다음 주부터 적용하기로 했습니다.
조용히 묻혀있던 버그 두 개를 직접 추적해 찾았다
블로그 주간 리포트가 9월 중순부터 매주 조용히 스킵되고 있었던 걸 뒤늦게 들여다봤습니다.
스냅샷 타이머가 꺼져 있던 단순한 문제는 바로 고쳤지만, 더 까다로운 원인이 따로 있었습니다. 원장과 계좌 잔고 일치 여부를 확인하는 안전장치가 참조하던 계좌 상태 파일이, 실제 계좌 이전 이후로 갱신이 끊긴 옛 파일이었습니다. 리포트 쪽 참조 하나를 이전 작업에서 놓친 게 몇 주 뒤에야 드러난 셈입니다. 참조를 새 계좌로 돌리고 나니 안전장치가 다시 통과했습니다.
별도로 데이터 아카이브(새 창) 쪽에서도, 분봉 데이터를 구분하는 시장 코드 값이 거래소 정의가 아니라 통합 집계 기준 정의로 잘못 들어가 있던 걸 발견해 고쳤습니다.
12월 계좌 구조 변경에 대비해 자금이동 기능을 만들고 두 번 리뷰했다
12월 중순 계좌 구조 변경을 앞두고, 한 계좌의 자금 일부를 다른 계좌로 옮기는 기능을 만들었습니다. 평소에는 꺼둔 채로 필요할 때만 켜는 용도입니다.
주문 실행/안전장치(새 창) 쪽에서 익숙한 설계를 그대로 가져와, 출금과 입금을 멱등하게 처리하고 끝난 뒤 전체 자금 합계가 변하지 않았는지 검증하는 절차를 넣었습니다.
독립 리뷰를 맡겼더니 출금 후 입금만 실패하면 경보도 기록도 없이 한쪽 계좌 자금이 조용히 사라지는 구조라는 지적이 나왔습니다. 입금이 실패하면 그 건 전체를 즉시 차단하고 경보를 띄우도록 고쳤습니다.
수선한 코드를 다시 리뷰에 올리니, 중단된 건을 이어받을 때 원래와 다른 금액을 넣어도 통과되는 틈이 또 있었습니다. 리뷰어가 실제로 재현까지 확인해, 저장된 원래 금액과 다르면 거부하도록 막고서야 병합 승인이 났습니다. 기능은 여전히 꺼둔 상태입니다.
왜 중요한가
이번 주를 관통한 건 "결과를 그대로 받아들이지 않고 직접 재확인했다"는 공통점입니다.
성과 판정에서는 체감과 증거를 분리해서 봤고, 회전율 수치는 자문이 틀렸다는 걸 반론으로 잡아냈습니다. 리포트는 몇 주째 조용히 죽어있던 걸 직접 추적해서야 원인을 찾았고, 자금이동 코드도 리뷰를 두 번 돌려서야 숨은 결함을 다 걸러냈습니다.
자동화와 AI 판정에 많이 맡기고 있지만, 그게 최종 검증을 대신하지는 않습니다. 이번 주는 그 마지막 확인을 사람이 직접 들여다볼 때까지 미루지 않았던 사례들의 모음이었습니다.