주식 자동매매 프로그램을 3년째 실제 계좌로 운영하고 있습니다.
이런 시스템은 대개 두 개가 한 쌍으로 움직입니다. 실제로 주문을 내는 프로그램과,
같은 전략을 과거 데이터에 대입해 성과를 미리 계산해보는 프로그램입니다. 후자의
결과를 믿고 실제 돈을 넣는 구조이므로, 두 프로그램이 완전히 같은 규칙으로
움직이는지가 사실상 전부입니다.
문제는 실제 매매 쪽에서 먼저 나타났습니다. 매수 조건을 충족한 자리에서 주문이
나가지 않았습니다. 에러도 없고 프로그램도 정상 동작 중이었습니다. 원인은 장 시작
전에 실행되는 준비 스크립트였습니다. 어제 상태를 오늘 쓸 수 있게 정리하는 역할인데,
정리가 아니라 실제 시장과 무관한 값으로 덮어쓰고 있었습니다. 매수 판단이 직전 값과
현재 값의 관계를 보는 방식이라, 직전 값이 어긋나 있으면 조건 자체가 성립하지
않습니다. 겉으로는 멀쩡한데 하루 종일 아무것도 사지 못하는 상태였습니다.
이건 매일 아침 판단 기준을 초기화하는 방식으로 해결했습니다. 여기까지는 깔끔했습니다.
정작 문제는 그 해결책이었습니다. 과거 계산용 프로그램은 초기화를 하지 않고 어제
누적치를 그대로 이어받고 있었습니다. 이 누적치가 커질수록 한 번에 매수하는 수량이
계단식으로 늘어나는 구조라, 같은 날 같은 종목을 같은 조건에 사더라도 실제 매매는
적게, 계산상으로는 훨씬 많이 사는 결과가 됩니다. 산식에 넣어보니 최대 8배까지
벌어질 수 있었습니다. 수량이 다르면 평균 단가도, 최종 수익률도 전부 달라집니다.
버그를 고친 행위 자체가 두 프로그램의 규칙을 어긋나게 만든 셈입니다. 기존에 뽑아둔
계산 결과들이 있어 새 동작은 켜고 끌 수 있게 만들고 기본값은 꺼두었습니다. 실제
차이가 얼마인지 수치로 확인하는 작업은 아직 하지 못했고, 그 상태 그대로 적어뒀습니다.