지난 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