미국주식을 오르내림 속에서 격자(그리드)로 자동 반복 매매하고 싶다 — 다만 프로그램을 켜자마자 대량매수가 나가는 사고만은 막고 싶다.
이 두 가지 요구를 Interactive Brokers(IBKR) API로 구현한 사례입니다. 현재가 ±20% 범위에 지정가 매수·매도 페어를 자동으로 깔고,
체결되면 반대 주문이 스스로 생겨 손 하나 대지 않고 왕복 매매가 돌아갑니다.
플랫폼
Interactive Brokers IB Gateway/TWS · ib_insync
특징
현재가 ±20% 지정가 페어 자동 배치
유형
미국주식 그리드 지정가(GTC)
제작 기간
약 2주 (10~14일)
제작한 그리드 트레이딩 프로그램 대시보드 — 가격 격자·매수/매도 페어·체결 시 반대주문 자동생성 (예시 화면)
01배경 · 고객 요구사항
고객은 미국 주식을 격자(그리드)로 반복 매매하고 싶어 했습니다. 가격이 일정 간격 내려갈 때마다 조금씩 사고,
다시 그만큼 오르면 파는 것을 정해둔 범위 안에서 무한히 반복하는 전략입니다. 문제는 이걸 사람이 직접 하려면
24시간 열려 있는 미국장에서 수십 개의 지정가 주문을 밤새 관리해야 한다는 것이었습니다.
그런데 그리드에는 처음 켤 때 흔히 터지는 사고가 하나 있습니다. "현재가 위아래 ±20% 전 범위에 매수 주문을 깐다"고
순진하게 만들면, 현재가보다 높은 가격의 매수 지정가는 주문을 넣는 순간 즉시 체결(marketable limit)됩니다.
결과적으로 프로그램을 켜자마자 위쪽 매수 주문이 한꺼번에 나가버려 의도치 않은 대량매수가 발생합니다.
요청은 명확했습니다. ① 국내 계좌가 아닌 IBKR 계좌로 미국주식 그리드를 자동 운영하고,
② 시작 직후 대량매수 사고를 원천 차단하며, ③ 매수가 체결되면 매도, 매도가 체결되면 다시 매수가
자동으로 걸려 손 안 대고 왕복하고, ④ PC를 껐다 켜도 매매내역과 실현손익이 그대로 유지되는 것.
02구현 방식
IBKR API(IB Gateway/TWS, ib_insync)에 그리드 엔진을 연결하는 구조로 설계했습니다.
모든 주문은 지정가 GTC(취소 전까지 유효)이며, 흐름은 이렇습니다:
범위 계산 → 현재가를 조회해 ±20% 범위를 잡고, 설정 간격(예: $0.50)마다 격자 레벨을 만듭니다
매수 배치 → 각 격자 레벨에 지정가 매수 주문을 깔되, 현재가 아래 레벨에만 배치합니다
반대주문 자동생성 → 매수가 체결되면 (매수가 + 간격)에 매도를, 매도가 체결되면 같은 레벨에 매수를 자동으로 다시 걸어 무한 반복
범위 추적 → 현재가가 움직이면 ±20% 범위를 다시 계산해, 범위를 벗어난 미체결 매수는 취소하고 빈 격자에는 매수를 추가
그리드 매매 흐름 — 격자 배치부터 체결 시 반대주문 자동생성·무한 반복, 그리고 시작 대량매수 방지 가드
핵심은 "현재가 아래에만 매수를 깐다"는 표준 그리드 방식입니다. 명세는 "±20% 전 범위에 매수 배치"였지만,
그대로 두면 위쪽 매수가 즉시 체결돼 시작 사고가 납니다. 그래서 아래는 매수 대기, 위는 매도 대기로 나눠
깔고, 이 동작을 GUI 토글로도 노출해 필요 시 고객이 직접 방식을 바꿀 수 있게 했습니다.
03해결한 기술 난제
격자 상태머신 + 시작 대량매수 방지 안전장치
그리드의 가장 큰 위험은 두 가지입니다. ① 프로그램 시작 직후 현재가 위 매수가 즉시 체결돼 대량매수가 나가는 것,
② 가격이 흔들릴 때 같은 격자에 주문이 중복 발주되거나 누락되는 것. 이를 "현재가 아래만 매수" 가드와
정수 센트(cents) 고정 격자 상태머신으로 함께 풀었습니다. 격자 가격을 정수 센트로 고정하니 현재가가 움직여도
각 레벨 가격이 흔들리지 않아, 중복도 누락도 원천적으로 막힙니다.
정수 센트 고정 격자 — 격자 레벨을 부동소수점이 아닌 정수 센트(cents)로 관리. 현재가가 오르내려도 각 레벨의 가격 키가 흔들리지 않아 "같은 자리에 두 번 주문"이나 "빈자리 오인 누락"을 차단
격자 상태머신 — 각 레벨을 빈칸 · 매수대기 · 보유 · 매도대기 · 차단 · 완료 상태로 관리. 레벨의 생애주기를 상태로 추적해 체결·취소·재계산이 뒤섞여도 주문이 꼬이지 않음
시작 대량매수 방지 — 현재가 위 매수 지정가는 즉시 체결되는 특성을 이용한 사고를 "현재가 아래만 매수" 표준 그리드로 원천 차단
거부 주문 무한 재주문 차단 — 거부(예: Error 201)로 취소된 레벨은 차단(blocked)으로 두어, 다음 재계산이 빈자리로 오인해 1초마다 재주문하는 로그 폭주를 방지. 우리가 낸 취소(범위 이탈)와는 명확히 구분
부분 체결 고아 방지 — 2주 중 1주만 체결된 주문이 취소돼도 체결분을 보유로 전환하고 매도 페어를 걸어, 추적에서 누락되는 포지션이 없도록 처리
재연결 지수 백오프 — 게이트웨이 끊김 시 무한 즉시재시도로 로그가 폭주하지 않도록 지수 백오프(10→20→40→60초)와 끊김당 알림 1회로 정리. 재연결 시 실제 잔고·미체결을 다시 동기화
04핵심 기능
현재가 ±20% 지정가 그리드 자동 배치 — 격자 간격마다 매수를 깔고, 체결 시 반대주문(매도↔매수)을 자동 생성해 무한 반복
복수 종목 동시 운영 — GUI에서 여러 종목을 쉼표로 입력해 동일 파라미터로 병렬 운영
실시간 대시보드 — 보유 포지션·평균단가·현재가·그리드 범위·미체결 주문·격자 현황을 한눈에 표시
매매내역 CSV 영속 — 재시작해도 누적 실현손익·거래내역이 그대로 유지되고, 시간대 기준으로 오늘/누적 통계를 집계
24시간 운영 — 프리마켓·정규장·애프터마켓까지 체결 가능하도록 설정(outsideRth)
텔레그램 실시간 알림 — 매수·매도 체결, 주문 취소, 연결 끊김·복구를 즉시 통보
파라미터 조정·저장 — 격자 간격·격자당 수량·종목을 GUI에서 바꾸고 저장/불러오기, Live·Paper 계좌 전환
05제작 과정 (약 2주)
1주차 · API 연동·그리드 엔진 — IB Gateway/TWS 연결, 현재가 구독, 정수 센트 격자 상태머신 설계, 지정가 매수·매도 페어 배치와 체결 시 반대주문 자동생성 로직 구축
2주차 전반 · 안전장치·화면 — 시작 대량매수 방지 가드, 거부·부분체결·재연결 처리, 실시간 대시보드, 매매내역 CSV 영속, 텔레그램 알림 구현
2주차 후반 · 검증·납품 — Paper 계좌로 체결·페어링 검증, 소액 실계좌 점검, .exe 빌드와 사용설명서 작성 후 인수인계
※ 본 사례는 과거 고객 요구사항을 익명 처리하여 재구성한 것이며, 수익률·수익금은 공개하지 않습니다.
알고랩은 매매 자동화 프로그램 제작 서비스이며, 종목 추천·투자 자문·수익 보장 서비스가 아닙니다.
과거 백테스트 결과가 미래 실거래 수익을 보장하지 않습니다. 해외주식 투자는 원금 손실 위험이 있으며,
레버리지 ETF 등 변동성이 큰 종목은 손실이 확대될 수 있습니다.
이런 자동매매, 바로 견적 받아보세요
그리드 매매 아이디어가 이미 있으셔도, 아직 구상 단계여도 괜찮습니다.
알고랩이 24시간 빠르게 답변드립니다.