Seconds Tick and Range Charts MT5
- 유틸리티
-
Quoc Dat Quach
Software engineer with 8 years in fintech and mobile, writing MQL4/MQL5 since 2017. I build Expert Advisors, indicators, trade and risk-management panels and utilities for MT4/MT5, and I trade forex and gold on MT5 myself. - 버전: 1.0
- 활성화: 10
MetaTrader 5용 초 단위 바(1~30초), 틱 바, 레인지 바입니다. 브로커의 실제 틱 기록으로 사용자 지정 심볼을 만들고 매 틱마다 업데이트합니다. 차트에서는 어떤 지표, 템플릿, EA든 실행할 수 있습니다. 차트의 도우미가 모든 바의 실제 시간을 보여 줍니다. 이 EA는 차트에서 절대 거래하지 않습니다.
기능
EA를 브로커 심볼의 차트에 붙이면 EA는 다음을 수행합니다:
- 원본 심볼의 사양을 가진 사용자 지정 심볼(예: EURUSD_S5)을 만듭니다
- 브로커의 실제 틱으로 그 기록을 나누어 구축하며, 기본값은 최근 3일입니다(테스트에서 BTCUSDm 3일분, 376,095틱에 2.0초 소요)
- 사용자 지정 차트를 열고, 템플릿을 지정했다면 그 템플릿을 적용합니다
- 원본 심볼의 새 틱이 도착할 때마다 사용자 지정 차트에 추가합니다
- 새 바를 초당 몇 번씩 터미널에서 다시 읽습니다(MetaTrader 5 빌드 6230에서 측정: 터미널이 실시간 틱으로 만든 바는 어떤 차트나 프로그램도 읽지 않으면 사라질 수 있으며, 정기적으로 읽으면 이를 막을 수 있습니다)
- 60초마다 바를 브로커의 틱 기록과 대조하고, 사용자 지정 심볼이 그 바들에 대해 보유한 틱 수를 셉니다
- 기존 사용자 지정 차트에서 다시 시작할 때(예: 터미널 재시작 후), 계속하기 전에 기록의 마지막 부분의 바가 모두 있는지 확인합니다
- 어떤 바가 계속 틀린 상태로 남으면, 같은 첫 틱부터 틱 기록으로 사용자 지정 심볼 전체를 다시 구축합니다. 이는 모든 테스트에서 정확했던 유일한 복구 방법입니다(빌드 6230에서 측정: 실시간 틱을 받고 있는 사용자 지정 심볼에 개별 바를 쓰거나 그 일부를 삭제하면 터미널이 다른 바나 틱을 잃을 수 있습니다)
차트 유형
- 초 단위 바(Seconds bars): 1, 2, 3, 4, 5, 6, 10, 12, 15, 20 또는 30초. 바 하나에는 한 구간의 틱이 들어갑니다. 틱이 없는 구간에는 바가 없으며, 이는 M1에서 틱이 없는 분 구간에 바가 없는 것과 같습니다.
- 틱 바(Tick bars): N틱마다 새 바가 생깁니다.
- 레인지 바(Range bars): 다음 가격으로 인해 바의 고가-저가 범위가 N포인트보다 커지게 되면 새 바가 시작되므로, N포인트보다 큰 바는 없습니다. 가격이 건너뛰면 새 바는 새 가격에서 시작되며, 건너뛴 구간을 채우는 바는 그려지지 않습니다.
바는 Bid 가격으로 그려집니다. 바의 틱 거래량은 그 바에 포함된 틱 수입니다.
사용자 지정 심볼당 EA 하나씩, 여러 개를 동시에 실행할 수 있습니다. 예를 들어 한 차트에서는 EURUSD의 5초 바, 다른 차트에서는 XAUUSD의 200포인트 레인지 바를 쓸 수 있습니다. 같은 사용자 지정 심볼에 대한 두 번째 EA는 시작되지 않으며, 그 이유를 패널에 표시합니다.
모든 틱이 정확히 하나의 바에
사용자 지정 심볼은 바의 복사본이 아니라 브로커의 틱 자체를 받습니다. 테스트에서는 바를 브로커의 틱 기록으로 독립적으로 다시 구축한 결과와 비교했습니다:
- 틱 거래량의 합계가 원본 틱 수와 같습니다
- 모든 바의 시가, 고가, 저가, 종가, 틱 거래량이 재구축 결과와 같습니다
- 초 단위 바의 경우, 바가 없는 모든 구간에는 원본 틱이 없었습니다
사용자 지정 심볼 10개를 동시에 실행한 75분 테스트(1, 2, 5초 바, 20, 50, 100틱 바, 200, 1000포인트 레인지 바, 총 2,537,558틱)에서 세 가지 모두 모든 심볼에 대해 성립했으며, 터미널이 2분 동안 멈춘 뒤 다시 구축된 심볼도 마찬가지였습니다.
초 단위 차트의 빈 구간: BTCUSDm(토요일, 초당 약 한 틱)에서 1초 차트는 121,859틱에 대해 81,920개의 바였습니다. 바가 없는 1초 구간을 모두 브로커의 틱과 대조했고, 어느 구간에도 틱이 없었습니다. 초 단위 차트의 빈 구간은 브로커가 틱을 하나도 보내지 않은 시간이며, 잃어버린 바가 아닙니다.
시간 축(꼭 읽어 주십시오)
MetaTrader 5에는 분 단위보다 짧은 타임프레임이 없으며, 사용자 지정 차트는 항상 M1 시간 축으로 그려집니다. 그래서 사용자 지정 차트의 각 바는 분 슬롯 하나를 차지하고, 차트 아래의 날짜는 이 슬롯을 1971년 첫 달부터 센 것입니다. 실제 시계 시간이 아닙니다. MetaTrader 5 차트에 분 단위보다 짧은 바가 존재할 수 있는 방법은 이것뿐입니다.
EA는 사용자 지정 차트에 실제 시간을 보여 주는 작은 도우미를 추가합니다(이 설명 전체에서 실제 시간은 브로커 심볼 자체 차트와 마찬가지로 브로커의 서버 시간을 뜻합니다):
- Last bar: (최신 바) 밀리초 단위 시작 시간, 길이, 틱 수
- Cursor bar: (커서 위치의 바) 마우스 아래에 있는 바에 대한 같은 정보
- 차트 자체의 시간 축 위에 실제 시간을 표시하는 두 번째 시간 축
- 차트가 업데이트되고 있는지 여부: "Live: updated on every tick of EURUSD", "Building history from real ticks: 40.0%", "Waiting for the connection to the trade server", "Checking the bars after the start (up to 60 s)", "Not updating for 12 s: check the EA on the EURUSD chart" 또는 "Not updating: no EA builds EURUSD_S5 now"
사용자 지정 차트는 M1로 유지하십시오. M1 바 하나가 초 단위 바, 틱 바 또는 레인지 바 하나에 해당합니다. 더 높은 타임프레임에서는 여러 바가 합쳐집니다.
속도
한 터미널에서 EA 10개와 사용자 지정 차트 8개를 동시에 실행한 75분 테스트에서 측정했습니다. 측정한 값은 원본 차트의 지표가 틱을 인식한 순간부터 사용자 지정 차트의 지표가 그 틱을 인식한 순간까지의 시간입니다. BTCUSDm은 데모 계좌에서 실시간이었습니다. 금과 나스닥 지수는 시장이 닫혀 있었기 때문에(토요일), 해당 차트에는 금요일의 실제 틱을 실제 속도로 공급했으며, 최대 초당 61틱이었습니다.
| 사용자 지정 차트 | 초당 틱 수 | 중앙값 | 틱의 99%가 이 시간 이내 | 가장 느린 틱 |
|---|---|---|---|---|
| BTCUSDm 5초 바(실시간) | 1 | 0.2 ms | 30 ms | 262 ms |
| BTCUSDm 1초 바(실시간) | 0.9 | 0.3 ms | 35 ms | 262 ms |
| BTCUSDm 50틱 바(실시간) | 1 | 0.2 ms | 32 ms | 281 ms |
| 금 1초 바(리플레이) | 12 | 0.4 ms | 65 ms | 173 ms |
| 금 100틱 바(리플레이) | 12 | 0.3 ms | 111 ms | 140 ms |
| 나스닥 5초 바(리플레이) | 61 | 0.6 ms | 40 ms | 1.7초 (*) |
| 나스닥 1000포인트 레인지 바(리플레이) | 61 | 0.8 ms | 41 ms | 2.5초 (*) |
(*) 터미널이 2분 동안 멈춘 뒤의 2분 동안: 지연된 틱이 한꺼번에 도착했고, EA가 심볼을 다시 구축했습니다. 그 밖의 모든 시간에는 가장 느린 틱이 142 ms와 156 ms였습니다. 75분 동안 터미널은 전체적으로 CPU 코어 약 한 개와 680~703 MB의 메모리를 사용했으며, 처음과 마지막 10분을 비교해 느려지지 않았습니다.
원본 차트의 패널은 실행 중에 틱 이벤트당 EA 자체의 쓰기 시간을 중앙값과 99번째 백분위수로 보여 줍니다(테스트에서 중앙값 0.03 ms).
연결 끊김, 재시작 및 변경
같은 75분 테스트, 그 이후의 터미널 재시작, 그리고 입력값 변경에 대한 별도 테스트에서 측정했습니다:
- 터미널 2분 동안 멈춤: 복귀했을 때 거래 서버와의 연결이 끊겼다가 복구되었다고 보고했습니다. 15초 이내에 EA들이 바나 틱이 빠진 사용자 지정 심볼 4개를 찾아 다시 구축했습니다(각 0.2~2.4초). 그 후 심볼 10개 모두 위의 검사를 통과했습니다. 몇 분 동안의 네트워크 단절은 테스트하지 않았습니다.
- 원본 차트의 타임프레임 변경(M1에서 M5로 바꾼 뒤 다시 되돌림): EA는 마지막 바부터 계속했으며, 재구축은 없었습니다.
- 입력값 변경(다른 입력값이 담긴 템플릿 사용): EA는 마지막 바부터 계속했습니다.
- 차트 유형 변경(실행 중인 EA에서 5초 바를 50틱 바로 바꾼 뒤 다시 되돌림): EA는 새 사용자 지정 심볼을 구축하고 이전 차트는 그대로 두었습니다. 91초 후 5초 바로 돌아오자 이전 심볼을 이어 가며 그 91초 동안의 틱을 추가했습니다. 두 심볼 모두 위의 검사를 통과했습니다.
- 원본 차트를 3분 동안 닫음: 도우미에 "Not updating: no EA builds BTCUSDm_S1 now"가 표시되었습니다. EA와 함께 차트를 다시 열자 EA는 마지막 바부터 계속했고, 그 3분 동안의 틱이 0.34초 후 차트에 나타났습니다.
- 터미널을 닫았다가 다시 시작하기를 7번(닫혀 있던 시간 3초~약 1.5분): EA 시작 51번 중 40번은 각자의 마지막 바부터 계속했습니다. 11번은 빠진 바를 발견했고(터미널이 버린 것, 제한 사항 참조), 그 60초를 기다린 뒤(최종 버전에서는 그동안 도우미에 "Checking the bars after the start"가 표시됨) 각 심볼을 다시 구축했습니다(각 0.2~1.3초). 7번의 시작 중 5번은 몇 분 뒤 터미널이 차트가 열려 있지 않은 심볼의 바를 버렸고, EA가 다음 검사에서 이를 발견해 심볼을 다시 구축했습니다(2번의 테스트에서는 그 검사 전에 테스트가 끝났습니다).
- 같은 사용자 지정 심볼에 대한 두 번째 EA는 시작되지 않았으며, 터미널의 모든 EA가 함께 시작되는 터미널 시작 7번에서도 마찬가지였습니다.
EA를 제거해도 사용자 지정 심볼과 그 차트는 그대로 남습니다. 같은 설정으로 다시 붙이면, 그 이전의 바가 모두 있는지 확인한 뒤 마지막 바부터 계속합니다(모두 있지 않으면 스스로 기록을 다시 구축합니다).
입력값
| 입력값 | 기본값 | 의미 |
|---|---|---|
| Chart type | Seconds bars | Seconds bars, Tick bars, Range bars |
| Seconds bars: seconds per bar | 5 seconds | 1, 2, 3, 4, 5, 6, 10, 12, 15, 20 또는 30 |
| Tick bars: ticks per bar | 100 | 1~100,000 |
| Range bars: range of a bar in points | 100 | 원본 심볼의 포인트 |
| Source symbol | 비어 있음 | 비어 있음 = EA를 붙인 차트의 심볼 |
| Days of real tick history to build | 3 | 0.01~60, 사용자 지정 심볼을 구축할 때 사용합니다. 브로커의 틱 기록은 이보다 짧을 수 있습니다. 새 값으로 기존 사용자 지정 심볼이 다시 구축되지는 않습니다. 다시 구축하려면 다음 입력값을 한 번 true로 설정하십시오 |
| Build the history again at start | false | false이면, 차트 유형, 그 설정, 원본이 같을 때 마지막 바부터 계속합니다 |
| Custom symbol name | 비어 있음 | 비어 있음 = 자동, 예: EURUSD_S5, EURUSD_T100, EURUSD_R100 |
| Open the custom chart | true | |
| Template for the custom chart | 비어 있음 | MQL5\Profiles\Templates에 있는 템플릿, 차트를 열 때 적용됩니다 |
| Show the real time of the bars on the custom chart | true | 위에서 설명한 도우미 |
| Close the custom chart when the EA is removed | false | |
| Tester only: open and close sample positions | true | 아래 참조 |
전략 테스터
MetaTrader 5는 전략 테스터에서 사용자 지정 심볼이나 새 차트를 허용하지 않습니다(측정: 둘 다 오류 4014로 거부됨). 그래서 테스터에서는 EA가 테스터가 공급하는 틱으로, 같은 코드를 사용해 같은 바를 메모리에 구축하고, 비주얼 모드에서는 테스터 차트 아래의 하위 창에 그립니다. 실행이 끝나면 구축한 바의 개수와, 모든 틱이 정확히 하나의 바에 들어 있다는 결과를 기록합니다. 브로커의 실제 틱으로 구축한 바를 보려면 "Every tick based on real ticks"를 사용하십시오.
전략 테스터에서만 EA는 짧은 일련의 샘플 포지션을 열고 닫기도 합니다. Market에서 Expert Advisor가 거래하는지 확인하기 때문입니다:
- 최소 거래량, 한 번에 하나의 포지션, 최대 30개 포지션
- 새 포지션을 열기 전마다 여유 증거금을 확인하며, 자금이 부족하면 메모를 기록하고 아무것도 보내지 않습니다
샘플 포지션은 매매 전략이 아니며, 그 결과는 수익에 대해 아무것도 말해 주지 않습니다. 실계좌 또는 데모 계좌의 차트에서 EA는 절대 주문을 보내거나 변경하거나 청산하지 않습니다.
제한 사항(구매 전에 꼭 읽어 주십시오)
- 시간 축은 시계 시간이 아니라 슬롯을 셉니다. 위의 "시간 축"을 참조하십시오. 바의 시간을 사용하는 지표(세션, 일간 피벗, 시간 필터)는 사용자 지정 차트에서 실제 시간이 아니라 슬롯 시간을 보게 됩니다.
- 사용자 지정 심볼의 시세는 한 틱 늦습니다. 측정: 사용자 지정 차트의 지표나 EA가 새 틱으로 호출될 때, 사용자 지정 심볼의 바와 틱 기록에는 이미 그 틱이 들어 있지만, 사용자 지정 심볼의 시세(마켓 워치(Market Watch), SymbolInfoTick, 차트의 Bid 선)는 다음 틱이 추가될 때까지 이전 틱을 표시합니다. MetaTrader 5 빌드 6230에서 일곱 가지 우회 방법을 시도했지만 어느 것도 효과가 없었습니다. 사용자 지정 차트의 지표나 EA는 가격을 바에서 읽어야 합니다(마지막 바의 종가가 가장 새로운 틱입니다).
- 사용자 지정 심볼은 거래할 수 없습니다. 사용자 지정 차트에서 실행되는 EA는 주문을 브로커 심볼로 보내야 합니다.
- Bid 차트만 지원합니다. 브로커가 Last 가격으로 그리는 심볼(거래소 주식 및 선물)은 패널에 메시지를 표시하며 거부됩니다.
- 기록의 깊이는 브로커에 달려 있습니다. 첫 구축 시 브로커의 틱 기록을 내려받으며, 브로커는 틱 기록을 제한된 기간만 보관합니다. 짧은 바의 긴 기록은 터미널의 "Max bars in chart" 설정(도구, 옵션, 차트 / Tools, Options, Charts)을 넘을 수 있으며, 이 경우 차트에는 가장 새로운 바만 표시됩니다. EA 자체 검사는 그 설정값의 최대 절반까지만 다시 읽으므로, 설정값이 낮으면 검사하는 바의 수가 줄어들 뿐입니다(설정값 5,000과 약 80,000개 바의 1초 차트로 테스트: 8분 동안 추가 재구축 없음).
- 초 단위 바를 담을 수 있는 기간은 제한되어 있습니다. 슬롯은 과거에 머물러야 합니다. 1초 차트는 시작 후 약 339일 분량의 바를, 5초 차트는 약 4.6년 분량을 담을 수 있습니다. 공간을 다 쓰면 EA가 스스로 기록을 다시 구축합니다.
- 사용자 지정 차트를 사용하는 동안에는 EA를 계속 실행해 두십시오. 빌드 6230에서 측정: EA를 제거하거나 터미널을 재시작하면, 터미널이 틱은 유지한 채 사용자 지정 심볼의 가장 새로운 부분의 바(최대 슬롯 하루 분량, 1,440개 바)를 버리는 경우가 있었습니다. 그러면 EA 없이 열어 둔 차트에는 빈 구간이 나타납니다. EA가 다시 시작되면 이를 발견하고 심볼을 다시 구축합니다. 재시작 후에는 차트에 이런 빈 구간이 최대 약 일 분 동안 보일 수 있습니다. EA는 터미널이 바를 불러올 때까지 최대 60초 기다리며(그동안 도우미에 "Checking the bars after the start"가 표시됨), 그래도 바가 빠져 있으면 심볼을 다시 구축합니다(테스트에서 0.2~1.3초). 테스트에서는 EA가 실행 중일 때에도 재시작 몇 분 후 터미널이 바를 버린 경우가 있었습니다. EA는 검사(60초마다, 세 번의 테스트에서는 테스트 자체의 검증 프로그램이 빈 구간을 본 지 74초 후에 복구됨)로 이를 발견해 심볼을 다시 구축했습니다. 차트가 열려 있지 않은 심볼은 그 검사나 다음 시작 때까지 빈 구간이 남아 있을 수 있습니다. 이 현상은 차트가 열려 있지 않은 사용자 지정 심볼에서 가장 많이 발생했습니다.
- 복구는 사용자 지정 심볼 전체를 비우고 다시 채웁니다. 검사에서 틀리거나 빠진 바를 발견하면, EA는 사용자 지정 심볼의 틱과 바를 삭제하고 같은 첫 틱부터 다시 기록합니다(테스트에서 0.2~2.4초). 그동안 사용자 지정 차트의 지표와 EA에서는 기록이 사라졌다가 다시 나타납니다.
- 사용자 지정 심볼당 EA 하나, 그리고 EA는 해당 차트의 EA 슬롯을 사용합니다. 거래용 EA의 차트가 아니라 원본 심볼의 남는 차트에 붙이십시오.
- 사용자 지정 심볼에서는 전략 테스터를 쓸 수 없습니다. 빌드 6230에서 측정: 테스터는 사용자 지정 심볼의 틱은 공급하지만 바는 일부만 만들거나 전혀 만들지 않으므로(두 번의 테스트에서 M1 바 4,316개 중 1,324개와 0개), 바가 필요한 EA는 사용자 지정 심볼에서 테스트할 수 없습니다. 그런 EA는 브로커 심볼에서 테스트하십시오.
- 테스트 환경:
- MetaTrader 5 빌드 6230만, Windows 10, 288 dpi의 3840 x 2160 화면
- 리테일 CFD 브로커의 데모 계좌: BTCUSDm과 ETHUSDm은 실시간, 금요일의 XAUUSDm과 USTECm 틱을 실제 속도로 리플레이(토요일 테스트), 스크린샷에는 EURUSDm, XAUUSDm, USTECm 기록 사용
- 전략 테스터: 플랫폼 데모 서버의 네팅 및 헤징 데모 계좌, EURUSD, GBPUSD, XAUUSD
- 가장 긴 테스트는 75분, 다른 브로커, 실제 자금 계좌, MQL5 VPS에서는 테스트하지 않음
- 먼저 무료 전략 테스터 데모로 사용해 보십시오. 데모는 테스터의 하위 창에서만 바를 보여 줍니다(위의 "전략 테스터" 참조). 실계좌 또는 데모 계좌에서 사용자 지정 차트를 쓰려면 정식 버전이 필요합니다.
