YesTrader 프로젝트는 매매 아이디어를 실제 차트 지표와 전략 구조로 옮기는 작업입니다. 단순히 “어디서 사고팔까”를 정하는 것이 아니라, 사람이 보던 판단을 코드가 이해할 수 있는 규칙으로 정리하는 과정입니다.
이 글은 투자 성과를 말하기 위한 글이 아닙니다. 제가 매매 아이디어를 어떻게 구조화하고, 수동매매와 자동매매를 어떻게 나누어 설계했는지 기록하기 위한 글입니다.
처음의 문제의식
차트를 볼 때 사람은 여러 정보를 동시에 봅니다. 변곡점, 눌림, 중심선, 캔들 반응, 추세 방향 같은 요소를 종합해서 판단합니다.
하지만 이걸 코드로 만들려면 모호한 표현을 그대로 쓸 수 없습니다.
- 좋아 보이는 자리
- 눌림이 온 것 같은 구간
- 반등이 나올 것 같은 타이밍
- 추세가 살아 있는 느낌
이런 표현은 사람이 보기에는 자연스럽지만, 자동화에는 맞지 않습니다. 그래서 판단을 단계별 신호로 쪼개야 했습니다.
핵심 정리: 라벨은 진입 신호가 아니다
분석하면서 가장 중요하게 정리한 원칙은 이것입니다.
1, 3, 5, 7, 9 같은 숫자 라벨은 후행 확정값이고, 실제 진입은 그 다음에 만들어지는 후보 구역과 실시간 트리거를 봐야 한다.
처음에는 숫자 라벨 자체를 진입 판단의 중심으로 볼 수도 있었습니다. 하지만 구조를 정리해보니 라벨은 이미 지나간 흐름을 확인하는 역할에 가깝습니다.
진짜 중요한 것은 라벨이 찍힌 뒤 다음에 만들어지는 후보 구역입니다. 그리고 그 후보 구역 안에서 실제 반응이 나오는지를 봐야 합니다.
신호를 단계로 나누기
그래서 YesTrader의 공통 신호 흐름을 아래처럼 정리했습니다.
- 후행 라벨 확정
- 선행 후보 구역 생성
- 실시간 트리거 대기
- 진입 신호 발생
- 손절/청산 관리
- 무효 조건 발생 시 후보 삭제
이렇게 나누면 수동매매와 자동매매가 같은 신호 구조를 공유할 수 있습니다.
수동매매와 자동매매를 분리한 이유
처음부터 완전 자동매매로 가는 것은 위험합니다. 신호가 정확히 보이는지, 실제 차트에서 사용자가 이해할 수 있는지, 알림이 너무 많지는 않은지 먼저 확인해야 합니다.
그래서 운용 단계를 세 가지로 나누었습니다.
- SignalOnly: 주문 없이 차트 표시와 알림만 확인
- SemiAuto: 트리거 발생 후 사용자가 확인하면 주문
- FullAuto: 조건이 맞으면 즉시 자동 주문
이 순서가 중요한 이유는 자동매매가 단순히 코드를 켜는 문제가 아니기 때문입니다. 신호 품질, 손절 기준, 중복 진입 제한, 하루 최대 손실 제한 같은 안전장치가 먼저 확인되어야 합니다.
이번 설계에서 좋아진 점
- 라벨과 진입 트리거를 구분하게 됐습니다.
- 수동매매 화면 표시와 자동매매 주문 로직을 같은 신호 엔진으로 연결할 수 있게 됐습니다.
- 처음부터 FullAuto로 가지 않고 단계적으로 검증할 수 있는 구조가 생겼습니다.
- 신호 상태를 WAIT, READY, TRIGGERED, INVALID, DONE으로 나누어 추적할 수 있게 됐습니다.
다음 고도화 방향
다음에는 실제 구현 단계에서 아래 내용을 확인하려고 합니다.
- JZONE_WaveCounter에서 후행 라벨과 후보 상태를 분리하기
- JZONE_ManualGuide에서 후보 구역과 트리거를 차트에 명확히 표시하기
- JZONE_AutoStrategy에서 SignalOnly 모드부터 검증하기
- 손절, 부분 청산, 일일 손실 제한을 먼저 테스트하기
이번 작업을 통해 느낀 점은, 자동매매는 “진입 신호 하나”를 만드는 일이 아니라는 것입니다. 매매 판단 전체를 단계별 구조로 바꾸는 작업에 더 가깝습니다.
자동화하려면 먼저 내가 어떤 기준으로 판단하고 있는지부터 분해해야 한다.