본문 바로가기

EP 빌드로그

EP.35 매수할 때와 팔 때 정보를 한 줄로 잇기: 자동매매 기록 개선기 P0-C

이번 회차에서 풀려던 문제

물건을 살 때의 상황과 팔 때의 결과를 따로따로 적어두면, 나중에 "왜 손해를 봤지?"라고 물어도 답을 찾기 어렵다. 산 순간이 어떤 분위기였는지 기록이 남아 있지 않기 때문이다. 이번 작업은 바로 이 문제를 다뤘다.
자동으로 사고파는 프로그램이 있는데, 사는 순간의 여러 정보(그때의 시장 흐름, 하루 안에서 가격이 어디쯤이었는지 등)를 저장했다가, 팔 때 그 기록을 다시 꺼내 하나로 이어 붙이는 기능을 넣었다. 이렇게 하면 "어떤 상황에서 샀을 때 결과가 좋았는지"를 한 줄로 볼 수 있다. 중요한 점은 실제로 사고파는 규칙은 하나도 건드리지 않았다는 것이다. 오직 기록만 늘린, 지켜보기 위한 작업이다.


무엇이 부족했나 — 원인을 못 찾던 이유

기록을 살펴보니 두 가지가 겹쳐 있었다.

  • 매수 기록에는 그 종목을 왜 골랐는지 점수 하나만 남아 있었다. 정작 살 때의 시장 상황(짧은 흐름·긴 흐름, 하루 안에서의 가격 위치, 거래량 비교, 가격이 얼마나 출렁였는지, 대표 코인의 움직임, 시장 심리 지표 등)은 어디에도 저장되지 않았다.
  • 그래서 이긴 비율은 높았는데도 수수료를 빼면 손해가 나는 상황의 원인을, 살 때의 상황별로 쪼개서 따져볼 수가 없었다.

근본 원인은 따로 있었다. 실제로 들고 있는 종목 정보는 매 주기마다 계좌 잔고를 보고 다시 만들어진다. 그래서 산 순간에만 존재하던 값들은 시간이 지나면 사라진다. 나중에 다시 계산하려 해도 되살릴 수 없다.


왜 이렇게 됐나 — 시점 고정 데이터라는 성질

핵심은 살 때의 상황값이 "그 순간에만 존재하는 값"이라는 점이다. 그때의 시장 흐름이나 심리 지표는 시간이 지나면 값 자체가 바뀌므로, 며칠 뒤에 되돌아가 다시 뽑아낼 방법이 없다.
기존 프로그램은 들고 있는 종목을 계좌 잔고로부터 매번 새로 만들어 냈다. 잔고는 "지금 얼마가 있다"만 알려줄 뿐, "살 때 시장이 어땠는지"는 담지 못한다. 이 두 성질이 부딪히면서 원인 분석에 필요한 정보가 계속 유실되고 있었다.

계좌 잔고 기반 정보매 주기 새로 만들어짐지금 값은 항상 있음
살 때의 시장 상황값그 순간에만 존재지나가면 되살릴 수 없음

어떻게 고쳤나 — 저장소 두 개로 분리

기존의 종목 정보나 잔고 계산 부분은 전혀 건드리지 않았다. 대신 기록 전용 저장소 두 개를 새로 만들어 문제를 풀었다.

  1. 진입 상황 저장소: 살 때, 그 종목별로 당시의 시장 상황값을 저장한다.
  2. 연결 저장소: 팔 때, 저장해 뒀던 진입 상황을 꺼내(pop) 청산 결과와 이어 붙여 한 줄로 기록한다.

동작 순서는 이렇다. 자동매매 프로그램이 매수를 마친 뒤 진입 상황을 만들어 저장한다. 이때 담는 값은 시장 흐름·위험 관련 지표들이며, 민감한 정보나 잔고 원본 금액은 일부러 뺐다. 이후 매도가 체결될 때마다 저장해 둔 진입 상황을 꺼내 청산 결과와 연결한다.

매수 체결 → 진입 상황 만들어 저장(진입 저장소)
매도 체결 → 진입 상황 꺼내 청산과 연결(연결 저장소)

만약 매도 시점에 짝이 맞는 진입 상황이 없으면, 그 기록에 "진입 상황 없음" 표시를 붙여 두어 나중에 걸러낼 수 있게 했다. 이 변경에 대한 테스트 5건을 추가했다.
참고로 기존에 있던 시간에 의존하던 실패 테스트 몇 건은 이번 변경과 무관하며, 손대지 않은 상태에서도 똑같이 실패해 별도로 다루기로 했다.


전후 비교

매수 기록에 남는 값선정 점수 정도살 때의 시장 상황값까지
살 때 상황 ↔ 팔 때 결과 연결불가(값이 사라짐)한 줄로 연결
원인 분석상황별로 쪼갤 수 없음상황별로 결과를 나눠 볼 수 있음
실제 매매 규칙변경 없음(관찰 전용)

표에서 보듯 이번 작업의 성과는 "수익이 올랐다"가 아니라 "원인을 볼 수 있게 됐다"에 있다. 손익 개선 여부는 이 기록이 쌓인 다음에야 판단할 문제다.


배운 점과 남은 과제

가장 크게 배운 점은, 그 순간에만 존재하는 값은 나중에 다시 계산할 수 없으니 기존 데이터 구조에 억지로 끼워 넣지 말고 살 때 따로 저장했다가 팔 때 꺼내 쓰는 방식이 깔끔하다는 것이다. 복잡한 배선 없이도 목적을 이룰 수 있었다.
또 하나는 순서다. 전략을 바꾸기 전에 먼저 제대로 측정할 수 있는 기록부터 만들어야 한다는 원칙을 이번에 다시 확인했다. 다음 단계는 이렇게 이어 붙인 기록이 충분히 쌓였을 때, 어떤 진입 상황이 결과가 좋고 나빴는지 실제로 분석해 보는 일이다. 그 분석 결과는 이 글에 담긴 범위 밖이므로, 별도 회차에서 다룬다.

반응형