Skip to content

YesTrader 고도화 1: 매매 아이디어를 코드 구조로 바꾸기

YesTrader 프로젝트는 매매 아이디어를 실제 차트 지표와 전략 구조로 옮기는 작업입니다. 단순히 “어디서 사고팔까”를 정하는 것이 아니라, 사람이 보던 판단을 코드가 이해할 수 있는 규칙으로 정리하는 과정입니다.

이 글은 투자 성과를 말하기 위한 글이 아닙니다. 제가 매매 아이디어를 어떻게 구조화하고, 수동매매와 자동매매를 어떻게 나누어 설계했는지 기록하기 위한 글입니다.

처음의 문제의식

차트를 볼 때 사람은 여러 정보를 동시에 봅니다. 변곡점, 눌림, 중심선, 캔들 반응, 추세 방향 같은 요소를 종합해서 판단합니다.

하지만 이걸 코드로 만들려면 모호한 표현을 그대로 쓸 수 없습니다.

  • 좋아 보이는 자리
  • 눌림이 온 것 같은 구간
  • 반등이 나올 것 같은 타이밍
  • 추세가 살아 있는 느낌

이런 표현은 사람이 보기에는 자연스럽지만, 자동화에는 맞지 않습니다. 그래서 판단을 단계별 신호로 쪼개야 했습니다.

핵심 정리: 라벨은 진입 신호가 아니다

분석하면서 가장 중요하게 정리한 원칙은 이것입니다.

1, 3, 5, 7, 9 같은 숫자 라벨은 후행 확정값이고, 실제 진입은 그 다음에 만들어지는 후보 구역과 실시간 트리거를 봐야 한다.

처음에는 숫자 라벨 자체를 진입 판단의 중심으로 볼 수도 있었습니다. 하지만 구조를 정리해보니 라벨은 이미 지나간 흐름을 확인하는 역할에 가깝습니다.

진짜 중요한 것은 라벨이 찍힌 뒤 다음에 만들어지는 후보 구역입니다. 그리고 그 후보 구역 안에서 실제 반응이 나오는지를 봐야 합니다.

신호를 단계로 나누기

그래서 YesTrader의 공통 신호 흐름을 아래처럼 정리했습니다.

  1. 후행 라벨 확정
  2. 선행 후보 구역 생성
  3. 실시간 트리거 대기
  4. 진입 신호 발생
  5. 손절/청산 관리
  6. 무효 조건 발생 시 후보 삭제

이렇게 나누면 수동매매와 자동매매가 같은 신호 구조를 공유할 수 있습니다.

수동매매와 자동매매를 분리한 이유

처음부터 완전 자동매매로 가는 것은 위험합니다. 신호가 정확히 보이는지, 실제 차트에서 사용자가 이해할 수 있는지, 알림이 너무 많지는 않은지 먼저 확인해야 합니다.

그래서 운용 단계를 세 가지로 나누었습니다.

  • SignalOnly: 주문 없이 차트 표시와 알림만 확인
  • SemiAuto: 트리거 발생 후 사용자가 확인하면 주문
  • FullAuto: 조건이 맞으면 즉시 자동 주문

이 순서가 중요한 이유는 자동매매가 단순히 코드를 켜는 문제가 아니기 때문입니다. 신호 품질, 손절 기준, 중복 진입 제한, 하루 최대 손실 제한 같은 안전장치가 먼저 확인되어야 합니다.

이번 설계에서 좋아진 점

  • 라벨과 진입 트리거를 구분하게 됐습니다.
  • 수동매매 화면 표시와 자동매매 주문 로직을 같은 신호 엔진으로 연결할 수 있게 됐습니다.
  • 처음부터 FullAuto로 가지 않고 단계적으로 검증할 수 있는 구조가 생겼습니다.
  • 신호 상태를 WAIT, READY, TRIGGERED, INVALID, DONE으로 나누어 추적할 수 있게 됐습니다.

다음 고도화 방향

다음에는 실제 구현 단계에서 아래 내용을 확인하려고 합니다.

  • JZONE_WaveCounter에서 후행 라벨과 후보 상태를 분리하기
  • JZONE_ManualGuide에서 후보 구역과 트리거를 차트에 명확히 표시하기
  • JZONE_AutoStrategy에서 SignalOnly 모드부터 검증하기
  • 손절, 부분 청산, 일일 손실 제한을 먼저 테스트하기

이번 작업을 통해 느낀 점은, 자동매매는 “진입 신호 하나”를 만드는 일이 아니라는 것입니다. 매매 판단 전체를 단계별 구조로 바꾸는 작업에 더 가깝습니다.

자동화하려면 먼저 내가 어떤 기준으로 판단하고 있는지부터 분해해야 한다.