블로그
주식 자동매매 프로그램 만들기, 백테스트 +1,085%에 속을 뻔했습니다
2026년 8월 16일
한 줄 답변: 주식 자동매매 프로그램은 미리 정해둔 매매 조건을 사람 대신 컴퓨터가 실행하는 소프트웨어입니다. 노마랩이 2026년 8월 14일부터 3일 동안 증권사 API 연결부터 백테스트, 모의투자 자동매매까지 직접 만들면서 겪은 과정을 기록합니다. 결론부터 말하면, 첫 백테스트에서 나온 +1,085%라는 수익률은 버그였습니다.
먼저 밝혀둡니다. 이 글은 특정 종목이나 전략의 추천이 아니며 투자 권유도 아닙니다. 글에 나오는 수익률은 전부 과거 데이터로 돌린 시뮬레이션 결과라서 미래의 수익을 전혀 보장하지 않습니다.
자동매매 프로그램, 무엇부터 만들었나요?
첫날(8월 14일)에는 증권사 연결부터 확인했습니다. 키움증권이 새로 내놓은 REST API(프로그램끼리 통신하는 표준 방식)를 쓰면 예전처럼 HTS(영웅문)를 켜둘 필요 없이 프로그램 단독으로 시세 조회와 주문이 됩니다. 모의투자 계좌에서 토큰 발급, 시세 조회, 시장가 매수 1주와 체결 확인까지 하루 만에 통과했습니다.
연결이 되면 그다음은 데이터입니다. 전략을 검증하려면 과거 주가가 필요해서, 국내 상장 종목 3,779개의 3년 치 일봉(하루 단위 주가 기록) 216만 개를 수집해 로컬 데이터베이스에 쌓았습니다. 여기까지가 이틀입니다.
백테스트 +1,085%는 왜 가짜였나요?
백테스트는 "이 조건으로 3년 동안 매매했다면 어땠을까"를 과거 데이터로 돌려보는 시뮬레이션입니다. 전략 세 개를 넣고 돌렸더니 그중 하나(변동성 돌파)가 3년에 +1,085%라는 숫자를 냈습니다. 3년 만에 원금이 11배가 된다는 뜻입니다. 이런 숫자가 나오면 기뻐할 게 아니라 의심부터 해야 합니다.
원인은 미래 참조라는 고전적인 버그였습니다. 장중에 매수하는 전략인데, 매수 대상을 고를 때 "그날 장이 끝난 뒤에야 알 수 있는" 당일 거래대금 순위를 쓰고 있었던 겁니다. 시뮬레이션 속 프로그램만 미래를 미리 보고 매매한 셈입니다. 전날 순위를 쓰도록 고치자 +1,085%는 -88%로 반전됐습니다. 같은 전략이 수익률 11배에서 원금 9할 손실로 바뀐 겁니다.
교훈은 하나입니다. 백테스트에서 너무 좋은 숫자가 나오면 전략이 훌륭한 게 아니라 코드가 미래를 훔쳐보고 있을 가능성부터 확인해야 합니다.
두 번째 함정은 무엇이었나요?
버그를 고치고도 결과가 이상해서 매수 대상 목록을 눈으로 검수했더니, 종목 목록에 ETF(상장지수펀드) 1,163개가 섞여 있었습니다. 금리형 ETF는 가격이 거의 매일 조금씩 오르는 구조라 "신고가 돌파" 같은 조건에 상시로 걸립니다. 일반 주식이 차지해야 할 매수 자리를 ETF가 점유하면서 결과 전체가 오염돼 있었습니다.
ETF를 걸러내고 다시 돌린 3년 성적(자금 500만 원 가정, 수수료와 세금 반영)은 이렇습니다. 추세추종 돌파 전략이 총수익률 +95.2%, 연환산 +28%, 거래 195건, 승률 33.8%. 아래가 실제 프로그램 화면입니다.
다만 자산 곡선을 보면 알 수 있듯 중간에 계좌가 반토막(최대낙폭 -56%) 나는 구간이 있습니다. 시뮬레이션이 아니라 실제 돈이었다면 버티기 어려운 수준이라, 이 전략은 아직 실전에 못 씁니다. 참고로 같은 기간 삼성전자를 사서 그냥 들고만 있었어도 +310%였습니다. 갈 길이 멉니다.
이틀 사이에 잡은 버그 2개(미래 참조, ETF 오염)가 준 교훈은 같습니다. 백테스트의 신뢰도는 전략이 아니라 데이터 품질과 검증 절차가 결정합니다.
프로그램은 어떤 기능으로 구성했나요?
전략 실험을 반복하려면 코드를 고치지 않고도 조건을 바꿀 수 있어야 합니다. 그래서 매수 조건과 청산 규칙을 화면에서 조합하는 빌더를 만들었습니다.
만든 전략은 그대로 스크리닝에 씁니다. 오늘 조건에 걸린 종목이 무엇인지 매일 확인할 수 있습니다.
마지막이 자동매매입니다. 지금은 키움 모의투자 계좌에서만 돌아가게 잠가 두고, 신호 발생부터 매수, 손절 감시, 청산까지 한 사이클을 검증하는 중입니다. 실제 돈이 걸리는 기능이라 안전장치를 먼저 만들었습니다. 종목당 손절선, 하루 주문 횟수 상한, 연속 오류 시 자동 정지, 월 손실 한도 도달 시 신규 매수 중단, 그리고 전량 청산하는 긴급정지 버튼입니다.
지금은 어디까지 왔고, 다음은 무엇인가요?
2026년 8월 16일 기준으로 프로그램 골격(데이터 수집, 전략 빌더, 백테스트, 모의투자 자동매매)이 완성됐고, 다음 주부터 장중 실사이클 검증에 들어갑니다. 전략은 최대낙폭을 줄이는 2차 실험을 계속합니다. 검증이 끝나기 전에는 소액으로도 실전에 넣지 않을 생각입니다.
부산물도 하나 생겼습니다. 이 프로그램이 계산한 결과를 노마랩이 운영하는 주식 뉴스 앱 종목캐치의 "오늘의 종목"에 자동으로 흘려보내는 연동을 붙였습니다. 진행 상황은 이런 식으로 계속 공유할 예정입니다.
이런 프로그램을 만들려면 무엇이 필요한가요?
직접 만들어 보니 필요한 조각은 네 가지였습니다. 증권사 API 연결(키 발급과 인증 처리), 과거 데이터 수집과 관리, 매매 조건을 계산하는 로직, 그리고 돈을 지키는 안전장치입니다. 코딩이 손에 익은 분이라면 공개 자료가 많아 도전해볼 만합니다. 다가오는 함정(미래 참조, 데이터 오염, 예외 처리)을 이 글이 미리 보여드렸으니 시행착오를 줄이실 수 있을 겁니다.
직접 만들 시간이 없다면 제작을 맡기는 방법도 있습니다. 한 가지만 기억하시면 됩니다. 합법의 경계는 "누구의 계좌에서 누구의 판단으로 도느냐"입니다. 본인 계좌에서 본인이 정한 조건으로 도는 도구는 일반 소프트웨어지만, 프로그램이 종목을 추천하거나 남의 돈을 대신 굴리는 순간 금융 라이선스의 영역이 됩니다. 노마랩도 이 원칙 안에서만 만듭니다. 자동화 도구의 견적이 어떻게 정해지는지는 자동화 프로그램 제작 비용 글에 정리해 두었고, 투자 도구 제작 사례로는 트레이딩뷰 지표 제작기도 있습니다.
자주 묻는 질문
자동매매 프로그램을 쓰면 수익이 나나요?
아니요, 보장되지 않습니다. 자동매매는 정해진 조건을 지치지 않고 실행해줄 뿐, 조건 자체가 돈을 잃는 조건이면 손실도 자동으로 쌓입니다. 위에서 보셨듯 백테스트 숫자조차 버그 하나로 +1,085%와 -88%를 오갑니다.
개인이 자동매매를 돌리는 것은 합법인가요?
본인 계좌에서 본인이 정한 조건으로 매매하는 것은 증권사가 공식 API로 지원하는 정상적인 사용 방식입니다. 다만 타인의 계좌를 대신 운용하는 것은 투자일임업 인가가 필요한 영역이라 개인이 하면 안 됩니다.
키움증권 계좌가 아니어도 되나요?
이 프로그램은 증권사 연결부를 갈아끼울 수 있는 구조(어댑터)로 만들어서, 1호가 키움 REST API이고 한국투자증권 등 다른 증권사 API를 추가할 계획입니다.
제작을 맡기면 매매 전략도 만들어주나요?
전략(어떤 조건에 사고팔지)은 의뢰인이 정하는 영역입니다. 노마랩은 그 조건을 정확하게 자동 실행하고 검증할 수 있는 도구를 만듭니다. 종목 추천이나 수익률 약속은 하지 않으며, 그런 요청은 정중히 거절합니다.
반복 매매, 프로그램에 맡겨보고 싶다면
매일 같은 조건을 확인하고 같은 주문을 넣고 있다면, 그 반복은 프로그램이 대신할 수 있는 일입니다. 증권사 API 연동이든 데이터 수집이든, 어떤 반복 업무를 자동화하고 싶은지 보내주시면 가능 여부와 방법을 무료로 안내드립니다.