K-Trader가 실제로 돌아가기 시작했다. 코드도 안정됐고, 손절도 제때 나가고, 매수도 의도한 대로 체결됐다. 시스템은 멀쩡히 작동하고 있었다.
그런데 수익이 안 났다.
처음엔 버그 문제라고 생각했다. 로그를 뜯어봤다. 실행 순서도 맞고, 조건 체크도 맞고, 주문도 정상이었다. 시스템 자체는 문제가 없었다. 그러면 뭐가 문제인가.
답은 전략이었다. 시스템은 내가 설계한 전략을 정확하게 실행하고 있었다. 문제는 그 전략 자체가 틀렸다는 거였다.
이 글은 그 과정을 거치면서 바꾼 3가지 변화의 기록이다. 결론부터 말하면, 지금은 폭락하는 시장이 아니라면 하루 평균 0.5% 이상의 수익이 나고 있다. 그 차이를 만든 게 뭔지 순서대로 이야기해보겠다.
① 변화 1 — 조건식을 늘렸더니 오히려 망했다
처음 K-Trader를 실전에 연결했을 때, 조건식이 낯설었다. 키움증권 영웅문에서 조건식을 만드는 방식 자체가 익숙하지 않아서 일단 1개만 등록하고 시작했다.
그런데 문제가 바로 나타났다. 프로그램이 관찰하는 종목이 너무 적었다. 자동매매 프로그램은 전체 종목을 다 보는 게 아니다. 조건식이 던져준 종목만 관찰한다. 조건식 1개로는 내가 직접 스크리닝할 때와 비교해 진입 기회 자체가 현저히 줄어들었다.
그래서 조건식을 늘려봤다. 2개, 3개, 5개까지 등록해봤다.
결과는 더 나빠졌다.
조건이 많아질수록 종목이 겹치거나, 서로 다른 타점의 종목이 동시에 들어와 시스템이 어떤 걸 먼저 처리해야 할지 혼선이 생겼다. 복잡해지기만 하고 실효성은 없었다.
방향을 완전히 바꿨다. 조건식의 개수를 늘리는 게 아니라, 시간대별로 쪼개는 방식으로 전환했다. 장 초반, 장 중반, 장 후반에 각각 다른 특성이 있다. 그 특성에 맞는 조건식을 시간대별로 따로 구성하자 진입 타이밍이 훨씬 정교해졌다.
핵심 전환점: 조건식은 많을수록 좋은 게 아니다. 프로그램이 처리할 수 있는 구조에 맞게, 시간대에 맞게 설계해야 한다. 내가 직접 볼 때의 감각을 그대로 조건식에 옮기려 하면 반드시 실패한다.
② 변화 2 — 손절 기준을 숫자로 못 박았다
조건식 구조를 바꾸면서 또 하나의 문제가 눈에 들어왔다. 손절 기준이 일관되지 않았다는 거다.
코드상으로는 손절 로직이 있었다. 근데 그 기준이 전략을 조금 바꿀 때마다 같이 바뀌었다. 어떤 날은 -1%, 어떤 날은 -1.5%, 종목 특성에 따라 다르게 설정하기도 했다. 감정이 완전히 빠졌다고 볼 수 없는 구조였다.
자동매매를 만든 이유가 감정을 배제하기 위해서였는데, 손절 기준 자체가 매번 달라지면 자동화의 의미가 절반으로 줄어든다.
손절 기준을 하나의 수치로 고정했다. 어떤 상황이든, 어떤 종목이든, 손절 기준은 동일하게 적용하도록 코드를 수정했다. 처음엔 수익 기회를 놓치는 것 같아서 불안했다. 실제로 손절 후 반등하는 경우도 있었다.
그런데 데이터로 보면 달랐다. 기준을 고정하고 나서 손익비가 안정됐다. 큰 손실이 줄었고, 손실이 났을 때의 폭이 예측 가능해졌다. 수익 곡선이 들쭉날쭉하던 게 점점 완만하게 바뀌기 시작했다.
자동매매에서 손절은 실패가 아니다. 손절이 제때 일관되게 나가는 것 자체가 전략이다.
③ 변화 3 — 변동성이 맞는 시간대를 찾았다
처음엔 장이 열리는 내내 프로그램을 돌렸다. 많이 돌릴수록 수익 기회가 많다고 생각했다. 단순한 논리였다.
실제로는 달랐다. 시간대별로 수익 패턴이 완전히 달랐다.
어떤 시간대가 최적인지는 직접 밝히지 않는다. 시장 환경에 따라 달라지기도 하고, 이건 각자가 자신의 시스템 데이터를 보면서 찾아야 하는 부분이다. 다만 중요한 건 이거다.
잘 맞는 시간대에만 집중하는 게 낫다.
④ 변화 전/후 — 수익률 곡선이 바뀐 지점
세 가지 변화를 순서대로 적용하면서 결과가 어떻게 달라졌는지 솔직하게 쓰겠다.
초기에는 프로그램 오작동과 잘못된 전략이 겹쳐서 매번 손실이었다. 시스템은 돌아가는데 계좌는 줄어드는 상황. 이때가 가장 힘들었다. ‘내가 방향을 잘못 잡은 건 아닐까’라는 생각이 들기 시작할 무렵이었다.
조건식 구조를 시간대별로 재편하고, 손절 기준을 고정하고, 운영 시간대를 최적화하면서 변화가 나타났다. 처음엔 손실 폭이 줄었다. 그다음엔 손실과 수익이 비슷해졌다. 그다음부터는 수익이 손실보다 많아지기 시작했다.
현재 기준: 폭락하는 시장이 아니라면 하루 평균 +0.5% 이상의 수익이 나고 있다.
0.5%가 작아 보일 수 있다. 그런데 이걸 월로 환산하면 이야기가 달라진다. 복리 효과를 감안하면 연간으로는 상당한 수치가 된다. 수치를 직접 밝히지 않는 건, 시장 상황과 원금 규모에 따라 편차가 크기 때문이다. 하지만 방향은 잡혔다는 건 말할 수 있다.
지금도 완벽하지 않다. 폭락장에서는 손실이 난다. 예외 케이스가 생기면 직접 개입해야 하는 경우도 있다. 하지만 매번 손실이던 시스템이 안정적인 플러스 구간에 들어왔다는 건, 전략의 방향이 맞아가고 있다는 신호다.
⚠️ 단, 이 결과는 특정 시장 환경에서의 기록이다. 전략의 유효성은 시장이 바뀌면 함께 검증해야 한다. 과거 수익률이 미래를 보장하지 않는다.
전략을 바꾸자 무엇이 달라졌나
같은 시장, 같은 종목인데 전략 하나를 바꿨더니 결과가 달라졌습니다. 이 경험이 알려준 진실은 명확합니다. 수익률을 결정하는 것은 종목이 아니라 전략이라는 것입니다. 좋은 종목을 고르는 것보다, 언제 사고 언제 팔지에 대한 규칙이 성과를 훨씬 크게 좌우했습니다.
구체적으로 달라진 것은 세 가지였습니다. 첫째, 손절 규칙을 명확히 하자 큰 손실이 사라졌습니다. 예전엔 손실을 방치하다 계좌가 흔들렸지만, 기계적 손절이 이를 막아 줬습니다. 둘째, 진입 조건을 좁히자 매매 횟수는 줄었지만 승률이 올라갔습니다. 아무 때나 사지 않고 유리한 자리만 기다린 결과입니다. 셋째, 수익 실현 규칙을 세우자 벌었다 다시 토해내는 일이 줄었습니다.
흥미로운 것은, 이 세 가지 모두 ‘더 많이 벌기 위한’ 변화가 아니라 ‘덜 잃기 위한’ 변화였다는 점입니다. 결국 수익률 개선의 핵심은 대박 종목이 아니라 손실 관리에 있었습니다.
수익률 곡선을 읽는 법
전략을 바꾼 뒤 저는 개별 매매의 손익보다 수익률 곡선(자산 곡선)의 모양을 더 중요하게 보게 됐습니다. 한두 번의 대박은 우연일 수 있지만, 완만하게 우상향하는 곡선은 전략이 제대로 작동하고 있다는 증거이기 때문입니다. 특히 주목한 것은 최대낙폭(MDD)이었습니다. 아무리 수익률이 높아도 중간에 자산이 반토막 나는 전략은 실전에서 버틸 수 없습니다. 마음이 먼저 무너지기 때문입니다. 그래서 ‘얼마를 벌었나’보다 ‘가장 힘들 때 얼마나 잃었나’를 기준으로 전략을 평가했습니다.
전략은 완성이 아니라 진화한다
가장 중요한 깨달음은, 전략에 ‘최종 정답’은 없다는 것입니다. 시장은 상승장·하락장·횡보장을 오가며 끊임없이 변하고, 한 국면에서 완벽했던 전략도 다른 국면에서는 힘을 잃습니다. 그래서 저는 전략을 한번 만들면 끝나는 것이 아니라, 성과를 계속 기록하고 점검하며 다듬어 가는 살아 있는 체계로 대하게 됐습니다. 다만 여기엔 균형이 필요합니다. 성과가 조금 나빠졌다고 매번 뜯어고치면 그것대로 일관성이 무너지기 때문입니다. 정해둔 기준(예: 기댓값이 일정 기간 이상 무너질 때)에 도달했을 때만 손보는 절제된 진화가 핵심입니다. 결국 전략을 바꿔 결과가 달라졌다는 이 경험의 진짜 교훈은, ‘더 좋은 전략을 찾았다’가 아니라 ‘전략을 검증하고 개선하는 태도를 갖추게 됐다’는 데 있었습니다.
마무리 — 복잡한 전략보다 일관된 전략이 낫다
세 가지 변화를 돌아보면 공통점이 있다. 전부 단순화하는 방향이었다. 조건식을 늘리는 게 아니라 구조를 정리했고, 손절 기준을 유연하게 두는 게 아니라 고정했고, 운영 시간을 늘리는 게 아니라 줄였다.
자동매매를 처음 만들 때 복잡한 전략이 더 정교한 결과를 낼 거라고 생각했다. 실제로 겪어보니 반대였다. 복잡한 전략은 변수가 많아지고, 변수가 많아지면 어디서 문제가 생기는지 추적이 어려워진다. 단순하고 일관되게 실행될 수 있는 전략이, 실전에서는 훨씬 강하다.
📌 이 글의 핵심 요약
- 조건식은 많을수록 좋은 게 아니다 — 시간대별로 최적화된 구조가 핵심
- 손절 기준은 수치로 고정해야 한다 — 감정이 개입할 여지를 없애는 것이 자동화의 본질
- 변동성이 맞는 시간대에 집중하면 승률이 올라간다 — 덜 하는 게 더 나은 결과를 만든다
- 매번 손실 → 하루 평균 +0.5% 이상, 이 차이는 전략 3가지를 바꾸면서 만들어졌다
다음 글에서는 이 중 세 번째 변화, 시간대 최적화를 좀 더 깊게 다룰 예정이다. 단타에서 어떤 시간대가 왜 중요한지, 데이터 관점에서 이야기해보겠다.
→ 이전 글이 궁금하다면: 자동매매 개발 실패 경험 — 모의투자의 함정과 내가 발견한 것들
→ 자동매매 조건식 구성에 대해 더 알고 싶다면 키움증권 Open API 공식 포털에서 조건 검색 관련 문서를 참고할 수 있다.
이 글은 리치스피커의 실제 투자 경험을 바탕으로 한 개인적인 회고 및 정보 제공 목적의 콘텐츠입니다. 특정 종목·자산의 매수 또는 매도를 권유하지 않으며, 이 글의 내용이 특정 투자 결과를 보장하지 않습니다.
이 블로그는 알고리즘 트레이딩 시스템(K-Trader)의 개발 과정과 투자 경험을 기록하는 개인 블로그입니다. 과거의 수익률 또는 백테스트 결과는 미래의 수익을 보장하지 않습니다.
모든 투자 판단과 그에 따른 책임은 전적으로 투자자 본인에게 있습니다.