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

정규식 작업을 위한 MQL5의 RegularExpressions - MetaTrader 5용 라이브러리

게시자:
MetaQuotes
조회수:
245
평가:
(40)
게시됨:
2022.01.10 11:43
업데이트됨:
2022.11.15 09:55
\MQL5\Experts\RegExpressions Demo\
Tests.mq5 (139.55 KB) 조회
\MQL5\Include\Internal\
Array.mqh (22.32 KB) 조회
Wrappers.mqh (16.99 KB) 조회
\MQL5\Include\Internal\Generic\
Collection.mqh (12.54 KB) 조회
Dictionary.mqh (42.58 KB) 조회
IComparer.mqh (6.62 KB) 조회
IEnumerator.mqh (10.39 KB) 조회
IList.mqh (5.7 KB) 조회
List.mqh (38.62 KB) 조회
\MQL5\Include\Internal\TimeSpan\
TimeSpan.mqh (31.7 KB) 조회
\MQL5\Include\RegularExpressions\
Regex.mqh (58.05 KB) 조회
RegexCode.mqh (22.25 KB) 조회
RegexFCD.mqh (31.22 KB) 조회
RegexMatch.mqh (22.94 KB) 조회
RegexNode.mqh (32.45 KB) 조회
RegexParser.mqh (93.26 KB) 조회
RegexRunner.mqh (31.31 KB) 조회
RegexTree.mqh (8.47 KB) 조회
RegexWriter.mqh (24.52 KB) 조회
이 코드를 기반으로 한 로봇이나 지표가 필요하신가요? 프리랜스로 주문하세요 프리랜스로 이동

실제 저자:

Microsoft Corporation. 소스 코드는 .Net Framework 4.6.1에서 가져온 것입니다. . 

참고:라이브러리는 MetaTrader 5 빌드 1285 이상에서 작동합니다.

압축을 터미널_데이터_폴더에 풉니다.
라이브러리 코드는 다음에 위치해 있습니다: <terminal_data_folder>\MQL5\Include\RegularExpressions\
샘플 테스트 스크립트는  <terminal_data_folder>\MQL5\Scripts\RegularExpressionsExamples\에 있습니다.

다음은 .Net Framework 4.6.1의 RegularExpressions를 번역한 것입니다.

라이브러리로 작업하려면 "\MQL5\Include\RegularExpressions\" 디렉토리의 Regex.mqh 파일을 코드에 포함하십시오.

라이브러리와 함께 테스트 케이스 역할을 하는 몇 가지 예가 제공됩니다. 모든 샘플은 Microsoft Corporation의 공식 사이트에서 가져옵니다. 샘플은 C#의 정규식과의 주요 차이점과 MQL5에서의 사용 기능을 생생하게 보여줍니다.

다음은 포트된 RegularExpressions MQL5 라이브러리 패키지에 대한 자세한 정보입니다.

패키지
설명
CharUnicodeInfo.mqh
모든 심볼(비라틴 문자 포함)에 대한 유니코드 범주를 결정하기 위해 보관된 txt 파일.
RegexCapture.mqh
단일의 성공적인 하위 표현식의 캡처 결과를 나타냅니다.
RegexCaptureCollection.mqh
단일 캡처링 그룹에서 만든 캡처 세트를 나타냅니다.
RegexGroup.mqh
단일 캡처링 그룹의 결과를 나타냅니다.
RegexGroupCollections.mqh그룹 객체의 컬렉션을 나타냅니다.
RegexMatch.mqh단일 정규식 일치의 결과를 나타냅니다.
RegexMatchCollection.mqh정규식 패턴을 입력 문자열에 반복적으로 적용하여 찾아낸 일치한 컬렉션을 나타냅니다.
Regex.mqh변경할 수 없는 정규식을 나타냅니다.
RegexOptions.mqh 정규식 옵션을 설정하는 데 사용할 열거형 값을 제공합니다.

RegexOptions.mqh 파일의 정규식 매개변수:

패러미터
설명
None
옵션이 세팅 되지 않았음을 지정함
IgnoreCase
대소문자를 구분하지 않는지를 지정합니다.
Multiline여러 줄 모드를 지정합니다.
ExplicitCapture이름 없는 그룹을 캡처하지 마십시오. 유효한 캡처가 형식의 명시적으로 명명되거나 번호가 매겨진 그룹임을 지정합니다.(?<name>subexpression).
Singleline한 줄 모드를 지정합니다.
IgnorePatternWhitespace패턴에서 이스케이프 처리되지 않은 공백을 제거하고 #으로 표시된 주석을 활성화합니다.
RightToLeft왼쪽에서 오른쪽이 아니라 오른쪽에서 왼쪽으로 검색하도록 지정합니다.
Debug디버그 모드에서 프로그램동작 하도록 지정합니다.
ECMAScript표현식에 대해 ECMAScript 호환 동작을 활성화합니다. 이 값은 다음과 함께 사용할 수 있습니다. IgnoreCaseMultiline 값.


MQL5에서 RegularExpressions 사용하기:

  1. .Net 버전에서 이 라이브러리는 정규식의 저장소(static cache)를 구현합니다. 암시적으로 생성된 모든 정규식(Regex 클래스의 인스턴스)은 해당 저장소에 기록됩니다. 이러한 방식은 패턴이 기존 패턴과 일치하는 경우 정규식을 다시 빌드할 필요가 없으므로 스크립트 작업의 속도를 높입니다. 저장소의 디폴트 사이즈는 15입니다. Regex::CacheSize()메서드는 컴파일된 정규식의 현재의 정적 캐시에 있는 최대 항목 수를 반환하거나 설정합니다.
  2. MQL5에서 정규식으로 작업하는 두 번째 기능은 첫 번째 기능에서 바로 이어집니다. 그리고 위의 저장소는 반드시 비워져야 합니다. 그렇게 하려면 Regex::ClearCache() 정적 함수를 호출해야 합니다. 정규식 작업이 완료된 후에만 이 함수를 호출하는 것이 좋습니다. 그렇지 않으면 필요한 포인터가 삭제될 위험이 있습니다.
  3. .Net과 달리 MQL5는 foreach 루프이므로 열거 처리가 다릅니다. 예:
    //--- C#에서 코드
    Regex rx = new Regex(@"\b(?<word>\w+)\s+(\k<word>)\b", RegexOptions.IgnoreCase);   
    string text = "The the quick brown fox  fox jumped over the lazy dog dog.";
    MatchCollection matches = rx.Matches(text);
    foreach (Match match in matches) 
      {
       //--- 핸들링
      }
    
    //--- MQL5에서 코드
    Regex *rx = new Regex("\\b(?<word>\\w+)\\s+(\\k<word>)\\b", RegexOptions::IgnoreCase);        
    string text = "The the quick brown fox  fox jumped over the lazy dog dog.";
    MatchCollection *matches = rx.Matches(text);
    IEnumerator<Match*> *en = matches.GetEnumerator();
    while(en.MoveNext()) 
      {
       Match *match = en.Current();
       //--- 핸들링
      }
    delete rx;
    delete matches;
    delete en;
    Regex::ClearCache();
    
  4. 모든 서식 표시를 무시하기 위해서는 위의 예에서 볼 수 있듯이 C# 구문을 사용하여 문자열 앞에 '@' 기호를 넣을 수 있습니다 MQL5에서는 이 접근 방식이 제공되지 않으므로 정규식 패턴의 모든 제어 문자를 명시적으로 정의해야 합니다.


MQL5용 RegularExpressions 작업의 예:

정규식의 예로 html 파일 형식으로 터미널에서 다운로드한 거래 내역을 구문 분석하는 응용 프로그램을 고려해 보십시오.

그렇게 하려면 '문자열' 유형의 단일 입력 매개변수로 expert를 만드십시오. 이 매개변수를 샌드박스 파일이라 명명합니다:


이 문서에는 "주문" 및 "거래"라는 두 가지 기본 테이블이 있습니다. 

파일을 파싱할 정규식을 만듭니다.

Regex *rgx=new Regex("(>)([^<>]*)(<)");

다음 정규식을 고려하십시오.

(>)
Find the '>' character
(^[<>]*)
'>' 및 '<'를 제외한 모든 심볼은 0번 이상 반복됩니다
(<)
Fin the '<' symbol

다음으로 파일을 한 줄씩 읽고 이 정규식에 해당하는 모든 일치 항목을 가져옵니다.

string str=FileReadString(m_handel);
MatchCollection *matches=rgx.Matches(str);

"Orders" 및 "Deals" 테이블에 대한 항목(튜플)인 html 파일의 문자열은 이러한 일치 항목의 대부분, 즉 각각 23개 및 27개 일치를 갖습니다. 따라서 남은 일은 이 문자열에서 필요한 모든 정보를 추출하는 것뿐입니다.

"Orders" 테이블에서:

if(matches.Count()==23)
  {
   string in[11];
   for(int i=0,j=1; i<11; i++,j+=2)
     {
      in[i]=StringSubstr(matches[j].Value(),1,StringLen(matches[j].Value())-2);
     }
   m_list1.Add(new OrderRecord(in));
  }

일치 개수가 23개로 확인되었으므로 처리된 항목은 "Orders" 테이블에서 가져온 것입니다. 항목의 초기 표현으로 문자열 배열을 만듭니다. 모든 홀수의 일치에 대해 반복작업을 만들고 다음을 사용하여 해당하는 일치 값을 가져옵니다. matches[j][.Value() 메서드를사용하고 '>' 및 '<' 문자에 해당하는 각 일치의 첫 번째 및 마지막 문자를 자릅니다. 형식이 지정된 각 일치 항목은 이전에 선언된 in 정렬에 쓰여집니다. 그 후 "Orders" 테이블의 단일 항목을 나타내는 OrderRecord(in) 클래스를 추가하여 인스턴스를 생성하고 m_list1 목록에 추가하십시오. 이 목록은 "Orders" 테이블을 해석합니다.

"Deals" 테이블은 유사한 방식으로 처리됩니다.

if(matches.Count()==27)
  {
   string in[13];
   for(int i=0,j=1; i<13; i++,j+=2)
     {
      in[i]=StringSubstr(matches[j].Value(),1,StringLen(matches[j].Value())-2);
     }
   m_list2.Add(new DealRecord(in));
  }

m_list2DealRecord 클래스에 대한 포인터 목록입니다. "Deals" 테이블을 나타냅니다.

이 두 목록은 모두TradeHistory 클래스의 멤버입니다. 이 클래스는 전체 원본 html 파일을 나타냅니다. 또한 다음 방법을 사용하여 "Orders" 및 "Deals" 테이블에 간단한 필터를 적용할 수 있습니다.FindAllOrders(const int columnIndex, const T 값) 그리고FindAllDeals(const int columnIndex, const T 값).

EA에서 간단한 그래픽 인터페이스를 만들어 다음 기능을 보여줍니다.


이 양식으로 작업할 때 원하는 테이블을 선택하고 테이블을 필터링할 열과 해당 값을 선택합니다. 찾기 버튼을 클릭하면 필터링된 테이블이 일부 통계와 함께 아래에 표시됩니다. 저장 버튼은 현재 표시된 테이블을 csv 파일에 저장합니다. 저장된 파일은 샌드박스에도 위치하며 파일 이름은Results.csv입니다.

MQL5용 정규식 및 그 기능에 대해 자세히 알아보려면 제공된 Tests.mqh Expert를 사용해 보세요. 라이브러리의 모든 주요 기능을 다루는 다양한 정규식 사용 예를 구현합니다.

MetaQuotes Ltd에서 러시아어로 번역함.
원본 코드: https://www.mql5.com/ru/code/15242

MACD 샘플 MACD 샘플

MACD Sample Expert Advisor는 MACD의 메인 라인과 시그널 라인의 교차점에서 거래합니다. 이 Expert Advisor는 EA 개발에서 객체 지향 접근 방식의 한 예입니다.

이동 평균 이동 평균

이동 평균 Expert Advisor는 가격이 MA를 교차할 때 거래합니다.

Demo_BitmapOffset (OBJPROP_XOFFSET and OBJPROP_YOFFSET) Demo_BitmapOffset (OBJPROP_XOFFSET and OBJPROP_YOFFSET)

만약 현재 이미지의 일부만 표시하고 나머지는 숨길 필요가 있는 경우 이미지가 보이는 부분을 지정하여 이동하는 창을 사용할 수 있습니다.

MQL5 마법사 - 캔들 스틱 패턴에 기반한 거래 신호 + 스토캐스틱 MQL5 마법사 - 캔들 스틱 패턴에 기반한 거래 신호 + 스토캐스틱

스토캐스틱 지표에 의한 확인과 캔들스틱 패턴을 통한 거래 신호