본문 바로가기

주식 자동매매 개발기

[주식자동 매매 5강] 제목: "어? 왜 매수를 안 해?" 야간 ATS 자동매매 대실패 후기 (범인은 나였다)(부제: 파이썬 봇 만들다가 멘붕 온 썰)

안녕하세요! 주식으로 경제적 자유를 꿈꾸는(꿈만 꾸는..) 코딩 초보 개미입니다. 🐜

어제는 드디어 제 파이썬 봇이 **"야간 자율학습(ATS 매매)"**을 시작하는 역사적인 날... 이었어야 했습니다. 네, 과거형입니다. 처참하게 실패했거든요. ㅋㅋ

오후 7시 50분. 대체거래소(ATS)가 열리고 조건 검색에 뜬 종목들을 봇이 싹 긁어모아서 매수하는 게 제 시나리오였습니다. 저는 팔짱 끼고 "자, 돈 벌어와라" 하며 모니터를 보고 있었죠.

그런데 시간이 됐는데도... 로그 창이 너무 고요한 겁니다. 에러가 뜨는 것도 아니고, 그냥 아~무 일도 안 일어나는 적막 그 자체.

"야... 왜 안 사? 파업하니??"

식은땀 흘리면서 밤새 코드를 뜯어본 결과... 범인은 키움증권 서버도 아니고, 인터넷 문제도 아니고, 바로 **'제 손가락'**이었습니다. 저처럼 자동매매 만드시는 분들, 이런 실수 절대 하지 마시라고 부끄러움을 무릅쓰고 공유해 봅니다.


1. 침묵의 7시 50분... 도대체 왜?

원인은 너무나 허무하게도 "기초적인 코딩 실수" 2가지였습니다. 봇 입장에서 보면 제가 얼마나 답답했을까요.

💥 실수 1: "야, 일해! ... 아 아니야, 하지 마." (함수 중복)

코드를 짜다 보니 욕심이 생겨서, 기존 코드를 복사해서 아래쪽에 또 붙여넣기를 했는데요. 이 과정에서 **매수를 판단하는 핵심 함수(process_manual_strategy)**가 위쪽에도 있고, 아래쪽에도 있는 사태가 벌어졌습니다.

  • 위쪽 함수: "야간 ATS 매매 기능 탑재 완료! (똑똑함)"
  • 아래쪽 함수: "그딴 거 모름. (멍청함)"

파이썬은 똑같은 이름의 함수가 있으면 **"가장 마지막(아래)에 있는 놈"**만 기억한다고 하더라고요? 결국 제 봇은 ATS 기능이 싹 빠진 '멍청한 버전'으로 돌아가고 있었던 겁니다. 저는 그것도 모르고 "왜 안 되냐"며 모니터만 두드렸으니... ㅠㅠ

 

💥 실수 2: 총은 쥐여주고 총알을 뺐다 (초기값의 함정)

더 웃긴 건 두 번째 실수예요. 혹시나 봇이 오작동해서 아무거나 막 살까 봐 **"수급 데이터가 없으면 매수 금지!"**라는 안전장치를 걸어뒀거든요.


 
 

근데... 실제 데이터를 받아오는 연결 코드를 안 짰어요. ㅋㅋㅋㅋ 변수만 만들어두고 데이터를 안 넣어주니, 제 봇은 평생 0만 바라보면서 "음, 데이터가 없네? 매수 포기." 이러고 있었던 거죠.

안전장치가 너무 완벽해서 제 계좌를 (수익으로부터) 아주 철통같이 지켜버렸습니다. 😂


2. 오늘 대수술 집도했습니다 (해결!)

어제 "0원" 수익(손실도 0원이니 다행..)을 기록하고, 오늘 챗GPT랑 머리 맞대고 코드를 싹 다 갈아엎었습니다.

✅ 수술 내용

  1. 뇌 통합: 위아래로 찢어져 있던 함수를 하나로 합쳤습니다. 이제 낮에는 정규장 매매, 밤에는 ATS 매매를 척척 구분합니다.
  2. 안전장치 해제: 의미 없는 가짜 데이터(0)를 지우고, 진짜 차트 데이터를 계산해서 판단하도록 로직을 연결했습니다.




3. 마치며...

비록 첫 시도는 허무하게 끝났지만, 덕분에 **"함수 중복 정의"**가 얼마나 무서운 건지 뼈저리게 배웠습니다. 오히려 코드가 꼬인 상태로 주문이 막 나갔으면 깡통 찰 뻔했는데, 차라리 아무것도 안 한 게 다행이다 싶기도 하네요. (긍정 회로 풀가동! 🤯)

코드를 싹 고쳤으니, 오늘 저녁 7시 50분에는 제발 로그 창에 [매수 체결] 뜨는 걸 보고 싶습니다. 자동매매 도전하시는 분들... 코드는 거짓말을 안 합니다. 거짓말은 제가 하더라고요. 복붙할 때 꼭 확인하세요! 👋