손실이 나면 손절을 미루고, 급등한 종목을 보면 계획 밖의 매수를 하게 됩니다. 문제는 의지가 약해서가 아니라 매매 판단이 그때그때 달라진다는 데 있습니다.
시스템 트레이딩은 가격의 다음 방향을 맞히는 기법이 아닙니다. 어떤 상황에서 사고팔지, 얼마를 거래할지, 결과가 나빠지면 무엇을 다시 확인할지를 거래 전에 규칙으로 정하고 같은 기준으로 검증·실행하는 방식입니다.
이 글의 핵심
- 시스템 트레이딩은 감정을 없애거나 손실을 막아 주는 장치가 아닙니다.
- 규칙, 데이터, 검증, 위험 관리, 운용 기록이 함께 있어야 하나의 시스템이 됩니다.
- 자동 주문은 마지막 단계입니다. 먼저 규칙이 과거와 새로운 구간에서 어떻게 작동하는지 확인해야 합니다.
시스템 트레이딩은 무엇이고, 무엇이 아닌가
시스템 트레이딩의 출발점은 오를 것 같으면 산다 같은 문장을 컴퓨터와 사람이 같은 방식으로 해석할 수 있는 조건으로 바꾸는 일입니다. 예를 들어 진입 조건, 청산 조건, 체결 시점, 거래 수량을 숫자와 논리로 정합니다.
다만 조건을 코드로 만들었다고 수익이 보장되지는 않습니다. 데이터 오류, 거래비용, 시장 국면 변화, 과도한 변수 조정, 주문 실패는 모두 결과를 바꿀 수 있습니다. 시스템의 장점은 판단을 완벽하게 대체하는 데 있지 않습니다. 판단이 바뀐 이유와 결과를 기록하고 다시 검증할 수 있다는 데 있습니다.
자동매매를 시작하기 전에는 아래 다섯 가지가 서로 연결돼 있는지 확인하면 됩니다.
| 점검 항목 | 먼저 정할 질문 | 남겨야 할 결과물 |
|---|---|---|
| 규칙 | 어떤 조건에서 진입·청산합니까? | 규칙표와 예외 조건 |
| 데이터 | 어떤 가격·거래량 데이터를 믿습니까? | 수집·결측·수정주가 점검 기록 |
| 검증 | 과거 성과가 우연인지 어떻게 확인합니까? | 거래 내역과 성과표 |
| 위험 관리 | 한 번의 손실과 연속 손실을 어디까지 감수합니까? | 포지션 크기와 중지 기준 |
| 운용 | 주문·체결·오류를 어떻게 확인합니까? | 주문 로그와 일일 점검표 |
1. 아이디어를 매매 규칙으로 바꾸기
좋은 아이디어는 차트에서 그럴듯해 보이는 설명이 아니라, 다른 사람이 같은 데이터로 같은 신호를 만들 수 있는 문장입니다.
상승 추세에서 눌림목을 매수한다는 아이디어라면 최소한 상승 추세의 기준, 눌림의 폭, 신호가 확정되는 시간, 주문 가격, 손절과 재진입 조건을 나눠야 합니다. 조건 사이의 관계도 그리고(AND)인지 또는(OR)인지 정해야 합니다.
감으로 찾던 눌림목, 파이썬 자동매매 조건식으로 바꾸는 법은 이 과정을 데이터·조건·행동·예외의 네 칸으로 나누는 예시를 보여 줍니다. 이 단계의 목표는 수익률이 아니라 재현 가능한 신호입니다.
2. 데이터가 규칙과 맞는지 확인하기
규칙이 명확해도 입력 데이터가 흔들리면 결과도 흔들립니다. 일봉 종가를 쓸지 수정주가를 쓸지, 거래정지·결측치를 어떻게 처리할지, 종목 코드와 상장폐지 종목을 어떻게 다룰지를 정해야 합니다.
특히 배당·분할로 조정된 가격과 실제 주문에 쓰는 가격은 목적이 다를 수 있습니다. 장기 수익률 비교에는 조정 가격이 도움이 될 수 있지만, 주문·체결 검증에는 당시 실제 가격과 호가 조건이 더 중요할 수 있습니다. 데이터 선택의 이유를 전략 설명에 남겨야 같은 결과를 다시 확인할 수 있습니다.
yfinance로 국내 주식 데이터 받기는 티커, 수정주가, 결측치처럼 전략보다 먼저 확인할 데이터 항목을 다룹니다.
3. 백테스트는 수익률보다 체결 가정을 먼저 확인하기
백테스트의 역할은 전략을 증명하는 것이 아니라, 정한 규칙이 어떤 조건에서 어떻게 실패했는지 확인하는 것입니다. 그래서 누적수익률 하나만으로 판단하면 안 됩니다.
종가로 신호가 확정됐다면 같은 날 종가에 체결할 수 있는지, 다음 거래일 시가에 주문하면 어떤 차이가 생기는지, 수수료·세금·슬리피지를 넣었는지부터 확인해야 합니다. 거래 수, 최대 낙폭(MDD), 손익비, 시장 노출 시간도 같이 봐야 전략의 성격을 알 수 있습니다.
백테스트 결과를 믿기 전 확인할 3가지에서 미래 참조, 생존자 편향, 과최적화의 기본 개념을 먼저 확인할 수 있습니다. 좋은 과거 성과는 검증의 시작일 뿐입니다.
4. 위험 관리는 수익률 뒤에 붙이는 장식이 아니다
같은 진입 규칙도 거래 수량에 따라 전혀 다른 경험이 됩니다. 손절 폭이 넓은 종목과 좁은 종목을 같은 금액으로 매수하면 한 번의 손실이 계좌에 미치는 비중이 달라집니다.
포지션 사이징은 먼저 계좌 전체에서 한 거래에 허용할 손실 범위를 정하고, 진입가와 손절가의 차이를 이용해 수량을 계산하는 방식으로 접근합니다. 여기서 특정 비율은 정답이 아니라 전략의 변동성, 보유 종목 수, 상관관계, 갭 위험에 따라 다시 검토할 출발값입니다.
포지션 사이징 계산법: 1% 룰을 적용하기 전에 알아야 할 것은 손실 금액과 거래 수량을 분리해 생각하는 출발점이 됩니다. 이후에는 개별 규칙의 과거 최대 낙폭과 실제 계좌의 감내 가능 범위를 함께 비교해야 합니다.
5. 자동 주문 전에 운용 규칙을 정하기
전략이 과거 데이터에서 작동했더라도 실제 주문 환경에서는 데이터 지연, 주문 거절, 부분 체결, 프로그램 오류가 생길 수 있습니다. 그래서 자동 주문은 규칙을 만든 뒤의 마지막 단계입니다.
운용 전에는 다음 항목을 문서나 로그로 남겨야 합니다.
- 신호가 확정되는 시각과 주문을 보내는 시각
- 주문 가격, 수량, 취소·재주문 기준
- 포지션과 주문 상태를 확인하는 방법
- 일일 손실 또는 전략별 최대 낙폭이 커졌을 때의 중지 기준
- 오류가 났을 때 자동 재시작하지 않고 사람이 확인할 조건
처음에는 모의 환경이나 소액으로 신호·주문·체결 기록이 규칙과 일치하는지 보는 편이 낫습니다. 자동화 범위를 넓히는 일보다, 계획과 다른 일이 생겼을 때 이를 발견하는 장치를 먼저 만드는 편이 중요합니다.
시작 전 체크리스트
아래 다섯 문장에 모두 답할 수 있다면 자동화 검토를 시작할 준비가 된 것입니다.
- 신호의 입력값, 조건, 확정 시점과 주문 시점을 한 문장씩 설명할 수 있습니다.
- 사용 데이터의 출처, 조정 방식, 결측 처리 기준을 알고 있습니다.
- 비용을 넣은 거래 내역과 수익률 외 성과 지표를 확인했습니다.
- 손절 거리와 계좌 위험을 기준으로 거래 수량을 정했습니다.
- 주문 실패·데이터 오류·연속 손실이 발생했을 때 중지하고 확인할 기준이 있습니다.
시스템 트레이딩은 한 번 만든 전략을 기계적으로 믿는 일이 아닙니다. 규칙을 먼저 기록하고, 결과가 달라졌을 때 원인을 추적하며, 필요할 때 다시 검증하는 반복 과정입니다.
이 글은 시스템 트레이딩의 구조를 설명하기 위한 교육용 자료입니다. 예시는 특정 종목의 매수·매도 추천이나 미래 수익을 의미하지 않으며, 실제 투자 판단과 책임은 투자자 본인에게 있습니다.