분류
플랫폼
난이도
초급
사용 상황
MT5 운용EA 평가

매직 넘버

Expert Advisor가 보내는 모든 주문에 찍는 정수. 이것으로 자기 포지션을 알아보고 계좌의 나머지는 건드리지 않는다.

다른 표현: EA 매직, 주문 매직 넘버, MAGIC

업데이트일 · 검토일

쉽게 말하면

모든 거래에 붙는 이름표다. 터미널은 누가 포지션을 열었는지 신경 쓰지 않으므로, 각 EA가 티켓에 자기 번호를 적고 그 번호가 붙은 티켓만 건드린다.

왜 중요한가

MetaTrader는 한 계좌의 모든 EA에게 모든 포지션을 똑같이 보여준다. 표식이 없으면 EA는 자기 거래를 당신의 것이나 다른 EA의 것과 구분할 수 없다 — 그리고 엉뚱한 포지션을 관리하는 EA는 오류 메시지를 띄우는 버그가 아니라 돈이 드는 버그다.

  • 한 계좌에서 여러 EA를 돌리는 일을 애초에 가능하게 만드는 것이 바로 이것이다.
  • 수동 거래를 보호한다. 그것들은 매직 0을 달고 있고, 제대로 작성된 EA는 절대 건드리지 않는다.
  • 나중에 거래 내역을 전략별로 나누는 방법이기도 하다 — 표식은 딜 히스토리까지 남는다.

MetaTrader 5에서

MT5에서의 위치

  • 차트 → EA 속성(F7) → 입력값 — EA 자신의 MagicNumber 입력
  • 전략 테스터 → 입력값 — 테스트할 때도 같은 입력
  • MQL5 코드: 보낼 때 MqlTradeRequest.magic, 되읽을 때 POSITION_MAGIC / ORDER_MAGIC / DEAL_MAGIC

EA가 사용하는 방식

  • 시작할 때 한 번 설정한다 — CTrade::SetExpertMagicNumber(MagicNumber) — 그 뒤로 EA가 보내는 모든 주문이 표식을 단다.
  • 매 회차마다 걸러낸다. 포지션 루프는 무언가를 수정하거나 추적하거나 청산하기 전에, POSITION_MAGIC이 자기 것이 아닌 티켓을 건너뛴다.
  • 히스토리도 같은 방식으로 걸러서, EA별 통계가 그 EA의 딜만으로 계산되게 한다.
  • mt5depot 빌더가 만든 모든 EA에는 전략에서 파생된 값을 가진 MagicNumber 입력이 들어 있어, 서로 다른 두 생성 EA가 처음부터 충돌하지 않는다.

일반적인 설정

설정 일반적인 값 비고
수동 거래 0 터미널의 기본값. EA는 매직 0을 절대 관리해서는 안 된다.
EA 하나, 종목 하나 고유한 정수 아무거나 기억하기 좋은 값이면 무엇이든 된다 — 20260807, 1001.
같은 EA를 여러 종목에 차트마다 하나씩 그러지 않으면 EURUSD 인스턴스가 GBPUSD 인스턴스의 포지션을 청산한다.
여러 전략을 돌리는 포트폴리오 EA 레그마다 하나씩 각 레그가 독립적으로 추적되고 청산되려면 자기 표식이 필요하다.

자주 생기는 운용 문제

  • 두 인스턴스를 같은 매직으로 둔 경우: 서로 상대의 포지션을 자기 것으로 보고 엉뚱한 시점에 청산한다.
  • 포지션이 열려 있는 상태에서 매직을 바꾸면 그것들이 고아가 된다 — EA는 몇 분 전 자기가 연 거래를 더 이상 알아보지 못하고, 무엇도 자동으로 청산하지 않는다.
  • 매직을 0으로 두면 EA가 당신의 수동 거래를 관리하게 된다.
  • 터미널 재시작 뒤 설정해 둔 값 대신 기본값으로 EA를 다시 붙이면 같은 고아 상태가 조용히 생긴다.

관련 MT5 함수

CTrade::SetExpertMagicNumber()
이 인스턴스의 이후 모든 주문이 달 표식을 설정한다.
PositionGetInteger(POSITION_MAGIC)
열린 포지션에서 표식을 읽는다.
OrderGetInteger(ORDER_MAGIC)
대기 주문에서 읽는다.
HistoryDealGetInteger(ticket, DEAL_MAGIC)
청산된 딜에서 읽으며, 히스토리를 EA별로 나누는 방법이 이것이다.

예시

한 계좌에 EA 셋. 각자 자기 번호를 찍으므로, 셋 모두 여섯 포지션을 다 보면서도 각 포지션 루프는 자기 행만 건드린다.

한 터미널, 한 계좌, 세 주인 — 그들을 가르는 것은 표식뿐이다.
EURUSD 추세 EA
20260101
USDJPY 평균회귀 EA
20260102
당신의 수동 거래
0
이 표식을 주장하는 EA가 없으므로 자동으로 청산될 일이 없다.

계산 if (PositionGetInteger(POSITION_MAGIC) != MagicNumber) continue;

결과 각 EA는 자기가 연 포지션만 관리한다

설명용 수치이며 등록된 EA의 실제 기록이 아닙니다.

사용하는 법

매직 넘버는 전략 설정이 아니라 계좌 구성으로 다뤄라. EA를 실계좌에 올리기 전에 적어 두고, 포지션이 열려 있는 동안에는 절대 바꾸지 마라.

  • EA 제품이 아니라 실행 중인 인스턴스마다 값을 할당하라 — 같은 EA를 두 차트에 올리면 값이 둘 필요하다.
  • 목록을 유지하라. 인스턴스가 네다섯 개만 돌아가도, 적어 두지 않은 표식은 중복된 표식과 구분되지 않는다.
  • 아직 열린 포지션이 붙어 있는 표식은 절대 재사용하지 마라. 이미 제거한 EA의 것이라도 마찬가지다.
  • 터미널을 재설치하거나 프로필을 복원할 때마다 확인하라. 기본값이 돌아오는 곳이 거기다.

값 자체는 MetaTrader에 아무 의미가 없다 — 어떤 정수든 된다. 중요한 것은 그 계좌에서 돌아가는 것들 사이에서 고유하다는 점뿐이다.

흔한 오해

매직 넘버가 체결에 영향을 준다고 생각하기

주문이 어떻게 체결되는지는 전혀 바뀌지 않는다. 이것은 메타데이터다. 브로커는 이에 따라 행동하지 않으며 가격, 스프레드, 슬리피지에 영향이 없다.

여러 차트의 한 EA에 매직 넘버 하나만 쓰기

중요한 정체성은 제품이 아니라 실행 중인 인스턴스다. 두 차트가 표식을 공유한다는 것은 두 인스턴스가 하나의 포지션 풀을 관리한다는 뜻이다.

말썽부리는 EA를 '초기화'하려고 바꾸기

열려 있는 포지션은 옛 표식을 그대로 갖는다. 입력을 바꾸면 그것들을 버리는 셈이다. EA는 그것들을 알아보지 못하게 되고, 수동 청산이나 스탑아웃 전까지 열린 채로 남는다.

매직 넘버가 계좌 명세를 나눠 준다고 가정하기

터미널의 거래 탭에는 표시되지 않는다. EA별로 결과를 나누려면 히스토리에서 DEAL_MAGIC을 읽어야 하며, 그것은 리포팅 도구가 하는 일이지 기본 명세가 주는 것이 아니다.

자세히

표식이 함께 사주지 않는 것, 이 진열대에서 세어 본 결과

여기 공개된 14개 EA 기준
MagicNumber 입력이 있는 상품10
설치 중에 그 값을 바꿔야 하는 상품0
그 종목을 다른 무엇도 거래하지 않는 곳에서 돌리라고 요구하는 상품8
그중 MagicNumber 입력을 그래도 가진 상품6
둘 이상의 상품이 요구하는 종목15개 중 7개
한 계좌를 함께 쓸 수 없는 EA 조합91개 중 15개

셋째 줄과 넷째 줄을 함께 읽어라. 주문에 표식을 다는 것이 한 가지 일이라면, 새 신호를 허용할지 판단하는 것은 다른 일이며, 미결제 포지션을 하나로 제한하는 EA는 먼저 세어야 한다. PositionsTotal()과 종목 확인으로 세면 남의 포지션이 합계에 들어오고, POSITION_MAGIC으로 먼저 거르면 들어오지 않는다. 여기 여섯 상품은 그 입력을 갖고도 경고문을 함께 싣는데, 그것이 그들의 포지션 계산이 둘 중 어느 쪽인지를 알려 준다.

그러니 조합 문제는 종목 문제이고, 사기 전에 답할 수 있다. USD/JPY는 네 상품이 동시에 요구한다 — Iridescence, Kestrel Hover, Lanternfish, Tessera — 그러므로 그중 어떤 둘도 함께 두지 못한다. 이제 EUR/GBP에는 Ballast와 Thunderhead 둘이 올라 있다. 아무와도 겹치지 않는 것은 Orrery, Peregrine, Zerqon뿐이다. 둘이 겹치는 곳에서는 계좌를 나누는 것이 표식이 못 하는 일을 해준다. 그러면 각 EA는 자기 거래만 들어 있는 풀을 세게 된다. 우리 방법론은 공개된 모든 실행을 종목 단위로 기록하는데, 이는 같은 구분을 측정 쪽에서 본 것이다.

자주 묻는 질문

매직 넘버는 무엇으로 정해야 하나요?
그 계좌에서 아직 쓰이지 않은 정수라면 무엇이든 되고, 0만은 피하십시오 — 그 값은 수동 거래의 몫입니다. 20260807 같은 날짜형 값은 여러 인스턴스가 돌아갈 때 추적하기 쉽습니다.
두 EA가 같은 매직 넘버를 써도 되나요?
기술적으로는 가능하지만, 원인을 찾기 어려운 손실의 흔한 이유입니다. 각 인스턴스가 상대의 포지션을 자기 것으로 취급해 엉뚱한 시점에 청산하거나 추적할 수 있습니다. 실행 중인 인스턴스마다 고유한 값을 주십시오.
전략 테스터에서도 매직 넘버가 중요한가요?
EA 하나만 테스트할 때는 아닙니다. 테스트 계좌에서는 다른 것이 거래하지 않기 때문입니다. 같은 실계좌나 데모 계좌에서 EA가 둘 이상 돌아가는 순간부터 중요해집니다.