자동매매 수익률 변화 — 전략을 바꿨더니 결과가 달라졌다

K-Trader가 실제로 돌아가기 시작했다. 코드도 안정됐고, 손절도 제때 나가고, 매수도 의도한 대로 체결됐다. 시스템은 멀쩡히 작동하고 있었다.

그런데 수익이 안 났다.

처음엔 버그 문제라고 생각했다. 로그를 뜯어봤다. 실행 순서도 맞고, 조건 체크도 맞고, 주문도 정상이었다. 시스템 자체는 문제가 없었다. 그러면 뭐가 문제인가.

답은 전략이었다. 시스템은 내가 설계한 전략을 정확하게 실행하고 있었다. 문제는 그 전략 자체가 틀렸다는 거였다.

이 글은 그 과정을 거치면서 바꾼 3가지 변화의 기록이다. 결론부터 말하면, 지금은 폭락하는 시장이 아니라면 하루 평균 0.5% 이상의 수익이 나고 있다. 그 차이를 만든 게 뭔지 순서대로 이야기해보겠다.

① 변화 1 — 조건식을 늘렸더니 오히려 망했다

처음 K-Trader를 실전에 연결했을 때, 조건식이 낯설었다. 키움증권 영웅문에서 조건식을 만드는 방식 자체가 익숙하지 않아서 일단 1개만 등록하고 시작했다.

그런데 문제가 바로 나타났다. 프로그램이 관찰하는 종목이 너무 적었다. 자동매매 프로그램은 전체 종목을 다 보는 게 아니다. 조건식이 던져준 종목만 관찰한다. 조건식 1개로는 내가 직접 스크리닝할 때와 비교해 진입 기회 자체가 현저히 줄어들었다.

그래서 조건식을 늘려봤다. 2개, 3개, 5개까지 등록해봤다.

결과는 더 나빠졌다.

조건이 많아질수록 종목이 겹치거나, 서로 다른 타점의 종목이 동시에 들어와 시스템이 어떤 걸 먼저 처리해야 할지 혼선이 생겼다. 복잡해지기만 하고 실효성은 없었다.

방향을 완전히 바꿨다. 조건식의 개수를 늘리는 게 아니라, 시간대별로 쪼개는 방식으로 전환했다. 장 초반, 장 중반, 장 후반에 각각 다른 특성이 있다. 그 특성에 맞는 조건식을 시간대별로 따로 구성하자 진입 타이밍이 훨씬 정교해졌다.

핵심 전환점: 조건식은 많을수록 좋은 게 아니다. 프로그램이 처리할 수 있는 구조에 맞게, 시간대에 맞게 설계해야 한다. 내가 직접 볼 때의 감각을 그대로 조건식에 옮기려 하면 반드시 실패한다.

② 변화 2 — 손절 기준을 숫자로 못 박았다

조건식 구조를 바꾸면서 또 하나의 문제가 눈에 들어왔다. 손절 기준이 일관되지 않았다는 거다.

코드상으로는 손절 로직이 있었다. 근데 그 기준이 전략을 조금 바꿀 때마다 같이 바뀌었다. 어떤 날은 -1%, 어떤 날은 -1.5%, 종목 특성에 따라 다르게 설정하기도 했다. 감정이 완전히 빠졌다고 볼 수 없는 구조였다.

자동매매를 만든 이유가 감정을 배제하기 위해서였는데, 손절 기준 자체가 매번 달라지면 자동화의 의미가 절반으로 줄어든다.

손절 기준을 하나의 수치로 고정했다. 어떤 상황이든, 어떤 종목이든, 손절 기준은 동일하게 적용하도록 코드를 수정했다. 처음엔 수익 기회를 놓치는 것 같아서 불안했다. 실제로 손절 후 반등하는 경우도 있었다.

그런데 데이터로 보면 달랐다. 기준을 고정하고 나서 손익비가 안정됐다. 큰 손실이 줄었고, 손실이 났을 때의 폭이 예측 가능해졌다. 수익 곡선이 들쭉날쭉하던 게 점점 완만하게 바뀌기 시작했다.

자동매매에서 손절은 실패가 아니다. 손절이 제때 일관되게 나가는 것 자체가 전략이다.

③ 변화 3 — 변동성이 맞는 시간대를 찾았다

처음엔 장이 열리는 내내 프로그램을 돌렸다. 많이 돌릴수록 수익 기회가 많다고 생각했다. 단순한 논리였다.

실제로는 달랐다. 시간대별로 수익 패턴이 완전히 달랐다.

변동성이 너무 큰 시간대 급등락이 심해 조건식 편입 후 눌림폭이 커졌다. 손절이 연속으로 나가거나, 고점에 매수된 채 물리는 경우가 잦았다.
변동성이 너무 작은 시간대 종목이 조건식에 편입되더라도 움직임이 미미했다. 수익 시점에 도달하기 전에 횡보하다 손실로 내려가는 패턴이 반복됐다.
프로그램에 최적화된 시간대 변동성이 적당하고, 수급이 살아있고, 조건식 편입 후 의도한 방향으로 움직이는 확률이 높은 구간이 있었다. 이 구간에 집중하자 승률이 올라갔다.

어떤 시간대가 최적인지는 직접 밝히지 않는다. 시장 환경에 따라 달라지기도 하고, 이건 각자가 자신의 시스템 데이터를 보면서 찾아야 하는 부분이다. 다만 중요한 건 이거다.

하루 종일 돌리는 것보다
잘 맞는 시간대에만 집중하는 게 낫다.

④ 변화 전/후 — 수익률 곡선이 바뀐 지점

세 가지 변화를 순서대로 적용하면서 결과가 어떻게 달라졌는지 솔직하게 쓰겠다.

초기에는 프로그램 오작동과 잘못된 전략이 겹쳐서 매번 손실이었다. 시스템은 돌아가는데 계좌는 줄어드는 상황. 이때가 가장 힘들었다. ‘내가 방향을 잘못 잡은 건 아닐까’라는 생각이 들기 시작할 무렵이었다.

조건식 구조를 시간대별로 재편하고, 손절 기준을 고정하고, 운영 시간대를 최적화하면서 변화가 나타났다. 처음엔 손실 폭이 줄었다. 그다음엔 손실과 수익이 비슷해졌다. 그다음부터는 수익이 손실보다 많아지기 시작했다.

현재 기준: 폭락하는 시장이 아니라면 하루 평균 +0.5% 이상의 수익이 나고 있다.

0.5%가 작아 보일 수 있다. 그런데 이걸 월로 환산하면 이야기가 달라진다. 복리 효과를 감안하면 연간으로는 상당한 수치가 된다. 수치를 직접 밝히지 않는 건, 시장 상황과 원금 규모에 따라 편차가 크기 때문이다. 하지만 방향은 잡혔다는 건 말할 수 있다.

지금도 완벽하지 않다. 폭락장에서는 손실이 난다. 예외 케이스가 생기면 직접 개입해야 하는 경우도 있다. 하지만 매번 손실이던 시스템이 안정적인 플러스 구간에 들어왔다는 건, 전략의 방향이 맞아가고 있다는 신호다.

⚠️ 단, 이 결과는 특정 시장 환경에서의 기록이다. 전략의 유효성은 시장이 바뀌면 함께 검증해야 한다. 과거 수익률이 미래를 보장하지 않는다.

마무리 — 복잡한 전략보다 일관된 전략이 낫다

세 가지 변화를 돌아보면 공통점이 있다. 전부 단순화하는 방향이었다. 조건식을 늘리는 게 아니라 구조를 정리했고, 손절 기준을 유연하게 두는 게 아니라 고정했고, 운영 시간을 늘리는 게 아니라 줄였다.

자동매매를 처음 만들 때 복잡한 전략이 더 정교한 결과를 낼 거라고 생각했다. 실제로 겪어보니 반대였다. 복잡한 전략은 변수가 많아지고, 변수가 많아지면 어디서 문제가 생기는지 추적이 어려워진다. 단순하고 일관되게 실행될 수 있는 전략이, 실전에서는 훨씬 강하다.

📌 이 글의 핵심 요약

  • 조건식은 많을수록 좋은 게 아니다 — 시간대별로 최적화된 구조가 핵심
  • 손절 기준은 수치로 고정해야 한다 — 감정이 개입할 여지를 없애는 것이 자동화의 본질
  • 변동성이 맞는 시간대에 집중하면 승률이 올라간다 — 덜 하는 게 더 나은 결과를 만든다
  • 매번 손실 → 하루 평균 +0.5% 이상, 이 차이는 전략 3가지를 바꾸면서 만들어졌다

다음 글에서는 이 중 세 번째 변화, 시간대 최적화를 좀 더 깊게 다룰 예정이다. 단타에서 어떤 시간대가 왜 중요한지, 데이터 관점에서 이야기해보겠다.

→ 이전 글이 궁금하다면: 자동매매 개발 실패 경험 — 모의투자의 함정과 내가 발견한 것들

→ 자동매매 조건식 구성에 대해 더 알고 싶다면 키움증권 Open API 공식 포털에서 조건 검색 관련 문서를 참고할 수 있다.

이 글은 리치스피커의 실제 투자 경험을 바탕으로 한 개인적인 회고 및 정보 제공 목적의 콘텐츠입니다. 특정 종목·자산의 매수 또는 매도를 권유하지 않으며, 이 글의 내용이 특정 투자 결과를 보장하지 않습니다.

이 블로그는 알고리즘 트레이딩 시스템(K-Trader)의 개발 과정과 투자 경험을 기록하는 개인 블로그입니다. 과거의 수익률 또는 백테스트 결과는 미래의 수익을 보장하지 않습니다.

모든 투자 판단과 그에 따른 책임은 전적으로 투자자 본인에게 있습니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤