Trading Window and Spread Guard
- 유틸리티
- 버전: 1.1
- 활성화: 5
Trading Window and Spread Guard는 사용자 자신의 EA(Expert Advisor)에 언제 신규 거래를 열지 말아야 하는지 알려 주는 MetaTrader 5용 유틸리티입니다. 정지 시간대(요일과 시간. 예: 매일의 롤오버, 유동성이 얇은 심야, 브로커의 스프레드가 넓어지는 시간대)를 최대 5개, 그리고 스프레드 상한을 설정합니다. 시간대가 활성화된 동안 또는 종목의 스프레드가 상한을 넘는 동안, EA가 읽을 수 있는 플래그를 세웁니다. 선택 사항으로, 신규 거래가 막혀 있는 동안 열린 포지션을 청산할 수도 있습니다.
거래를 멈추기 위한 도구이며 매매 전략이 아닙니다. 거래하기 좋은 시간을 찾지 않고, 매수·매도 신호를 내지 않으며, 실계좌나 데모 계좌에서 포지션을 열거나 주문을 내는 일이 없습니다. 손실을 막아 주지 않습니다. 할 수 있는 것은 EA가 신규 진입을 건너뛰게 하거나, 열린 뒤의 신규 포지션을 청산하는 것뿐입니다. 어느 시간대를 피할지, 거래할지 여부와 방법은 사용자가 판단합니다.
기본 설정에서는 아무것도 동작하지 않습니다(시간대 없음, 스프레드 상한 꺼짐, 청산 꺼짐). 입력값을 설정하기 전까지는 패널만 표시합니다.
중요: EA 쪽에서 플래그를 읽어야 합니다. 플래그를 확인하지 않는 EA는 이전처럼 거래를 계속합니다. 확인 코드는 몇 줄입니다(아래 참조). 수정할 수 없는 EA에는 "정지 중에 열린 포지션 청산" 옵션만 쓸 수 있으며, 이는 포지션이 열린 뒤에 청산하므로 스프레드와 수수료가 듭니다.
기능
- 정지 시간대 최대 5개. 형식: 12:00-12:30(매일), Mon-Fri 23:50-01:15(나열한 요일마다 시작하며 자정을 넘길 수 있음), Mon,Wed,Fri 08:00-08:30, Fri 21:00-Mon 01:00(여러 날에 걸친 하나의 구간). 요일은 영어(Mon 또는 Monday, 대소문자 무관) 또는 일본어, All = 매일. 끝 시각은 24:00도 가능. 맞닿거나 겹치는 시간대는 하나로 합칩니다.
- 시간대의 시각은 서버 시간(기본) 또는 이 컴퓨터의 시간.
- 스프레드 상한(포인트): 모든 종목에 공통인 값과, 종목별 값(예: GOLD=50,US30=300).
- 종목: 차트 종목(기본), 목록, 또는 * = 시장 감시의 모든 종목(최대 100개).
- 터미널 전역 변수 형태의 EA용 플래그와, 바로 쓸 수 있는 읽기 함수(TWG_Reader.mqh).
- 선택 사항: 정지 중에 열린 포지션 청산. 선택한 종목과 매직 넘버만 대상. 가드가 시작되기 전부터 있던 포지션에는 절대 손대지 않습니다.
- 패널: 상태(OK 또는 BLOCKED와 그 이유), 다음 시간대와 카운트다운, 설정한 시간대, 스프레드와 상한, 청산 설정, 플래그 이름, 마지막 메시지. 영어 또는 일본어(터미널 언어에 따라 자동). 접기 버튼.
- 정지 시작·종료, 스프레드 확대, 포지션 청산 시 팝업 알림과 푸시 알림(선택).
주요 설정
- Stop windows: 시간대 시각의 기준(서버 시간 / 컴퓨터 시간), Window 1 ~ Window 5(빈칸 = 꺼짐).
- Spread limit: 켜기/끄기(기본 꺼짐), 최대 스프레드(포인트, 기본 30), 종목별 상한.
- Symbols and positions: 종목(빈칸 = 이 차트, * = 시장 감시의 모든 종목, 또는 목록), 정지 중에 열린 포지션 청산(기본 꺼짐), 청산할 매직 넘버(빈칸 = 모두, 0 = 수동 거래).
- Flags: 전역 변수 이름의 접두어(기본 "TWG").
- Alerts(팝업, 푸시), Panel(표시, 언어, 모서리, 오프셋, 글꼴 크기), 청산 시 최대 슬리피지, 전략 테스터 데모.
- 7개 그룹, 23개 입력.
작동 방식
- 가드는 250ms마다 확인하고 약 1초마다 플래그를 기록하므로, EA는 약 1~2초 뒤에 변화를 봅니다.
- 플래그(터미널 전역 변수. 값은 UTC 시각(초). "TWG"는 기본 접두어):
- TWG.TIME: 현재 정지 시간대의 끝 시각, 시간대 밖에서는 0.
- TWG.SPR.<종목>(예: TWG.SPR.EURUSD): 해당 종목의 스프레드가 상한을 넘는 동안 현재 시각보다 큰 값. 감시하는 종목마다 하나.
- TWG.NEXT: 다음 정지 시간대의 시작. TWG.HB: 마지막 갱신 시각(가드가 동작 중이라는 표시).
- 값이 TimeGMT()보다 큰 동안 플래그는 켜져 있습니다.
- EA에 넣는 기본 확인(기본 접두어에서 TWG_Reader.mqh와 같은 논리):
bool GuardBlocks(const string sym)
{
if(MQLInfoInteger(MQL_TESTER)) return false;
double now = (double)TimeGMT();
if(GlobalVariableGet("TWG.HB") < now - 30) return false; // guard not running
return GlobalVariableGet("TWG.TIME") > now || GlobalVariableGet("TWG.SPR." + sym) > now;
}
신규 진입 전마다: if(GuardBlocks(_Symbol)) return;
- TWG_Reader.mqh에는 TWG_IsBlocked, TWG_TimeBlocked, TWG_SpreadBlocked, TWG_SecondsLeft, TWG_GuardRunning이 들어 있습니다. 마켓 다운로드에는 EA 본체만 포함되므로, 이 파일의 전문은 이 상품의 댓글란에 올려 두었습니다. 전략 테스터에서는 이 함수들이 항상 "막지 않음"으로 답하므로 백테스트 결과는 바뀌지 않습니다.
- 요일은 시간대가 시작되는 날입니다. "Mon-Fri 23:50-01:15"는 월요일 23:50 … 금요일 23:50에 시작해 다음 날 01:15에 끝나는 5개의 시간대가 됩니다. 월요일 00:00~01:15는 일요일에 시작하는 부분이므로 포함되지 않습니다. 주말과 월요일 아침도 막으려면 Fri 21:00-Mon 01:15 같은 두 번째 시간대를 추가하세요. (Fri 21:00-Mon 01:00이면 월요일 01:00~01:15는 열려 있습니다.)
- "정지 중에 열림"이란 포지션을 연 시각이 정지 시간대 안이거나, 그 시점에 종목의 스프레드가 상한을 넘었다는 뜻입니다(열린 지 10분 이내의 포지션에 대해 판정).
- 새 체결이 터미널에 나타나는 즉시 청산을 보냅니다.
- 같은 접두어로 여러 차트에서 실행할 수 있습니다(예: 종목별 감시). 이때 플래그는 가장 긴 값을 유지합니다. EA 그룹마다 규칙을 다르게 하려면 접두어를 바꾸세요.
참고 및 한계
- 보증이 아닙니다. 가드 자체가 주문을 막지는 않습니다. 플래그를 확인하는 EA만 신규 진입을 건너뜁니다.
- 마지막 가드를 제거하면 정지가 해제됩니다. 제거하거나 그 차트를 닫으면 즉시 플래그를 내립니다. 터미널이 예기치 않게 멈추면 읽기 함수는 30초 후 가드가 멈춘 것으로 판단하며, 기본값에서는 그때 거래를 허용합니다. 가드가 동작하지 않을 때도 EA를 기다리게 하려면 TWG_IsBlocked(_Symbol, "TWG", true)(blockIfGuardStopped = true)를 호출하세요.
- 플래그는 약 1~2초 늦습니다. 시간대나 스프레드 급등의 첫 1초에 보낸 주문은 통과될 수 있습니다. 확인 간격보다 짧은 스프레드 급등은 놓칠 수 있습니다.
- 대기 주문은 삭제하거나 변경하지 않습니다. 정지 중에 체결된 대기 주문은 새 포지션이 되며, 청산 옵션이 켜져 있고 대상 범위일 때만 청산됩니다.
- 네팅 계좌에서는 예전에 연 포지션에 추가된 수량은 새 포지션이 아니므로 청산되지 않습니다.
- 매직 넘버 필터가 비어 있으면, 청산 옵션은 대상 범위에서 직접 수동으로 연 거래도 청산합니다(매직 0 = 수동 거래). 청산할 때마다 스프레드와 수수료가 들며 손실로 끝날 수도 있습니다. 가드는 다른 EA가 주문을 보내는 것을 막을 수 없습니다. 정지 중에 계속 거래를 여는 EA가 있으면 그때마다 청산합니다.
- 스프레드 플래그는 감시하는 종목에만 생깁니다. EA가 다른 종목도 거래한다면 목록에 추가하거나 *를 사용하세요.
- 시간대의 시각은 선택한 시계를 따릅니다. 서버 시간은 브로커의 서머타임에 따라 움직이고, 컴퓨터 시간은 이 PC를 따릅니다.
- 터미널 전역 변수는 터미널마다 따로입니다. 가드는 EA와 같은 MetaTrader 5 터미널에서 실행하세요.
- MetaTrader 5가 실행 중이고 연결되어 있는 동안에만 동작합니다. 청산에는 알고리즘 트레이딩이 켜져 있고(툴바 버튼) EA 설정에서도 허용되어 있어야 합니다.
- 전략 테스터: 플래그는 메모리에만 저장됩니다. 입력 "Tester only: demo window and small demo positions"가 켜져 있으면(기본), 가드는 작은 데모 포지션(최소 로트, 매직 73190)을 엽니다. 시간대 전에 하나(가드가 청산하지 않음), 시간대 안에 하나(가드가 즉시 청산)이며, 데모 포지션은 몇 분 뒤 정리합니다. 시간대를 설정하지 않았으면 데모용 시간대(30분 또는 봉 2개, 하루 최대 1회)를 사용합니다. 테스터 보고서는 이 데모만 보여 주며 매매 성적이 아니고, 작은 손실로 나올 수 있습니다. 입금액이 매우 적으면(예: 10 USD) 데모 거래가 없을 수 있습니다. 데모는 실계좌나 데모 계좌에서는 절대 실행되지 않습니다.
호환성 및 지원
- MetaTrader 5 전용(헤지 계좌와 네팅 계좌). MetaTrader 4 버전은 별도로 판매합니다. 하나의 차트에 붙이고, 필요할 때만 차트를 늘리세요.
- DLL, 인터넷, 외부 서버를 사용하지 않습니다.
- 모든 설정은 먼저 데모 계좌에서 시험해 보세요.
- 지원은 MQL5 메시지로, 3영업일 이내에 답변합니다: 설치, 설정, 버그 신고, 읽기 함수의 호출 방법. 어떤 시간대나 스프레드를 피해야 하는지에 대한 조언, 시장 전망, 매매 판단, 고객님 EA의 수정은 해 드릴 수 없습니다.
- 거래 결과에 대해 어떠한 약속이나 암시도 하지 않습니다.
