주식프로그램/프로그램 개발

2026년 6월 17일 자동매매 개발일지 – 수익보다 먼저 위험한 매수를 줄이는 구조 만들기

팡규 2026. 6. 17. 18:53
반응형

수익보다 먼저 위험한 매수를 줄이는 구조 만들기

자동매매 프로그램을 운영하다 보면 단순히 “어떤 종목을 살까?”보다 더 중요한 문제가 생깁니다.

바로 사면 안 되는 종목을 얼마나 잘 걸러내는가입니다.

오늘은 Kiwoom OpenAPI 기반 자동매매 프로그램에서 매수와 매도 로직을 일부 수정하고, 기존 보유종목을 더 체계적으로 관리하기 위한 분석 구조를 추가했습니다.

이번 작업은 단기 수익을 바로 높이기 위한 수정이라기보다는, 앞으로 데이터를 쌓아가면서 자동매매의 판단력을 개선하기 위한 기반 작업에 가깝습니다.


오늘 시장 상황과 프로그램 점검

장마감 기준으로 시장 자체는 나쁘지 않았습니다.

  • 코스피: +1.58%
  • 코스닥: +1.30%

겉으로 보면 시장은 강한 편이었습니다.

하지만 자동매매 후보군 내부를 보면 분위기가 조금 달랐습니다.

단기 후보군 흐름은 오히려 약했습니다.

  • 5분 기준 상승 후보보다 하락 후보가 더 많음
  • 30분 기준으로도 하락 후보가 우세
  • 수급 흐름도 매집보다 출회 성격이 강하게 나타남

즉, 지수는 올랐지만 자동매매가 실제로 바라보는 후보군은 생각보다 좋지 않았습니다.

이런 날은 무리하게 매수를 늘리기보다, 위험한 신호를 걸러내는 쪽이 더 중요하다고 판단했습니다.


1. 위험 종목 자동매수 차단 로직 강화

오늘 가장 중요한 수정은 위험 성격의 종목을 주문 직전에 차단하는 구조입니다.

기존에는 여러 조건과 점수를 통과하면 일부 위험한 종목도 매수될 가능성이 있었습니다.

예를 들어 겉보기에는 조건을 만족했지만, 실제로는 일봉 위치나 거래 흐름, 수급 상태가 불안한 종목들이 있었습니다.

이번 수정 후에는 매수 후보가 발생하더라도 바로 주문하지 않고, 마지막 단계에서 한 번 더 확인하도록 했습니다.

흐름은 다음과 같습니다.

  1. 자동매매 후보 발생
  2. 기존 매수 필터 통과
  3. 일봉, 거래량, 이동평균 흐름 확인
  4. 위험 여부 재분류
  5. 위험 성격이면 주문 전 차단

이렇게 바꾼 이유는 단순합니다.

매수 기회를 조금 놓치더라도, 애매한 종목을 줄이는 것이 장기적으로 더 중요하기 때문입니다.

자동매매는 한 번 잘못 물리면 며칠, 몇 주 동안 계좌 전체 흐름에 영향을 줄 수 있습니다.

그래서 앞으로는 “좋아 보이는 종목”을 찾는 것보다, “위험한 종목을 안 사는 능력”을 더 중요하게 보려고 합니다.


2. 1주 매수 시 분할매도 문제 보정

두 번째 수정은 매도 로직입니다.

기존 자동매매 구조는 분할익절을 기본으로 설계되어 있었습니다.

예를 들어 수익이 일정 구간에 도달하면 일부 수량을 먼저 매도하고, 나머지는 더 끌고 가는 방식입니다.

그런데 문제가 하나 있었습니다.

1주만 매수한 종목은 일부익절이 사실상 전량매도가 된다는 점입니다.

2주 이상 보유한 경우에는 일부익절이 가능합니다.
하지만 1주만 보유하고 있을 때는 일부를 팔 수 없기 때문에, 작은 수익 구간에서 바로 전량매도되는 상황이 생겼습니다.

이러면 강하게 올라갈 수 있는 종목도 너무 일찍 정리될 수 있습니다.

그래서 이번에는 1주 보유 종목에 대해 별도 판단을 추가했습니다.

  • 흐름이 약하면 기존처럼 빠르게 익절
  • 흐름이 강하면 바로 팔지 않고 조금 더 보유
  • 이후 고점 대비 밀림이 나오면 추적 매도
  • 수익이 약해지면 본전 보호 매도

이 구조를 통해 1주 매수에서도 단순히 “수익 났으니 바로 매도”가 아니라, 종목의 힘을 조금 더 보고 판단할 수 있게 했습니다.

물론 이 로직이 무조건 수익을 키워준다는 보장은 없습니다.

오히려 경우에 따라서는 빨리 팔았어야 하는 종목을 더 보유하게 될 수도 있습니다.

그래서 앞으로 실제 운용 데이터를 보면서 이 보정이 도움이 되는지 검증할 예정입니다.


3. 기존 보유종목 회생·정리 판단 구조 추가

오늘 작업 중 또 하나 중요한 부분은 기존 보유종목 관리 구조입니다.

신규매수 종목과 이미 크게 손실 중인 보유종목은 절대 같은 기준으로 보면 안 됩니다.

신규매수는 진입 판단이 중요하지만, 기존 보유종목은 다음 판단이 더 중요합니다.

  • 추가매수를 해도 되는가
  • 반등 시 정리해야 하는가
  • 더 이상 물타기를 하면 안 되는가
  • 본전 근처에서 빠르게 나와야 하는가
  • 그냥 관찰만 해야 하는가

특히 손실이 깊은 종목은 무조건 추가매수로 대응하면 계좌 리스크가 더 커질 수 있습니다.

그래서 보유종목을 상태별로 분류하는 구조를 추가했습니다.

분류 방향은 크게 다음과 같습니다.

  • 깊은 손실로 추가매수 금지
  • 추가매수보다 반등 매도 우선
  • 제한적 추가매수 검토 가능
  • 본전 또는 약반등 시 빠른 정리 후보
  • 단순 관찰
  • 수급 약세로 추가매수 금지

이번 작업의 핵심은 물린 종목을 감정적으로 대응하지 않기 위한 장치입니다.

사람이 직접 보면 “여기서 조금만 더 사면 평단이 낮아지지 않을까?”라는 생각이 들 수 있습니다.

하지만 자동매매에서는 이런 판단이 반복되면 손실 종목 비중이 커질 수 있습니다.

그래서 앞으로는 보유종목도 데이터 기준으로 분류하고, 추가매수 가능 종목과 정리 우선 종목을 나누어 관리할 예정입니다.


4. 오늘 작업의 핵심 방향

오늘 수정한 내용은 단순히 매수 조건 하나를 추가하거나, 매도 수익률 하나를 바꾼 수준은 아닙니다.

전체적으로 보면 자동매매 프로그램의 방향을 조금 더 보수적으로 정리한 작업입니다.

핵심은 세 가지입니다.

첫째, 위험한 매수를 줄이기

지수가 오르는 날에도 모든 후보가 좋은 것은 아닙니다.

특히 단기 흐름과 수급이 약한 종목은 매수 후 바로 계좌 부담으로 이어질 수 있습니다.

이번 수정은 그런 종목을 주문 직전에 한 번 더 걸러내기 위한 목적입니다.

둘째, 1주 매수의 매도 로직 현실화

1주 매수는 분할매도가 불가능합니다.

그래서 기존 분할익절 구조를 그대로 적용하면 의도와 다르게 너무 빨리 전량매도될 수 있습니다.

이번에는 1주 보유 종목도 흐름에 따라 조금 더 유연하게 대응하도록 수정했습니다.

셋째, 보유종목을 감정이 아닌 데이터로 관리

현재 보유종목 중에는 손실이 깊은 종목도 있습니다.

이런 종목은 추가매수로 해결할 수 있는 종목과, 반등 시 정리해야 하는 종목을 반드시 구분해야 합니다.

이번에 추가한 회생·정리 판단 구조는 앞으로 계좌 리스크를 줄이는 데 중요한 역할을 할 것으로 기대하고 있습니다.


5. 아직 완성은 아니다

오늘 작업이 끝났다고 해서 자동매매가 바로 완성된 것은 아닙니다.

오히려 이제부터가 더 중요합니다.

앞으로 실제 운용 데이터를 보면서 다음 항목을 확인해야 합니다.

  • 위험 차단된 종목이 이후 급등했는지
  • 차단된 종목이 실제로 하락하거나 지지부진했는지
  • 1주 보유 전환이 수익 확대에 도움이 되었는지
  • 본전 보호 매도가 손실 방어에 효과가 있었는지
  • 보유종목 분류가 실제 흐름과 맞았는지
  • 추가매수 후보가 적절하게 걸러졌는지

자동매매는 한 번에 완성되는 구조가 아닙니다.

실제 매매 데이터가 쌓이고, 그 데이터를 다시 분석하고, 다시 로직을 수정하는 과정이 반복되어야 합니다.


오늘 개발일지 정리

오늘 작업은 수익률을 바로 끌어올리는 공격적인 수정이 아니라, 계좌를 오래 살리기 위한 방어형 개선에 가깝습니다.

자동매매에서 가장 무서운 것은 매수를 못 하는 것이 아니라,
사면 안 되는 종목을 계속 사는 것입니다.

그리고 손실 종목을 무리하게 물타기하면서 계좌 전체를 무겁게 만드는 것입니다.

오늘 수정한 구조가 앞으로 이런 문제를 줄여줄 수 있을지 계속 확인해볼 예정입니다.

다음 운용에서는 특히 다음 부분을 집중적으로 볼 생각입니다.

  • 위험 차단 로직이 너무 강하게 작동하는지
  • 좋은 종목까지 과하게 걸러내지는 않는지
  • 1주 보유 전환이 실제 수익에 도움이 되는지
  • 보유종목 회생분류가 현실적인 판단을 하는지

자동매매는 결국 “많이 사는 프로그램”보다
좋은 자리만 기다리고, 위험한 자리를 피하는 프로그램이 되어야 한다고 생각합니다.

오늘 작업은 그 방향으로 가기 위한 한 단계였습니다.

반응형