4주차 SPEC Kit으로 ICT 자동매매 전략 체계적으로 구현하기

지난 2주차에 카피트레이딩 시스템을 구현했던 경험을 바탕으로, 이번에는 소스 관리를 더 체계적으로 하기 위해 SPEC Kit을 도입해보았습니다.

이번 4주차에는 아래 과정을 따라해보았습니다.

1. **SPEC Kit 설치 및 프로젝트 설정**
2. **ICT 컨셉 자료 수집 및 전략 생성**
3. **Spec Kit 방법론 적용하여 MQ4 소스 구현**
4. **컴파일 및 백테스팅 테스트**
5. **수차례 수정을 통한 문제 해결**

## 1. SPEC Kit 설치 및 프로젝트 설정

먼저 Cursor 기반 Claude Code에서 SPEC Kit을 설치하고 프로젝트를 설정했습니다.

```
/speckit.specify @docs/02-guides/005-ICT 투자 전략.md
```

이 명령어를 통해 ICT 투자 전략을 기반으로 스펙을 정의했습니다. SPEC Kit은 프로젝트의 스펙 이력을 체계적으로 관리해주어, 나중에 변경 사항을 추적하거나 이전 버전을 참고할 수 있어 매우 유용했습니다.

생성된 스펙 파일은 `specs/005-ICT-mt4-strategy/spec.md`에 저장되었고, 다음과 같은 구조로 관리되었습니다:
- `spec.md`: 메인 스펙 문서
- `plan.md`: 구현 계획
- `tasks.md`: 작업 목록
- `data-model.md`: 데이터 모델 정의
- `research.md`: 연구 자료
- `quickstart.md`: 빠른 시작 가이드
사양 키트의 단계를 보여주는 다이어그램

한국어 텍스트가 있는 검은 화면의 스크린샷


## 2. ICT 컨셉 자료 수집 및 전략 생성

ICT (Inner Circle Trader) 방법론에 대한 자료를 NotebookLM에서 수집하여 전략을 생성했습니다.

주요 수집 내용:
- 시장 구조 분석 (Market Structure)
- 유동성 존 (Liquidity Zones)
- 공정 가치 갭 (Fair Value Gap, FVG)
- 브레이커 블록 (Breaker Block)
- 유니콘 존 (Unicorn Zone) 진입 모델

이 자료들을 기반으로 SPEC Kit의 `/speckit.plan` 명령어를 사용하여 구현 계획을 수립했습니다.

```
/speckit.plan @005-ICT-mt4-strategy
```

그리고 `/speckit.tasks` 명령어로 상세 작업 목록을 생성했습니다.

```
/speckit.tasks @005-ICT-mt4-strategy
```

## 3. Spec Kit 방법론 적용하여 MQ4 소스 구현

이제 실제 구현 단계에 들어갔습니다.

```
/speckit.implement - 구현 시작@005-ICT-mt4-strategy
```

Cursor가 자동으로 다음 기능들을 구현해주었습니다:

### 구현된 주요 기능

1. **시장 구조 분석**
   - 스윙 포인트 감지 (Swing High/Low)
   - 유동성 존 생성 (BSL/SSL)
   - 시장 구조 전환 감지 (MSS)

2. **FVG 및 브레이커 블록 감지**
   - 강세/약세 FVG 감지
   - MSS 후 브레이커 블록 생성

3. **유니콘 존 형성 및 거래 실행**
   - 브레이커 블록과 FVG 중첩 영역 계산
   - 유니콘 존에서 자동 지정가 주문 배치
   - 손절매/이익실현 자동 설정

4. **필터링 기능**
   - Kill Zone 시간 필터 (런던/뉴욕 겹침 시간)
   - 일일 바이어스 필터

## 4. 컴파일 및 백테스팅 테스트

소스 코드가 완성되자 MetaEditor에서 컴파일을 시도했습니다.

처음에는 여러 컴파일 오류가 발생했습니다:
- `'SwingPoint' - objects are passed by reference only` 오류
- `'GetErrorDescription' - function not defined` 오류
- `implicit conversion from 'number' to 'string'` 오류

Claude Code에게 오류를 알려주니 자동으로 수정해주었습니다:
- 구조체 파라미터를 참조로 전달하도록 변경 (`&` 추가)
- `GetErrorDescription` 헬퍼 함수 추가
- 명시적 타입 변환 추가

컴파일이 성공한 후 MT4 Strategy Tester에서 백테스팅을 실행했습니다.

## 5. 수차례 수정을 통한 문제 해결

백테스팅을 실행하면서 여러 문제들이 발견되었고, 하나씩 해결해나갔습니다.

### 문제 1: EA 아이콘이 슬픈 표정 (초기화 실패)

**증상**: EA를 차트에 적용했을 때 우측 아이콘이 슬픈 표정으로 표시됨

**원인 분석**: `OnTick()` 함수에서 충분한 캔들 데이터가 로드되기 전에 로직을 실행하려고 시도

**해결 방법**:
```mql4
void OnTick()
{
    // 최소 캔들 데이터 확인 (안전성 체크)
    if(Bars < Swing_PatternSize + 10)
    {
        // 데이터가 부족하면 대기
        return;
    }
    // ... 나머지 코드
}
```

### 문제 2: 스윙 하이/로우 수평선이 너무 많고 백테스트 그래프가 안 나옴

**증상**: 차트에 수평선이 과도하게 그려지고, 백테스트 결과 그래프가 표시되지 않음

**원인 분석**: 
- 중복된 스윙 포인트가 계속 추가됨
- 차트 객체가 정리되지 않아 누적됨
- 유니콘 존이 형성되지 않아 주문이 배치되지 않음

**해결 방법**:
- 스윙 포인트 중복 체크 로직 추가 (20핍 이내 중복 제거)
- 스윙 포인트 및 유동성 존 개수 제한 (각각 50개, 20개)
- 매 바마다 오래된 차트 객체 자동 정리
- 유니콘 존 생성 로직 수정

### 문제 3: MSS 감지가 전혀 되지 않음

**증상**: 로그에 "MSS 감지 완료: 청산된 유동성 존=9, 감지된 MSS=0개" 메시지가 계속 출력됨

**원인 분석**: 
- MSS 감지 조건이 너무 엄격함
- `High[1]` 또는 `Low[1]`만 확인하여, SSL/BSL 청산 후 가격이 반대 방향으로 움직이면 MSS를 감지하지 못함
- 스윙 포인트 배열이 시간순으로 정렬되지 않음

**해결 방법**:
- 스윙 포인트 배열을 시간순으로 정렬 (버블 정렬 구현)
- MSS 감지 로직 개선: SSL/BSL 청산 시점부터 최근 10바 내 최대/최소 가격 확인
- 최소 돌파 거리를 10핍에서 5핍으로 완화

### 문제 4: UnicornZone 중복 생성

**증상**: 같은 유니콘 존이 여러 번 생성되어 로그가 과도하게 출력됨

**원인 분석**: 
- `FindUnicornZones()` 함수가 매 바마다 배열을 초기화하여 이전 존과 비교하지 못함
- Breaker Block 인덱스와 FVG 인덱스 조합으로 중복 체크를 하지 않음

**해결 방법**:
- UnicornZone 배열을 초기화하지 않고 기존 존 유지
- Breaker Block 인덱스와 FVG 인덱스 조합으로 중복 체크 강화
- 24시간 이상 지난 오래된 존 자동 제거

### 문제 5: Array out of range 오류

**증상**: 백테스팅 중 "array out of range in '005-ICT-MT4_Strategy_EA.mq4' (1633,37)" 오류 발생

**원인 분석**: `CalculateSLTP()` 함수에서 MSS 인덱스가 유효하지 않은 상태로 배열에 접근 시도

**해결 방법**:
- MSS 인덱스 유효성 검사 추가
- MSS 인덱스가 유효하지 않을 때 기본 SL/TP 계산 로직 사용

## 최종 결과

수차례의 수정 끝에 드디어 백테스팅 데이터가 정상적으로 출력되었습니다!

백테스팅 결과:
- 유니콘 존이 정상적으로 형성됨
- 지정가 주문이 자동으로 배치됨
- 포지션이 진입 영역에 도달하면 자동으로 오픈됨
- 손절매/이익실현이 정상적으로 작동함

외환 거래 소프트웨어의 스크린샷


## SPEC Kit 사용 후기

SPEC Kit을 사용하면서 느낀 장점:

1. **체계적인 문서 관리**: 스펙, 계획, 작업 목록이 자동으로 생성되고 관리됨
2. **변경 이력 추적**: 스펙 변경 사항을 백업 파일로 관리할 수 있어 이전 버전 참고 가능
3. **구조화된 개발 프로세스**: `/speckit.specify` → `/speckit.plan` → `/speckit.tasks` → `/speckit.implement` 순서로 진행하여 체계적인 개발 가능
4. **컨텍스트 유지**: Claude Code가 스펙 문서를 참고하여 일관된 구현 가능

앞으로도 복잡한 프로젝트를 진행할 때는 SPEC Kit을 적극 활용하여 더 체계적으로 개발하겠습니다!

참고자료
Spec Kit을 소개하는 자료를 만들어보았습니다.
실전 사용법은 추후에 업로드해보겠습니다.
https://www.youtube.com/watch?v=sehF9EKkoko&t=2s


뉴스레터 무료 구독

👉 이 게시글도 읽어보세요