AI한테 내 주식계좌를 맡기기 전에, 나는 금고부터 만들었다
나는 개발자가 아니다. 그리고 고백하자면, 손절을 못 하는 사람이다. 물린 주식을 복기해보니 결론이 아팠다 — 그때그때 AI가 하라는 대로 팔았으면 손실이 훨씬 작았다. 그래서 결심했다. 소액 한도 안에서, AI가 직접 사고팔게 해보자. 단, 기능을 만들기 전에 AI가 절대 못 하는 일 목록부터 만들었다. 이 글은 그 안전장치 이야기다.
1. 발단 — 틀린 건 AI가 아니라 나였다
몇 달치 매매 기록을 놓고 복기를 했다. 패턴이 명확했다. AI 비서는 "여기서 손절하는 게 규율입니다"라고 했고, 나는 "조금만 더 버텨보자"라고 했다. 결과는 대부분 AI가 맞았다. 지금 계좌에서 반토막 난 종목들은 전부 내 고집이 AI의 판단을 이긴 자리다.
재미있는 건, 과거 데이터로 검증해보니 AI의 종목 선택 자체는 특별한 우위가 없었다는 점이다. 진짜 우위는 다른 데 있었다 — 정해진 규칙대로 파는 것. 익절선과 손절선을 지키는 것. 즉 사람인 내가 제일 못 하는 바로 그 부분이었다. 그러면 답은 하나다. 판단이 아니라 규율을 자동화하면 된다.
2. 무서움 — 내 돈으로 주문을 낼 수 있는 프로그램
말은 쉽다. "AI야, 알아서 사고팔아줘." 그런데 이건 챗봇에게 맛집 추천을 시키는 것과 차원이 다르다. 증권사 오픈 API에 연결된 프로그램은 진짜 내 돈으로 진짜 주문을 낸다. AI가 환각으로 이상한 종목을 사면? 버그로 같은 주문이 열 번 나가면? 어느 날 갑자기 내가 아끼는 기존 보유 주식을 팔아버리면?
그래서 나는 AI 비서에게 이렇게 시켰다. "매매 기능은 나중이야. 먼저 네가 뭘 못 하는지부터 코드로 박아. 그 목록이 통과 못 하면 매매 기능은 안 켠다."
3. 4중 금고 — 못 하는 일 목록을 겹겹이 쌓다
완성된 구조는 금고 네 겹이다. 안쪽으로 갈수록 단순하고, 단순할수록 뚫기 어렵다.
① 돈의 바닥 — 예산 금고
가장 안쪽, 주문이 실제로 나가는 최종 관문에 예산 검사를 심었다. 검사는 세 가지가 동시에 통과해야 한다: 주문 한 건의 금액 상한, 누적 사용액 상한(테스트 예산 — 소액이다), 그리고 실시간 잔여 현금. 셋 중 하나라도 확인이 안 되면? 확인 불가는 곧 거부다. 예산 장부 파일이 깨져 있어도 거부, 현금 조회가 실패해도 거부. "애매하면 통과"가 아니라 "애매하면 차단"이 이 금고의 유일한 규칙이다.
이 층의 좋은 점은, 위층에서 무슨 버그가 나든 상관없다는 것이다. AI가 미쳐도, 코드가 꼬여도, 내 최대 손실은 테스트 예산 그 자체가 상한이다.
② 장부 격리 — "네가 산 것만 팔 수 있다"
제일 무서운 시나리오는 손실이 아니라 월권이었다. AI가 기존에 내가 들고 있던 주식을 제멋대로 파는 것. 그래서 자동매매 전용 장부를 따로 만들었다. AI가 산 종목과 수량만 이 장부에 적히고, 자동 매도는 장부에 있는 것, 그 수량 이내로만 가능하다. 내 기존 보유분은 장부에 없으니 물리적으로 건드릴 수가 없다. 실제로 자동 테스트 중엔 "AI가 기존 보유 종목을 팔려고 시도하면 거부되는가"를 일부러 공격해보는 테스트가 들어 있다.
③ 1회용 출입증
자동매매는 하루에 장별로 두 번, 정해진 시간에만 돈다. 그 시간에 시스템이 30분짜리 1회용 출입증을 발급하고, AI의 매수 주문에는 이 출입증 번호가 붙어 있어야 한다. 평소에 나랑 수다 떨다가 AI가 "지금 사면 좋겠는데요?" 하고 스스로 주문을 내는 것 — 출입증이 없으니 불가능하다. 자동매매는 자동매매 시간에만 존재한다.
④ 규율 계약서
마지막 겹은 AI에게 주는 지시문 자체다. 한 세션에 신규 매수는 최대 1건. 이미 산 종목에 물타기 금지. 고점 근처 추격 매수 금지. 그리고 제일 중요한 문장 — "살 게 없으면 안 사는 게 정답이다. 관망은 실패가 아니라 규율이다." 억지로라도 뭔가 사려는 AI 특유의 과잉 성실함을 명시적으로 꺾어놨다.
4. 규율의 자동화 — 사는 순간 파는 계획이 잠긴다
이 시스템의 심장은 사실 매수가 아니라 매도다. AI가 뭔가를 사면, 그 즉시 손절 예약(−8%)과 익절 예약(+15%)이 자동으로 걸린다. 여기에 내가 끼어들 틈은 없다. "조금만 더 버텨보자"라고 말할 입 자체가 시스템에 없는 것이다. 한쪽이 체결되면 반대쪽 예약은 자동으로 취소된다.
만드는 과정에서 서늘한 함정도 하나 발견했다. 예약 시스템이 오래된 예약을 7일 뒤 조용히 만료시키는 사양이었던 것. 그대로 뒀으면 일주일 넘게 들고 있는 포지션은 어느 날 손절선이 소리 없이 증발한 채 방치될 뻔했다. 지금은 매 세션 시작마다 "열린 포지션마다 손절/익절 예약이 살아 있는가"를 점검하고, 사라졌으면 원래 매수가 기준으로 다시 건다. 현재가 기준이 아니라 매수가 기준이라는 게 중요하다 — 그래야 손절선이 아래로 슬금슬금 밀리는 일이 구조적으로 불가능하다.
5. 기본값은 언제나 '꺼짐'
이 시스템에는 스위치가 여러 개 있는데, 전부 기본값이 꺼짐이다. 아무 설정도 안 하면 시스템은 리허설 모드로 돈다. AI가 시장을 분석하고, 종목을 고르고, 주문 직전까지 전부 진행하지만 — 마지막 단계에서 "실제 주문은 발행하지 않았음"이라고만 기록한다. 진짜 주문이 나가려면 스위치 여러 개를 전부, 명시적으로 켜야 한다.
반대로 끄는 건 한 방이다. 서버에 특정 이름의 빈 파일 하나만 만들면 전체 시스템이 그 자리에서 정지한다. 새벽에 폰으로도 끌 수 있는 물리 비상정지 버튼인 셈이다.
지금 이 글을 쓰는 시점의 상태가 바로 그 리허설 모드다. 매일 정해진 시간에 AI가 진짜로 판단하고, 결과 보고서만 내 메신저로 온다. "오늘은 이 종목을 이래서 샀을 것이다" 혹은 "오늘은 전부 추격 구간이라 관망". 이 리허설 보고를 며칠 지켜보고, 판단의 질이 납득되면 그때 스위치를 켠다.
6. 숫자로 남기면
- 안전장치 계층: 4겹 (예산 금고 → 장부 격리 → 1회용 출입증 → 규율 계약서)
- 자동 테스트: 250개 규모 — 전부 가짜 응답으로 검증, 만드는 동안 실주문 0건
- 일부러 공격해보는 테스트 포함: 기존 보유 주식 매도 시도 → 거부, 예산 초과 주문 → 거부, 다른 계좌로 우회 → 거부
- 규율 상수: 손절 −8%, 익절 +15%, 세션당 신규 매수 최대 1건
- 발견한 함정: 예약 7일 만료(조용한 손절선 증발) 1건 — 세션마다 자동 복구로 해결
- 비상정지: 파일 1개 생성 = 전체 정지
7. 비개발자가 배운 것
첫째, AI에게 권한을 줄 때는 기능 목록이 아니라 금지 목록부터 설계한다. "무엇을 할 수 있나"는 나중 문제고, "무슨 짓을 해도 이 선은 못 넘는다"가 먼저다. 이 순서를 지키니 마음이 편해졌고, 마음이 편하니 오히려 권한을 줄 수 있었다.
둘째, 애매하면 차단이 기본값이어야 한다. 장부가 깨졌을 때, 조회가 실패했을 때, 확신이 없을 때 — 시스템이 "일단 진행"이 아니라 "일단 정지"를 고르게 만드는 것. 안전장치의 품질은 정상 경로가 아니라 이 애매한 순간들에서 갈린다.
셋째, 자동화할 가치가 제일 큰 것은 판단이 아니라 규율이었다. AI가 나보다 종목을 잘 고르는지는 아직 모른다. 하지만 AI가 나보다 손절을 잘하는 건 확실하다. 왜냐하면 AI에게는 "조금만 더 버텨보자"라고 말할 고집이 없기 때문이다. 내 계좌의 반토막 종목들이 증명하듯, 그 고집의 가격은 생각보다 비싸다.
리허설이 끝나고 실전 스위치를 켜면, 그 결과도 솔직하게 다시 쓰겠다. 수익이든 손실이든 — 어차피 상한은 정해져 있으니까.


