시스템 트레이딩

AI로 MT5 EA 만들기: Codex·Claude에 전달할 MQL5 전략 명세와 프롬프트

Codex·Claude 같은 코딩 AI에게 MT5 EA를 맡길 때 시장 가설, 진입·청산, 손실 한도, 상태 복구, 테스트 기준을 명세하고 검증하는 프롬프트 작성법입니다.

Read the English edition

핵심 요약

AI에게 수익 나는 EA를 요청하기보다 시장 가설, 실행 환경, 거래 규칙, 위험 한도와 검증 기준을 먼저 명세해야 합니다.

구현 전에는 AI가 모호한 조건을 질문하게 하고, 구현 뒤에는 요구사항·코드·테스트·로그가 서로 연결되는지 확인합니다.

컴파일 성공과 백테스트 수익은 완성 판정이 아니며, 고정한 버전과 재현 가능한 증거를 기준으로 사람이 채택·수정·폐기를 결정합니다.

AI에게 수익 전략이 아니라 검증 가능한 MT5 EA 명세를 건넵니다

이번 포스트의 핵심 내용 3줄요약

  • “수익 나는 EA를 만들어 줘”에는 시장, timeframe, 진입·청산, 비용, 손실 한도와 실패 조건이 빠져 있어 결과를 검증할 수 없습니다.
  • 사람은 시장 가설과 허용 위험을 정하고, AI는 모호성 질문, MQL5 구현, 테스트 시나리오 작성과 코드 검토를 맡는 편이 명확합니다.
  • 성공 기준은 긴 코드나 좋은 백테스트 숫자가 아니라 고정된 명세와 코드, 주문 로그, 테스트 결과가 한 줄로 연결되는 것입니다.

이전 글인 MT5 EA 재시작·재연결 상태 복구 설계에서는 EA가 다시 켜졌을 때 열린 position과 pending order를 재조정하고, 설명되지 않는 상태에서는 신규 주문을 잠그는 방법을 다뤘습니다. 이번 글은 그보다 앞선 단계로 돌아가 AI에게 어떤 EA를 만들어 달라고 요청해야 하는가를 정리합니다.

Codex나 Claude Code 같은 코딩 AI는 저장소의 코드를 읽고, 수정안을 만들고, 사용할 수 있는 환경에서는 명령과 테스트를 실행하는 데 도움을 줄 수 있습니다. 그러나 어떤 시장 가설을 감수할지, 한 번에 얼마를 잃어도 되는지, 어떤 백테스트 결과를 실패로 볼지는 사용자가 정해야 합니다.

OpenAI의 Codex 모범 사례 새 탭는 중요한 작업의 프롬프트에 목표, 관련 맥락, 제약, 완료 조건을 포함하라고 안내합니다. Anthropic의 Claude Code 모범 사례 새 탭도 구현 전에 탐색·계획 단계를 분리하고, 테스트나 예상 출력처럼 작업을 확인할 기준을 제공하는 방식을 강조합니다. MT5 EA에서는 이 일반 원칙을 전략 명세, 주문 안전 조건, Strategy Tester 설정과 중단 기준으로 번역해야 합니다.

“볼린저 밴드와 RSI로 EA를 만들어 줘”에는 결정이 빠져 있습니다

다음 요청은 아이디어로는 이해할 수 있지만 구현 명세로는 부족합니다.

볼린저 밴드 상단과 하단, RSI를 같이 사용해서
MT5에서 수익을 낼 수 있는 EA를 만들어 줘.

AI는 빈칸을 채워 그럴듯한 코드를 만들 수 있습니다. 문제는 사용자가 고르지 않은 Bollinger Bands 기간, RSI 경계, 현재 봉 사용 여부, 손절 방식이 코드 안에 조용히 들어갈 수 있다는 점입니다. 그 상태에서 백테스트 결과가 나오더라도 어떤 가설을 시험했는지부터 불분명합니다.

빠진 질문가능한 선택결정하지 않았을 때 생기는 문제
시장 가설밴드 이탈 뒤 평균 회귀, 또는 추세 지속같은 지표로 반대 방향 전략이 만들어짐
신호 가격고가·저가 접촉, 종가 이탈, 밴드 안 재진입진입 횟수와 시점이 크게 달라짐
RSI 조건30/70, 20/80, 경계 돌파 또는 복귀AI가 임의의 숫자와 비교 방식을 선택함
봉 기준진행 중인 현재 봉, 직전 확정봉현재 봉을 쓰면 신호가 사라지거나 바뀔 수 있음
주문 시점신호 봉 종가, 다음 봉 첫 tick백테스트와 실제 실행의 가격 기준이 달라짐
청산중심선, 반대 밴드, 시간 제한, SL/TP손익보다 포지션 생존 시간이 전략을 지배할 수 있음
위험고정 lot, stop 거리 기반 위험 비율심볼과 계좌가 바뀌면 손실 규모가 달라짐
실행 환경symbol, timeframe, netting/hedging, 비용다른 서버에서 같은 코드가 다른 동작을 보임

“어떤 값이 가장 좋은가”를 AI에게 바로 묻는 것도 시작점으로는 좋지 않습니다. 같은 과거 데이터에서 많은 조합을 반복해 가장 좋은 숫자만 고르면, 시장 구조보다 선택한 구간의 우연에 맞춘 결과가 될 수 있습니다. 먼저 검증할 한 가지 가설과 기준 버전을 고정해야 합니다.

사람, AI, MT5가 맡을 일을 분리합니다

AI를 전략가, 개발자, 테스터, 최종 승인자로 한꺼번에 두면 책임 경계가 사라집니다. 다음처럼 역할을 나누면 결과가 좋지 않을 때 어디로 돌아가야 하는지 알 수 있습니다.

주체맡길 일맡기지 않을 일
사람시장 가설, 허용 손실, 금지 행동, 합격·중단 기준 결정이해하지 못한 가정의 자동 승인
AI 코딩 도구누락 질문, 요구사항 구조화, MQL5 구현, 테스트 시나리오와 코드 검토미래 성과 증명, 감당 가능한 손실 대신 결정
MetaEditor·MT5컴파일 결과, Strategy Tester report, Journal, order·deal·position 증거 생성결과의 경제적 의미와 채택 여부 판단
별도 검토명세 누락, 코드와 요구사항 불일치, 회귀 위험 확인두 AI가 동의했다는 이유만으로 검증 종료

Codex로 구현하고 Claude Code로 검토하거나 그 반대로 진행할 수 있습니다. 같은 도구의 새 세션에서 검토해도 됩니다. 중요한 것은 브랜드 순서가 아니라 검토자에게 원래 명세와 실제 diff, 실행 결과를 함께 주는 것입니다. 코드만 보고 “문제가 없어 보인다”는 답변은 MT5에서 주문 경로를 실행한 증거가 아닙니다.

한 장짜리 EA 계약서를 먼저 만듭니다

명세는 길 필요가 없지만 테스트 가능한 문장이어야 합니다. 요구사항에 ID를 붙이면 나중에 코드와 테스트가 무엇을 구현했는지 찾기 쉽습니다.

ID사람이 정할 내용검증 증거 예시
ENV-01demo 계좌, 정확한 symbol, timeframe, account mode실행 로그와 Tester 설정
HYP-01어떤 시장 현상을 검증하는지와 검증하지 않는 것명세 버전과 사전 가설
SIG-01확정봉 기준 진입 조건과 한 봉당 평가 횟수signal timestamp와 bar time
EXIT-01청산, SL/TP, 최대 보유 시간order·deal·position history
RISK-01lot 계산, 1회·일일 손실 한도, 최대 노출계산 로그와 주문 volume
GUARD-01spread, 거래 권한, 데이터 부족 시 금지 행동주문하지 않은 이유를 남긴 로그
STATE-01재시작, 기존 position, 중복 실행 처리RECOVERING·READY·LOCKED 전환
LOG-01신호부터 요청·retcode·deal까지 기록할 값observation ID로 연결된 증거
TEST-01백테스트·데모 합격, 보류, 즉시 중단 기준사전에 작성한 판정표

여기서 “최대 드로다운 10% 이하”처럼 숫자를 적는 것만으로는 충분하지 않습니다. 기간, 초기 deposit, 비용, position sizing, 테스트 데이터가 함께 고정되어야 같은 의미를 가집니다. 전략 성과 기준과 소프트웨어 안전 기준도 나눠야 합니다. 수익이 나더라도 중복 주문이나 필수 Stop Loss 누락이 한 번 발견되면 기능 검증은 실패입니다.

첫 프롬프트에서는 코드를 쓰지 못하게 합니다

아이디어 단계에서 가장 먼저 받을 산출물은 .mq5 파일이 아니라 질문 목록입니다. 아래 프롬프트는 볼린저 밴드와 RSI 아이디어를 예로 들지만, 다른 전략에도 항목만 바꿔 사용할 수 있습니다.

당신은 MQL5 코드를 바로 작성하는 사람이 아니라 EA 요구사항 검토자입니다.

목표:
- 볼린저 밴드와 RSI를 결합한 교육용 MT5 EA 아이디어를
  재현 가능한 전략 명세와 테스트 계획으로 바꿉니다.
- 이 단계에서는 코드를 작성하지 마세요.

현재 아이디어:
- 볼린저 밴드 상단·하단과 RSI 과매수·과매도를 함께 사용합니다.
- Strategy Tester와 격리된 demo 계좌에서만 검증합니다.
- 특정 수익률이나 실계좌 사용을 목표로 하지 않습니다.

반드시 확인할 영역:
1. 시장 가설과 진입 방향
2. indicator 기간·가격·shift와 확정봉 기준
3. 진입·청산·SL/TP·최대 보유 시간
4. position sizing과 1회·일일 손실 한도
5. symbol, timeframe, account mode와 거래 비용
6. spread·권한·데이터 부족·기존 position에서의 금지 행동
7. 재시작, 중복 신호, Magic Number와 상태 복구
8. 로그, 백테스트, demo forward test의 합격·중단 기준

규칙:
- 빠진 값을 관행이나 추측으로 채우지 마세요.
- 수익성을 약속하거나 최적 파라미터를 먼저 제안하지 마세요.
- 플랫폼 동작은 공식 MetaTrader·MQL5 문서로 확인할 항목을 표시하세요.
- 서로 충돌하는 답이 있으면 구현 전에 멈추세요.

출력:
A. 반드시 답해야 할 질문
B. 현재 가정과 확인되지 않은 항목
C. ENV/HYP/SIG/EXIT/RISK/GUARD/STATE/LOG/TEST 요구사항 초안
D. 정상·경계·실패 테스트 시나리오
E. 사람이 결정해야 하는 합격·중단 기준

질문에 답할 때도 AI가 제시한 첫 번째 선택지를 그대로 승인하지 않습니다. 예를 들어 밴드 하단 “접촉”은 low <= lowerBand인지, close <= lowerBand인지, 이탈 뒤 close > lowerBand로 복귀한 경우인지 서로 다른 규칙입니다. 전략 문장은 최종적으로 MQL5의 boolean 조건 하나로 옮길 수 있을 정도로 명확해야 합니다.

답변을 명세 버전으로 고정한 뒤 구현을 요청합니다

질문과 답이 끝나면 대화를 그대로 개발 기준으로 사용하지 말고 짧은 명세 파일로 고정합니다. 예시는 다음과 같습니다.

spec_version: 0.1.0
purpose: 교육용 평균 회귀 가설 검증
environment: [demo server / symbol / timeframe / account mode]
hypothesis: [검증하려는 한 문장]
signal: [확정봉 기준의 정확한 boolean 조건]
entry: [주문 시점과 허용 방향]
exit: [정상 청산, SL/TP, 시간 청산]
risk: [lot 계산, 최대 노출, 손실 한도]
guards: [주문하지 않아야 할 조건]
state: [position 소유권, 재시작, 중복 방지]
logging: [signal/request/order/deal/position 연결 값]
test: [정상·실패 시나리오와 판정 기준]

그다음 구현 프롬프트에는 목표, 입력 파일, 제약, 완료 조건을 함께 넣습니다.

첨부한 EA 명세 v0.1.0을 MQL5로 구현하세요.

구현 전에:
- 명세의 모순, 누락, MQL5에서 직접 구현할 수 없는 조건을 먼저 보고하세요.
- 해결되지 않은 항목이 있으면 코드를 작성하지 말고 질문하세요.

구현 제약:
- Strategy Tester와 demo 계좌 전용 교육 코드입니다.
- 모든 signal은 명세에 적힌 확정봉에서만 계산합니다.
- 한 signal boundary에서 주문 요청은 최대 한 번입니다.
- EA가 소유하지 않은 position과 order를 수정하거나 청산하지 않습니다.
- 거래 요청 전 symbol specification과 주문 가능 조건을 확인합니다.
- 요청 함수의 bool 반환만으로 체결 완료를 판단하지 않습니다.
- retcode, order, deal, position과 실패 이유를 구조화해 기록합니다.
- 재시작 뒤 계좌 상태를 재조정하기 전에는 신규 주문을 금지합니다.

산출물:
1. 컴파일 가능한 전체 .mq5 소스
2. 요구사항 ID와 함수·로그·테스트의 대응표
3. Inputs 목록과 단위
4. MetaEditor 컴파일 및 Strategy Tester 실행 절차
5. 정상·경계·실패 테스트 시나리오
6. 알려진 한계와 검증하지 못한 가정

완료 조건:
- 명세의 모든 요구사항이 코드 또는 명시적인 미구현 항목에 연결됩니다.
- 0 errors, 0 warnings를 확인할 절차가 있습니다.
- 같은 버전과 Inputs로 다른 사람이 테스트를 반복할 수 있습니다.

MQL5의 OrderSend 공식 문서 새 탭는 함수가 true를 반환해도 시장가 주문의 실제 체결 완료를 뜻하지 않는다고 설명합니다. 서버 retcode를 확인하고, 후속 상태는 OnTradeTransaction 문서 새 탭의 order·deal·position 이벤트와 함께 추적해야 합니다. 이런 플랫폼 제약을 프롬프트에 넣어야 AI가 if(trade.Buy(...)) success 같은 짧은 코드로 검증을 끝내지 않습니다.

컴파일, 기능, 전략 성과를 서로 다른 문으로 둡니다

EA가 컴파일됐다는 사실은 문법을 통과했다는 뜻입니다. 주문 안전성과 전략 가설까지 통과했다는 뜻은 아닙니다.

검증 문확인할 질문통과 증거
명세모든 조건이 하나의 의미로 해석되는가승인된 spec 버전과 미해결 항목 0개
컴파일소스가 현재 MetaEditor에서 만들어지는가build 기록과 0 errors, 0 warnings
기능신호, 주문, 청산, 위험 제한이 규칙대로인가정상·경계·실패 시나리오 로그
상태재시작과 기존 노출에서 중복 주문이 없는가계좌 재조정과 상태 전환 기록
백테스트고정 조건의 과거 데이터에서 무엇이 관찰됐는가설정 파일, report, Journal, 코드 버전
포워드현재 demo 환경에서 운영 결함이 없는가포워드 테스트 기록
판단가설을 유지·수정·폐기할 근거가 있는가사람이 작성한 결정과 다음 시험

MQL5 Strategy Tester 공식 문서 새 탭Every tick, 1 Minute OHLC, Open prices only 등 서로 다른 tick 생성 방식을 구분합니다. 새 봉에서만 판단하는 전략의 빠른 1차 점검과, intrabar의 밴드 접촉·Stop Loss 순서가 결과에 영향을 주는 시험은 필요한 정밀도가 다릅니다. 따라서 “백테스트 완료”라고만 기록하지 말고 modeling mode와 그 선택 이유를 함께 남겨야 합니다.

AI가 MT5가 설치된 실행 환경에 접근할 수 없다면 컴파일이나 백테스트를 했다고 쓰게 해서는 안 됩니다. 정확한 수동 실행 절차를 받은 뒤 사람이 MetaEditor와 Strategy Tester에서 실행하고, 실제 report와 Journal을 다시 제공해야 합니다.

코드와 결과는 같은 버전 묶음으로 보관합니다

코드만 final.mq5로 덮어쓰면 어떤 변경이 결과를 바꿨는지 추적할 수 없습니다. 작은 실험이라도 다음 묶음을 같이 보관합니다.

v0.1.0-baseline/
  strategy-spec.md
  BollingerRsiEA.mq5
  baseline.set
  tester-config.md
  tester-report.html
  journal.txt
  decision.md

개선 버전은 v0.2.0-trend-filter, v0.3.0-risk-cap처럼 변경 목적을 이름에 남길 수 있습니다. 한 번에 indicator 기간, 진입 조건, 손절과 거래 시간을 모두 바꾸면 성과 차이의 원인을 설명하기 어렵습니다. 한 버전에서는 하나의 핵심 가설만 바꾸고, 나머지 테스트 조건은 그대로 유지하는 편이 비교에 유리합니다.

AI에게 수정안을 받을 때는 다음을 함께 요구합니다.

기준 버전 v0.1.0과 승인된 개선 요구사항을 비교하세요.

- 먼저 관찰된 실패와 개선 요구사항의 인과 가설을 한 문장으로 적으세요.
- 해당 요구사항을 구현하는 최소 범위만 수정하세요.
- 변경된 요구사항 ID와 코드 위치를 대응시키세요.
- 새 테스트와 기존 회귀 테스트를 작성하세요.
- 개선될 수 있는 지표뿐 아니라 악화될 수 있는 조건도 적으세요.
- 이전 버전과 같은 Tester 설정으로 재실행하는 절차를 출력하세요.
- 결과를 보기 전에는 성과가 개선됐다고 표현하지 마세요.

버전 관리의 목적은 좋은 결과만 남기는 것이 아닙니다. 실패한 버전과 폐기 이유를 남겨야 같은 아이디어를 다른 이름으로 다시 반복하지 않을 수 있습니다.

AI 검토는 증거를 찾게 하고 최종 판정을 맡기지 않습니다

구현을 끝낸 AI에게 “잘 만들었지?”라고 물으면 자기 설명을 반복하기 쉽습니다. 검토 요청에는 원래 명세, 코드 diff, 컴파일 결과와 테스트 로그를 함께 제공하고, 요구사항 위반을 먼저 찾게 합니다.

이 작업은 구현이 아니라 검토입니다. 파일을 수정하지 마세요.

입력:
- 승인된 EA 명세와 요구사항 ID
- 기준 버전과 현재 버전의 diff
- MetaEditor 컴파일 결과
- Strategy Tester 설정, report와 Journal

검토 순서:
1. 요구사항별 구현 위치와 누락을 추적합니다.
2. 진행 중인 봉 참조, 중복 signal, position 소유권 오류를 찾습니다.
3. 주문 전 검증, retcode, 부분 체결·timeout 처리와 상태 복구를 확인합니다.
4. 정상·경계·실패 테스트가 실제 증거로 남았는지 확인합니다.
5. 보고서에 없는 성과나 원인을 추정하지 않습니다.

출력:
- 심각도 / 요구사항 ID / 코드 또는 로그 증거 / 재현 방법 / 수정 방향
- 검증하지 못한 항목
- 채택 판단 전에 사람이 확인할 질문

AI가 발견한 문제는 새로운 가설입니다. 코드 줄, official reference, 재현 로그 또는 새로운 테스트로 확인해야 결함 판정이 됩니다. 반대로 AI가 문제를 찾지 못했다고 해서 안전성이 증명되는 것도 아닙니다.

백테스트 결과를 AI에게 돌려줄 준비까지가 이번 단계입니다

다음 반복에서 AI가 백테스트를 분석하게 하려면 수익 숫자나 Graph 화면 하나만 전달해서는 부족합니다.

함께 줄 자료필요한 이유
spec·source·Inputs 버전어떤 전략을 시험했는지 고정
MT5 build와 운영체제실행 환경 차이 기록
broker/server, account mode, symbol 사양가격·계약·포지션 방식 차이 확인
timeframe, 기간, modeling mode데이터 범위와 시뮬레이션 방식 확인
spread, commission, swap 가정비용을 뺀 착시 방지
전체 report와 Journal손익, drawdown, 거래 분포와 오류를 함께 확인

분석 요청에는 “보고서에 없는 수치나 원인을 만들지 말고, 관찰된 사실·가능한 해석·추가 시험이 필요한 가설을 분리하라”는 조건을 넣습니다. Profit Factor나 순이익이 좋아도 거래 수가 너무 적거나, 몇 번의 거래가 전체 결과를 지배하거나, 특정 기간에서만 성과가 나왔다면 보완 또는 폐기 근거가 됩니다. MT5 Strategy Tester 결과 리포트 읽는 법에서 확인한 지표와 Graph·Journal 읽기 순서를 그대로 사용할 수 있습니다.

자주 묻는 질문

Codex와 Claude Code 중 어느 쪽이 MT5 EA에 더 좋은가요?

도구 이름만으로 결론 내리기 어렵습니다. 같은 명세, 코드베이스, 실행 권한과 테스트 기준을 제공하고 누락 수, 컴파일 결과, 발견한 결함과 수정 diff를 비교해야 합니다. 한 도구로 구현하고 다른 도구로 검토할 수 있지만, MT5 실행 결과가 최종 증거입니다.

AI가 먼저 전략 아이디어를 제안하게 해도 되나요?

아이디어 후보와 반대 가설을 넓히는 용도로 사용할 수 있습니다. 다만 사용할 데이터, 허용 위험과 검증 기준을 사람이 정하고, 결과를 보기 전에 기준 가설을 고정해야 합니다. AI의 제안 자체는 시장에서 검증된 근거가 아닙니다.

프롬프트를 자세히 쓰면 버그가 없어지나요?

아닙니다. 명세가 구체적이면 누락과 검토 범위를 줄일 수 있지만 구현 결함, 플랫폼 차이, 데이터 문제는 남습니다. 컴파일, 시나리오 테스트, 백테스트, demo 포워드 테스트를 별도로 진행해야 합니다.

MQL5를 몰라도 AI가 만든 EA를 사용할 수 있나요?

학습용 코드를 만들고 읽는 데 도움을 받을 수 있지만, 최소한 진입·청산 조건, lot과 Stop Loss, Magic Number, 주문 결과 로그, 중단 절차는 설명할 수 있어야 합니다. 설명할 수 없는 동작이 남아 있다면 실계좌 검토로 넘어가지 않습니다.

백테스트가 좋아진 개선안은 바로 채택해도 되나요?

같은 과거 구간을 보고 제안하고 수정하고 평가했다면 그 데이터에 맞춰졌을 가능성이 있습니다. 별도로 남겨 둔 검증 구간과 demo 포워드 테스트에서 다시 확인하고, 변경하지 않은 기준 버전과 같은 조건으로 비교해야 합니다.

위험 설명

AI가 생성하거나 검토한 MQL5 코드에는 논리 오류, 주문 처리 결함, 잘못된 단위와 누락된 시장 조건이 있을 수 있습니다. 컴파일 성공, 과거 백테스트와 demo 실행은 미래 성과를 증명하지 않습니다. 자동매매는 잘못된 규칙과 주문도 반복할 수 있으며, CFD·레버리지 상품은 손실이 빠르게 커질 수 있습니다.

이 글은 정보 제공 목적의 교육 자료이며 특정 AI 도구, 브로커, 심볼, indicator 조합, 파라미터 또는 거래를 권유하지 않습니다. 계좌 비밀번호, API key, 신분 정보와 전체 계좌번호를 프롬프트·저장소·로그에 넣지 말고, 코드는 Strategy Tester와 격리된 demo 환경에서 먼저 검증하세요.

다음 포스팅 예고

이어지는 글인 AI로 MT5 전략 검증하기: 볼린저 밴드·RSI 프롬프트와 백테스트 개선에서는 소스 코드 대신 어떤 프롬프트로 기준 전략을 확정하고, 백테스트 결과 유형마다 무엇을 다시 질문할지에 집중합니다.

Profit Factor, Equity Drawdown, 거래 수와 long·short 비대칭을 AI에 분석시키는 방법부터, trend·volatility·session·spread 같은 보완장치를 한 번에 하나씩 시험하고 v0.1.0과 v0.2.0을 비교하는 프롬프트까지 정리했습니다.