Autor
Dmitry Kalyuzhny. Site do projeto FuzzyNet - http://sourceforge.net/projects/fuzzynet/
Descompacte o arquivo no terminal_data_folder.
Os códigos da biblioteca estão localizados no <terminal_data_folder>\MQL5\Include\Math\FuzzyNet\
Exemplos de testes de scripts podem ser encontrados no <terminal_data_folder>\MQL5\Scripts\FuzzyNet\
FuzzyNet é uma das bibliotecas matemáticas mais populares para a criação de modelos fuzzy
Biblioteca Lógica Fuzzy para Microsoft.Net (FuzzyNet) é um componente de uso fácil que implementa sistemas de inferência fuzzy Mamdani e Sugeno.
FuzzyNet inclui:
As seguintes adições foram feitas ao converter a biblioteca para MQL5:
Usando a Biblioteca
Nota: O sistema de inferência tipo Mamdani pode ser configurado em qualquer estágio após a sua criação antes de ser chamada a função de cálculo do sistema. Se as configurações do sistema não foram alteradas após a sua criação, o sistema funciona com as configurações padrão:
A conversão da biblioteca FuzzyNet (v. 1.2.0) é exibida a seguir.
Para trabalhar com a biblioteca, incluir os arquivos MamdaniFuzzySystem.mqh ou SugenoFuzzySystem.mqh, dependendo do sistema que você está criando.
Abaixo, informações mais detalhadas sobre os pacotes de bibliotecas portados FuzzyNet:| Pacotes | Descrição |
|---|---|
| Dictionary.mqh | O pacote contém classes adicionais necessárias para outros pacotes. |
| FuzzyRule.mqh | Classes para a criação de regras fuzzy:
O pacote também contém classes auxiliares para implementar regras fuzzy. |
| FuzzyTerm.mqh | Pacote para a criação de termos fuzzy. |
| FuzzyVariable.mqh | Pacote para a criação de variáveis fuzzy. |
| GenericFuzzySystem.mqh | A classe implementa a funcionalidade comum para os sistemas Mamdani e Sugeno. |
| Helper.mqh | O pacote contém classes adicionais necessárias para outros pacotes. |
| InferenceMethod.mqh | O pacote contém classes adicionais necessárias para outros pacotes. |
| MamdaniFuzzySystem.mqh | A classe para a criação de um sistema fuzzy do tipo Mamdani. |
| MembershipFunction.mqh | Classes das funções de pertinência:
|
| RuleParser.mqh | Classe para analisar regras fuzzy. |
| SugenoFuzzySystem.mqh | Classe para a criação de um sistema fuzzy do tipo Sugeno. |
| SugenoVariable.mqh | O pacote contém as seguintes classes:
Variáveis fuzzy do tipo Sugeno são utilizadas no desenvolvimento de regras para um sistema do tipo Sugeno. |
Usando a biblioteca FuzzyNet para MQL5
Antes de escrever um sistema fuzzy, você deve ter uma visão clara dos seus elementos, incluindo:
O desenvolvimento do sistema e cálculo:
Para um sistema do tipo Mamdani:
MamdaniFuzzySystem *fuzzy_system=new MamdaniFuzzySystem();Para um sistema do tipo Sugeno:
SugenoFuzzySystem *fuzzy_system=new SugenoFuzzySystem();
FuzzyVariable *fuzzy_variable=new FuzzyVariable(const string name,const double min,const double max);
fuzzy_variable.Terms().Add(new FuzzyTerm(const string name,new IMembershipFunction());
fuzzy_system.Input().Add(FuzzyVariable fuzzy_variable);
SugenoVariable *sugeno_variable=new SugenoVariable(const string name);Funções lineares interpretam a combinação linear dos valores de entrada e são adicionadas a uma variável fuzzy do tipo Sugeno, ao invés de termos fuzzy. Um nome e um coeficiente array são usados como parâmetros de função lineares. Uma equação linear é formada com base no array, por conseguinte é importante cumprir com a ordem dos elementos no array. Um coeficiente de comprimento do array deve ser igual à quantidade de valores de entrada ou exceder esse valor por um. Se os comprimentos são iguais, um termo absoluto de uma equação é igual a zero. Se o comprimento do array excede a quantidade por um, um termo absoluto é igual ao último valor do elemento. Todos os outros elementos do array, começando a partir do primeiro, são atribuídos a variáveis de entrada fuzzy na ordem em que foram inseridos no sistema.
sugeno_varriable.Functions().Add(fuzzy_sytem.CreateSugenoFunction(const string name, const double &coeffs[]));
Para um sistema do tipo Mamdani:
fuzzy_system.Output().Add(FuzzyVariable fuzzy_variable);
Para um sistema do tipo Sugeno:
fuzzy_system.Output().Add(FuzzyVariable fuzzy_variable);
Para um sistema do tipo Mamdani:
MamdaniFuzzyRule *fuzzy_rule = fuzzy_system.ParseRule(const string rule_text);
Para um sistema do tipo Sugeno:
SugenoFuzzyRule *fuzzy_rule = fuzzy_system.ParseRule(const string rule_text);
Para um sistema do tipo Mamdani:
fuzzy_system.Rules().Add(MamdaniFuzzyRule fuzzy_rule);
Para um sistema do tipo Sugeno:
fuzzy_system.Rules().Add(SugenoFuzzyRule fuzzy_rule);
Dictionary_Obj_Double *p_od_in=new Dictionary_Obj_Double;A classe implementa o método SetAll(CObject *key, const double value), aceitando dois parâmetros - uma variável fuzzy e um valor numérico. Este elemento é uma variável de entrada do sistema.
p_od_in.SetAll(FuzzyVariable fuzzy_variable,const double value);Todos os outros valores de entrada são preenchidos da mesma maneira. Criar a lista e adicionar todos os valores a ela:
CList *in=new CList; in.Add(p_od_in);
Dictionary_Obj_Double *p_od_out=new Dictionary_Obj_Double; CList *out=new CList;
out=fuzzy_system.Calculate(in);Depois disso, a lista "out" armazena todos os valores de saída calculados na ordem que foram inseridos. Nós só precisamos recebê-los:
p_od_out=out.GetNodeAtIndex(int index); double result=p_od_out.Value();Agora, a variável "result" armazena o resultado do cálculo do sistema para um valor de saída inserido no sistema sob um número específico no índice.
Modelos de Scripts
Tips Sample (Mamdani)
Tips_Sample_Mamdani.mq5 calcula a porcentagem da gorjeta que você precisa pagar, dependendo da qualidade de serviço e comida.
Entre com os parâmetros de entrada:

Os resultados dos cálculos:

Cruise Control Sample (Sugeno)
O modelo de script Cruise_Control_Sample_Sugeno.mq5 é um exemplo de regulador fuzzy. Ela representa um sistema de controle de velocidade de um carro, calcula a aceleração necessária utilizando os dados sobre o desvio atual e a taxa de desvio de mudança, com o objetivo do carro atingir a velocidade desejada.
Entre com os parâmetros de entrada:

Os resultados dos cálculos:

Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/13697
Exp_CyclePeriod
O Expert Advisor Exp_CyclePeriod é baseado na reversão da direção não normalizada do oscilador CyclePeriod.
CyclePeriod_HTF
O indicador CyclePeriod com a opção de seleção do timeframe nos parâmetros de entrada.
DecEMA_HTF
O indicador DecEMA com a opção de seleção do timeframe nos parâmetros de entrada.
Demand_Index_HTF
O indicador Demand_Index com a opção de seleção do timeframe nos parâmetros de entrada.