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

Fuzzy - fuzzy 모델 개발을 위한 라이브러리 - MetaTrader 4용 라이브러리

게시자:
MetaQuotes
조회수:
243
평가:
(51)
게시됨:
2022.01.10 11:43
이 코드를 기반으로 한 로봇이나 지표가 필요하신가요? 프리랜스로 주문하세요 프리랜스로 이동

실제 저자

Dmitry Kalyuzhny. FuzzyNet 프로젝트 웹사이트 - http://sourceforge.net/projects/fuzzynet/

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

FuzzyNet은 퍼지 모델 생성을 위한 가장 인기 있는 수학 라이브러리 중 하나입니다.

Microsoft.Net(FuzzyNet)용 퍼지 논리 라이브러리는 Mamdani 및 Sugeno 퍼지 추론 시스템을 구현하는 사용하기 쉬운 컴포넌트 입니다.

FuzzyNet:

라이브러리를 MQL4로 변환할 때 다음이 추가되었습니다.

  • 8가지 새로운 membership functions.
  • Mamdani-type 시스템용 4가지 새로운 defuzzification 메서드.

라이브러리 사용

  1. 수행할 작업에 따라 비워진 fuzzy Mamdani 이나 Sugeno-type 시스템을 생성합니다.
  2. fuzzy 입력과 출력 변수를 생성합니다.
  3. 각 퍼지 변수에 적절한 용어가 추가됩니다. 그 전에 용어에 이름과 소속 기능이 할당됩니다.
  4. 변수가 시스템에 추가됩니다.
  5. 일련의 규칙이 생성됩니다.
  6. 규칙이 시스템에 추가됩니다.
  7. 입력 데이터가 시스템으로 전송됩니다.
  8. 시스템 계산 기능이 호출됩니다.

참고: Mamdani 유형의 추론 시스템은 생성 후 시스템 계산 함수가 호출되기 전의 모든 단계에서 구성될 수 있습니다. 생성 후 시스템 설정이 변경되지 않은 경우 시스템은 기본 설정으로 작동합니다.

  • ImplicationMin 연산자(출력되는 퍼지 집합이 잘림)를 사용하여 수행됩니다..
  • AggregationMax 연산자(implication 후 얻은 출력 멤버십 함수의 최대값 수신)을 사용하여 수행됩니다.
  • Defuzzification은 무게 중심 방식을 사용하여 수행됩니다.

FuzzyNet library (v. 1.2.0) 변환은 아래와 같습니다.

라이브러리로 작업하려면 생성하는 시스템에 따라 MamdaniFuzzySystem.mqh 또는 SugenoFuzzySystem.mqh 파일을 포함합니다.

다음은 FuzzyNet 포트된 라이브러리 패키지에 대한 자세한 정보입니다.
패키지
설명
Dictionary.mqh
패키지에는 다른 패키지에 필요한 추가적인 클래스가 포함되어 있습니다.
FuzzyRule.mqh
퍼지 규칙 생성을 위한 클래스:
  1. GenericFuzzyRule - non-fuzzy rule condition을 생성하기 위한 클래스.
  2. MamdaniFuzzyRule - Mamdani-type fuzzy rule conclusion을 생성하기 위한 클래스.
  3. SugenoFuzzyRule - Sugeno-type fuzzy rule conclusion을 생성하기 위한 클래스.

패키지에는 퍼지 규칙을 구현하기 위한 보조 클래스도 포함되어 있습니다.

FuzzyTerm.mqh fuzzy terms을 생성하기 위한 패키지.
FuzzyVariable.mqh fuzzy variables을 생성하기 위한 패키지.
GenericFuzzySystem.mqh 이 클래스는 Mamdani 및 Sugeno 시스템용의 공통 기능을 구현합니다.
Helper.mqh 패키지에는 다른 패키지에 필요한 추가적인 클래스가 포함되어 있습니다.
InferenceMethod.mqh 패키지에는 다른 패키지에 필요한 추가적인 클래스가 포함되어 있습니다.
MamdaniFuzzySystem.mqh Mamdani-type fuzzy system을 생성하기 위한 클래스.
MembershipFunction.mqh 멤버쉽 기능의 클래스:
  1. 가우시안 멤버쉽 함수.
  2. Two-sided Gaussian membership 함수.
  3. Generalized bell-shaped 멤버쉽 함수.
  4. S-shaped membership function.
  5. Z-shaped membership function.
  6. Pi-shaped membership function.
  7. Sigmoid membership function.
  8. Product of two sigmoid membership functions.
  9. two sigmoid functions 간의 차이 형태의 멤버십 함수.
  10. Trapezoidal membership function.
  11. Triangular membership function.
  12. Membership function in the form of a constant.
  13. Membership function as a composition of membership functions.
RuleParser.mqh fuzzy rules 분석용 클래스.
SugenoFuzzySystem.mqh Sugeno-type fuzzy system을 생성하기 위한 클래스.
SugenoVariable.mqh 패키지에는 다음 클래스가 포함되어 있습니다.
  1. LinearSugenoFuction - linear functions을 생성하기 위한 클래스.
  2. SugenoVariable - Sugeno-type fuzzy variable을 생성하기 위한 클래스.

Sugeno-type fuzzy variables은 Sugeno-type system의 rule을 개발항 때 사용됩니다.

 

Using FuzzyNet Library in MQL4

퍼지 시스템을 작성하기 전에 다음을 포함하여 해당 요소에 대한 명확한 이해가 있어야 합니다.

  1. 퍼지 변수에 의해 재배열될 입력 및 출력 값의 수.
  2. 각 퍼지 변수에 대한 용어의 수와 소속 함수.
  3. 작업하고자 하는 내용에 따른 퍼지 시스템 유형.
  4. 선택한 시스템에 해당하는 퍼지 규칙의 수와 내용.
  5. 시스템의 특정 매개변수 및 기능.

시스템 개발 및 계산:

  1. 빈 시스템을 만듭니다.

    Mamdani 유형 시스템의 경우:

    MamdaniFuzzySystem *fuzzy_system=new MamdaniFuzzySystem();
    Sugeno-type system일 경우:
    SugenoFuzzySystem *fuzzy_system=new SugenoFuzzySystem();
  2. 모든 변수에 이름과 최대/최소 값을 매개변수로 할당하여 모든 퍼지 입력 변수를 시스템과 별도로 생성합니다.
    FuzzyVariable *fuzzy_variable=new FuzzyVariable(const string name,const double min,const double max);
  3. 퍼지 용어의 기능을 만들고, 퍼지 용어 자체를 만들고, 적절한 이름과 소속 기능을 전달합니다. 그런 다음 해당 변수에 용어를 추가합니다. 프로그램 코드를 줄이기 위해 프로세스를 다음과 같이 작성할 수 있습니다.
    fuzzy_variable.Terms().Add(new FuzzyTerm(const string name,new IMembershipFunction());
  4. 시스템에 입력 변수를 입력합니다.
    fuzzy_system.Input().Add(FuzzyVariable fuzzy_variable);
  5. 시스템 유형에 주의하면서 입력 변수를 만듭니다. Mamdani-type system이라면 steps 2 and 3와 같이 생성합니다. Sugeno-type 모델의 경우 변수 이름만 매개변수로 허용하는 특수 퍼지 변수를 생성합니다.
    SugenoVariable *sugeno_variable=new SugenoVariable(const string name);
    입력 값의 선형 조합을 해석하는 선형 함수가 fuzzy 항 대신 Sugeno형 퍼지 변수에 추가됩니다. 이름과 계수 배열은 선형 함수의 매개변수로 사용됩니다. 배열을 기반으로 선형 방정식이 형성되므로 배열의 요소 순서를 준수하는 것이 중요합니다. 계수 배열 길이는 입력 값의 양과 같거나 1을 초과해야 합니다. 길이가 같으면 방정식의 절대 항은 0과 같습니다. 배열 길이가 1을 초과하면 절대 항은 마지막 요소 값과 같습니다. 첫 번째 요소부터 시작하는 다른 모든 배열 요소는 시스템에 입력된 순서대로 퍼지 입력 변수에 할당됩니다.
    sugeno_varriable.Functions().Add(fuzzy_sytem.CreateSugenoFunction(const string name, const double &coeffs[]));
  6. 4단계와 유사하게 출력 변수도 시스템에 추가해야 합니다.

    Mamdani 유형 시스템의 경우:

    fuzzy_system.Output().Add(FuzzyVariable fuzzy_variable);

    Sugeno-type system일 경우:

    fuzzy_system.Output().Add(FuzzyVariable fuzzy_variable);
  7. 시스템에 따라 일련의 규칙을 정렬합니다. 규칙은 공통 문자열로 정의되며 키워드에 따라 자동으로 분석됩니다. 키워드는 "if", "then", "is", "and", "or", "not", "(", ")", "slightly", "something", "very" 및 "extremely"와 시스템에서 사용할 수 있는 변수, 용어 및 기능의 모든 이름입니다.

    Mamdani 유형 시스템의 경우:

    MamdaniFuzzyRule *fuzzy_rule = fuzzy_system.ParseRule(const string rule_text);

    Sugeno-type system일 경우:

    SugenoFuzzyRule *fuzzy_rule = fuzzy_system.ParseRule(const string rule_text);
  8. 시스템에 모든 규칙을 입력합니다.

    Mamdani 유형 시스템의 경우:

    fuzzy_system.Rules().Add(MamdaniFuzzyRule fuzzy_rule);

    Sugeno-type system일 경우:

    fuzzy_system.Rules().Add(SugenoFuzzyRule fuzzy_rule);
  9. 계산을 위해 시스템에 변수의 입력 값을 전달합니다. 이를 위해 모두 정의되어야 합니다. 입력 시 시스템은 Dictionary_Obj_Double 클래스 개체를 포함하는 값 목록을 받아들입니다. 클래스는 Dictionary.mqh 파일에 설명되어 있습니다.
    Dictionary_Obj_Double *p_od_in=new Dictionary_Obj_Double;
    이 클래스는 두 매개 변수 - 퍼지 변수와 숫자 값- 를 허용하는 SetAll(CObject *key, const double 값) 메서드를 구현합니다. 이 요소는 시스템의 입력 변수입니다.
    p_od_in.SetAll(FuzzyVariable fuzzy_variable,const double value);
    다른 모든 입력 값은 같은 방식으로 채워집니다. 목록을 만들고 모든 값을 추가합니다.
    CList *in=new CList;
    in.Add(p_od_in);
  10. 출력 값도 지정되어야 합니다.
    Dictionary_Obj_Double *p_od_out=new Dictionary_Obj_Double;   
    CList *out=new CList;
  11. 시스템 계산 결과 목록을 반환하는 시스템에 대해 Calculate(CList *&list) 함수를 호출합니다.
    out=fuzzy_system.Calculate(in);
    그 후,out list는 계산된 모든 출력 값을 시스템에 입력된 순서대로 저장합니다. 우리는 그것들을 받기만 하면 됩니다:
    p_od_out=out.GetNodeAtIndex(int index);
    double result=p_od_out.Value();
    이제 result 변수는 인덱스에 지정된 숫자로 시스템에 입력된 출력 값에 대한 시스템 계산 결과를 저장합니다.

샘플 스크립트

Tips Sample (Mamdani)

Tips_Sample_Mamdani.mq4 calculates the tip percentage you need to pay depending on the quality of service and food.

입력 매개변수를 입력합니다.

입력 매개변수

계산 결과:

계산 결과

Cruise Control Sample (Sugeno)

Cruise_Control_Sample_Sugeno.mq4 sample script is an example of a fuzzy regulator. 자동차가 원하는 속도에 도달하기 위해 현재 편차와 편차의 변화율와 관련한 데이터를 사용하여 필요한 가속도를 계산하는 자동차 크루즈 컨트롤 시스템을 말합니다.

입력 매개변수를 입력합니다.

입력 매개변수

계산 결과:

계산 결과

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

Didi Index (Cleaned/Reversed) Didi Index (Cleaned/Reversed)

Slow Line of the original Didi Index

Save current chart to default template Save current chart to default template

it saves the current chart to default template , it just helps to do it faster than a manual save. you can assign a hotkey for it. it has no confirmation and immediately saves the template, if you want it to save to a template other than default just edit the code and replace "default.tpl" to any other name you want.

정규식 작업을 위한 MQL4의 RegularExpressions 정규식 작업을 위한 MQL4의 RegularExpressions

정규식은 빠르고 유연한 텍스트 처리를 위한 공식적인 언어를 제공합니다. 각 정규식은 정규식 엔진이 소스 텍스트에서 일치 항목을 찾으려고 하는 패턴(마스크)입니다. 패턴은 하나 이상의 character literals, operators, constructs으로 구성됩니다.

Quantile Price Analysis Quantile Price Analysis

Quantile Price Analysis by Jas Wu, Calculations are below.