시스템트레이딩 게시글

새로운 바와 캔들 시작 감지하기 - 메타트레이더 4를 위한 팁

첨부파일
39104.zip (884 bytes, 다운로드 2회)

안녕하세요, 여러분! 오늘은 메타트레이더 4에서 새로운 바가 시작되는 시점을 감지하는 방법에 대해 이야기해볼게요. 전문가 어드바이저(Expert Advisor, EA)를 사용하고 있을 때, 새로운 틱(tick) 인용이 도착하면 메타트레이더 터미널에서 기본적으로 OnTick() 이벤트 핸들링 함수가 호출되는데, 새로운 바가 시작될 때 호출되는 기본 이벤트 핸들링 함수는 따로 없어요.

그렇다면 우리는 어떻게 새로운 바의 시작을 감지할 수 있을까요? 현재 가장 최근 바의 시작 시간을 모니터링하면 됩니다. 이 시간이 변하면 새로운 바가 시작되었다는 신호이니, 이에 반응하여 이벤트를 처리할 수 있죠. 아래에 제공된 샘플 코드는 MQL4와 MQL5 모두에 호환되는 방법을 보여줍니다:

// 기본 틱 이벤트 핸들러
  void OnTick()
  {
      // 새로운 바 체크 (MQL4와 MQL5 모두 호환)
        static datetime dtBarCurrent  = WRONG_VALUE;
                datetime dtBarPrevious = dtBarCurrent;
                         dtBarCurrent  = iTime( _Symbol, _Period, 0 );
                bool     bNewBarEvent  = ( dtBarCurrent != dtBarPrevious );

      // 새로운 바 이벤트에 반응하여 처리하기
        if( bNewBarEvent )
        {
            // 첫 틱을 받았는지 확인하고 처리하기
               /* 예를 들어, 차트에 처음 부착되었을 때 바가 진행 중일 경우,
                        실제로는 새로운 바의 시작이 아닐 수 있습니다. */
               if( dtBarPrevious == WRONG_VALUE )
              {
                  // 첫 틱 또는 바 중간에서 무언가 처리하기...
              }
              else
              {
                  // 일반적인 바가 시작될 때 무언가 처리하기...
              };

      // 위 조건과 관계없이 무언가 처리하기...
    }
      else
    {
            // 다른 처리를 하세요...
        };

      // 다른 작업 수행...
  };

위 코드에서 정적 변수(static variable)는 바의 시작 시간을 추적합니다. 이 변수는 OnTick() 함수에서 반환될 때도 값을 유지하는데, 이는 현재 바의 시작 시간이 변했는지 감지하는 데 중요한 역할을 해요.

또한, EA가 처음 차트에 배치될 때 위 코드는 바가 막 열렸다고 감지하는 점도 유의해야 해요. 이러한 경우에는 특별한 처리가 필요할 수 있습니다.

마지막으로, 저의 코드베이스(CodeBase) 출판물의 소스 코드는 이제 메타에디터(MetaEditor)의 "공개 프로젝트(Public Projects)" 탭에서도 "FMIC"라는 이름으로 확인하실 수 있습니다.

연관 포스트

댓글 (0)