시스템 트레이딩 전략은 어떻게 만들까? 아이디어부터 검증까지 6단계

차트에서 잘 맞아 보인 매매 아이디어가 있다고 해서 바로 주문 프로그램으로 옮기면 안 됩니다. 좋은 아이디어와 실제로 검증 가능한 전략 사이에는 규칙, 데이터, 체결 가정, 위험 관리라는 여러 단계가 있습니다.

전략 개발의 목적은 과거에서 가장 높은 수익률을 찾는 일이 아닙니다. 왜 그 규칙을 쓰는지 설명하고, 같은 조건에서 다시 실행하며, 예상과 다른 결과가 나왔을 때 원인을 찾을 수 있는 과정을 만드는 일입니다.

이 글의 핵심

  • 전략 개발은 아이디어 → 규칙 → 구현 → 검증 → 표본외 확인 → 운용의 순서로 진행합니다.
  • 각 단계에는 다음 단계로 넘어가기 위한 산출물이 있어야 합니다.
  • 과거 성과가 좋아도 체결·비용·위험·새로운 구간을 통과하지 못하면 실전 전략으로 판단하기 어렵습니다.

전략은 여섯 개의 결과물로 완성된다

여섯 단계는 한 번 통과하면 끝나는 시험이 아닙니다. 운용 중 데이터나 시장 환경이 달라지면 다시 가설과 규칙으로 돌아가 점검합니다. 그래도 순서를 정해 두면 무엇을 바꿨고 왜 결과가 달라졌는지 추적할 수 있습니다.

단계 먼저 답할 질문 남겨야 할 산출물
1. 가설 어떤 시장 현상을 이용하려 합니까? 대상 시장, 관찰, 실패할 조건
2. 규칙 언제 들어가고 나옵니까? 진입·청산·예외 조건표
3. 구현 규칙을 어떤 데이터와 시점으로 계산합니까? 재현 가능한 코드와 입력 정의
4. 검증 실제 가능한 체결 뒤 결과는 어떻습니까? 비용 포함 거래 내역과 성과표
5. 표본외 확인 보지 않은 구간에서도 성격이 유지됩니까? 구간 분리 결과와 변수 점검표
6. 운용 주문·데이터 오류와 손실 확대를 어떻게 다룹니까? 로그, 중지 기준, 점검표

1. 가설: 차트 모양이 아니라 이유를 먼저 적는다

가설은 ‘이 종목이 오를 것 같다’는 예측이 아닙니다. 반복될 수 있다고 생각하는 시장 현상과 이를 확인할 방법을 짧게 적는 것입니다.

예를 들어 유동성이 충분한 종목에서 중기 상승 추세가 유지되는 동안 단기 눌림 뒤 거래량이 늘면 상승 흐름이 이어질 수 있다는 가설을 생각해 볼 수 있습니다. 이 문장에는 대상, 추세, 눌림, 거래량이라는 검증 가능한 요소가 들어 있습니다. 반대로 어떤 상황에서 약해질지, 예를 들어 횡보 구간이나 급격한 변동성 확대에서 신호가 늘어날 수 있다는 가정도 함께 적어 둡니다.

가설 단계에서 필요한 것은 화려한 지표 조합이 아니라, 나중에 반박될 수 있는 문장입니다.

2. 규칙: 사람의 판단을 입력·조건·행동으로 나눈다

가설을 전략으로 바꾸려면 모호한 단어를 줄여야 합니다. 상승 추세, 많이 하락, 거래량 증가 같은 표현에는 기간과 비교 기준이 필요합니다.

아래처럼 규칙표로 나누면 누락된 질문이 보입니다.

구성 예시 질문
입력 종가, 거래량, 이동평균선 중 무엇을 사용합니까?
진입 어떤 조건이 같은 날 충족돼야 합니까?
체결 신호 당일 종가인가, 다음 거래일 시가인가?
청산 손절, 목표 수익, 시간 청산 중 무엇을 사용합니까?
예외 보유 중 중복 신호와 재진입은 어떻게 처리합니까?

감으로 찾던 눌림목, 파이썬 자동매매 조건식으로 바꾸는 법은 매매 문장을 Boolean 조건으로 쪼개는 과정을 보여 줍니다. 규칙이 명확해졌다는 것은 수익성이 증명됐다는 뜻이 아니라, 이제 검증할 수 있는 상태가 됐다는 뜻입니다.

3. 구현: 데이터와 계산 시점을 전략에 포함한다

코드는 규칙을 실행하는 도구이지만, 데이터 선택과 계산 시점도 전략의 일부입니다. 수정주가와 실제 가격 중 무엇을 사용하는지, 결측치를 어떻게 처리하는지, 당일 종가와 거래량이 확정된 뒤 언제 주문할 수 있는지를 코드와 설명에 함께 남겨야 합니다.

이 단계에서는 복잡한 자동 주문 기능보다 다음 세 가지를 먼저 확인합니다.

  • 같은 입력 데이터에서 같은 신호가 다시 나오는가
  • 특정 거래일에 신호가 나온 이유를 각 조건으로 설명할 수 있는가
  • 신호 확정 시점보다 뒤의 정보를 계산에 섞지 않았는가

자동매매 시작 전 준비할 3가지: 데이터·검증·주문 환경은 데이터 환경과 주문 환경을 분리해 준비하는 기준을 정리합니다.

4. 검증: 누적수익률이 아니라 거래의 경로를 확인한다

백테스트에서는 수익률만큼 체결 가정이 중요합니다. 신호가 장 마감 후 확정된다면 같은 날 종가에 체결한 것으로 처리할 수 없습니다. 다음 거래일 시가 체결, 수수료·세금·슬리피지, 보유 중 중복 진입을 반영한 거래 내역이 필요합니다.

결과를 볼 때는 다음 항목을 함께 봅니다.

  • 거래 수와 평균 보유 기간
  • 최대 낙폭(MDD)과 회복에 걸린 시간
  • 승률뿐 아니라 평균 이익과 평균 손실의 관계
  • 시장에 노출된 시간과 비용을 넣은 뒤의 결과

백테스트 결과를 믿기 전 확인할 3가지처럼 미래 참조, 생존자 편향, 과최적화는 수익률 그래프가 좋아 보여도 먼저 점검해야 할 오류입니다.

5. 표본외 확인: 가장 높은 값보다 주변의 일관성을 본다

과거 구간에서 이동평균 기간이나 손절 폭을 여러 번 바꿔 가장 높은 결과를 고르면, 그 값은 우연히 해당 구간에 맞았을 수 있습니다. 그래서 규칙과 변수 후보를 정한 뒤에는 보지 않았던 구간에서 결과를 확인해야 합니다.

표본외 확인에서 중요한 질문은 ‘새 구간에서도 최고 수익률인가’가 아닙니다. 손실과 낙폭을 감수할 수 있는 범위에서 전략의 성격이 유지되는지, 조금 다른 변수에서도 결과가 급격히 무너지지 않는지 확인하는 일입니다.

표본외 결과가 약하다면 변수만 다시 맞추기보다 가설·대상·체결 가정을 다시 살펴야 합니다. 이 단계는 나쁜 결과를 숨기는 과정이 아니라, 실전 투입 범위를 좁히는 과정입니다.

6. 운용: 자동 주문보다 기록과 중지 기준을 먼저 만든다

검증이 끝난 전략도 실제 운용에서는 데이터 지연, 주문 거절, 부분 체결, 예상보다 큰 갭 같은 문제를 만납니다. 운용 단계의 목표는 자동으로 계속 주문하는 것이 아니라, 계획과 다른 상황을 빠르게 발견하는 것입니다.

운용 문서에는 적어도 신호 시각, 주문 요청, 체결 결과, 보유 수량, 오류 메시지, 일일 손익을 남깁니다. 또 누적 손실이나 낙폭이 사전에 정한 범위를 넘었을 때 주문을 중지하고 사람이 확인할 기준도 둡니다.

포지션 사이징 계산법: 1% 룰을 적용하기 전에 알아야 할 것은 한 거래의 손실 크기와 수량을 연결하는 출발점입니다. 전략의 과거 낙폭과 계좌 전체에서 감수할 위험을 함께 보지 않으면, 같은 전략도 다른 위험을 만들 수 있습니다.

여섯 단계로 한 아이디어를 점검하는 예시

상승 추세의 눌림목을 매수한다는 아이디어는 아래처럼 하나의 작업 흐름으로 바뀝니다.

  1. 가설: 추세가 유지되는 종목의 단기 조정 뒤 회복을 관찰합니다.
  2. 규칙: 장기 이동평균선 위, 단기 이동평균선 상향 회복, 거래량 조건을 정의합니다.
  3. 구현: 사용할 가격, 거래량 평균의 계산 시점, 신호 확정 시점을 코드에 고정합니다.
  4. 검증: 다음 거래일 체결과 비용을 넣고 거래 내역·MDD·거래 수를 확인합니다.
  5. 표본외 확인: 남겨 둔 구간과 여러 종목에서 결과의 변화를 확인합니다.
  6. 운용: 실제 신호와 주문·체결이 일치하는지 로그로 확인하고 중지 기준을 적용합니다.

어느 단계에서든 답이 불분명하면 다음 단계로 넘어가지 않는 것이 좋습니다. 전략 개발에서 느린 부분은 대개 코딩이 아니라, 규칙과 가정을 명확히 하는 과정입니다.


이 글은 시스템 트레이딩 전략 개발 과정을 설명하기 위한 교육용 자료입니다. 예시는 특정 종목의 매수·매도 추천이나 미래 수익을 의미하지 않으며, 실제 투자 판단과 책임은 투자자 본인에게 있습니다.