BreakEvenTrailingMarket
- 유틸리티
- 버전: 1.0
BreakEven Trailing은 이미 보유 중인 포지션의 손절(스톱로스)을 관리하는 MetaTrader 5용 유틸리티입니다. 손절을 본전 가격으로 옮기고 가격을 따라 이동시키므로, 차트를 계속 지켜보지 않아도 평가이익을 지킬 수 있습니다.
이 EA는 신규 진입을 하지 않으며 시장가로 청산하지도 않습니다. 기존 포지션의 손절만 변경합니다. 청산은 EA가 설정한 손절에 가격이 도달했을 때 이루어집니다.
주요 기능
- 포지션의 평가이익이 지정한 pips에 도달하면 손절을 진입 가격 또는 진입 가격에서 지정한 만큼 이익 방향으로 이동한 위치로 옮깁니다.
- 평가이익이 지정한 pips에 도달하면 현재 가격에서 일정 거리를 유지하며 손절을 따라 이동시킵니다.
- 본전 이동과 트레일링은 각각 켜고 끌 수 있으며 함께 사용할 수도 있습니다.
- 매수(BUY)와 매도(SELL) 포지션 모두 지원합니다.
- 기존 손절을 더 불리한 위치로 되돌리지 않습니다. 손절은 이익을 더 많이 지키는 방향으로만 이동합니다.
- 손절을 변경할 때 기존 이익실현(테이크프로핏)은 그대로 유지합니다.
- 현재 설정, 계좌 방식, 작동 상태를 차트에 표시합니다.
관리 대상 포지션
EA가 부착된 차트의 심볼에 있는 모든 포지션을 관리합니다.
- 매직 넘버는 확인하지 않습니다. 수동으로 진입한 포지션, 다른 EA가 만든 포지션, 카피 트레이딩으로 생긴 포지션 모두 관리 대상입니다.
- 다른 심볼의 포지션은 변경하지 않습니다.
- 미체결 대기 주문은 변경하지 않습니다.
- 변경하는 것은 손절뿐입니다. 수량, 이익실현, 매매 방향은 그대로 유지됩니다.
매직 넘버로 걸러내지 않기 때문에, 같은 심볼의 손절을 변경하는 프로그램을 동시에 두 개 실행하지 마십시오. 서로 덮어쓰게 됩니다. 심볼당 하나의 차트에만 부착하십시오.
헤징 계좌와 네팅 계좌
헤징 계좌에서는 각 포지션을 티켓 단위로 개별 관리합니다. 같은 심볼의 두 포지션은 각각 진입 가격이 다르므로 서로 다른 본전 위치를 가질 수 있습니다.
네팅 계좌에서는 플랫폼이 심볼당 하나의 합산 포지션만 유지합니다. 여러 체결이 평균 진입 가격을 가진 하나의 포지션으로 합쳐지며, 이 평균 가격이 본전의 기준이 됩니다. 네팅 계좌에서는 체결별로 각각 다른 본전 위치를 설정할 수 없고, 새로운 체결이 발생하면 포지션 전체의 평균 진입 가격이 바뀝니다. EA는 매 틱마다 현재 합산 포지션을 다시 읽으므로 항상 최신 평균 가격을 기준으로 동작합니다.
인식된 계좌 방식은 차트 패널에 Hedging 또는 Netting으로 표시됩니다.
손절 선택 방식
본전 이동과 트레일링을 모두 켜면 두 조건이 동시에 충족될 수 있습니다. 이때 EA는 변경 요청을 두 번 보내지 않습니다. 매 틱마다 다음 순서로 처리합니다.
1. 본전 후보 계산: 진입 가격에 이익 방향의 오프셋을 더하거나 뺀 가격.
2. 트레일링 후보 계산: 현재 가격에서 트레일링 거리만큼 떨어진 가격.
3. 각 후보를 심볼의 호가 단위(틱 사이즈)로 반올림합니다. 반올림 방향은 항상 요청한 거리보다 현재 가격에 더 가까워지지 않는 쪽입니다.
4. 각 후보를 심볼의 stops level과 freeze level에 대해 개별적으로 검증합니다.
5. 유효한 후보를 비교하여 이익을 더 많이 지키는 쪽만 한 번 전송합니다. 매수는 더 높은 손절, 매도는 더 낮은 손절입니다.
한쪽 후보가 브로커 제한으로 설정할 수 없더라도 다른 쪽이 유효하면 그것을 사용합니다. 변경을 성사시키기 위해 후보를 더 불리한 가격으로 바꾸는 일은 없습니다.
브로커 제한
많은 브로커는 현재 가격에 너무 가까운 손절을 허용하지 않으며, 일부 브로커는 가격이 프리즈 구간에 있는 동안 포지션 변경을 차단합니다. EA는 요청을 보내기 전에 stops level과 freeze level을 확인하고, 전송 후에는 거래 서버의 반환 코드도 확인합니다.
손절을 설정할 수 없을 때 EA는 대기하고 다음 틱에서 다시 판단합니다. 손절을 더 불리한 위치로 옮기지 않으며 기능을 끄지도 않습니다. 이유는 차트 패널에 표시되므로, EA가 시장 조건을 기다리는 중인지 서버가 요청을 거부한 것인지 구분할 수 있습니다.
일부 브로커는 stops level을 0으로 보고하면서도 서버 측에서 동적 제한을 적용합니다. 이 경우 최종 판정은 거래 서버의 반환 코드로 이루어지며, EA가 이를 패널과 로그에 표시합니다.
입력 파라미터
본전 이동
- Enable break-even (기본값 true): 본전 이동 기능을 켜거나 끕니다.
- Profit to trigger break-even, in pips (기본값 10.0): 손절을 옮기기 전에 필요한 평가이익.
- Offset beyond open price, in pips (기본값 0.0): 진입 가격에서 이익 방향으로 띄우는 거리. 스프레드, 수수료, 스왑을 감안할 때 사용합니다.
트레일링 스톱
- Enable trailing stop (기본값 true): 트레일링 기능을 켜거나 끕니다.
- Profit to start trailing, in pips (기본값 15.0): 트레일링을 시작하기 위해 필요한 평가이익.
- Distance from price to stop, in pips (기본값 10.0): 트레일링 중 현재 가격과 손절 사이에 유지하는 거리.
차트 패널
- Show settings and status on chart (기본값 true)
- Panel font size (기본값 12): 8에서 24 사이로 제한됩니다.
값은 EA 시작 시 검증됩니다. 동작할 수 없는 값이면 EA가 이를 알리고 시작하지 않습니다. 허용되지만 일반적이지 않은 조합이면 EA가 시작되면서 로그에 경고를 남깁니다. 경고는 두 가지입니다. 오프셋이 본전 트리거보다 큰 경우(가격이 더 진행되어야 손절을 설정할 수 있음)와, 트레일링 시작값이 트레일링 거리보다 작은 경우(첫 트레일링 손절이 진입 가격보다 불리해질 수 있음)입니다.
차트 패널
패널에는 버전, 심볼, 계좌 방식, 두 기능의 상태와 설정값, 관리 중인 매수·매도 포지션 수, 현재 틱에서 변경한 건수, 현재 상태가 표시됩니다.
상태 표시
- ACTIVE: 포지션을 감시 중입니다.
- WAITING: NO POSITION: 현재 심볼에 포지션이 없습니다.
- WAITING: NO QUOTE: 유효한 매수/매도 호가를 아직 받지 못했습니다.
- WAITING: STOP LEVEL: 후보 손절이 브로커가 허용하는 거리보다 가격에 가깝습니다.
- BLOCKED: FREEZE LEVEL: 가격이 브로커가 변경을 허용하지 않는 구간에 있습니다.
- WAITING: MARKET CLOSED, WAITING: PRICE OFF, WAITING: PRICE CHANGED, WAITING: TOO MANY REQUESTS: 일시적인 시장 또는 서버 상태입니다.
- ALL FUNCTIONS OFF: 두 기능이 모두 꺼져 있습니다.
- AUTO TRADING OFF, EA TRADING DISABLED, ACCOUNT TRADE DISABLED, EXPERT TRADE DISABLED, SERVER AUTO TRADING OFF, DISCONNECTED: 터미널, 이 EA, 이 계좌에서 거래가 허용되지 않았거나 터미널이 연결되어 있지 않습니다.
- ERROR: INVALID STOPS, ERROR: TRADE DISABLED, ERROR: SYMBOL SETTINGS, ERROR: MODIFY FAILED: 요청이 거부되었습니다. 반환 코드가 로그에 기록됩니다.
같은 티켓에서 같은 오류가 반복될 경우, 로그는 최초 발생 시, 반환 코드가 바뀔 때, 그 이후에는 1분에 한 번만 기록되어 가독성을 유지합니다. 오류에서 복구되면 복구 기록을 남깁니다.
pip 정의와 지원 심볼
모든 거리는 point가 아니라 pips 단위로 지정합니다.
- 소수점 3자리 또는 5자리 심볼: 1 pip은 10 point입니다.
- 소수점 2자리 또는 4자리 심볼: 1 pip은 1 point입니다.
이는 표준적인 외환 호가 방식을 따른 정의입니다. 금속, 지수, 암호화폐는 브로커마다 pip 정의가 일치하지 않으므로 1.00 버전의 지원 범위에 포함되지 않습니다. 이러한 심볼에서도 계산 자체는 동작하지만 1 pip의 의미가 예상과 다를 수 있으므로, 사용 전에 데모 계좌에서 실제 거리를 확인하십시오.
이 EA에서 말하는 "본전"의 의미
이 EA의 본전은 플랫폼이 기록한 포지션의 진입 가격입니다. 수수료, 스왑, 슬리피지, 청산 시점의 매수·매도 호가 차이는 포함되지 않습니다. 따라서 진입 가격에 정확히 청산되더라도 손익이 정확히 0이 된다고 보장할 수 없습니다.
자신의 거래 비용까지 지키고 싶다면, 진입 가격에서의 오프셋을 해당 계좌의 비용에 맞는 값으로 설정하십시오.
사용 방법
1. 관리할 심볼의 차트에 EA를 부착합니다. 시간대는 자유입니다. EA는 매 틱마다 동작하며 시간대에 의존하지 않습니다.
2. 터미널에서 알고리즘 트레이딩을 활성화합니다.
3. 매매 스타일과 해당 심볼의 일반적인 변동 폭에 맞추어 트리거와 거리를 pips로 설정합니다.
4. 포지션 보유 중에는 ACTIVE, 포지션이 없을 때는 WAITING: NO POSITION이 표시되는지 확인합니다.
5. 심볼당 하나의 차트만 사용합니다. 같은 심볼에 중복 부착하지 마십시오.
EA는 차트에 계속 두어도 됩니다. 해당 심볼에 포지션이 없는 동안에는 아무 동작도 하지 않습니다.
요구 사항
- MetaTrader 5. 터미널 빌드 5836에서 확인했습니다.
- 터미널과 EA 양쪽에서 알고리즘 트레이딩이 활성화되어 있어야 합니다.
- 보유 포지션의 손절 변경이 허용된 계좌여야 합니다.
- DLL, WebRequest, 외부 파일, 인터넷 연결을 사용하지 않습니다.
테스트
1.00 버전은 실제 브로커의 데모 계좌에서 테스트했습니다.
- 계산 테스트: 자동 검사 46건 통과. 매수와 매도, 본전 이동, 트레일링, 두 기능 동시 사용, 트리거 직전 틱과 정확한 트리거 도달, 한쪽 후보의 stops level 위반과 양쪽 모두 위반, 기존 손절 보호, 손절과 이익실현에 대한 freeze level, 소수점 2·3·4·5자리 심볼, 호가 단위로의 올바른 방향 반올림을 포함합니다.
- 거래 API 통합 테스트(헤징 계좌): 매수와 매도의 본전 이동이 반환 코드 10009(요청 완료)로 실행되었고, 기존 이익실현이 유지되었으며, 실패한 요청은 없었습니다. 약 360,000틱을 처리했습니다.
자주 묻는 질문
EA가 진입이나 청산을 하나요?
아닙니다. 이미 존재하는 포지션의 손절만 변경합니다. 청산은 가격이 그 손절에 도달했을 때 브로커 측에서 이루어집니다.
다른 EA나 시그널의 거래에도 사용할 수 있나요?
가능합니다. 매직 넘버를 확인하지 않으므로 해당 심볼의 모든 포지션이 관리 대상입니다. 같은 이유로, 동일 심볼의 손절을 변경하는 다른 프로그램과 함께 사용하지 마십시오.
터미널을 닫으면 어떻게 되나요?
터미널이 닫혀 있는 동안 EA는 동작하지 않습니다. 이미 설정된 손절은 서버 측 주문이므로 서버에 남아 계속 유효합니다.
트레일링 없이 본전 이동만 사용할 수 있나요?
가능합니다. 기능마다 개별 스위치가 있습니다. 둘 다 끄면 EA는 대기 상태가 되며 ALL FUNCTIONS OFF를 표시합니다.
이익 조건을 충족했는데 손절이 움직이지 않습니다.
가장 흔한 원인은 브로커 제한입니다. 패널을 확인하십시오. WAITING: STOP LEVEL은 요청한 손절이 브로커가 허용하는 거리보다 가격에 가깝다는 뜻이며, EA는 더 불리한 손절을 설정하는 대신 유효한 거리가 될 때까지 기다립니다.
네팅 계좌에서도 동작하나요?
동작합니다. 네팅 계좌에서는 심볼당 하나의 합산 포지션이 있으며, 그 평균 진입 가격이 본전 기준이 됩니다.
버전
1.00 - 최초 릴리스.
