거래 로봇을 무료로 다운로드 하는 법을 시청해보세요
당사를 Telegram에서 찾아주십시오!
당사 팬 페이지에 가입하십시오
스크립트가 흥미로우신가요?
그렇다면 링크 to it -
하셔서 다른 이들이 평가할 수 있도록 해보세요
스크립트가 마음에 드시나요? MetaTrader 5 터미널에서 시도해보십시오
라이브러리

Simplest Logger class for MetaTrader 5 - MetaTrader 5용 라이브러리

조회수:
115
평가:
(5)
게시됨:
\MQL5\Include\DKStdLib\Logger\
CDKLogger.mqh (26.27 KB) 조회
\MQL5\Scripts\
MQL5 프리랜스 이 코드를 기반으로 한 로봇이나 지표가 필요하신가요? 프리랜스로 주문하세요 프리랜스로 이동

모든 프로그래머는 자신만의 로거를 가지고 있습니다. 저는 파이썬 로깅 모듈에서 영감을 받아 MQL5용 로거를 직접 작성했습니다.

이 클래스는 가장 간단합니다. 계층 구조, 로테이터 또는 포맷터가 없습니다. 모든 프로젝트에 간단하고 편리합니다.

설치

  1. CDKLogger.mqh를 MQL\Include\DKStdLib\Logger 폴더에 복사합니다.
  2. CDKLogger 클래스를 임포트합니다.

#include <DKStdLib\Logger\CDKLogger.mqh

사용법

CDKLogger logger;

// 1단계: "MyLoggerName" 이름과 INFO 레벨로 로거 초기화하기
logger.Init("MyLoggerName", INFO);

// 기본 로거 형식 "%이름%:[%레벨%] %메시지%"를 원하는 대로 변경할 수 있습니다.
// 원하는 패턴 조합 사용 
logger.Format = "%YYYY%-%MM%-%DD% %hh%:%mm%-%ss% - %name%:[%level%] %message%"; 

// 2단계. 대체어로만 메시지를 필터링하려는 경우,
// FilterInList 채우기 
// 2.1. FilterIntList에 하위 항목 추가하기
logger.FilterInList.Add("Including-Substring-#1");        
logger.FilterInList.Add("Including-Substring-#2");        

// 2.2. 문자열을 ";" 구분 기호로 분할하여 FilterInList에 모든 하위 문자열을 한 줄에 추가합니다.
logger.FilterInFromStringWithSep("Including-Substring-#3;Including-Substring-#4", ";");  

// 3단계. 하위 문자열이 포함된 메시지를 필터링하고 다른 메시지는 모두 남겨두려는 경우,
// 필터 아웃 목록 채우기 
// 3.1. FilterOutList에 하위 문자열 추가하기
logger.FilterOutList.Add("Excluding-Substring-#1");        
logger.FilterOutList.Add("Excluding-Substring-#2");        

// 3.2. 문자열을 ";" 구분 기호로 분할하여 FilterOutList에 모든 하위 문자열을 한 줄에 추가합니다.
logger.FilterOutFromStringWithSep("Excluding-Substring-#3;Excluding-Substring-#4", ";");  // 사용 필터 In에 필터를 입력합니다.

// 4단계: 로깅
logger.Debug("Debug: Including-Substring-#1", false);                  // 경고 없이 디버그
logger.Info("Info: Including-Substring-#1", true);                     // 알림이 있는 정보 대화 상자
logger.Warn("Warn: Including-Substring-#1"); 
logger.Error("Error: Including-Substring-#1: Excluding-Substring-#1"); // 필터 아웃 목록으로 인해 건너뛰었습니다.
logger.Critical("Critical: Including-Substring-#1");

logger.Assert(true, 
              "Log msg if true", INFO,   // if ok
              "Log msg if false", ERROR, // 실패하면
              true);                     // 알림도 표시
logger.Assert(true, 
              "Same msg for true & false", 
              INFO,   // 로그 레벨 확인 시
              ERROR,  // 실패 시 로그 레벨
              false); // 경고 없음 

실행 결과 다음 메시지가 로그에 출력됩니다:

미해결 문제

저는 종종 이런 방식으로 클래스를 사용합니다:

logger.Debug(StringFormat("%s/%d: My message: PARAM1=%f",
                          __FUNCTION__, __LINE__,
                          my_param));

하지만 여기에 문제가 있습니다. 로깅 수준에서 메시지를 출력할 필요가 없는 경우에도 StringFormat 함수는 매번 문자열을 구문 분석합니다.

디버그 메시지를 많이 출력해야 하는 경우 출력을 조건으로 래핑해야 합니다:

if(DEBUG >= logger.Level)                          
  logger.Debug(StringFormat("%s/%d: My message: PARAM1=%f",
                            __FUNCTION__, __LINE__,
                            my_param));      

가장 좋은 방법은 StringFormat을 느리게 사용하는 것이지만, 안타깝게도 MQL5는 Debug, Info, Error 등의 함수에 동적인 수의 함수 매개 변수를 전달하는 기능을 지원하지 않습니다.

이 작업을 수행할 수 있는 방법에 대한 아이디어가 있으시면 알려주시면 감사하겠습니다.

MetaQuotes Ltd에서 영어로 번역함.
원본 코드: https://www.mql5.com/en/code/52741

와다 아타르 폭발 와다 아타르 폭발

이 인디케이터는 시장이 언제 더 빠르게 움직이기 시작하는지 보여줍니다. 또한 트레이더에게 매수, 매도, 청산 시점을 알려줍니다.

평활화된 ADX 평활화된 ADX

많은 평활화 알고리즘이 있으며, 이 표시기는 표준 ADX 표시기의 평활화입니다.

TimeServerDaylightSavings TimeServerDaylightSavings

견적 기록에서 서버 시간대 및 서머타임 모드(DST)를 경험적으로 감지하는 시간 관련 기능

StepMA_Line StepMA_Line

이동 평균으로 설계된 StepMA 표시기입니다.