국내주식 자동매매 프로그램 — 주말 개선 작업 이후 첫 거래일 운영 기록

자동매매운영기록시드확장리스크관리stock-auto-trade

요약

이번 기록은 국내주식 자동매매 프로그램의 첫 운영 기록이 아니다.

이미 실계좌 LIVE 전환 준비와 사전 점검은 완료되어 있었고, 지난 주말 동안 확인된 문제점을 개선한 뒤 업데이트된 프로그램으로 첫 거래일을 운영한 결과를 정리한 기록이다.

이번 개선의 핵심은 500만 원 시드 기준에서 드러난 고가 우량주 매수 제한 문제를 해결하되, 매수 조건 자체를 완화하지 않는 것이었다.

기존 구조에서는 주가가 100만 원을 넘는 고가 우량주가 1주 가격 때문에 자동으로 제외될 수 있었다. SK하이닉스처럼 강한 흐름을 보이는 종목도 시드 규모 때문에 구조적으로 매수 대상에서 빠질 수 있었다.

하지만 단순히 고가주 매수 상한을 높이면 한 종목 비중이 과도하게 커진다. 그래서 특정 종목 예외가 아니라 총자산 기준 비율 구조로 개선했다.

그 결과 500만 원 시드에서는 매수하기 어려웠던 고가주도, 1,000만 원 시드에서는 포트폴리오 안에서 정상적으로 평가할 수 있는 구조가 되었다. 단, RS 조건, MA20 이격 조건, 손절 조건, 보유기간 조건은 완화하지 않았다.

개선 배경

기존 국내주식 자동매매 프로그램은 약 500만 원 실계좌 운용 기준으로 작동하고 있었다.

기본 구조는 다음과 같았다.

  • 최대 보유 종목 수: 5개
  • 종목당 투자금: 약 100만 원
  • 기본 매수 구조: 5종목 균등 배분
  • 고가주 매수 제한: 1주 가격이 종목당 예산을 넘으면 매수 어려움

이 구조에서는 100만 원이 넘는 종목은 1주도 매수하지 못하는 문제가 있었다.

처음에는 강세장에서 고가주 허용 상한을 더 높이는 방안을 검토했다. 하지만 500만 원 계좌에서 130만 원 이상의 종목을 매수하면 한 종목 비중이 25%를 넘게 된다. 강세장이라고 고가주 상한을 높이면 수익 기회는 커질 수 있지만, 손절 시 계좌 전체가 크게 흔들릴 수 있다.

따라서 이번 개선 방향은 “고가주 예외 허용”이 아니라 “시드 확장에 따라 자동으로 판단 범위가 넓어지는 구조”로 정했다.

주요 개선 내용

이번 주말 개선 작업의 핵심은 다음과 같다.

  1. 총자산 기준 종목당 예산 자동 재계산
  2. 1종목 최대 비중을 총자산의 22% 이내로 제한
  3. 특정 종목 예외 없이 고가주도 총자산 비율 기준으로 판단
  4. RS / MA20 이격 / 손절 / 보유기간 조건 유지
  5. 시장 강도 기반 effective_max_hold 구조 적용
  6. market_cache.json을 통한 시장 상태 캐시 영속화
  7. DRY RUN / LIVE 텔레그램 프리픽스 통일
  8. PID 락파일을 통한 중복 실행 방지
  9. 일일 손실한도를 고정 금액이 아닌 총자산 비율 기준으로 전환
  10. 보유기간 초과 종목의 당일 조기 매도 분기 추가

특히 중요한 변화는 총자산 기준 비율 구조다.

500만 원 시드에서는 SK하이닉스 1주가 계좌에서 차지하는 비중이 너무 컸다. 그러나 1,000만 원 시드에서는 같은 1주도 훨씬 안정적인 비중으로 들어온다. 이 때문에 500만 원을 추가 투입했고, 프로그램은 총자산 변화에 따라 종목당 예산과 최대 매수 가능 금액을 자동으로 재계산하도록 구성되었다.

업데이트 이후 첫 거래일 운영 결과

주말 개선 작업 이후 첫 거래일에 업데이트된 자동매매 로직이 실제로 어떻게 작동하는지 확인했다.

운영 결과는 다음과 같았다.

  • LG전자 트레일링 매도 실행
  • 실현손익: +12,000원
  • 신규 매수: 0건
  • 신규 매수 없음 사유: RS 기준 통과 종목 없음
  • 신한지주: 보유기간 초과로 익일 시가 매도 대기
  • SK하이닉스: 가격 조건은 시드 확장으로 개선 가능성이 생겼지만, MA20 이격 조건으로 매수 차단

LG전자 매도는 트레일링 스탑 조건에 따라 정상 실행되었다. 수익 구간에서 고점 대비 하락 조건이 충족되었고, 프로그램은 계획대로 매도 주문을 실행했다.

반면 신규 매수는 발생하지 않았다. BUY 신호는 있었지만 RS 기준을 통과한 종목이 없었다. 이는 오류가 아니라 시스템이 “강한 후보가 없으면 현금을 유지한다”는 원칙을 지킨 결과다.

500만 원을 추가 투입한 이후에도 프로그램은 무리하게 매수를 확대하지 않았다. 고가주가 가격 조건상 매수 가능 범위에 들어올 수 있는 구조는 확보되었지만, RS와 MA20 이격 조건은 그대로 유지되었다. 따라서 조건이 맞지 않는 종목은 계속 차단되었다.

이번 거래일의 핵심은 수익 금액보다 시스템 판단 구조다.

500만 원 시드에서는 고가주를 구조적으로 “못 사는” 문제가 있었다.
1,000만 원 시드에서는 고가주를 “살 수는 있지만 조건이 맞지 않으면 안 사는” 구조로 바뀌었다.

이 차이가 이번 업데이트의 핵심이다.

추가 보완 내용

거래일 중 확인된 내용을 바탕으로 추가 보완도 진행했다.

첫째, 보유기간 초과 매도 로직을 개선했다.

기존에는 보유기간 초과 시 다음날 시가 매도로 단순 처리했다. 그러나 손실이 당일 장중에 확대되는 경우에는 다음날까지 기다리는 것이 불리할 수 있다. 그래서 보유기간 초과 종목이 손실 -1.5% 이하이고 14:30 이후에도 약세를 유지하면 당일 즉시 매도할 수 있도록 분기했다.

둘째, 손실한도를 비율 기준으로 바꿨다.

기존에는 일일 손실한도가 200,000원 고정이었다. 그러나 500만 원 계좌에서 20만 원 손실과 1,000만 원 계좌에서 20만 원 손실은 의미가 다르다. 따라서 손실한도를 총자산의 2% 기준으로 계산하도록 변경했다.

이 구조에서는 시드가 500만 원, 1,000만 원, 2,000만 원으로 늘어나도 손실한도가 자동으로 재계산된다.

현재 판단

업데이트 이후 첫 거래일 기준으로 자동매매 프로그램은 계획한 방향대로 작동했다.

정상 확인된 항목은 다음과 같다.

  • LIVE 모드 실행
  • PID 락파일 작동
  • 시장 상태 조회 및 캐시
  • 트레일링 매도
  • RS 필터
  • MA20 이격 차단
  • 고가주 구조적 제외 문제 완화
  • 현금 보유 원칙
  • 손실한도 비율화
  • 보유기간 초과 매도 분기

다만 이번 결과는 수익성 검증 완료가 아니다. 이번 기록은 업데이트된 로직이 계획대로 작동했는지 확인한 운영 기록이다.

수익성 판단은 최소 1주일 이상의 실전 로그가 쌓인 뒤에 해야 한다.

다음 단계

다음 단계는 다음과 같다.

  1. 신한지주 보유기간 초과 매도 결과 확인
  2. 보유기간 초과 조기 매도 분기 실전 작동 여부 확인
  3. scan_log.json의 BUY 카운트 분류 정확도 개선 검토
  4. 추가매수 로직의 RS 면제 정책 유지 여부 검토
  5. 1,000만 원 시드 기준 첫 주 운영 결과 정리

이번 업데이트의 결론은 단순하다.

자동매매 프로그램은 더 많은 돈을 넣는다고 좋아지는 것이 아니다.
돈이 늘어나도 같은 원칙으로 판단하고, 조건이 맞지 않으면 사지 않는 구조가 필요하다.

이번 개선은 그 방향으로 한 단계 이동한 작업이다.


→ 관련 Insight: 못 사는 시스템에서 안 사는 시스템으로 바꾸는 과정


※ 본 콘텐츠는 개인의 실험 기록이며 투자 권유가 아닙니다.
투자의 판단과 책임은 본인에게 있습니다.