
이번 회차의 문제: 비싼 종목이 계속 안 사진다

자동으로 미국 주식을 조금씩 사 모으는 프로그램을 만들다 보면 이상한 일이 생깁니다. 한 번에 쓸 수 있는 돈이 정해져 있는데, 사려는 주식 한 주 값이 그 돈보다 비싸면 한 주도 못 사고 그냥 넘어가버립니다.
이번 기록은 바로 이 문제를 푼 1차 작업입니다. 결론부터 말하면, "몇 주를 살까"가 아니라 "얼마어치를 살까"로 주문 방식을 바꾸는 길을 새로 만들었습니다. 다만 이번 단계에서는 실제 매매에 연결하지는 않았고, 안전하게 준비만 해둔 상태입니다.
무엇을 확인했나: '한 주 단위'의 벽

기존 코드는 살 수량을 계산할 때 소수점을 버리는 방식이었습니다. 예를 들어 한 번에 쓸 수 있는 돈이 약 50달러인데 어떤 종목 한 주가 그보다 비싸면, 계산 결과가 0주가 되어 매수가 건너뛰어집니다.
- 1회 매수 한도가 작게 걸려 있음(약 $50)
- 수량을 정수로만 계산 → 남는 금액은 버림
- 결과적으로 비싼 대형주(예: META 같은 고가 종목)는 계속 0주로 스킵
이게 쌓이면 "돈은 있는데 아무것도 안 사는" 병목의 원인 중 하나가 됩니다.
원인: 소수점 주문에는 두 가지 방식이 있다
미국 주식은 한 주를 쪼개서 사는 '소수점 매수'가 가능합니다. 그런데 이걸 처리하는 방식이 증권사마다 갈립니다.
| 소수 수량 방식 | 몇 주(0.3주 등) | "이 종목 0.3주 사줘" |
| 금액 방식 | 얼마어치(달러) | "이 종목 30달러어치 사줘" |
운영 환경에서 직접 확인해 보니, 이번에 쓰는 경로는 수량이 아니라 금액(달러)으로 주문하는 방식이었습니다. 그래서 수량을 기준으로 짠 기존 코드로는 소수점 매수가 아예 나오지 않았던 것입니다.
어떻게 고쳤나: 금액으로 사는 새 메서드
주식 수 대신 '금액'을 받아 주문하는 새 기능을 추가했습니다. 핵심은 다음과 같습니다.
- 입력값: 종목, 이름, 살 금액(달러)을 받습니다.
- 주문 내용: 사자(매수), 시장가, 그리고 주문 금액을 담아 보냅니다. 수량이 아니라 금액을 넣는 게 핵심입니다.
- 최소 금액 검사: 최소 1달러 이상인지 먼저 확인합니다.
- 장 열림 확인: 정규 거래 시간에만 주문이 나가도록 막아둡니다.
- 이중 안전장치: 실제 주문을 켜는 별도 스위치가 켜져 있어야만 진짜로 나갑니다. 기본은 실행만 흉내 내는 '연습 모드(dry-run)'입니다.
주문을 보내는 통신 부분(그리고 인증이 만료됐을 때 한 번 다시 시도하는 처리)은 별도 함수로 따로 빼서, 수량 주문과 금액 주문이 같은 코드를 공유하도록 정리했습니다. 체결된 수량을 읽어오는 부분은 우선 '가능한 만큼' 처리하도록 두고, 실제 체결 이후 정확한 값을 확정하기로 했습니다.
전후 비교: 무엇이 달라졌나
이번 작업으로 바뀐 점과 아직 그대로인 점을 정리하면 이렇습니다.
| 주문 기준 | 주식 수(정수) | 금액(달러)으로도 가능 |
| 비싼 종목 | 0주로 스킵 | 금액 기준이면 매수 가능(경로 준비됨) |
| 실제 매매 연결 | - | 아직 연결 안 함(동작 변화 없음) |
| 안전 모드 | - | 기본 연습 모드 + 별도 스위치 필요 |
중요한 점은 이번 단계에서 실제 매매 동작은 하나도 바뀌지 않았다는 것입니다. 새 기능은 만들어 두되, 실전 경로에 연결하는 것은 다음 단계로 미뤘습니다. 테스트는 새 기능 관련 5건을 포함해 통과했습니다.
배운 점과 남은 과제
가장 큰 교훈은 실제 주문 규칙은 추측하면 안 된다는 것입니다. 소수점 주문이 '수량'인지 '금액'인지는 브로커마다 다르며, 이번 경로가 금액 주문 방식이라는 사실은 운영 환경에서 실제로 주문을 넣어 보고 돌아오는 응답(거절 시의 코드·메시지 등)으로 확인했습니다. 응답이 진짜 기준이 됩니다.
- 정규 거래 시간에 실제 체결을 확인해 응답 형식을 확정하기
- 확인이 끝나면 별도의 안전 절차(안전 통과 기준)를 거쳐 실전 경로에 연결하기
- 체결 수량을 읽어오는 부분의 정확한 키 확정
즉, 지금은 "준비 완료, 아직 미연결" 상태이고, 정규장 실체결 확인과 안전 통과 기준를 거친 뒤 실전 연결을 진행할 예정입니다.
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
'EP 빌드로그' 카테고리의 다른 글
| EP.40 자동화가 조용히 멈췄다: 실패 아닌 통과로 위장된 재고 고갈 (0) | 2026.08.20 |
|---|---|
| EP.39 맥 자동 예약작업이 3주간 안 돌았던 이유: 파일은 있는데 서비스가 멈춰 있었다 (0) | 2026.08.19 |
| EP.38 AI 유튜브 채널 첫 3편 조회수 66배 차이, 무엇이 갈랐나 (0) | 2026.08.18 |
| EP.37 git push 검토 훅이 잘못된 폴더를 검사하던 버그, cd 명령 추적으로 해결한 기록 (0) | 2026.08.17 |
| EP.36 쇼츠 자막이 '움직이는 글자'로 바뀐 이유 — 정지 배경의 함정 EP.리팩터 (0) | 2026.08.16 |