FuzzyNet - a library for working with fuzzy logic:
Author: MetaQuotes Software Corp.
1. It's great that this is now available in mt5. Do I understand correctly that maths is maths in Africa and will work in MT4?
2. I first tried Fuzzi in Matlab, but to be honest, it was a long time ago and I never really understood how to apply it to forex trading with guaranteed profit. As a result, I went in the direction of wavelets, statistics and so on.
3. Can you suggest literature on how to apply Fuzzi-logic in practice? Even if not in trading.
4. I am interested in the topic, does the site need an article on this topic?
1. It's great that this is now available in mt5. Do I understand correctly that maths is maths in Africa and will work in MT4?
2. I first tried Fuzzi in Matlab, but, to be honest, it was a long time ago and I never really understood how to apply it to forex trading with guaranteed profit. As a result, I went in the direction of wavelets, statistics and so on.
3. Can you suggest literature on how to apply Fuzzi-logic in practice? Even if not in trading.
4. I am interested in the topic, does the site need an article on this topic?
Hello.
1. We will make adaptation for MT4 (a little later)
3. 4. We will soon release an article on the use of FuzzyNet. After that write to Service Desk to discuss the topic more concretely.
The topic deserves attention. In application requires an understanding of the subject. And from this point of view, the tip examples are not serious. The difference between Mamdani and Sugeno systems should be explained at least in passing. And basic concepts of fuzzy logic would be useful for those who hear about such a concept for the first time.
Somewhere in the archive there is a book on fuzzy logic in Russian (description of the programme Fuzzy Logic System). So with a stroke in the archive will not find. Later I will post it.
Good luck
Hi,
I like those systems as Fuzzy, SVM, Neural, so watching around I found out that lib, I tried. The scripts included are enough to understand, yet few error on compilation I'd just like to notice of - so on the script cruise_control_sample_sugeno.mq5 with sugeno would be :
//| fuzzynet.mqh |
//| Copyright 2015, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
//| Implementation of FuzzyNet library in MetaQuotes Language 5(MQL5)|
//| |
//| The features of the FuzzyNet 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) |
//| |
//| If you find any functional differences between FuzzyNet for MQL5 |
//| and the original FuzzyNet project , please contact developers of |
//| MQL5 on the Forum at www.mql5.com. |
//| |
//| You can report bugs found in the computational algorithms of the |
//| FuzzyNet library by notifying the FuzzyNet project coordinators |
//+------------------------------------------------------------------+
//| SOURCE LICENSE |
//| |
//| This program 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. |
//| |
//| A copy of the GNU General Public License is available at |
//| http://www.fsf.org/licensing/licenses |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
#property script_show_inputs
//+------------------------------------------------------------------+
//| Connecting libraries |
//+------------------------------------------------------------------+
#include <Math\FuzzyNet\SugenoFuzzySystem.mqh>
//--- input parameters
input double Speed_Error;
input double Speed_ErrorDot;
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- Sugeno Fuzzy System
CSugenoFuzzySystem *fsCruiseControl=new CSugenoFuzzySystem();
//--- Create first input variables for the system
CFuzzyVariable *fvSpeedError=new CFuzzyVariable("SpeedError",-20.0,20.0);
fvSpeedError.Terms().Add(new CFuzzyTerm("slower",new CTriangularMembershipFunction(-35.0,-20.0,-5.0)));
fvSpeedError.Terms().Add(new CFuzzyTerm("zero", new CTriangularMembershipFunction(-15.0, -0.0, 15.0)));
fvSpeedError.Terms().Add(new CFuzzyTerm("faster", new CTriangularMembershipFunction(5.0, 20.0, 35.0)));
fsCruiseControl.Input().Add(fvSpeedError);
//--- Create second input variables for the system
CFuzzyVariable *fvSpeedErrorDot=new CFuzzyVariable("SpeedErrorDot",-5.0,5.0);
fvSpeedErrorDot.Terms().Add(new CFuzzyTerm("slower", new CTriangularMembershipFunction(-9.0, -5.0, -1.0)));
fvSpeedErrorDot.Terms().Add(new CFuzzyTerm("zero", new CTriangularMembershipFunction(-4.0, -0.0, 4.0)));
fvSpeedErrorDot.Terms().Add(new CFuzzyTerm("faster", new CTriangularMembershipFunction(1.0, 5.0, 9.0)));
fsCruiseControl.Input().Add(fvSpeedErrorDot);
//--- Create Output
CSugenoVariable *svAccelerate=new CSugenoVariable("Accelerate");
double coeff1[3]={0.0,0.0,0.0};
svAccelerate.Functions().Add(fsCruiseControl.CreateSugenoFunction("zero",coeff1));
double coeff2[3]={0.0,0.0,1.0};
svAccelerate.Functions().Add(fsCruiseControl.CreateSugenoFunction("faster",coeff2));
double coeff3[3]={0.0,0.0,-1.0};
svAccelerate.Functions().Add(fsCruiseControl.CreateSugenoFunction("slower",coeff3));
double coeff4[3]={-0.04,-0.1,0.0};
svAccelerate.Functions().Add(fsCruiseControl.CreateSugenoFunction("func",coeff4));
fsCruiseControl.Output().Add(svAccelerate);
//--- Craete Sugeno fuzzy rule
CSugenoFuzzyRule *rule1 = fsCruiseControl.ParseRule("if (SpeedError is slower) and (SpeedErrorDot is slower) then (Accelerate is faster)");
CSugenoFuzzyRule *rule2 = fsCruiseControl.ParseRule("if (SpeedError is slower) and (SpeedErrorDot is zero) then (Accelerate is faster)");
CSugenoFuzzyRule *rule3 = fsCruiseControl.ParseRule("if (SpeedError is slower) and (SpeedErrorDot is faster) then (Accelerate is zero)");
CSugenoFuzzyRule *rule4 = fsCruiseControl.ParseRule("if (SpeedError is zero) and (SpeedErrorDot is slower) then (Accelerate is faster)");
CSugenoFuzzyRule *rule5 = fsCruiseControl.ParseRule("if (SpeedError is zero) and (SpeedErrorDot is zero) then (Accelerate is func)");
CSugenoFuzzyRule *rule6 = fsCruiseControl.ParseRule("if (SpeedError is zero) and (SpeedErrorDot is faster) then (Accelerate is slower)");
CSugenoFuzzyRule *rule7 = fsCruiseControl.ParseRule("if (SpeedError is faster) and (SpeedErrorDot is slower) then (Accelerate is faster)");
CSugenoFuzzyRule *rule8 = fsCruiseControl.ParseRule("if (SpeedError is faster) and (SpeedErrorDot is zero) then (Accelerate is slower)");
CSugenoFuzzyRule *rule9 = fsCruiseControl.ParseRule("if (SpeedError is faster) and (SpeedErrorDot is faster) then (Accelerate is slower)");
//--- Add Sugeno fuzzy rule in system
fsCruiseControl.Rules().Add(rule1);
fsCruiseControl.Rules().Add(rule2);
fsCruiseControl.Rules().Add(rule3);
fsCruiseControl.Rules().Add(rule4);
fsCruiseControl.Rules().Add(rule5);
fsCruiseControl.Rules().Add(rule6);
fsCruiseControl.Rules().Add(rule7);
fsCruiseControl.Rules().Add(rule8);
fsCruiseControl.Rules().Add(rule9);
//--- Set input value and get result
CList *in=new CList;
CDictionary_Obj_Double *p_od_Error=new CDictionary_Obj_Double;
CDictionary_Obj_Double *p_od_ErrorDot=new CDictionary_Obj_Double;
p_od_Error.SetAll(fvSpeedError,Speed_Error);
p_od_ErrorDot.SetAll(fvSpeedErrorDot,Speed_ErrorDot);
in.Add(p_od_Error);
in.Add(p_od_ErrorDot);
//--- Get result
CList *result;
CDictionary_Obj_Double *p_od_Accelerate;
result=fsCruiseControl.Calculate(in);
p_od_Accelerate=result.GetNodeAtIndex(0);
Alert("Accelerate, %: ",p_od_Accelerate.Value()*100);
delete in;
delete result;
delete fsCruiseControl;
}
//+------------------------------------------------------------------+
And the script with the mamdani :
//| fuzzynet.mqh |
//| Copyright 2015, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
//| Implementation of FuzzyNet library in MetaQuotes Language 5(MQL5)|
//| |
//| The features of the FuzzyNet 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) |
//| |
//| If you find any functional differences between FuzzyNet for MQL5 |
//| and the original FuzzyNet project , please contact developers of |
//| MQL5 on the Forum at www.mql5.com. |
//| |
//| You can report bugs found in the computational algorithms of the |
//| FuzzyNet library by notifying the FuzzyNet project coordinators |
//+------------------------------------------------------------------+
//| SOURCE LICENSE |
//| |
//| This program 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. |
//| |
//| A copy of the GNU General Public License is available at |
//| http://www.fsf.org/licensing/licenses |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
#property script_show_inputs
//+------------------------------------------------------------------+
//| Connecting libraries |
//+------------------------------------------------------------------+
#include <Math\FuzzyNet\MamdaniFuzzySystem.mqh>
//--- input parameters
input double Service;
input double Food;
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- Mamdani Fuzzy System
CMamdaniFuzzySystem *fsTips=new CMamdaniFuzzySystem();
//--- Create first input variables for the system
CFuzzyVariable *fvService=new CFuzzyVariable("service",0.0,10.0);
fvService.Terms().Add(new CFuzzyTerm("poor", new CTriangularMembershipFunction(-5.0, 0.0, 5.0)));
fvService.Terms().Add(new CFuzzyTerm("good", new CTriangularMembershipFunction(0.0, 5.0, 10.0)));
fvService.Terms().Add(new CFuzzyTerm("excellent", new CTriangularMembershipFunction(5.0, 10.0, 15.0)));
fsTips.Input().Add(fvService);
//--- Create second input variables for the system
CFuzzyVariable *fvFood=new CFuzzyVariable("food",0.0,10.0);
fvFood.Terms().Add(new CFuzzyTerm("rancid", new CTrapezoidMembershipFunction(0.0, 0.0, 1.0, 3.0)));
fvFood.Terms().Add(new CFuzzyTerm("delicious", new CTrapezoidMembershipFunction(7.0, 9.0, 10.0, 10.0)));
fsTips.Input().Add(fvFood);
//--- Create Output
CFuzzyVariable *fvTips=new CFuzzyVariable("tips",0.0,30.0);
fvTips.Terms().Add(new CFuzzyTerm("cheap", new CTriangularMembershipFunction(0.0, 5.0, 10.0)));
fvTips.Terms().Add(new CFuzzyTerm("average", new CTriangularMembershipFunction(10.0, 15.0, 20.0)));
fvTips.Terms().Add(new CFuzzyTerm("generous", new CTriangularMembershipFunction(20.0, 25.0, 30.0)));
fsTips.Output().Add(fvTips);
//--- Create three Mamdani fuzzy rule
CMamdaniFuzzyRule *rule1 = fsTips.ParseRule("if (service is poor ) or (food is rancid) then tips is cheap");
CMamdaniFuzzyRule *rule2 = fsTips.ParseRule("if ((service is good)) then tips is average");
CMamdaniFuzzyRule *rule3 = fsTips.ParseRule("if (service is excellent) or (food is delicious) then (tips is generous)");
//--- Add three Mamdani fuzzy rule in system
fsTips.Rules().Add(rule1);
fsTips.Rules().Add(rule2);
fsTips.Rules().Add(rule3);
//--- Set input value
CList *in=new CList;
CDictionary_Obj_Double *p_od_Service=new CDictionary_Obj_Double;
CDictionary_Obj_Double *p_od_Food=new CDictionary_Obj_Double;
p_od_Service.SetAll(fvService, Service);
p_od_Food.SetAll(fvFood, Food);
in.Add(p_od_Service);
in.Add(p_od_Food);
//--- Get result
CList *result;
CDictionary_Obj_Double *p_od_Tips;
result=fsTips.Calculate(in);
p_od_Tips=result.GetNodeAtIndex(0);
Alert("Tips, %: ",p_od_Tips.Value());
delete in;
delete result;
delete fsTips;
}
//+------------------------------------------------------------------+
Thanks for your share !
Dear those who support the lib, well, or just anyone help plz.... :) I want to speed up calculations. In the example attached script that creates objects of fuzzy logic classes, calculates the result and deletes. I want to make that the objects could be created 1 time, and in Calculate() pass only new values and take the results, with already configured fuzzy logic.
Here is the original example, which works correctly:
//+------------------------------------------------------------------+ //|tips sample.mq5 | //| Copyright 2017, MetaQuotes Software Corp. | | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #include <Math\Fuzzy\MamdaniFuzzySystem.mqh> //--- input parameters input double Service; input double Food; //+------------------------------------------------------------------+ //| Expert initialisation function| //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialisation function| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function| //+------------------------------------------------------------------+ void OnTick() { //--- //--- Mamdani Fuzzy System CMamdaniFuzzySystem *fsTips=new CMamdaniFuzzySystem(); //--- Create first input variables for the system CFuzzyVariable *fvService=new CFuzzyVariable("service",0.0,10.0); fvService.Terms().Add(new CFuzzyTerm("poor", new CTriangularMembershipFunction(-5.0, 0.0, 5.0))); fvService.Terms().Add(new CFuzzyTerm("good", new CTriangularMembershipFunction(0.0, 5.0, 10.0))); fvService.Terms().Add(new CFuzzyTerm("excellent", new CTriangularMembershipFunction(5.0, 10.0, 15.0))); fsTips.Input().Add(fvService); //--- Create second input variables for the system CFuzzyVariable *fvFood=new CFuzzyVariable("food",0.0,10.0); fvFood.Terms().Add(new CFuzzyTerm("rancid", new CTrapezoidMembershipFunction(0.0, 0.0, 1.0, 3.0))); fvFood.Terms().Add(new CFuzzyTerm("delicious", new CTrapezoidMembershipFunction(7.0, 9.0, 10.0, 10.0))); fsTips.Input().Add(fvFood); //--- Create Output CFuzzyVariable *fvTips=new CFuzzyVariable("tips",0.0,30.0); fvTips.Terms().Add(new CFuzzyTerm("cheap", new CTriangularMembershipFunction(0.0, 5.0, 10.0))); fvTips.Terms().Add(new CFuzzyTerm("average", new CTriangularMembershipFunction(10.0, 15.0, 20.0))); fvTips.Terms().Add(new CFuzzyTerm("generous", new CTriangularMembershipFunction(20.0, 25.0, 30.0))); fsTips.Output().Add(fvTips); //--- Create three Mamdani fuzzy rules CMamdaniFuzzyRule *rule1 = fsTips.ParseRule("if (service is poor ) or (food is rancid) then tips is cheap"); CMamdaniFuzzyRule *rule2 = fsTips.ParseRule("if ((service is good)) then tips is average"); CMamdaniFuzzyRule *rule3 = fsTips.ParseRule("if (service is excellent) or (food is delicious) then (tips is generous)"); //--- Add three Mamdani fuzzy rules in system fsTips.Rules().Add(rule1); fsTips.Rules().Add(rule2); fsTips.Rules().Add(rule3); //--- Set input value CList *in=new CList; CDictionary_Obj_Double *p_od_Service=new CDictionary_Obj_Double; CDictionary_Obj_Double *p_od_Food=new CDictionary_Obj_Double; p_od_Service.SetAll(fvService, Service); p_od_Food.SetAll(fvFood, Food); in.Add(p_od_Service); in.Add(p_od_Food); //--- Get result CList *result; CDictionary_Obj_Double *p_od_Tips; result=fsTips.Calculate(in); p_od_Tips=result.GetNodeAtIndex(0); Print("Tips, %: ",p_od_Tips.Value()); delete in; delete result; delete fsTips; } //+------------------------------------------------------------------+
And here is my example that gives an error:
2017.09.07 14:28:56.949 Core 1 2017.07.03 00:00:00 Input values count is incorrect. 2017.09.07 14:28:56.949 Core 1 2017.07.03 00:00:00 invalid pointer access in 'MamdaniFuzzySystem.mqh' (172,42)
The code itself:
//+------------------------------------------------------------------+ //|TipsSample.mq5 | //| Copyright 2017, MetaQuotes Software Corp. | | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #include <Math\Fuzzy\MamdaniFuzzySystem.mqh> input double Service; input double Food; //+------------------------------------------------------------------+ //| Expert initialisation function| //+------------------------------------------------------------------+ CMamdaniFuzzySystem *fsTips=new CMamdaniFuzzySystem(); CFuzzyVariable *fvService=new CFuzzyVariable("service",0.0,10.0); CFuzzyVariable *fvFood=new CFuzzyVariable("food",0.0,10.0); CFuzzyVariable *fvTips=new CFuzzyVariable("tips",0.0,30.0); CMamdaniFuzzyRule *rule1, *rule2, *rule3; CList *in=new CList; CDictionary_Obj_Double *p_od_Service=new CDictionary_Obj_Double; CDictionary_Obj_Double *p_od_Food=new CDictionary_Obj_Double; CList *result; CDictionary_Obj_Double *p_od_Tips; int OnInit() { //--- fvService.Terms().Add(new CFuzzyTerm("poor", new CTriangularMembershipFunction(-5.0, 0.0, 5.0))); fvService.Terms().Add(new CFuzzyTerm("good", new CTriangularMembershipFunction(0.0, 5.0, 10.0))); fvService.Terms().Add(new CFuzzyTerm("excellent", new CTriangularMembershipFunction(5.0, 10.0, 15.0))); fsTips.Input().Add(fvService); //--- Create second input variables for the system fvFood.Terms().Add(new CFuzzyTerm("rancid", new CTrapezoidMembershipFunction(0.0, 0.0, 1.0, 3.0))); fvFood.Terms().Add(new CFuzzyTerm("delicious", new CTrapezoidMembershipFunction(7.0, 9.0, 10.0, 10.0))); fsTips.Input().Add(fvFood); //--- Create Output fvTips.Terms().Add(new CFuzzyTerm("cheap", new CTriangularMembershipFunction(0.0, 5.0, 10.0))); fvTips.Terms().Add(new CFuzzyTerm("average", new CTriangularMembershipFunction(10.0, 15.0, 20.0))); fvTips.Terms().Add(new CFuzzyTerm("generous", new CTriangularMembershipFunction(20.0, 25.0, 30.0))); fsTips.Output().Add(fvTips); //--- Create three Mamdani fuzzy rules rule1 = fsTips.ParseRule("if (service is poor ) or (food is rancid) then tips is cheap"); rule2 = fsTips.ParseRule("if ((service is good)) then tips is average"); rule3 = fsTips.ParseRule("if (service is excellent) or (food is delicious) then (tips is generous)"); fsTips.Rules().Add(rule1); fsTips.Rules().Add(rule2); fsTips.Rules().Add(rule3); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialisation function| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function| //+------------------------------------------------------------------+ void OnTick() { int ir; for(ir=1; ir<10; ir++) { p_od_Service.SetAll(fvService, ir); p_od_Food.SetAll(fvFood, ir); Print(CheckPointer(in)); in.Clear(); in.Add(p_od_Service); in.Add(p_od_Food); //--- Get result result=fsTips.Calculate(in); Print("Error"); p_od_Tips=result.GetNodeAtIndex(0); Print("Tips, %: ",p_od_Tips.Value()); } } //+------------------------------------------------------------------+
In general, is the lib designed to be able to create objects and then just get the results, say, on each new bar? Because it is slow and not economical to recreate the logic every time.
Library version with fixes, now fuzzie logic objects can be created 1 time and then only call Calculate()
Check example:
//+------------------------------------------------------------------+ //|TipsSample.mq5 | //| Copyright 2017, MetaQuotes Software Corp. | | //|https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #include <Math\Fuzzy\MamdaniFuzzySystem.mqh> input double Service; input double Food; //+------------------------------------------------------------------+ //| Expert initialisation function| //+------------------------------------------------------------------+ CMamdaniFuzzySystem *FSTips=new CMamdaniFuzzySystem(); CFuzzyVariable *FVService=new CFuzzyVariable("service",0.0,10.0); CFuzzyVariable *FVFood=new CFuzzyVariable("food",0.0,10.0); CFuzzyVariable *FVTips=new CFuzzyVariable("tips",0.0,30.0); CMamdaniFuzzyRule *Rule1,*Rule2,*Rule3; CList *In=new CList; CDictionary_Obj_Double *Dic_Service=new CDictionary_Obj_Double; CDictionary_Obj_Double *Dic_Food=new CDictionary_Obj_Double; CDictionary_Obj_Double *Dic_Tips; //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ int OnInit() { In.FreeMode(false); //--- Create first input variables for the system FVService.Terms().Add(new CFuzzyTerm("poor", new CTriangularMembershipFunction(-5.0, 0.0, 5.0))); FVService.Terms().Add(new CFuzzyTerm("good", new CTriangularMembershipFunction(0.0, 5.0, 10.0))); FVService.Terms().Add(new CFuzzyTerm("excellent", new CTriangularMembershipFunction(5.0, 10.0, 15.0))); FSTips.Input().Add(FVService); //--- Create second input variables for the system FVFood.Terms().Add(new CFuzzyTerm("rancid", new CTrapezoidMembershipFunction(0.0, 0.0, 1.0, 3.0))); FVFood.Terms().Add(new CFuzzyTerm("delicious", new CTrapezoidMembershipFunction(7.0, 9.0, 10.0, 10.0))); FSTips.Input().Add(FVFood); //--- Create Output FVTips.Terms().Add(new CFuzzyTerm("cheap", new CTriangularMembershipFunction(0.0, 5.0, 10.0))); FVTips.Terms().Add(new CFuzzyTerm("average", new CTriangularMembershipFunction(10.0, 15.0, 20.0))); FVTips.Terms().Add(new CFuzzyTerm("generous", new CTriangularMembershipFunction(20.0, 25.0, 30.0))); FSTips.Output().Add(FVTips); //--- Create three Mamdani fuzzy rules Rule1 = FSTips.ParseRule("if (service is poor ) or (food is rancid) then tips is cheap"); Rule2 = FSTips.ParseRule("if ((service is good)) then tips is average"); Rule3 = FSTips.ParseRule("if (service is excellent) or (food is delicious) then (tips is generous)"); FSTips.Rules().Add(Rule1); FSTips.Rules().Add(Rule2); FSTips.Rules().Add(Rule3); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialisation function| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- delete fuzzy system In.FreeMode(true); delete In; delete FSTips; } //+------------------------------------------------------------------+ //| Expert tick function| //+------------------------------------------------------------------+ void OnTick() { for(int ir=1; ir<10; ir++) { Dic_Service.SetAll(FVService,ir); Dic_Food.SetAll(FVFood,ir); In.Clear(); In.Add(Dic_Service); In.Add(Dic_Food); //--- Get result CList *result=FSTips.Calculate(In); Dic_Tips=result.GetNodeAtIndex(0); Print("Tips, %: ",Dic_Tips.Value()); delete result; } } //+------------------------------------------------------------------+
h
when i updated metatrader to build 2342
all of samples with fuzzy logic library
return error "incorrect casting of pointers" on MQL5 \ Include \ Math \ Fuzzy \ RuleParser.mqh Line 712
please help to fix bug
many thanks
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
FuzzyNet Fuzzy Logic Library:
FuzzyNet is one of the most popular mathematical libraries for creating fuzzy models
Fuzzy Logic Library for Microsoft.Net (FuzzyNet) is an easy to use component that implements Mamdani and Sugeno fuzzy inference systems.
FuzzyNet includes:
The following additions have been made when converting the library into MQL5:
Author: MetaQuotes Software Corp.