보유한 미국주식이 프리마켓(미 동부시간 04:00~09:30)에 크게 움직일 때 사람 손 없이 손절하고 익절하고 싶다는 요청이었습니다.
한국투자증권 KIS API로 만들었고, 해외 브로커를 새로 트지 않고 쓰던 국내 증권사 계좌 그대로 운영했습니다.
플랫폼
한국투자증권 KIS Developers (해외주식 REST)
특징
프리마켓 1초 폴링 손절, 익절
유형
미국주식 리스크 관리
제작 기간
약 2~3주
납품한 프로그램(DRY-RUN 모드). 슬롯마다 평단가 기준 손절가와 익절가가 계산돼 있고, 익절이 발동한 종목의 주문 이력이 아래에 남습니다 (종목과 수량은 예시)
01배경과 고객 요구사항
고객은 미국주식을 여러 종목 들고 있었고, 프리마켓에 갑자기 빠지거나 급등하면
정해 둔 선에서 자동으로 팔리기를 원했습니다. 그런데 그 시간대는 사람이 지키고 앉아 있기 어렵습니다.
미국 프리마켓은 한국시간으로 저녁부터 밤까지 열립니다. 서머타임 기준 17:00~22:30이고 겨울에는 한 시간씩 밀립니다.
정규장은 그대로 새벽까지 이어집니다. 저녁 약속 중이거나 잠든 사이에 급락이 나오면 매번 화면을 보고 대응할 수가 없습니다.
"자는 사이에 −10%가 나 있더라"는 일을 막자는 데서 시작한 프로젝트입니다.
요청 내용은 이렇습니다. 보유 종목의 평단가를 기준으로 손절선과 익절선을 잡고,
프리마켓 시간에만 감시하다가 선에 닿으면 바로 팔 것. 그리고 해외 브로커를 새로 트지 않고 이미 쓰던 한국투자증권 계좌로 운영할 것.
만들면서 까다로웠던 점은 따로 있었습니다. 미국주식은 종목마다 상장 거래소가 NASDAQ, NYSE, AMEX로 다르고 1달러 미만 종목도 섞여 있어서,
종목마다 다른 조건을 프로그램이 알아서 처리해야 했습니다.
02구현 방식
실시간 스트리밍을 쓰지 않고 잔고를 1초마다 조회하는 단순한 구조로 잡았습니다.
KIS 해외주식 잔고 응답에는 현재가가 함께 실려 옵니다. 그래서 잔고 조회 하나로
가격 감시, 보유 종목 동기화, 손익 표시가 모두 해결됩니다.
1초마다 잔고를 조회해 보유 종목, 평단가, 현재가를 받아 옵니다. 새로 산 종목은 빈 슬롯에 자동으로 들어가고 평단가가 기준가로 잡힙니다.
평단가를 기준으로 손절 조건을 먼저 보고, 그다음 익절 조건을 봅니다.
조건에 닿으면 곧바로 지정가 매도 주문을 냅니다. KIS 해외주식은 시장가 주문을 지원하지 않아 지정가만 씁니다.
어느 거래소로 주문할지는 잔고를 조회하면서 기억해 둔 종목별 거래소 정보에서 꺼내 씁니다.
동작 흐름. 평단 기준 트리거, 프리마켓 1초 폴링, 지정가 매도 순서이고 종목별 거래소는 자동으로 찾습니다로그를 그대로 옮긴 화면. 잔고를 세 거래소에서 차례로 조회해 종목별 거래소를 기억해 두고, 주문할 때 그 정보로 거래소를 정합니다
가격은 기준가인 평단가에서 손절과 익절 각각 트리거 가격과 주문 가격을 계산합니다.
손절 트리거는 기준가에서 설정한 비율만큼 내린 가격입니다. 실제 주문 가격은 트리거보다 조금 더 낮게 걸어서
호가가 얇은 프리마켓에서도 빨리 체결되게 했습니다. 익절은 방향만 반대입니다.
호가 단위는 1달러 이상이면 $0.01, 미만이면 $0.0001로 자동 내림하므로 1달러 미만 종목도 그대로 다룹니다.
03해결한 기술 난제
프리마켓 시간대와 거래소 매핑 처리
미국 프리마켓은 서머타임에 따라 한국시간 기준이 한 시간씩 밀립니다. 같은 미국주식이라도
NASDAQ, NYSE, AMEX 중 어디에 상장됐는지는 종목마다 다릅니다. KIS 해외주식은 잔고 조회와 매도 주문 모두
거래소 코드가 정확히 맞아야 체결됩니다. 이 두 가지를 사람이 신경 쓰지 않아도 되게 만드는 데 공을 들였습니다.
프리마켓 시간은 서머타임을 반영해 자동으로 판별하고, 종목별 상장 거래소는 잔고를 조회하면서 알아내 기억해 두었다가 주문할 때 씁니다.
서머타임을 반영해 프리마켓 구간을 판정합니다. 그 시간 밖에서는 현재가만 갱신하고 주문은 내지 않으므로 정규장이나 애프터마켓에 잘못 주문이 나갈 일이 없습니다.
잔고를 NASD, NYSE, AMEX 순서로 조회해 종목별 상장 거래소를 저장해 두고 매도 주문 때 꺼내 씁니다. NYSE와 AMEX 종목이 "해당 종목 정보가 없습니다"로 거부되던 문제가 이것으로 해결됐습니다.
프리마켓 시간을 판별하는 부분은 따로 떼어 갈아 끼울 수 있게 했습니다. 같은 프로그램으로 애프터마켓 전용 버전도 만들 수 있습니다.
안전장치는 두 겹입니다. 기본값이 모의 실행(드라이런)이고, 프리마켓 시간 밖 주문 차단은 항상 켜져 있습니다. 설정을 잘못하거나 시간대를 착각해도 실제 매도가 나가지 않습니다.
04주요 기능
보유 평단을 기준가로 잡아 손절과 익절의 트리거가, 주문가 네 개를 자동 계산하고 가격이 닿으면 매도합니다.
매수만 하면 잔고 조회에서 잡혀 빈 슬롯에 자동으로 들어갑니다. 전량 매도되면 슬롯이 비워지고 기본값으로 돌아갑니다. 슬롯은 최대 3개입니다.
손절 주문가는 트리거보다 낮게 잡아 빨리 체결되게 하고, 호가 단위($0.01 또는 $0.0001)는 자동으로 맞춥니다.
화면에는 종목, 평단, 현재가, 평가손익, 슬롯별 계산가, 상태(모니터링중, 손절주문완료 등)가 실시간으로 나옵니다. 다크와 라이트 테마를 고를 수 있습니다.
주문이 거부되면 5초 뒤 한 번만 다시 주문합니다. 또 거부되면 슬롯 상태를 고정해 중복 주문을 막습니다.
App Key와 Secret, 계좌는 입력 마법사로 넣습니다. 로그는 날짜별로 쌓이고 접근 토큰은 24시간마다 자동 갱신됩니다.
05제작 과정 (약 2~3주)
1주차에 손절과 익절 계산 규칙을 확정하고 KIS 해외주식의 인증, 잔고, 주문 연동 뼈대를 세웠습니다. 서머타임을 포함한 프리마켓 시간 판별도 이때 만들었습니다.
2주차에는 지정가 자동 계산, 거래소 자동 저장, 보유 종목 슬롯 배치를 넣고 tkinter 화면과 테마를 만들었습니다.
3주차는 검증과 배포였습니다. 1달러 미만 종목과 NYSE, AMEX 종목을 포함해 소액 실계좌로 검증하고 드라이런과 시간 차단 안전장치를 점검했습니다. 실행 파일로 묶고 한글 PDF 사용설명서를 만들어 인수인계했습니다.
06납품 결과물
실행 프로그램 (tkinter 화면 포함, Windows exe)
KIS 해외주식 연동 (잔고, 매도 주문, 종목별 거래소 자동 매핑)
한글 PDF 사용설명서와 API, 계좌 설정 가이드
설정과 로그 폴더 (날짜별 로그)
납품 후 30일 무료 AS (협의 범위 내)
07기술 스택
한국투자증권 KIS API (REST, 해외주식)Python 3.10+ (64bit)tkinter, ttk GUIREST 1초 폴링 (잔고 조회)PyInstaller (--onefile --windowed)reportlab (한글 PDF 매뉴얼)
※ 본 사례는 과거 고객 요구사항을 익명 처리하여 재구성한 것이며, 수익률과 수익금은 공개하지 않습니다.
알고랩은 매매 자동화 프로그램 제작 서비스이며, 종목 추천, 투자 자문, 수익 보장 서비스가 아닙니다.
과거 백테스트 결과가 미래 실거래 수익을 보장하지 않습니다. 미국주식과 해외주식 투자는 환율 변동과 원금 손실 위험이 있습니다.
밤사이 미국주식이 걱정되신다면
이미 보유한 종목이 있어도, 아직 생각만 하고 계셔도 괜찮습니다.
어떤 선에서 팔고 싶으신지 상담에서 알려 주세요.