📝 한 줄 요약 (바쁘면 이것만)
국내주식 자동매매 봇을 24시간 해외 시장(FX·금·지수)까지 넓히려고 MT5 신호검색 스킬 1호를 만들었습니다. 이번 스킬은 시작일 뿐입니다. 앞으로는 성격이 다른 신호검색 스킬을 여러 개 만들고, 각각을 라이브 데이터로 검증한 뒤, 겹치는 부분을 쪼개고 합쳐 빈틈없는 신호검색 체계로 키울 계획입니다. 이번 편에서는 그 첫 스킬을 새 코드 0줄로 만들고, 컴파일러가 조용히 죽는 함정과 자동실행이 안 먹히는 함정을 두 번 우회하며 데모계좌 첫 라이브 스캔까지 끝냈습니다.
🎯 이런 분께 추천해요
자동매매·신호검색을 다른 시장(해외/암호화폐 등)으로 넓히고 싶은 분
스킬을 하나 잘 만드는 것보다, 여러 개를 쌓아 쪼개고 합치는 성장 루프가 궁금한 분
Wine·에뮬레이터 환경에서 자동화를 붙이다 막힌 경험이 있는 분
😫 문제 상황 (Before)
국내주식 자동매매 에이전트(디스코드 봇 + 일일 전략엔진)는 이미 돌아가고 있었습니다. 문제는 장중 6.5시간짜리 시장 하나뿐이라는 것. 해외·24시간 시장으로 넓히고 싶어서 이렇게 물었습니다.
“메타트레이더로 신호검색을 하여서 투자자동화를 이루고 싶은데 어떻게 구성하는게 좋을까?? 우선 메타트레이더는 설치가 되 어있고, 이제 AI 투자봇 하위에 정보수집부터 쫙 들어오게끔 하는 스킬을 구성해야할듯해”
여기서 첫 번째 반전이 나왔습니다. AI가 새로 방향을 고민하는 대신 기존에 쌓아둔 운영 스킬 문서를 먼저 읽었더니, “해외 확장은 MT5 경로로 간다”는 결정이 이미 3일 전에 내려져 기록돼 있었던 겁니다. 대화 시작 10초 만에 방향이 정해졌습니다 — 스킬 문서가 조직 기억 역할을 한 셈이죠. 남은 건 윈도PC(MT5 공식 파이썬 API)와 맥미니(현재 설치본) 중 어디서 먼저 붙일지였고, “맥미니 먼저, 윈도는 나중에”로 정리했습니다.
🛠️ 사용한 도구
Claude 기반 로컬 AI 에이전트 (터미널·파일 작업 가능)
MetaTrader 5 (맥 설치본)
MQL5 (MT5 자체 스크립트 언어, 데이터 수집용)
MetaQuotes 데모계좌 (모의, 잔고 100,000 USD)
🔧 작업 과정
1막 — 설치본을 열어보니 “윈도 프로그램”이었다
맥의 MetaTrader5는 실제로는 /Applications/MetaTrader 5.app 통째로 Wine(윈도 에뮬레이션) 래퍼였습니다. 즉 맥에서 돌고 있어도 내부는 여전히 윈도 프로그램이라, 공식 MetaTrader5 파이썬 패키지(윈도 전용)를 붙일 수 없었습니다.
우회 설계로 잡은 게 파일 브리지 패턴입니다. MT5 안에서 도는 EA(Expert Advisor, 자동 스크립트)가 시세·계좌 정보를 JSON 파일로 써두면, 맥 파이썬이 그 폴더를 직접 읽는 구조입니다. Wine 안의 폴더도 맥 입장에서는 그냥 평범한 폴더거든요. 작업 폴더도 데이터·EA·로그로 나눠 정리했습니다.
2막 — 데모계좌는 사람이, 배선은 AI가
MT5를 처음 실행하니 “계정 개설할 회사 선택” 화면까지는 AI가 확인했지만, Wine 환경 특성상 백그라운드 클릭이 그 이후로는 먹지 않았습니다. 마침 이 지점부터는 개인정보(계좌 개설) 입력 구간이라 자연스럽게 역할을 나눴습니다 — 자격증명이 걸리는 단계는 사람이 직접, 그 앞뒤 모든 배선은 AI가.
데모계좌(MetaQuotes-Demo, 잔고 100,000 USD, 모의) 개설이 끝나자 AI가 접속 정보를 권한 제한된 별도 파일로 격리 저장했습니다. 채팅이나 글에는 절대 노출하지 않는 원칙입니다.
3막 — 컴파일러가 조용히 죽었다 (막힘 1)
수집 EA를 MQL5로 작성했습니다. 60초마다 통화쌍 5개(EURUSD, GBPUSD, USDJPY, XAUUSD, S&P500 미니)의 1시간·일봉 320개씩과 계좌 스냅샷, 생존 신호(heartbeat)를 JSON으로 남기는 역할입니다.
코드를 짜는 것보다 돌리는 게 문제였습니다. MetaEditor(MT5의 코드 편집·컴파일 도구)를 커맨드라인으로 돌려 컴파일하려 했는데, 로그 한 줄 없이 조용히 죽어버렸습니다. 원인을 캐다가 발견한 게 “MT5 터미널 자체가 시작할 때 전체 재컴파일을 한다”는 동작 방식 — 터미널을 재시작시키는 것으로 우회해 컴파일 파일(.ex5) 생성을 확인했습니다.
4막 — 자동 로드가 안 먹혔다 (막힘 2)
컴파일은 됐는데 이번엔 EA가 차트에 자동으로 장착되지 않았습니다. 일반적으로 쓰는 시작설정 파일(ini)의 StartUp 섹션 방식이 통하지 않았던 겁니다. 로그를 뒤져 원인을 좁히니, MT5는 차트 프로파일 파일(chart01.chr, UTF-16 인코딩)에 저장된 <expert> 블록으로 EA 장착 여부를 관리하고 있었습니다. 이 파일을 직접 파싱해 블록을 주입하니, MT5를 켤 때마다 EA가 차트에 자동으로 붙기 시작했습니다.
부수적으로 MT5 로그 파일이 전부 UTF-16LE 인코딩이라 평소 쓰던 텍스트 도구로는 읽으면 깨졌습니다. 파이썬으로 디코딩해서 우회했습니다.
5막 — 신호엔진은 이식만, 라이브 스캔 성공
여기서부터가 이 글의 핵심입니다. 맥 쪽에 신호 스캔 스크립트를 새로 짜는 대신, 기존 국내주식 봇이 쓰던 지표 함수(RCI 4선 저점집결, RSI, MACD 골든크로스, EMA 정배열, 이격도)를 import 한 줄로 그대로 가져다 썼습니다. 새로 짠 지표 코드는 0줄입니다.
검증 장치도 하나 심었습니다. 데이터 파일이 15분 이상 갱신되지 않으면 “수집기가 멈춘 것 같다”는 경고를 띄우는 신선도 체크입니다. 수집기가 죽은 채로 낡은 데이터를 근거로 신호를 내는 사고를 설계 단계에서 막기 위해서입니다.
첫 라이브 스캔(데모) 결과는 이랬습니다.
🛰 MT5 신호검색 — ✅접속
계좌 [데모]@MetaQuotes-Demo | 잔고 100,000 USD | 포지션 0건
스캔 8건 → 매수신호 0건
EURUSD D1 RCI[-88.3, -48.9, -26.3, -3.5] RSI38.3 → -
USDJPY D1 RCI[95.0, 65.9, 68.0, 73.3] RSI71.3 → - (과열)
XAUUSD D1 RCI[13.3, -18.1, -39.5, -22.7] RSI41.3 → -매수 신호 0건. 이게 정직한 결과입니다. RCI 4선이 -80 부근에 동시에 모이는 조건 자체가 원래 드물고, 이날은 EURUSD 일봉이 -88까지 온 게 가장 근접한 수준이었습니다. “일단 신호를 만들어 보여주는” 게 아니라 “안 뜰 땐 안 뜬다”고 정직하게 말하는 파이프라인이 완성된 셈입니다.
✅ 결과 (After)
Before
After
시장 커버리지
국내주식만 (장중 6.5시간)
+FX·금·해외지수 (24시간, 데모)
신호 로직
국내용 HTS 조건검색 + 자체엔진
같은 로직이 MT5 데이터에도 그대로 작동
새로 짠 지표 코드
—
0줄 (기존 스킬 자산 재사용)
소요 시간
—
대화 시작~라이브 스캔까지 약 1시간
자동 주문 여부
—
없음 (v1은 수집·판정까지만)
💬 배운 팁
효과적이었던 것
스킬(절차 문서)을 조직 기억으로 쓰기. “해외는 MT5로 간다”는 3일 전 결정이 문서에 남아 있어서 매번 처음부터 논의할 필요가 없었습니다.
막힌 지점에서 메커니즘을 캐기. “컴파일이 안 됨”, “자동로드가 안 됨”에서 멈추지 않고 “왜 안 되는지”를 캐니 둘 다 우회로가 있었습니다(터미널 재컴파일, 프로파일 직접 주입).
검증 게이트를 처음부터 설계에 넣기. heartbeat 신선도 체크를 나중에 덧붙인 게 아니라 처음부터 넣어서, “죽은 수집기가 옛 데이터로 신호를 낸다”는 사고 유형 자체를 봉쇄했습니다.
하지 말아야 할 것
자격증명(계좌 로그인) 입력까지 AI가 자동으로 밀어붙이기 — 사람이 직접 하는 게 맞는 구간이 분명히 있습니다.
신호 0건을 “실패”로 착각하기 — 조건이 드문 게 정상이면, 0건이 오히려 신뢰할 수 있는 신호입니다.
검증 없이 바로 실계좌·자동주문으로 가기 — 이번 v1은 수집·판정까지만이고, 주문은 다음 단계에서 승인제로 넣을 계획입니다.
🌍 다른 업무에 적용한다면
다른 시장/거래소 확장: 이미 검증된 신호 로직이 있다면 “새로 짜기”보다 “기존 로직이 새 데이터 형식에도 먹히게 파이프만 새로 놓기”가 먼저입니다.
레거시/에뮬레이션 환경 자동화: 공식 API가 막혀 있어도 파일 시스템(로그, 설정 파일, 프로파일)을 직접 읽고 쓰는 우회로가 종종 있습니다.
수집기가 있는 모든 자동화: “값이 있다”와 “값이 최신이다”는 다릅니다. 신선도 체크는 수집형 파이프라인 어디에나 붙일 만합니 다.
🚀 앞으로의 계획 — 스킬 1개가 아니라 여러 개를 쪼개고 합칩니다
이번에 만든 MT5 신호검색 스킬은 RCI 저점집결·MACD 골든크로스·EMA 정배열을 한 번에 판정하는 통합형 스킬 1개입니다. 여기서 끝내지 않고, 앞으로는 이런 순서로 키울 계획입니다.
스킬을 여러 개로 늘린다 — 지금은 추세추종형 로직 하나뿐이라, 역추세·변동성 돌파처럼 성격이 다른 신호검색 스킬을 추가로 만듭니다.
각 스킬을 데이터로 검증한다 — “느낌상 잘 맞는다”가 아니라, 라이브 스캔 로그를 계속 쌓아 신호별 적중률·오탐률을 숫자로 잽니다. 오늘처럼 “신호 0건”도 정직한 측정값으로 기록합니다.
쪼개고 합쳐 완전성을 높인다 — 스킬이 여러 개 쌓이면 겹치는 로직을 분해하고, 서로 다른 관점(추세·역추세·변동성)을 하나의 “신호검색 우산 스킬”로 재합성합니다. 목표는 특정 장세에서만 맞는 스킬이 아니라, 어떤 시장 상황에서도 빈틈없이 커버하는 완전성입니다.
검증되지 않은 스킬은 자동주문에 연결하지 않습니다 — v1은 계속 수집·판정까지만이고, 주문은 승인제로 유지합니다.
기타 계획
신호가 실제로 발생했을 때만 알림을 주는 정기 스캔(cron) 등록
기존 디스코드 투자봇에 MT5 조회 명령 추가
윈도PC 경로(MT5 공식 파이썬 API 네이티브)는 주문 자동화 단계에서 합류
실계좌 전환은 데모 성과가 충분히 검증된 이후, 자격증명 격리 원칙은 그대로 유지