Quant Trading Bot Devlog

Read in English

[260708] 요약 모델 말만 믿었다가 실계좌에 취소 안 되는 주문이 남았다

새 자동투자 기능을 안전하게 검증하는 트랙을 만드는 김에, API를 잘못 추측했다가 겪은 사고까지

오늘은 새 기능 하나를 안전하게 검증하는 틀을 만드는 게 메인이었는데, 그 과정에서 사고도 두 건 겪었습니다.

새 자동투자 기능, 실거래 리스크 0으로 먼저 검증

지금 있는 신호강도 자동투자 기능을 확장하는 아이디어가 있었는데, 실제 돈을 걸기 전에 페이퍼(모의) 트랙으로 먼저 오래 검증하는 구조부터 만들었습니다.

사고 1: 테스트가 진짜 페이퍼 기록에 가짜 데이터를 써버림

위 장부 관련 코드를 테스트하다가, 파이썬에서 자주 나오는 함정에 걸렸습니다. 함수의 기본 저장 경로 값이 함수가 정의되는 시점에 이미 고정돼버려서, 테스트 중에 "임시 경로로 바꿔치기"를 했다고 생각한 게 실제로는 안 먹히고 있었습니다. 그 결과 테스트가 실제 페이퍼 트래킹 기록에 가짜 데이터를 써버렸습니다. 다행히 실거래 쪽 장부는 전혀 안 건드려서 실제 매매 데이터는 무사했고, 가짜로 들어간 기록만 지우고 정리했습니다.

사고 2: API를 잘못 추측했다가 실계좌에 취소 안 되는 주문이 남음

오래 안 체결된 주문을 자동으로 취소해주는 안전장치를 만들고 실제로 검증하는 과정에서 벌어진 일입니다. 증권사 API의 "주문 취소" 엔드포인트가 뭔지 확인할 때, 요약해주는 보조 도구가 REST API의 흔한 관례를 근거로 특정 방식이라고 자신 있게 답했습니다. 그 말을 믿고 구현한 다음, 체결될 리 없는 아주 안전한 가격으로 소량 테스트 주문을 넣고 취소를 시도했더니 — API를 찾을 수 없다는 에러가 떴습니다. 잘못된 엔드포인트였던 겁니다.

그 사이 실계좌에 취소 안 된 주문이 몇 분간 그대로 남아있었습니다. 다행히 애초에 "체결될 리 없는 가격 + 당일 자동소멸 주문"으로 안전하게 설계해뒀던 덕분에 실제 피해는 없었지만, 요약 도구의 그럴듯한 답을 그대로 믿었다가 벌어진 일이라 뼈아팠습니다. 진짜 API 명세 문서를 원본 그대로 직접 파싱해서 정확한 엔드포인트를 확인한 뒤에야 제대로 취소가 됐습니다.

교훈: 실계좌에 영향을 주는 API는 요약 도구 말을 근거로 삼지 않고, 항상 원본 스펙을 직접 까봐야 합니다. 어제 일지의 "모델 문서 못 믿는다"는 교훈과 결이 같은데, 이번엔 한 걸음 더 나가서 "요약해주는 도구도 그럴듯하게 잘못 말할 수 있다"는 걸 배웠습니다.

그 밖에


오늘 두 사고 다 실제 손해로 이어지진 않았지만, 둘 다 "이미 만들어둔 안전장치 덕분에" 무사했던 거라 아찔했습니다. 새 기능 검증 트랙은 이제 1일차 시계가 돌기 시작했으니, 앞으로는 그 결과를 지켜보는 일이 남았습니다.