장이 열리고 첫 46분의 고가와 저가를 확정한 뒤, 가격이 그 위인지 아래인지 사이인지로 구역을 나눕니다.
감시 구간에서 양봉 다음 음봉, 또는 음봉 다음 양봉이 완성되면 그 고저를 돌파할 때 진입하는 전략입니다.
의뢰인이 몇 년 동안 손으로 하던 방식을 주간과 야간 세션 모두 자동으로 돌리게 했고, 같은 규칙으로 과거를 돌려 보는 백테스터도 한 프로그램에 넣었습니다.
2026년 9월 초에 납품했고 테스트는 527건입니다.
플랫폼
한투 KIS OpenAPI 국내 선물옵션 REST, WS
대상
미니 코스피200 선물 주간, 야간 세션
청산
R 기반 4단계 트레일링 세션 종료 강제 청산
제작 기간
약 5주 (백테스터 포함)
운영 탭. 구역 판정, 세션 고저, 포지션의 트레일링 단계가 카드로 보이고 아래에 로그가 쌓입니다 (값은 예시)
01전략 요약
주간은 08:45~09:31, 야간은 18:00~19:00에 세션 고가(H)와 저가(L)를 확정합니다. 이 시간은 화면에서 바꿀 수 있습니다.
그 뒤 현재가가 어디 있는지로 구역이 정해집니다.
1구역H 위. 양봉 다음 음봉 패턴이면 매수 돌파이고, 반대 패턴은 규칙에 따라 제한합니다.
2구역H와 L 사이, 박스 안입니다. 어느 쪽 패턴이든 가능하지만 1구역에서 내려왔는지, 3구역에서 올라왔는지, 처음부터 안에 있었는지에 따라 방향 규칙이 다릅니다.
3구역L 아래. 음봉 다음 양봉 패턴이면 매도 돌파.
패턴이 완성되면 패턴 고가와 저가에 버퍼를 더한 가격에 예약을 겁니다. 가격이 닿는 순간 그 가격에서 10틱 양보한 지정가로 진입하고, 3초 안에 체결되지 않으면 시장가로 바꿉니다.
패턴 반대편에 먼저 닿으면 예약을 취소합니다. 종가가 구역을 벗어나도 취소합니다.
청산은 R 단위로 합니다. R은 패턴 폭에 버퍼 두 배를 더한 값입니다.
단계
동작
비고
+1R
손절을 본절로 올림
배수 조정 가능
+2R
절반 익절
앞 단계와 같은 값을 넣으면 두 단계가 같이 실행
+3R
손절을 +1R로 올려 수익 확보
0.0이면 이 단계 미사용
+4R
전량 익절
세션 종료
강제 청산
오버나이트 금지
설정 탭. R 배수 네 개와 버퍼, 주문 집행값이 전부 입력칸입니다. 납품 기본값 그대로 찍은 화면
021계약이 5계약 매도된 날
모의 운용 중에 청산 주문이 반복해서 나가 계좌에 반대 포지션이 열렸습니다. 청산 주문의 응답 대기 시간을 10초로 잡아 뒀는데 실제 체결 응답은 17초가 걸렸습니다.
프로그램은 응답이 없으니 실패로 보고 다시 보냈고, 그게 다섯 번 쌓였습니다.
진입 쪽에는 이미 있던 원칙이었습니다
주문을 보내고 응답이 없으면 결과를 모르는 것이니, 다시 보내지 말고 체결 조회로 실제 상태를 확인한다. 이 원칙은 앞서 진입 쪽에서 비슷한 사고를 겪고 넣어 둔 것이었습니다.
그런데 청산 쪽에만 빠져 있었습니다. 청산도 응답이 없으면 체결 조회부터 하고 재주문은 보류하도록 고쳤습니다. 세 번 반복되면 경보를 울리고, 대기 시간은 30초로 늘렸습니다.
이 일 이후로는 안전 원칙을 한 군데 넣으면 진입, 청산, 취소에 전부 들어갔는지 확인하는 항목을 체크리스트에 두고 있습니다.
포지션이 없는 상태에서 [중지]를 눌렀다가 다시 켰더니 시세가 연결되고 24초 만에 진입한 일도 있었습니다. 장중에 재시작하면 과거 봉을 다시 읽어 상태를 복원하는데, 끄기 전에 걸려 있던 예약까지 살아난 것입니다. 지금은 [중지]로 끈 경우 그 전에 완성된 패턴의 예약은 취소합니다. 프로그램이 비정상 종료된 경우에는 전부 복원하고, 살아남은 예약이 있으면 재시작 직후 어느 가격에 닿으면 진입하는지 눈에 띄게 알립니다.
기본값이 어긋난 것이 네 번 나왔습니다. 시장 분류 기본값에 주식선물 코드가 남아 있었고, 백테스터와 실매매의 본절 배수가 서로 달랐습니다. 설정값을 만드는 곳을 하나로 모으고, 코드의 기본값과 배포 설정 파일을 전부 대조하는 테스트를 넣어 고정했습니다.
백테스트를 연달아 돌리다가 프로그램이 아무 표시 없이 꺼지기도 했습니다. 한 번 돌릴 때 로그가 3만 7천 줄씩 찍힌 탓입니다. 백테스트 중에는 전략 로그를 끄고, 꺼졌을 때 원인을 볼 수 있게 오류 기록 파일을 남기도록 했습니다.
03백테스터를 같은 프로그램에 넣은 이유
선물 전략은 설정값을 바꿔 볼 일이 많습니다. 그런데 실매매 코드와 백테스터가 따로면 백테스트에서는 됐는데 실매매는 다르게 움직이는 일이 생깁니다.
그래서 백테스터가 실매매 코드를 그대로 돌리게 만들었습니다. 까다로웠던 쪽은 데이터였습니다.
월물은 날짜별로 봉이 가장 많은 것을 골라 이어 붙입니다. 종목코드 형식에 기대지 않으니 형식이 바뀌어도 영향이 없습니다. 당일에 끝나는 전략이라 월물이 바뀔 때 생기는 가격 차이를 보정할 필요도 없습니다.
KRX 야간 CSV의 날짜는 체결일과 다릅니다. 금요일 밤 거래가 월요일 파일에 월요일 날짜로 들어옵니다. 그대로 합치면 저녁 봉이 사흘 밀리고 서로 다른 두 밤이 한 세션에 붙습니다. 고객 MTS에는 토요일 새벽 봉이 있는데 파일에는 없다는 점이 이상해서 찾아냈습니다. 지금은 파일을 읽을 때 18시 이후 행은 직전 영업일로, 06시 이전 행은 그 다음 날로 바꿉니다.
야간 분봉은 API가 주지 않습니다. 그래서 프로그램이 돌던 밤의 체결을 직접 1분봉으로 저장합니다. API로 받은 봉과 같은 형식이라 그대로 백테스트에 쓸 수 있습니다.
처음에는 분당 봉 수만 보고 데이터 품질을 걸렀더니 1년치 야간 266세션이 전부 데이터 부족으로 빠졌습니다. 야간은 전체 분의 절반쯤만 체결되는 것이 정상입니다. 세션 시작 10분 안과 끝 30분 이후에 봉이 있는지도 함께 보도록 기준을 바꿨고, 빠진 날짜와 이유를 화면과 엑셀 시트에 보이게 했습니다.
결과는 일별, 월별 손익과 평균 R, R 단계 도달률, 제외 세션, 일별 고저점까지 엑셀로 나옵니다.
백테스터가 낸 숫자는 별도 검증 프로그램으로 다시 계산해 맞는지 확인했습니다.
04납품물과 기술
Windows 실행 파일. 운영, 설정, 백테스트 3탭 화면에 다크 테마
KIS 국내 선물옵션 연동부. 토큰 관리, 호출 제한과 서버 오류 재시도, 주간과 야간과 모의 구분, WebSocket 재연결
백테스터. 월물 저장소, KRX CSV 폴더 일괄 불러오기, 엑셀 리포트
텔레그램 알림, 만기일(둘째 목요일)에 시작하면 경고, 읽기 전용 계좌 대조 도구
테스트 527건
한국투자증권 KIS OpenAPI (선물옵션 REST, WS)Python 3.10 64bitPyQt5openpyxlTelegram Bot APIPyInstaller
05자주 묻는 것
모의투자로 야간도 되나요?
안 됩니다. 한투 KIS는 모의투자 환경에서 주간만 허용합니다.
모의 주문은 주간용 하나뿐이고, 야간 잔고 조회와 주문가능 조회도 전부 실전 계좌용입니다.
그래서 이 프로그램도 모의 모드에서 야간을 고르면 시작 단계에서 막습니다.
야간 로직은 모의로 끝까지 검증할 수 없습니다. 주간까지는 모의로 맞춰 두고,
야간은 실계좌 최소 수량으로 확인하는 단계를 따로 잡습니다.
주문 코드별 차이는 KIS 국내 선물옵션 API, 주문 TR과 함정 정리에 있습니다.
※ 본 사례는 고객 요구사항을 익명 처리하여 재구성한 것이며, 화면의 가격, 수량, 손익은 예시값입니다. 수익률과 수익금은 공개하지 않습니다.
알고랩은 매매 자동화 프로그램 제작 서비스이며, 종목 추천, 투자 자문, 수익 보장 서비스가 아닙니다.
선물, 파생상품 투자는 원금을 초과하는 손실이 발생할 수 있습니다.
손으로 하던 선물 매매를 맡기고 싶으시면
몇 년 지켜 온 규칙이 있으면 그대로 적어 주시면 됩니다.
상담에서 읽어 보고 만들 수 있는지부터 말씀드립니다.