국내주식 · 키움증권 신 REST · 매도 전용

키움 REST 수동매수 후 자동매도 — 사는 건 사람, 파는 건 프로그램

"종목 고르고 사는 건 제가 할게요. 파는 것만 규칙대로 대신 해 주세요." 이 한 문장이 명세서의 전부에 가까웠습니다. 진입 로직이 없는 매도 전용 프로그램이고, 계좌 두 개가 서로 다른 규칙으로 완전히 따로 돕니다. 2026년 8월 말에 납품했습니다.

플랫폼
키움증권 신 OpenAPI
(REST, 64bit)
역할
매도 전용
진입 로직 없음
주문
15:20 동시호가
시장가 전량
제작 기간
약 2주
(자동 테스트 382개)
키움 수동매수 자동매도 프로그램 — 계좌 1 탭, 추적 종목별 매수일·수량·양봉·음봉 카운트·매도 예정·상태 표
계좌 1 탭. 추적 중인 종목마다 매수일 이후 양봉·음봉 개수와 오늘 매도 예정 여부가 보입니다 (종목·수량은 예시값)

01두 계좌, 두 규칙

의뢰인은 계좌 두 개를 쓰면서 각각 다른 매도 원칙을 손으로 지키고 있었습니다. 문제는 매일 15:20 전에 종목마다 봉을 세고 5일선을 확인해야 한다는 것, 그리고 그걸 하루라도 빼먹으면 원칙이 무너진다는 것이었습니다.

계좌 1
매수 다음 거래일부터
양봉 2개 또는 음봉 2개 누적

연속이 아니라 총 개수입니다. 양 1·음 1이면 아직 대기, 어느 쪽이든 2개가 차는 날 매도.

계좌 2
종가 < 5일 이동평균선

조건 하나. 등호는 이탈로 보지 않습니다. 15:19:30 현재가를 그날 종가로 간주해 판정합니다.

추적 대상은 프로그램을 켠 뒤 새로 산 종목만입니다. 시작 시점의 잔고는 기준선으로 잡아 두고 건드리지 않습니다. 원래 들고 있던 종목도 규칙에 넣고 싶으면 [기존 보유 추적] 버튼으로 골라서 올릴 수 있습니다. 익절·손절 개념은 없고, 조건이 맞으면 보유 전량을 한 번에 시장가로 냅니다.

0215:19:30에 판정하고, 15:20:00에 쏜다

단순해 보이는데 실제로는 시각 문제가 이 프로젝트의 절반이었습니다. 하루 흐름은 이렇습니다.

종목이 많으면 판정 시각을 자동으로 앞당깁니다. 키움 REST는 api-id마다 요청 간격 제한이 있어 N종목 판정에 N × 간격만큼 시간이 들고, 그걸 15:20 안에 못 끝내면 그날 매도가 통째로 빠집니다. 프로그램이 필요한 만큼 당기고(09:00이 하한) 그 사실을 화면에 띄웁니다.

개발 PC 시계가 11초 빨랐다

주문 시각은 PC 시계가 아니라 키움 서버 시각입니다. HTTP 응답의 Date 헤더로 오프셋을 구해 모든 시각 계산에 넣습니다. 시계가 11초 빠르면 PC의 15:20:00이 실제로는 15:19:49라서, 동시호가가 열리기 전에 정규장 시장가로 그냥 체결돼 버립니다. 휴장 판단도 공휴일 표를 믿지 않고 "일봉에 오늘 봉이 있는가"로 합니다. 사람이 관리하는 표가 틀리면 개장일을 휴장일로 오판해 그날 매도가 날아갑니다.

03고치고 나서야 알게 된 것들

납품 전에 기법을 바꿔 가며 "10라운드 연속 결함 0건"이 나올 때까지 자가 디버깅을 돌렸습니다. 1차 31라운드에서 23건, 2차 10라운드에서 10건. 그중 다른 프로젝트에도 옮겨 붙는 것만 적습니다.

키움 수동매수 자동매도 프로그램 로그 탭 — 토큰 발급, 상태 복원, 종목별 판정 진단, 15:19:30 판정 동결, 15:20:00 매도 발사, 잔고 감소 확인
로그 탭. 종목별 판정 근거가 한 줄씩 남고, 15:19:30 동결과 15:20:00 발사가 따로 찍힙니다 (예시 로그)

04납품물

기존 보유 추적 다이얼로그 — 기준선 종목을 선택해 매수일을 입력하고 추적에 올리는 화면
[기존 보유 추적] — 프로그램을 켜기 전에 산 종목도 골라서 규칙에 넣을 수 있습니다
키움증권 신 REST API Python 3.10 64bit PyQt5 pytest (382) PyInstaller docx-js (사용설명서)

05자주 묻는 것

텔레그램 알림은 없나요?

이 건은 없습니다. 의뢰인이 장중에 화면을 보고 있는 분이라 요청에 없었고, 안 넣는 게 값도 쌉니다. 필요하면 하루면 붙습니다.

모의투자로 먼저 돌려볼 수 있나요?

됩니다. 설정에서 모의/실전을 바꾸면 프로그램을 다시 켜지 않아도 다음 [시작]부터 적용됩니다. 처음엔 "재시작 필요" 안내가 붙어 있었는데, 서버 주소를 들고 있는 객체만 다시 만들면 되는 일이었습니다. 앱키 발급 절차는 키움 REST 앱키 발급 가이드에 있습니다.

규칙을 바꾸고 싶으면요?

봉 개수, 이동평균 기간, 판정 시각, 계좌별 활성 여부는 설정 화면에서 바꿉니다. 판정 로직 자체가 입력(일봉 목록, 매수일)만 받는 순수 함수라 "3봉 누적", "20일선 이탈" 같은 변형은 코드 몇 줄입니다.

06관련 사례 · 더 보기

시장가 매도 요청의 실제 형태는 키움 REST API 주식 주문 — kt10000과 trde_tp에 있습니다.

※ 본 사례는 고객 요구사항을 익명 처리하여 재구성한 것이며, 화면의 종목·수량·계좌는 예시값입니다. 수익률·수익금은 공개하지 않습니다. 알고랩은 매매 자동화 프로그램 제작 서비스이며, 종목 추천·투자 자문·수익 보장 서비스가 아닙니다.

이런 자동매매, 바로 견적 받아보세요

"매도만", "알림만" 같은 부분 자동화도 만듭니다. 규칙이 한 줄이어도 괜찮습니다.
알고랩이 24시간 빠르게 답변드립니다.

무료 상담 시작하기 요금제 보기
← 제작 사례 전체 보기