코드를 고쳤는데 왜 시스템은 그대로일까
자동매매를 만들면서 가장 당황했던 순간 중 하나가 오늘이었다.
분명히 코드를 수정했다. 저장도 했다. 그런데 시스템은 여전히 어제 방식으로 움직이고 있었다. 장전 사이클이 돌 때마다 “시장 레짐 불량”이 뜨면서 매수를 통째로 건너뛰었다. 처음엔 전략 조건 문제인 줄 알았다. 실제 원인은 다른 데 있었다.
Python 스케줄러는 장기 실행 프로세스다. 한 번 실행되면 메모리에 코드를 올려두고 계속 쓴다. 내가 파일을 아무리 수정해도, 실행 중인 프로세스를 재시작하지 않으면 수정 전 코드가 그대로 돌아간다. 코드를 고친 게 아니라, 파일만 고친 셈이었다.
이걸 겪고 나니 자동매매를 바라보는 시각이 조금 달라졌다. 코드 프로젝트가 아니라 운영 시스템이라는 느낌. 개발할 때는 “어떻게 만들지”를 생각하는데, 운영하다 보면 “어떻게 유지하지”가 더 자주 등장한다. 수정하고 저장하는 것과, 수정한 내용이 실제로 반영되는 것은 다른 일이다.
오늘 또 하나 정리된 게 있다. 테스트 환경을 실전과 똑같이 다루면 안 된다는 것이다. 모의투자 API는 30일치 데이터만 준다. 그래서 MA60처럼 60일이 필요한 지표는 계산 자체가 안 된다. 이걸 그냥 두면 모의투자에서는 아무것도 검증되지 않는다. 해결 방법은 전략을 느슨하게 바꾸는 게 아니라, 환경 제약을 명확히 구분하는 것이었다. 모의투자일 때만 적용되는 폴백 규칙을 따로 두고, 실전 전략은 건드리지 않았다.
결국 오늘 가장 크게 남은 건 코드 한 줄이 아니라 운영 습관 하나였다. 코드를 수정하면 반드시 프로세스를 재시작하고, 반영 여부를 눈으로 확인한다. 당연한 말처럼 들리지만, 이게 안 되면 아무리 좋은 전략도 어제 상태로 계속 돌아간다.
시스템이 커질수록, 좋은 전략보다 먼저 필요한 건 좋은 운영 습관일 수 있다. 오늘은 그걸 실전에서 배운 날이었다.