真实作者
Dmitry Kalyuzhny. FuzzyNet 项目网站 - http://sourceforge.net/projects/fuzzynet/
将文档解压缩至 终端数据文件夹。
程序库代码位于 <终端数据文件夹>\MQL5\Include\Math\FuzzyNet\
样本测试脚本可在 <终端数据文件夹>\MQL5\Scripts\FuzzyNet\ 里找到
FuzzyNet 是用于创建模糊模型的最流行的数学库之一
用于 Microsoft.Net 的模糊逻辑库 (FuzzyNet) 是一款易于使用的控件, 可用来实现马丹尼和关野 (Sugeno) 型模糊推理系统。
FuzzyNet 包括:
当程序库移植到 MQL5 时, 补充了以下内容:
使用程序库
注: 马丹尼型推理系统可以在创建之后且在调用系统计算函数之前的任何阶段进行配置。如果系统设置在其创建之后未予改变, 则系统以省缺设置工作:
移植 FuzzyNet 程序库 (v. 1.2.0) 显示如下。
为操作程序库, 依据您创建的系统包含 MamdaniFuzzySystem.mqh 或 SugenoFuzzySystem.mqh 头文件。
以下是更多有关 FuzzyNet 移植程序库软件包的详情:| 软件包 | 描述 |
|---|---|
| Dictionary.mqh | 该软件包含有其它软件包所需的附加类。 |
| FuzzyRule.mqh | 创建模糊规则的类:
该软件包还含有实现模糊规则的辅助类。 |
| FuzzyTerm.mqh | 创建模糊条款的软件包。 |
| FuzzyVariable.mqh | 创建模糊变量的软件包。 |
| GenericFuzzySystem.mqh | 该类实现马丹尼和关野系统的通用功能。 |
| Helper.mqh | 该软件包含有其它软件包所需的附加类。 |
| InferenceMethod.mqh | 该软件包含有其它软件包所需的附加类。 |
| MamdaniFuzzySystem.mqh | 该类创建一个马丹尼型模糊系统。 |
| MembershipFunction.mqh | 隶属函数类:
|
| RuleParser.mqh | 分析模糊规则的类。 |
| SugenoFuzzySystem.mqh | 该类用于创建一个关野型模糊系统。 |
| SugenoVariable.mqh | 该软件包含有以下类:
关野型模糊变量在开发关野型系统时使用。 |
在 MQL5 上使用 FuzzyNet 程序库
在编写模糊系统之前, 您应该对其元素有清晰视野, 包括:
系统的开发和计算:
对于马丹尼型系统:
MamdaniFuzzySystem *fuzzy_system=new MamdaniFuzzySystem();对于关野型系统:
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);解析输入值线形组合的线形函数被添加到关野型模糊变量, 替代模糊条款。使用名称和一个系数数组作为线性函数的参数。线性方程的形成基于该数组,因此,数组中的元素遵从顺序是很重要的。系数数组的长度可等于输入数值或超出它一个。如果长度相等, 方程的绝对条款等于零。如果数组长度超出一个, 绝对条款等于最后一个元素值。数组的其它所有元素自第一个开始, 按照录入系统的顺序分配到模糊输入变量中。
sugeno_varriable.Functions().Add(fuzzy_sytem.CreateSugenoFunction(const string name, const double &coeffs[]));
对于马丹尼型系统:
fuzzy_system.Output().Add(FuzzyVariable fuzzy_variable);
对于关野型系统:
fuzzy_system.Output().Add(FuzzyVariable fuzzy_variable);
对于马丹尼型系统:
MamdaniFuzzyRule *fuzzy_rule = fuzzy_system.ParseRule(const string rule_text);
对于关野型系统:
SugenoFuzzyRule *fuzzy_rule = fuzzy_system.ParseRule(const string rule_text);
对于马丹尼型系统:
fuzzy_system.Rules().Add(MamdaniFuzzyRule fuzzy_rule);
对于关野型系统:
fuzzy_system.Rules().Add(SugenoFuzzyRule fuzzy_rule);
Dictionary_Obj_Double *p_od_in=new Dictionary_Obj_Double;该类实现的 SetAll(CObject *key, const double value) 方法接收两个参数 - 一个模糊变量和一个数字型数值。此元素是一个系统的输入变量。
p_od_in.SetAll(FuzzyVariable fuzzy_variable,const double value);其它所有输入值均以同样方式填写。创建列表并为其添加所有数值:
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);之后, out 列表按照它们被录入系统的顺序存储所有计算输出的结果。我们只需接收它们即可:
p_od_out=out.GetNodeAtIndex(int index); double result=p_od_out.Value();现在, result 变量里保存的是系统根据 index 指定数量的输出值进行计算的结果。
样本脚本
小费样本 (马丹尼)
Tips_Sample_Mamdani.mq5 依据服务和食物品质计算您所需支付的小费百分比。
录入输入参数:

计算结果:

巡航控制样本 (关野)
Cruise_Control_Sample_Sugeno.mq5 样本脚本是一个模糊调速器的例程。它代表一辆汽车的巡航控制系统, 根据当前车速和车辆提速至期望值的变化率偏差, 计算必要的加速度。
录入输入参数:

计算结果:

由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/13697
Bollinger_Squeeze_v9_HTF
此 Bollinger_Squeeze_v9 指标在输入参数中有时间帧选项。
ColorZerolagRSI
此 RSI 模拟振荡器基于五条相对强度指数指标。