지표 공부 시리즈에서 DMA·HMA·볼린저 밴드·1시간봉 EMA·CHOP·오더블록을 하나씩 봤는데, 이걸 전부한 번에 코드로 옮기려니 뭐부터 손대야 할지 막막했다. 그래서 이번 편은 “이 여섯 개를 어떤 순서로, 어떻게 하나의 조건으로 합쳤는가”를 정리하는 편이다.
처음부터 다 넣지 않기로 한 이유
여섯 개 조건을 한꺼번에 다 걸면, 나중에 결과가 안 좋게 나왔을 때 어느 조건이 문제인지 구분할 방법이 없어질 것 같았다. 그래서 처음엔 최소한의 조건만 남은 “뼈대 버전”을 먼저 완성하고, 이후 시리즈에서 조건을 하나씩 더하거나 조정해보기로 했다. 빠르게 한 번 끝까지 만들어보는 게 이번 시리즈의 목표라서, 여기서 완벽한 조합을 찾으려 하지 않기로 했다.
이번 버전에 넣은 조건
최종적으로 이번 1차 버전에는 다음 조건만 남겼다.
① CHOP 지수가 기준값 아래(추세 구간)일 것 — 애초에 횡보장이면 나머지 조건은 보지 않는다.
② DMA 세 개가 방금 막 정렬되기 시작한 시점일 것 — 진입 타이밍의 기준.
③ HMA가 같은 방향으로 이제 막 꺾였을 것 — 방향 확인.
④ 1시간봉에서 EMA(20)와 EMA(50)의 배열이 같은 방향일 것 — 큰 흐름과 어긋나지 않게.
볼린저 밴드(과열 필터)와 오더블록(손절 기준)은 이번 1차 버전에서는 빼기로 했다. 진입 조건은 최소한으로 남기고, 오더블록은 손절에만 쓰는 거라 성격이 달라서 다음 편(백테스트)에서 별도로 다루기로 했다.

가설을 코드 조건문으로 옮기는 과정
이 부분 코드는 필자가 직접 짠 게 아니라 LLM에게 맡겼다. “정렬이 막 시작되는 시점”처럼 가설 단계에서 말로만 설명했던 조건을 LLM에게 전달하면, LLM이 각 지표를 계산하는 함수와 조건 판단 코드를 짜서 보여줬다. 필자가 한 일은 그 코드가 말한 조건을 실제로 구현하고 있는 게 맞는지 결과값을 하나씩 확인하고, 원하는 동작과 다르면 다시 설명해서 고쳐달라고 요청하는 것에 가까웠다. 그래서 이 조건이 “정확히 어떻게” 코드로 구현됐는지 세부 로직까지는 필자도 전부 이해하고 있는 건 아니다. 이 확인 과정을 차트와 코드 화면을 번갈아 보며 한참 반복했는데, 원래 화면을 오래 들여다볼 때는 블루라이트 차단 안경을 쓰는 편이라 이번에도 그대로 썼다.

지금 조건이 “맞는 로직”이라고 확신할 근거는 아직 없다. 다음 편에서 실제 거래 데이터로 이 조건을 백테스트해보고, 결과가 어떻게 나오는지 그대로 기록해본다.
📜 변경 이력 (클릭해서 펼치기)
v1.0 · 2026-09-25
[발행] 최초 발행