버그를 고치고 나면 보통 마음이 급해진다. “이제 다시 최적화하면 된다”는 생각이 먼저 들기 때문이다. 나도 그랬다. #01에서 엔트리 엣지 버그를 잡고 새 공식 baseline을 세운 직후, 자연스럽게 파라미터를 다시 돌리는 쪽으로 손이 갔다.
그런데 막상 손을 대려니 질문이 하나 남았다.
무엇부터 다시 봐야 하지?
진입, 손절, 트레일링, 상위 추세 필터, smoothing — 전부 얽혀 있다. 이걸 한꺼번에 돌리는 게 정말 맞을까. 이번 기록은 바로 그 지점에서 시작됐다. baseline을 되찾은 뒤, 전략을 다시 세우는 순서를 어떻게 정할 것인가에 대한 이야기다.
순서를 잘못 잡으면, 숫자는 좋아 보여도 설명이 안 된다
전략 최적화는 종종 “제일 좋은 숫자를 찾는 문제”처럼 보인다. 하지만 실제로는 그렇지 않았다. 앞단 구조가 바뀌면 뒷단 최적값은 같이 흔들린다. 어떤 봉에서 진입하느냐가 바뀌면, 어떤 손절이 좋은지 달라지고, 손절 성격이 달라지면 어떤 트레일링이 맞는지도 다시 바뀐다.
모든 파라미터를 한 번에 돌리면, 결과는 그럴듯해도 해석은 점점 어려워진다. 마치 방 구조를 바꾸면서 가구 배치까지 동시에 확정하는 것과 같다. 예뻐 보일 수는 있지만, 왜 그렇게 좋아졌는지는 나중에 설명하기 어렵다.
그래서 이번 재최적화에서는 계산량보다 해석 순서를 먼저 정하기로 했다. 좋은 숫자를 찾는 것보다, 무엇을 먼저 고정해야 다음 숫자를 믿을 수 있는가가 더 중요했다.
출발선: 버그 수정 직후의 Baseline
#01에서 새로 세운 baseline은 예전보다 덜 화려했다. 하지만 그 대신 신뢰할 수 있는 기준선이 됐다. 예전에 손에 익었던 최적값들은 사실상 유통기한이 끝난 셈이었고, 여기서부터 다시 묻기 시작해야 했다.
Bug-Fix Baseline
수익률
+620.5%
Sharpe
1.898
Profit Factor
1.269
MDD
-33.85%
Trades
2,029
나쁘지 않지만 MDD -33%는 실전에서 버티기 어려운 수준이었다. 단순히 수익률을 끌어올리는 것이 아니라, 더 현실적인 baseline 위에서 곡선을 다시 다듬는 일이 돼야 했다.
이 판단이 이후 모든 우선순위를 정했다.
Layer 1 — 진입부터 다시 봤다
가장 먼저 다시 본 건 진입 조건이었다. 이유는 단순하다. 진입이 바뀌면 트레이드 목록 자체가 바뀐다. 어떤 트레이드를 하느냐가 달라졌는데, 그 위에 얹는 손절이나 추적부터 먼저 만지는 건 순서가 뒤집힌 것이다.
실제로 진입 쪽을 다시 돌려보니, 아주 공격적인 후보들이 금방 눈에 띄었다. 수익 곡선만 보면 당장 쓰고 싶어질 정도로 강한 값들도 있었다. 하지만 그런 후보들은 대부분 drawdown이 더 깊었고, 실전 채택이라는 관점에서는 계속 망설이게 만들었다.
그 순간 질문이 바뀌었다. “무엇이 가장 많이 버는가?”가 아니라, “무엇이 더 나은 형태로 버는가?”였다.
Layer 2 — 손절이 아니라 ‘초기 보호’
진입 레이어가 정리되자, 다음은 자연스럽게 손절과 초기 보호 쪽으로 넘어갔다. 이 단계에서 흥미로웠던 건, 수익을 조금 더 끌어올리는 조합보다 깊게 물리는 구간을 줄여주는 조합이 전체 곡선을 훨씬 더 안정적으로 만든다는 점이었다.
전략을 운영하다 보면, 수익이 잘 나는 순간보다 손실이 길게 이어지는 순간이 더 오래 기억에 남는다. 특히 baseline이 다시 정의된 직후에는 그 체감이 더 컸다. 이번 단계는 “얼마나 많이 벌게 만들까”보다 “얼마나 덜 흔들리게 만들까”에 가까웠다.
조금 과장해서 말하면, 이쯤부터 전략 최적화는 수학 문제가 아니라 편집 작업처럼 느껴졌다. 거친 부분은 깎아내고, 예민한 반응은 누그러뜨리고, 방향은 유지하되 톤을 다듬는 식이었다.
Layer 3 — 트레일링은 의외로 거의 손댈 필요가 없었다
재최적화를 시작할 때는 트레일링도 크게 바뀔 줄 알았다. 그런데 막상 여러 조합을 다시 보니, 이쪽은 이미 꽤 괜찮은 균형점에 와 있었다. 더 공격적으로 당기면 수익이 줄었고, 더 느슨하게 두면 개선 효과가 미미했다.
이건 꽤 중요한 신호였다. 전략 전체를 다시 세운다고 해서 모든 레이어를 다 뜯어고칠 필요는 없다는 뜻이었기 때문이다. 어떤 부분은 기준선이 흔들리면 처음부터 다시 봐야 하지만, 어떤 부분은 이미 구조적으로 괜찮아서 그대로 두는 편이 낫다.
재최적화의 성숙함은 결국, 바꿔야 할 것과 그대로 둬야 할 것을 구분하는 감각에서 나온다.
Layer 4 — 상위 추세 필터는 마지막에야 의미가 생겼다
진입, 초기 보호, 트레일링이 자리를 잡고 나서야 상위 추세 필터와 smoothing을 다시 보는 게 의미가 생겼다. 이 단계는 신호를 무작정 줄이거나 늘리는 작업이 아니었다. 어떤 종류의 진입을 더 믿고, 어떤 종류의 진입을 덜 믿을 것인가를 정리하는 작업에 가까웠다.
상위 흐름을 조금 더 느리게 해석하고, 보조선을 정리했을 때 결과가 더 안정적인 방향으로 움직인다는 힌트가 보였다. 여기서도 마법 같은 숫자 하나를 찾는 게 아니라, 전략의 성격을 크게 바꾸지 않으면서 리스크 프로파일을 다듬는 구조적 보정을 찾는 쪽이었다.
결과: 순서를 나눠 다시 쌓았더니
Re-Optimized Result
수익률
+821.2%
Sharpe
2.509
Profit Factor
1.400
MDD
-23.94%
Sharpe 1.898 → 2.509, MDD -33.85% → -23.94%. 잃어버린 성과를 복구한 게 아니라, 더 현실적인 기준 위에서 더 나은 형태의 곡선을 다시 설계한 결과다.
정확한 파라미터 조합은 공개하지 않지만, 방향성은 분명했다. 단순히 모든 걸 한꺼번에 돌린 게 아니라, 레이어를 나눠서 순서대로 고정해나간 것이 이 차이를 만들었다.
교훈 — 최고의 숫자가 최고의 전략은 아니었다
이번 과정에서 가장 인상적이었던 건, 공격적인 후보들이 주는 유혹이었다. 수익만 보면 더 좋아 보이는 값들이 분명히 있었다. 하지만 그런 후보들은 대개 drawdown이 더 깊었고, 실전 채택이라는 관점에서는 계속 망설이게 만들었다.
결국 중요한 건 백테스트 표 한 줄이 아니라, 그 곡선을 실제로 견딜 수 있는가였다.
Takeaway
- 버그 수정 이후에는 예전 최적값을 그대로 믿으면 안 된다.
기준선이 달라졌다면, 최적화 순서도 다시 설계해야 한다. - 좋은 최적화는 더 많은 파라미터를 돌리는 데서 나오지 않는다.
무엇을 먼저 고정할지 정하는 판단이 결과를 더 크게 바꾼다. - 수익이 가장 큰 후보와 채택 가능한 후보는 다를 수 있다.
실전에서는 drawdown과 곡선의 질감이 결국 더 중요해진다.
다음 편 예고
큰 뼈대를 다시 세우고 나니 더 세밀한 문제가 보이기 시작했다. 특정 구간에서 손실이 길게 쌓였고, 일부 트레이드는 충분히 유리하게 갔다가도 다시 다 반납하고 손절로 끝났다. 다음 기록에서는 단순 파라미터 튜닝을 넘어, 어떤 손실을 줄여야 MDD가 실제로 개선되는가를 더 깊게 파고든다.
연속 손실 구간 분석, SL Hit 분류, 그리고 Follow-Through Protect로 이어지는 흐름 — 아마 이 시리즈에서 가장 “수익보다 생존”에 가까운 글이 될 것 같다.
KEEP READING ON GEONULAB
실전 기록과 개념 정리를 한 흐름으로 이어서 읽어보세요
빌드로그는 실제 작업 기록에, 퀀트지식은 개념 정리에 집중합니다. 처음 방문했다면 Start Here에서 읽는 순서를 먼저 잡는 걸 추천합니다.
최신 글 흐름은 피드에서도 확인할 수 있습니다.
Email Updates
빌드로그와 퀀트지식 새 글이 올라오면 메일로 보내드립니다.
추후 봇 트레이딩 입문 PDF 소식도 가장 먼저 안내드릴게요.