125 lines
6.9 KiB
MQL5
125 lines
6.9 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| inferencemethod.mqh |
|
|
//| Copyright 2000-2025, MetaQuotes Ltd. |
|
|
//| https://www.mql5.com |
|
|
//+------------------------------------------------------------------+
|
|
//| Implementation of Fuzzy library in MetaQuotes Language 5 |
|
|
//| |
|
|
//| The features of the library include: |
|
|
//| - Create Mamdani fuzzy model |
|
|
//| - Create Sugeno fuzzy model |
|
|
//| - Normal membership function |
|
|
//| - Triangular membership function |
|
|
//| - Trapezoidal membership function |
|
|
//| - Constant membership function |
|
|
//| - Defuzzification method of center of gravity (COG) |
|
|
//| - Defuzzification method of bisector of area (BOA) |
|
|
//| - Defuzzification method of mean of maxima (MeOM) |
|
|
//| |
|
|
//| This file is free software; you can redistribute it and/or |
|
|
//| modify it under the terms of the GNU General Public License as |
|
|
//| published by the Free Software Foundation (www.fsf.org); either |
|
|
//| version 2 of the License, or (at your option) any later version. |
|
|
//| |
|
|
//| This program is distributed in the hope that it will be useful, |
|
|
//| but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
|
//| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
|
//| GNU General Public License for more details. |
|
|
//+------------------------------------------------------------------+
|
|
#include <Arrays\List.mqh>
|
|
//+------------------------------------------------------------------+
|
|
//| Purpose: Contains a number of enumerations, |
|
|
//| for the convenience of working with other files |
|
|
//+------------------------------------------------------------------+
|
|
//+------------------------------------------------------------------+
|
|
//| And evaluating method |
|
|
//+------------------------------------------------------------------+
|
|
enum EnAndMethod
|
|
{
|
|
MinAnd, // Minimum: min(a, b)
|
|
ProductionAnd // Production: a * b
|
|
};
|
|
//+------------------------------------------------------------------+
|
|
//| Or evaluating method |
|
|
//+------------------------------------------------------------------+
|
|
enum EnOrMethod
|
|
{
|
|
MaxOr, // Maximum: max(a, b)
|
|
ProbabilisticOr // Probabilistic OR: a + b - a * b
|
|
};
|
|
//+------------------------------------------------------------------+
|
|
//| Fuzzy implication method |
|
|
//+------------------------------------------------------------------+
|
|
enum ImplicationMethod
|
|
{
|
|
MinIpm, // Truncation of output fuzzy set
|
|
ProductionImp // Scaling of output fuzzy set
|
|
};
|
|
//+------------------------------------------------------------------+
|
|
//| Aggregation method for membership functions |
|
|
//+------------------------------------------------------------------+
|
|
enum AggregationMethod
|
|
{
|
|
MaxAgg, // Maximum of rule outpus
|
|
SumAgg // Sum of rule output
|
|
};
|
|
//+------------------------------------------------------------------+
|
|
//| Defuzzification method |
|
|
//+------------------------------------------------------------------+
|
|
enum DefuzzificationMethod
|
|
{
|
|
CentroidDef, // Center of area of fuzzy result MF
|
|
BisectorDef, // The point divides the area under the MF into two equal
|
|
AverageMaximumDef, // Arithmetic mean of all the maxima of the MF
|
|
LargestMaximumDef, // The largest of the maxima of the membership function
|
|
SmallestMaximumDef // The smallest of the maxima of the membership function
|
|
};
|
|
//+------------------------------------------------------------------+
|
|
//| Type of varriable and term |
|
|
//+------------------------------------------------------------------+
|
|
enum EnType
|
|
{
|
|
TYPE_CLASS_INamedValue, // Base class
|
|
TYPE_CLASS_INamedVariable, // INamedVariable : INamedValue
|
|
TYPE_CLASS_NamedVariableImpl, // NamedVariableImpl : INamedVariable
|
|
TYPE_CLASS_NamedValueImpl, // NamedValueImpl : INamedValue
|
|
TYPE_CLASS_FuzzyTerm, // FuzzyTerm : NamedValueImpl
|
|
TYPE_CLASS_FuzzyVariable, // FuzzyVariable : NamedVariableImpl
|
|
TYPE_CLASS_SugenoVariable, // SugenoVariable : NamedVariableImpl
|
|
TYPE_CLASS_ISugenoFunction, // ISugenoFunction : NamedValueImpl
|
|
TYPE_CLASS_LinearSugenoFunction // LinearSugenoFunction : ISugenoFunction
|
|
};
|
|
//+------------------------------------------------------------------+
|
|
//| Type of expression |
|
|
//+------------------------------------------------------------------+
|
|
enum EnLexem
|
|
{
|
|
TYPE_CLASS_IExpression, // Base class
|
|
TYPE_CLASS_Lexem, // Lexem : IExpression
|
|
TYPE_CLASS_ConditionExpression, // ConditionExpression : IExpression
|
|
TYPE_CLASS_VarLexem, // VarLexem : Lexem
|
|
TYPE_CLASS_KeywordLexem, // KeywordLexem : Lexem
|
|
TYPE_CLASS_AltLexem, // AltLexem : Lexem
|
|
TYPE_CLASS_TermLexem // TermLexem : AltLexem
|
|
};
|
|
//+------------------------------------------------------------------+
|
|
//| Type of condition |
|
|
//+------------------------------------------------------------------+
|
|
enum EnCondition
|
|
{
|
|
TYPE_CLASS_ICondition, // Base class
|
|
TYPE_CLASS_Conditions, // Conditions : ICondition
|
|
TYPE_CLASS_SingleCondition, // SingleCondition : ICondition
|
|
TYPE_CLASS_FuzzyCondition // FuzzyCondition : SingleCondition
|
|
};
|
|
//+------------------------------------------------------------------+
|
|
//| Type of rule |
|
|
//+------------------------------------------------------------------+
|
|
enum EnRule
|
|
{
|
|
TYPE_CLASS_IParsableRule, // Base class
|
|
TYPE_CLASS_GenericFuzzyRule, // GenericFuzzyRule : IParsableRule
|
|
TYPE_CLASS_MamdaniFuzzyRule, // MamdaniFuzzyRule : GenericFuzzyRule
|
|
TYPE_CLASS_SugenoFuzzyRule // SugenoFuzzyRule : GenericFuzzyRule
|
|
};
|
|
//+------------------------------------------------------------------+
|