운영자가 웹 관리자 한 곳에서 매매할 종목 풀을 관리하면, 여러 대 PC의 자동매매가 그 목록을 실시간으로 따라오게 해 달라는 요청이었습니다.
웹 종목 풀 서버와 다중 PC 클라이언트로 만들었습니다.
운영자의 매수를 따라 사는 카피트레이딩과는 다릅니다. 매매 후보 종목 목록만 공유하고, 각 PC는 자기 조건검색으로 따로 매매합니다.
플랫폼
키움 OpenAPI+ 클라이언트 FastAPI, SQLite (EC2) 서버
특징
웹 관리자 종목풀을 다중 PC가 3초마다 동기화
유형
국내주식 멀티슬롯
제작 기간
약 3~4주
PC 쪽 클라이언트. 매수 대기 표에 종목 풀과 조건검색에 모두 들었는지가 종목별로 보이고, 상태바에 서버 풀 동기화 시각이 뜹니다 (종목과 수량은 예시)
01배경과 고객 요구사항
고객은 이미 키움 조건검색 자동매매를 여러 대의 PC에서 돌리고 있었습니다.
그런데 오늘 매매할 종목 풀을 PC마다 따로 관리해야 했습니다. 운영자가 종목을 골라도 각 PC에 일일이 옮겨 넣어야 했고,
PC가 늘수록 손이 많이 가고 실수도 잦았습니다.
요청은 이랬습니다. 운영자가 웹 한 곳에서 종목 풀을 관리하면 등록된 모든 PC의 자동매매가 그 목록을 자동으로 반영할 것.
그리고 각 PC는 지금처럼 자기 키움 조건검색으로 따로 판단해 매매할 것.
착수 전에 요구 범위부터 분명히 했습니다.
운영자가 사면 유저도 같이 사는 카피트레이딩인지, 종목 목록만 공유하고 매매는 각자 하는 것인지를 대화로 확인했고,
뒤쪽으로 정리한 다음 시작했습니다. 어느 쪽이냐에 따라 서버 권한 설계와 책임 범위가 달라집니다.
02구현 방식
가운데에 종목 풀 서버(FastAPI, SQLite, EC2)를 두고, 여러 대의 자동매매 클라이언트가 이 서버를 주기적으로 조회해
종목 풀을 맞춥니다.
운영자는 웹 관리자에서 종목 풀을 등록하고 삭제합니다. 직접 입력, 종목명 검색, CSV 업로드가 되고 휴대폰에서도 쓸 수 있습니다.
서버는 등록된 풀을 저장해 두었다가 클라이언트에 내줍니다. 웹은 로그인으로, 클라이언트는 API 키로 인증합니다.
각 PC는 3초마다 서버를 조회해 종목 풀을 반영합니다. 여러 대가 같은 풀을 봅니다.
서버 종목 풀과 키움 조건검색 결과에 모두 든 종목만 매수합니다. 운영자의 선별과 사용자의 조건식을 둘 다 통과해야 합니다.
시스템 구성. 웹 종목 풀 등록부터 다중 PC 동기화, 교집합 매수, 청산까지웹 관리자의 종목 풀 화면. 여기서 바꾸면 PC 여러 대가 3초 안에 따라옵니다
서버가 나눠 주는 것은 종목 목록뿐입니다. 매수와 매도 판단, 주문은
각 PC의 조건검색과 매매 룰이 따로 합니다. 그래서 PC가 몇 대로 늘어도 운영자는 웹 한 곳만 관리하면 됩니다.
연결이 끊겼을 때의 규칙도 정했습니다. 서버 조회가 끊긴 채 일정 시간(기본 60초)이 지나면 신규 매수를 막고,
이미 보유한 종목의 매도는 그대로 진행합니다. 종목 풀을 못 받았다고 손절까지 멈추면 안 되기 때문입니다.
03어려웠던 부분
분할매수가 반복 발송되는 문제 (대량 오매수 방지)
여러 PC가 같은 종목 풀을 공유하게 만드는 것 못지않게 신경 쓴 것이 분할매수가 끝없이 반복되는 문제였습니다.
같은 계좌를 두 슬롯에 잘못 배정하면 체결 통보가 한쪽 슬롯으로만 가서, 다른 슬롯은 아직 안 샀다고 착각합니다.
그러면 미체결 정리가 돌 때마다 2차 매수를 다시 보낼 위험이 있었습니다.
그래서 한 포지션에서 각 분할 단계는 정확히 한 번만 주문하도록 막았고,
같은 계좌를 쓰는 슬롯은 시작할 때 거부합니다.
체결이 확인되지 않을 때 다시 사는 쪽보다 덜 사는 쪽을 택했습니다.
한 포지션에서 2차, 3차 매수는 단계별로 한 번만 나갑니다. 체결 통보가 빠지거나 다른 슬롯으로 가도, 미체결 정리가 돌아도 다시 보내지 않습니다. 전량 매도한 뒤에만 초기화됩니다.
이미 실행 중인 슬롯과 같은 계좌를 다른 슬롯에 지정하면 시작을 거부합니다.
서버 조회가 끊기고 설정 시간(기본 60초)이 지나면 신규 매수만 멈춥니다. 보유 종목 청산은 계속합니다.
리눅스 서버에서는 키움 프로그램을 쓸 수 없어서, 종목코드로 종목명을 찾을 때 외부 금융 데이터를 조회하고 결과를 저장해 둡니다.
API 키를 붙여 넣을 때 섞여 들어오는 줄바꿈, 공백, 보이지 않는 문자를 지우고 형식을 바로 검사합니다. 키를 보이거나 숨기는 버튼도 있습니다.
손절, 수익실현, 분할매수 설정의 구조가 바뀌어도 기존 사용자 설정을 자동으로 변환합니다. 업데이트 뒤에 다시 입력할 필요가 없습니다.
04접속 로그. PC-A와 PC-B가 3초 간격으로 조회한 시각이 초 단위로 남습니다주요 기능
웹 관리자에서 종목을 등록하고 삭제합니다. 종목명은 자동으로 조회됩니다.
등록된 모든 PC가 3초마다 같은 종목 풀을 받아 옵니다.
운영자가 고른 종목과 각 PC의 조건검색이 겹치는 종목에만 진입합니다.
슬롯 3개를 동시에 운용합니다. 슬롯마다 계좌, 조건검색, 매매 룰이 따로입니다.
청산은 매수 건수에 따른 단계별 손절, 순서와 무관한 분할매수(불타기, 물타기), 익절 후 트레일링 스탑을 지원합니다.
웹 관리자에서 API 키 발급과 폐기, 접속 로그 확인, 비밀번호 변경을 합니다.
중지를 누르면 손절도 멈추게 하는 옵션이 있습니다. 숫자 입력칸은 마우스 휠에 반응하지 않아 값이 실수로 바뀌지 않고, 포지션은 저장되어 재시작해도 복원됩니다.
05제작 과정 (약 3~4주)
1주차에 범위를 확정했습니다. 종목 목록 공유인지 카피트레이딩인지를 정리하고, 종목 풀 서버와 DB 구조, 인증 방식을 설계했습니다.
※ 본 사례는 과거 고객 요구사항을 익명 처리하여 재구성한 것이며, 수익률과 수익금은 공개하지 않습니다.
알고랩은 매매 자동화 프로그램 제작 서비스이며, 종목 추천, 투자 자문, 수익 보장 서비스가 아닙니다.
과거 백테스트 결과가 미래 실거래 수익을 보장하지 않습니다. 주식 투자는 원금 손실 위험이 있습니다.
여러 PC의 자동매매를 한곳에서 관리하고 싶으시면
지금 쓰시는 자동매매가 있어도, 아직 구상 단계여도 괜찮습니다.
PC가 몇 대인지, 종목은 어떻게 고르시는지 상담에서 알려 주세요.