당사 팬 페이지에 가입하십시오
- 조회수:
- 122
- 평가:
- 게시됨:
-
이 코드를 기반으로 한 로봇이나 지표가 필요하신가요? 프리랜스로 주문하세요 프리랜스로 이동
시세는 각 해당 막대가 형성되는 시점에 서버에 적용되던 시간대에 따라 타임스탬프가 표시됩니다.
막대가 형성되면 타임스탬프를 포함하여 변경되지 않은 상태로 유지됩니다. 반면에 경제 캘린더는 서버의 현재 시간대에 연결된 이벤트(과거, 현재, 미래)에 대한 정보를 제공합니다. 많은 브로커가 일광 절약 모드를 켜고 끄는 등 특정 시간대 일정을 준수하기 때문에 과거 이벤트의 타임스탬프는 매년 절반 정도는 관련 막대를 기준으로 1시간씩 이동될 수 있습니다.
또한 브로커가 단순히 서머타임을 변경하는 것보다 더 급격하게 시간대를 변경하는 경우도 있습니다. 그러면 과거 시세는 원래 발생한 경제 이벤트 시간을 기준으로 왼쪽 또는 오른쪽으로 몇 시간 이동한 것처럼 보이지만, 이제 서버의 업데이트된 시간대에 달력에 의해 보고됩니다.
뉴스가 각기 다른 DST 일정을 가진 여러 국가에서 제공되고 서버가 다른 일정을 가진 지역에 위치할 수 있다는 점을 고려하면, 뉴스 릴리스 시간은 차트에서 시각적으로 더 특이한 방식으로 앞뒤로 이동할 수 있습니다(예: 봄과 가을에 몇 주 동안).
이 모든 것이 온라인에서는 그다지 중요해 보이지 않지만, 뉴스 기반 전략을 테스트하고 싶다면 어떻게 해야 할까요?
예, 메타트레이더 테스터에서는 기본적으로 캘린더가 지원되지 않지만 많은 트레이더가 뉴스 거래를 좋아하고 그렇지 않은 트레이더는 뉴스가 있을 때 시장이 폭등하기 전에 시장에서 한 발짝 물러서야 한다고 말할 수 있습니다. 따라서 캘린더를 이용한 백테스팅이 중요합니다. 그렇기 때문에 캘린더를 외부 저장소(파일, 데이터베이스)로 내보낸 다음 테스터로 가져오는 것이 매우 합리적입니다. 캘린더 인 테스터 경험을 위한 이러한 보관 도구 중 하나가 알고트레이딩 책에 소개되어 있습니다.
그리고 여기서 우리는 과거 시세와 과거 이벤트의 동기화 해제 문제에 직면합니다. 단순화를 위해 이 문제는 책에서 해결되지 않은 채로 남겨져 있습니다.
이제 CalendarCache.mqh의 확장 버전과 표시 표시기인 CalendarMonitorCachedTZ.mq5 덕분에 이 문제가 해결되었습니다. 이것은 책에 나오는 CalendarMonitorCached.mq5의 약간 변경된 버전입니다.
이 인디케이터는 뉴스 이벤트를 모니터링하고 과거 및 예정된 여러 이벤트로 차트 테이블을 동적으로 업데이트합니다.
시간 보정과 관련된 모든 작업은 다른 공개 라이브러리인 TimeServerDST.mqh에서 백그라운드에서 수행됩니다. 시간 보정이 어떻게 작동하는지 더 잘 이해하기 위해CalendarCSVForDates.mq5 스크립트를 사용하여보정이 있는 CSV 파일과 없는 파일을 나란히 비교할 수 있습니다.
다음은 스크립트와 이 인디케이터 두 프로그램의 소스 코드에 라이브러리가 삽입된 방식입니다.
#include <TimeServerDST.mqh> // 캘린더 캐시가 시간대 수정 지원을 활성화하기 전을 포함합니다. #include <MQL5Book/CalendarFilterCached.mqh> #include <MQL5Book/CalendarCache.mqh>
원래 표시기에서와 마찬가지로 쓰기 또는 읽기를 위한 cal-file의 이름을 제공할 수 있는 문자열 입력 CalendarCacheFile이 있습니다.
이 인디케이터가 CalendarCacheFile이 비어 있는 온라인 차트에 첨부되면 내장된 캘린더와 함께 즉시 작동합니다.
캘린더 캐시 파일에 특정 이름으로 인디케이터를 실행했는데 파일이 존재하지 않으면 인디케이터는 캘린더 기록을 캐시 파일로 내보내고(파일을 생성) 종료합니다. 이 단계는 타임스탬프를 수정해야 하거나 수정할 수 있는 단계입니다(아래 FixCachedTimesBySymbolHistory 참조).
캘린더 캐시 파일의 기존 캐시 파일 이름으로 표시기를 실행하면 내장 캘린더와 동일한 방식으로 캐시를 로드하고 이 복사본으로 작업합니다. 이는 테스터에게 특히 유용합니다.

테스터는 추가 파일(이 경우 준비된 온라인 캘린더 파일)을 #property tester_file 지시어에 지정하거나 캘린더 파일을 일반 폴더 C:/Users/<사용자>/AppData/Roaming/MetaQuotes/Terminal/Common/에 넣어야 한다는 점을 잊지 마시기 바랍니다.
물론 백테스트 및 최적화 중에 캐시를 EA에 로드할 수도 있습니다.
입력 문자열 FixCachedTimesBySymbolHistory는 다음과 같은 방식으로 처리됩니다.
비어 있으면 표시기는 시간 수정 없이 캐시를 저장합니다.
내보내기 중에 시간 보정을 사용하려면 서버의 과거 시간대를 경험적으로 감지하는 데 사용되는 기호를 지정해야 합니다. H1 시세의 기록을 기반으로 작동하며, 가급적이면 "XAUUSD" 또는 "EURUSD"가 좋습니다.
이 입력의 도움으로 새 버전의 인디케이터에 몇 줄만 추가됩니다:
if(StringLen(FixCachedTimesBySymbolHistory)) cache[].adjustTZonHistory(FixCachedTimesBySymbolHistory, true);
타임스탬프 조정을 위해 CalendarCache 클래스에 조정TZonHistory 메서드가 특별히 도입되었으며, 그 구현은 TimeServerDST.mqh의 내부를 사용합니다.
이 메서드는 온라인에서만 호출되어야 합니다(테스터에서는 호출되지 않음).
일반적으로 이 메서드는 기본 제공 캘린더에서 채워진 캐시 객체에서 채워진 직후에 호출해야 합니다. 그렇지 않으면 캘린더 파일에서 캐시가 로드되거나 메서드가 이전에 이미 호출된 경우 캐시 내용이 이미 조정되었을 수 있습니다. 그러면 수정에 수정을 적용하고 잘못된 타임스탬프를 얻게 됩니다.
두 번째 매개변수(true) 는 메서드에 적용된 변경 사항의 경계를 로그에 기록하도록 지시합니다. 다음과 같은 형태입니다:
Time fix-up started at 2021.07.19 00:30:00 2021.07.19 00:30:00: 148786 -10800 diff=-3600 2021.11.08 01:50:00: 135918 -7200 OK 2022.03.14 04:30:00: 161085 -10800 diff=-3600 2022.11.07 04:00:00: 165962 -7200 OK 2023.03.13 01:50:00: 168500 -10800 diff=-3600 2023.11.06 01:50:00: 169270 -7200 OK 2024.03.11 01:50:00: 181258 -10800 diff=-3600 2024.11.04 02:30:00: 208469 -7200 OK
각 줄에는 새로운 불일치가 감지된 이벤트의 시간과 ID, 해당 이벤트의 서버 시간 오프셋, 캘린더 캐싱 시점의 서버 시간 편향을 제거하기 위해 이후의 모든 타임스탬프에 적용해야 하는 차이점이 포함됩니다.
첨부된 mqh 파일(CalendarFilter.mqh, CalendarCache.mqh, QuickSortStructT(Ref).mqh)에는 책에서 원래 버전에 비해 버그 수정 및 개선 사항이 포함되어 있습니다.
업데이트
11.11.2024 - 캘린더필터.mqh, 캘린더캐시.mqh의 작은 버그 수정 및 업데이트;
22.11.2024 - CalendarCache.mqh의 작은 버그 수정 및 개선.
MetaQuotes Ltd에서 영어로 번역함.
원본 코드: https://www.mql5.com/en/code/53393
바타이머
현재 막대의 시작과 끝을 기준으로 현재 위치가 표시되며, 추가로 막대의 시작부터 경과한 시간 값이 전체 막대 기간의 백분율로 표시됩니다. 트레이딩 결정을 내리는 순간을 제어하는 데 유용합니다.
캔들_평활화
평균으로 변환된 캔들 스틱 차트.
Extreme highs and lows with tick prices
극단적인 고점 및 저점(OHLC)과 극단적인 매수호가와 매도호가를 함께 표시합니다.
질량 지수(MI)
매스 지수는 최대 가격과 최소 가격 사이의 범위 폭 변화를 기반으로 추세 반전을 식별하도록 설계되었습니다.