라이브러리: 캘린더

 

캘린더:

캘린더 - 기록 및 실시간에 대한 기본 분석.

캘린더

Author: fxsaber

 
거장이 재단을 맡았습니다. 브라보! 큰 변화가 다가오고 있습니다 :)
 
Aleksey Mavrin:
거장이 재단을 맡았습니다. 브라보! 큰 변화가 다가오고 있습니다 :)

아직 아무것도 오지 않았습니다. 라이브러리.

 
처음 게시하는 동안 실수로 소스 코드에 쓰레기가 포함되었습니다. 코드를 업데이트했습니다.
 
저 자신은 이를 상기시키는 용도로 사용합니다.
#include <fxsaber\Calendar\Calendar.mqh> // https://www.mql5.com/ko/code/32430

int OnInit()
{
  return(!EventSetTimer(1));
}

void OnTimer()
{
  CALENDAR Calendar;
  
  string Currencies[2];
  
  // 현재 캐릭터의 통화를 가져옵니다.
  Currencies[0] = ::SymbolInfoString(_Symbol, SYMBOL_CURRENCY_BASE);
  Currencies[1] = ::SymbolInfoString(_Symbol, SYMBOL_CURRENCY_PROFIT);
    
  // 예정된 중요한 이벤트를 기호 통화별로 표시합니다.
  Calendar.Set(Currencies);
  
  Comment(Calendar.ToString(0, 5, true)); // 인쇄했습니다.
}

중요한 뉴스를 놓칠 확률이 크게 줄어듭니다.


이러한 0에서 해쳇 호출은 0.6ms 이내에 실행됩니다. 물론 소비량을 0으로 줄일 수도 있습니다.

 

이벤트 일정은 훨씬 더 먼 미래에 기록됩니다. 따라서 MT5 데이터에서 파일을 저장하여 MT4에서 미리 알림을 사용할 수도 있습니다(예: 한 달 전).

이것이 제가 MT4에서 하는 일입니다.

 
IMHO, 더 자세한 문서는 아직 없습니다. 코드를 살펴볼 수 있다는 것은 분명하지만 다른 사람의 코드를 분석하는 대신 직접 코드를 작성할 수 있습니다 ;-). 특히 Set을 먼저 수행하지 않고 Get을 호출할 수 있는지, 필터를 롤백할 수 있는지 여부가 명확하지 않습니다(제가 알기로는 불가능합니다). 위의 예제에서 이벤트 발생을 추적하는 더 편리한 방법이 있는지 여부가 명확하지 않습니다. 특히 제가 올바르게 이해했다면 데이터 업데이트가 반드시 이벤트 시작과 정확히 일치하는 것은 아니기 때문에 TimeCurrent의 발생이 아닌 change_id를 비교해야 합니다.
 

Stanislav Korotky:
ИМХО, все же не хватает более подробной документации. Понятно, что можно заглянуть в код, но тогда вместо разбирания в чужом коде можно и свой написать ;-).

mqh 내에서 Alt+M을 누릅니다. 메서드의 이름은 말이 되는 것 같습니다.

특히 Set을 먼저 수행하지 않고도 Get을 호출할 수 있는지 여부와 필터를 롤백할 수 있는지 여부가 명확하지 않습니다(제가 알기로는 불가능합니다).

Set - 개체를 이벤트로 채웁니다. 액세스하는 것은 배열의 요소에 액세스하는 것과 같습니다.

위의 예에서 이벤트 발생을 추적하는 더 편리한 방법이 있는지 명확하지 않습니다. 특히 내가 올바르게 이해했다면 데이터 업데이트가 반드시 이벤트 시작과 정확히 일치하는 것은 아니기 때문에 TimeCurrent의 발생이 아닌 change_id를 비교해야합니다.

백테스트에 대해 이야기하고 있다면 change_id는 존재하지도 않고 존재할 수도 없습니다.

실시간의 경우, 이 기능은 라이브러리에 조금 후에 추가될 예정입니다.


필터 롤백은 다른 모든 곳과 동일하게 필터 이전의 객체 복사본을 만듭니다.

 

구조적으로 다른 데이터 소스를 파서 형태로 임베드할 수 있도록 만들어졌습니다. 이를 위해 EVENT::Source 필드도 있는데, 이 필드는 이제 "MetaTrader5" 하나의 값과 동일합니다.

따라서 캘린더를 스택하는 기능이 있습니다. 여러 소스에서 데이터를 가져온 다음 한 곳에서 결합한다고 가정했습니다.

 
fxsaber:

백테스트에 대해 이야기하는 경우 change_id는 존재하지 않으며 존재할 수도 없습니다.

실제 이벤트는 변경될 수 있으며, 테스터가 (라이브러리를 통해) 변경 이력을 재현하지 않으면 테스트의 적절성이 떨어집니다. 비슷한 주제가 이미 일부 스레드에서 다루어졌습니다. 이벤트의 온라인 지표가 동일하고 수정된 경우입니다. 수정 된 값을 사용하여 테스트하면 전문가가 "즉석에서"분석 한 그림을 얻을 수 없습니다. 아니면 업데이트에 대한 액세스 권한을 잘못 이해한 것일 수도 있습니다.

 
Stanislav Korotky:

실제 이벤트는 변경될 수 있으며, 테스터가 (라이브러리를 통해) 변경 이력을 재현하지 않으면 테스트의 적절성이 떨어집니다. 비슷한 주제가 이미 일부 스레드에서 다루어졌습니다. 이벤트의 온라인 지표가 동일하고 수정된 경우입니다. 수정 된 값을 사용하여 테스트하면 전문가가 "즉석에서"분석 한 그림을 얻을 수 없습니다. 아니면 업데이트에 대한 액세스 권한을 잘못 이해한 것일 수도 있습니다.

캘린더에는 각 이벤트에 대해 네 가지 값이 포함되어 있습니다:

  • 현재(실제) - 보도 자료가 나온 후 처음 받은 값입니다.
  • 예측 - 뉴스가 공개되기 전에 예측된 값(누가?)입니다.
  • 이전 - 이전에 동일한 캘린더 뉴스가 릴리스된 후 가장 먼저 수신된 값입니다. 즉, 이전 시간의 실제와 같습니다: 이전[i] = 실제[i - 1].
  • 수정됨 - 이전 실제의 조정된 값입니다. 이 업데이트의 시간(및 횟수)은 캘린더에 저장되지 않습니다.

모든 HTML 캘린더( 표준 캘린더 및 터미널 포함)에서 트리플(실제, 예상, 이전) = (실제, 예상, 수정)이 됩니다. 따라서 다음 관련 이벤트가 발생할 때까지 기록에서 수정됨 필드를 사용할 수 없습니다. 다른 필드는 사용할 수 있습니다.

실제 수신의 지연 값 또는 더 정확하게는 특정 트레이딩 서버와 뉴스 소스의 동기화 해제에 대한 정보는 없습니다(그리고 있을 수도 없습니다). 그렇기 때문에 백테스트에서 고려하지 않습니다. 이 뉘앙스는 분명합니다.


위의 내용을 고려할 때, 백테스트에서 타임트레이드 서버와 이벤트 시간을 비교하는 것은 완전히 합법적입니다. 그리고 이벤트 직전의(이전, 예상,수정)과 이벤트 직후의 (실제, 예상,이전 )을 사용합니다.