시스템설계 자동매매 시스템은 어떻게 구성되는가
게시물 옵션
본문
매매 기술 노트 · 11 · 자동매매 시스템
자동매매 시스템은 어떻게 구성되는가
자동매매를 처음 만들 때는 매수 조건과 매도 조건만 코드로 만들면 끝이라고 생각하기 쉽다. 하지만 실제로 돈이 움직이는 시스템은 훨씬 복잡하다. 시장 데이터를 가져오고, 지표를 계산하고, 매매 여부를 판단하고, 위험을 확인한 뒤 주문을 보내고, 체결 결과를 확인하고 기록해야 한다.
- DATA
- 시장 데이터
- STRATEGY
- 매매 판단
- RISK
- 위험 관리
- EXECUTION
- 주문 실행
자동매매는 매수 코드 하나로 끝나지 않는다
처음 자동매매 프로그램을 만들면 보통 이런 식으로 생각한다. 가격을 가져온 다음 RSI를 계산하고, RSI가 특정 값 아래로 내려가면 매수한다. 그리고 일정 수준 올라가면 매도한다.
실제로 가장 단순한 봇이라면 이것만으로도 동작할 수 있다. 하지만 거래가 실제로 발생하기 시작하면 새로운 문제가 계속 나타난다. 주문이 실패할 수도 있고, 일부만 체결될 수도 있으며, 프로그램이 재시작될 수도 있다. 거래소 API가 잠시 응답하지 않는 상황도 발생한다.
따라서 제대로 된 자동매매 시스템은 여러 기능을 하나의 큰 코드로 만드는 것보다 각 기능의 역할을 나눠서 설계하는 것이 중요하다.
자동매매 시스템은 데이터 수집 → 전략 판단 → 리스크 확인 → 주문 실행 → 상태 저장과 모니터링이 연결된 구조로 보는 것이 좋다.1. 데이터 수집
모든 자동매매의 출발점은 시장 데이터다. 현재 가격 하나만 가져오는 전략도 있지만, 대부분의 기술적 분석 전략은 일정 기간의 캔들이 필요하다.
RSI를 계산하려면 과거 가격 데이터가 필요하고, 볼린저밴드를 계산하려면 일정 개수의 종가가 필요하다. 거래량 조건을 사용하는 전략이라면 거래량 데이터도 함께 필요하다.
2. 전략 엔진
전략 엔진은 수집된 데이터를 보고 매수 또는 매도 여부를 결정한다.
예를 들어 단순히 RSI 하나만 사용하는 전략은 다음과 같이 만들 수 있다.
하지만 실제 전략에서는 하나의 지표만 사용하는 것보다 여러 조건을 조합하는 경우가 많다.
여기서 중요한 것은 전략 엔진과 주문 실행을 분리하는 것이다. 전략은 “매수할 것인가?”를 판단하고, 주문 모듈은 “어떻게 주문할 것인가?”를 담당하는 방식이다.
3. 리스크 관리
자동매매에서 가장 중요한 부분 중 하나가 리스크 관리다. 좋은 매수 신호가 발생했다고 해서 계좌 전체를 매수해서는 안 된다.
리스크 관리에서는 최소한 다음 항목을 고려할 필요가 있다.
- 1회 최대 매수 금액
- 동시 보유 가능한 종목 수
- 종목별 최대 투자 비율
- 손절 기준
- 트레일링 스탑
- 하루 최대 손실
- 연속 손실 시 거래 제한
앞선 7~10편에서 다뤘던 손절, 트레일링 스탑, 손익비, 포지션 사이징이 모두 이 영역에 해당한다.
4. 주문 실행
전략 엔진이 매수를 결정했다고 해서 거래가 끝나는 것은 아니다. 실제로는 거래소에 주문을 보내고 체결 여부를 다시 확인해야 한다.
거래소 API가 주문 요청을 정상적으로 받아도 실제 체결이 완료됐다고 단정해서는 안 된다. 주문 상태와 실제 잔고를 확인하는 과정이 필요하다.5. 프로그램 재시작을 고려해야 한다
자동매매 프로그램은 언젠가 재시작된다. 서버가 재부팅될 수도 있고, 프로그램이 업데이트될 수도 있고, 예외가 발생해서 프로세스가 종료될 수도 있다.
문제는 프로그램이 다시 시작됐을 때다. 프로그램 메모리에만 현재 보유 종목을 저장했다면 재시작과 동시에 그 정보가 사라진다.
따라서 재시작하면 거래소에서 실제 잔고와 주문 상태를 다시 조회하고 현재 상태를 복구하는 과정이 필요하다.
6. 로그가 곧 분석 데이터가 된다
자동매매는 사람이 매 순간 옆에서 지켜볼 수 없다. 그래서 로그가 중요하다.
단순히 “BTC 매수”라고 기록하는 것보다 왜 매수했는지를 남겨야 나중에 전략을 개선할 수 있다.
- 종목
- 매수 당시 가격
- RSI와 주요 지표값
- 볼린저밴드 위치
- 거래량 상태
- 시장 국면
- 충족된 매수 조건
- 주문 가격과 실제 체결 가격
- 매도 이유
- 손익
이런 데이터가 계속 쌓이면 로그는 단순한 기록을 넘어 전략 개선을 위한 데이터베이스가 된다.
7. 자동매매에서 가장 중요한 것은 예외 상황이다
정상적인 상황만 생각하면 자동매매 시스템은 어렵지 않다. 진짜 어려운 부분은 예상하지 못한 상황이다.
자동매매 시스템의 품질은 정상적인 거래보다 오류와 예외 상황을 얼마나 안전하게 처리하는지에서 크게 차이난다.좋은 시스템은 기능보다 경계가 명확하다
자동매매 프로그램이 커질수록 모든 기능을 하나의 함수와 하나의 파일에 넣는 방식은 관리하기 어려워진다.
데이터 수집 코드를 수정했는데 주문 코드가 영향을 받거나, 매수 조건을 변경했는데 리스크 관리까지 바뀌는 구조라면 작은 수정 하나가 전체 시스템에 영향을 줄 수 있다.
반대로 역할을 분리하면 전략을 변경하더라도 주문 시스템은 그대로 사용할 수 있고, 거래소 API를 변경하더라도 전략 자체는 유지할 수 있다.
요약
자동매매 시스템은 단순한 매수·매도 프로그램이 아니다. 시장 데이터를 수집하고, 전략을 계산하고, 위험을 확인하고, 주문을 실행한 다음 체결 결과와 현재 상태를 다시 확인해야 한다.
여기에 프로그램 재시작, API 오류, 부분 체결, 데이터 오류 같은 예외 상황까지 고려해야 실제 운영 가능한 시스템이 된다.
결국 좋은 자동매매 시스템은 “언제 매수할 것인가”만 잘 판단하는 시스템이 아니라, 예상하지 못한 상황에서도 정해진 규칙에 따라 안전하게 동작하는 시스템이다.
- 11 · 자동매매 시스템은 어떻게 구성되는가 — 지금 글
- 12 · 백테스트와 실전 매매가 다른 이유
- 13 · 좋은 매매 신호를 만드는 방법
- 14 · 시장 상황을 구분해야 하는 이유
- 15 · 자동매매 봇을 실제로 운영할 때 생기는 문제
본 글은 자동매매 시스템의 일반적인 구조와 원리를 설명하는 교육용 콘텐츠이며, 특정 종목이나 매매를 권유하는 내용이 아닙니다. 모든 투자 판단과 책임은 본인에게 있습니다.
댓글목록
등록된 댓글이 없습니다.