Quant Trading Bot Devlog

Read in English

청산 기준 완화 병합 - 재시작 후 전체 테스트로 무관 실패 가려내기

매도 타이밍 판단 기준을 느슨하게 조정하는 변경과 모의 주문 처리 개선을 같은 날 병합하고 상주 프로세스를 재시작했습니다. 이어서 전체 테스트를 돌려 나온 실패들이 이번 변경 때문인지 하나씩 확인했습니다.

어제 멈췄던 매수, 오늘 아침 자동으로 풀렸다

어제 계좌 자산이 고점 대비 크게 빠지면서 매수를 막는 안전장치가 발동했습니다.

오늘 아침, 어제 종가 대비 자산이 오히려 올라있는 걸 확인하고 시스템이 스스로 매수 제한을 풀었습니다. 더 나쁜 쪽(청산 경계선에 더 가까워지는 쪽)으로 갔다면 매수 제한이 아니라 아예 포지션을 정리하는 쪽으로 갔을 상황이라, 결과를 지켜보는 쪽이 조금 긴장됐던 아침이었습니다.

매도 타이밍 기준을 느슨하게 바꿨다

며칠 전부터 진행하던 리서치가 오늘 결론을 봤습니다.

보유 종목의 순위가 조금 밀려났다고 바로 정리하던 기존 방식 대신, 더 오래 들고 가도록 허용하는 쪽으로 기준을 조정했습니다. 동시에 보유 기간 자체로 강제 청산하던 별도 장치는 폐기했습니다.

이 결론은 두 차례 검증을 거쳤습니다. 과거 데이터로 돌린 시뮬레이션에서 먼저 방향을 확인했고, 그다음 실제 체결 데이터로 다시 맞춰봤습니다.

실제 매수 쪽 마찰(체결이 아예 안 되는 비율)이 시뮬레이션보다 컸다는 걸 확인하고, 그 마찰을 감시하는 점검 장치를 추가로 걸어둔 뒤에야 적용을 확정했습니다.

같은 날, 모의 주문 처리 쪽 개선도 함께 병합

별도로 진행하던 모의 계좌 쪽 개선도 오늘 같이 합류했습니다.

휴장일을 제대로 인식하지 못해 생기던 오류, 그리고 거래소 접속이 끊겼다가 다시 연결될 때 주문 번호가 중복 처리될 수 있던 틈을 막는 수선입니다. 주식 분할이 발생했을 때 보유 내역이 꼬이지 않도록 하는 처리도 함께 들어갔습니다.

이 코드는 외부 AI에게 독립적인 리뷰를 두 차례 받았습니다. 첫 리뷰에서 나온 지적을 반영한 뒤 다시 검토를 요청했고, 두 번째 리뷰에서 나온 추가 지적(같은 작업을 거부당한 뒤 다시 실행하면 보유 평균 단가가 어긋날 수 있다는 점)까지 반영한 다음에야 병합했습니다.

재시작하고, 테스트로 다시 확인

장 마감 뒤 오늘 병합한 변경을 반영하려고 상주 중인 프로세스 여섯 개를 한꺼번에 재시작했습니다.

재시작은 매끄럽게 끝났습니다. 그 뒤 전체 테스트 스위트를 돌렸는데, 실패 몇 건과 오류 10여 건이 나왔습니다.

바로 "병합 때문인가"부터 의심했습니다. 확인 방법은 간단했습니다. 오늘 병합하기 전 상태로 되돌린 별도 작업 공간에서 같은 테스트를 다시 돌려본 겁니다.

같은 실패가 그 공간에서도 똑같이 재현됐습니다. 즉 오늘 바뀐 코드와는 무관한, 원래부터 있던 문제라는 뜻입니다.

오류 10여 건은 테스트를 1시간 넘게 돌리는 동안 상주 프로세스가 테스트가 지켜보는 관측 파일을 건드려서 생긴 것으로, 테스트 자체보다는 환경 쪽 문제였습니다. 실패 건들은 각각 원인을 따로 메모해두고, 오늘 병합과는 분리해서 나중에 고치기로 했습니다.

이렇게 "실패가 나왔다고 바로 되돌리지 않고, 내 변경 때문인지 먼저 가려낸다"는 순서를 지킨 덕에 오늘 병합은 그대로 유지됐습니다.

#퀀트 #자동매매 #테스트 #개발일지