시스템트레이딩 게시글

새로운 캔들의 시작 감지하기 - MetaTrader 5에서의 시스템 트레이딩

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

안녕하세요, 트레이더 여러분! 오늘은 MetaTrader 5에서 새로운 캔들이 시작될 때를 감지하는 방법에 대해 이야기해보려고 해요. 자동매매 시스템을 운영하면서 새로운 캔들이 시작될 때마다 반응할 수 있다면, 거래 전략을 더욱 효과적으로 수행할 수 있겠죠?

기본적으로 Expert Advisor (EA)를 사용할 때, 새로운 가격 정보가 수신되면 OnTick() 이벤트 핸들러가 호출됩니다. 하지만 새로운 캔들이 시작될 때를 감지하기 위한 표준 이벤트 핸들러는 따로 존재하지 않아요.

그래서 가장 최근의 캔들 오프닝 시간을 모니터링해야 합니다. 이 시간이 변경되면 새로운 캔들이 시작되었다는 신호가 되므로, 적절한 반응을 할 수 있게 되는 거죠. 아래 코드 예제를 통해 MQL4와 MQL5에서 모두 사용할 수 있는 방법을 소개할게요:

// 표준 틱 이벤트 핸들러
  void OnTick()
  {
      // 새로운 캔들이 시작되었는지 확인 (MQL4와 MQL5 호환)
        static datetime dt현재캔들   = WRONG_VALUE;
                datetime dt이전캔들 = dt현재캔들;
                         dt현재캔들   = iTime( _Symbol, _Period, 0 );
                bool     b새로운캔들  = ( dt현재캔들 != dt이전캔들 );

      // 새로운 캔들 이벤트에 반응하기
         if( b새로운캔들 )
         {
            // 첫 번째 틱 수신 시의 처리
               /* 예를 들어, 그래프에 처음 적용할 때 캔들이 진행 중일 수 있음. */
               if( dt이전캔들 == WRONG_VALUE )
               {
                  // 첫 번째 틱에서 처리할 작업 ...
               }
               else
               {
                  // 일반적인 캔들이 나타날 때 처리할 작업 ...
              };

      // 이전 조건과 관계없이 처리할 작업 ...
    }
    else
    {
            // 다른 상황에 대한 처리 ...
    };

      // 기타 작업 수행 ...
  };

위 코드에서 정적 변수는 캔들의 오프닝 시간을 기억합니다. 일반적인 지역 변수와는 달리, 함수에서 나갈 때 데이터 내용을 잊지 않고 유지하는 것이죠. 이게 바로 현재 캔들의 오프닝 시간 변경을 감지하는 핵심입니다.

특히 EA를 차트에 처음 적용했을 때, 이전 코드가 마치 캔들이 막 열렸다고 반응한다는 점도 주의해야 해요. 이런 경우에는 특별한 처리가 필요할 수 있습니다.

마지막으로, 제 모든 CodeBase 출판물의 소스 코드는 이제 MetaEditor의 '공개 프로젝트'에서 'FMIC'라는 이름으로도 확인할 수 있으니 참고하세요!

연관 포스트

댓글 (0)