资料库: 免费模糊逻辑库函数 - 页 2

 

如果有人在 MT4 中使用过这个库,请告诉我 FCL 文件的扩展名是什么,放在哪里。

编写了一个指标。顺序如文章所述。

1. 创建模型(无错误)

IDm=ffll_new_model(); // 创建模型返回模型索引
if(IDm<0){
string txt=ffll_get_msg_textA(IDm); // 获取错误信息。
Alert("No model created "+txt);return(0);} 2.

2.用程序加载文件(会出错)。文件位于\{Expert\File .我试过扩展名为 .fcl .txt 的文件。

h=ffll_load_fcl_file(IDm, "Histo.txt"); // load the fuzzy modelling language program
if(h<0){
txt=ffll_get_msg_textA(IDm); // get error message
.Alert("程序文件未加载 "+txt);return(0);}。

3.创建一个子程序

ID1=ffll_new_child(IDm); // 为给定模型创建子模型,返回模型索引
if(ID1<0){
txt=ffll_get_msg_textA(IDm); // 得到错误信息。
Alert("No daughter created "+txt);return(0);} 4.

4.逐条输入数据。例如

IN=ffll_set_value(IDm,ID1,0,X); // 设置第一个输入变量的值
IN=ffll_set_value(IDm,ID1,1,Y); // 设置第二个输入变量的值

等等。

5.获取输出。

Res=ffll_get_output_value(IDm,ID1); // 获取输出变量的值

分享您的经验。

 

MT5 中也有类似问题。无法打开文件。代码示例:

#include <FuzzyLogic\Flc.mqh>
#property tester_file "model.fcl"

int OnInit()
{   
    string filename = "model.fcl";
    // Считываю строку из файла и убеждаюсь, что его можно открыть.
    int filehandle = FileOpen(filename,FILE_READ|FILE_ANSI);
    if(filehandle < 0)
    {
        Print("Error code ",GetLastError());
        Print(filename);
    }
    else
    {
        Print("Open success");
        Print(FileReadString(filehandle));   
        FileClose(filehandle);
    }
    
    // FFCL
    int model = ffll_new_model();
    if(model < 0)
    {
        Print("Ошибка создания модели!");
    }
    int ret_val = ffll_load_fcl_file(model,filename);
    if(ret_val < 0)
    {
        string txt = ffll_get_msg_textW(model);
        Print("Ошибка: " + txt);
    }
    ffll_close_model(model);
    return(0);
}

void OnDeinit(const int reason){}

void OnTick(){}

我得到以下输出:

Ошибка: Error Opening File
FUNCTION_BLOCK
Open success

为什么会产生错误?据我所知,问题出在向 ffll_load_fcl_file 函数传递参数 时。(可能与编码或类型转换有关)。

恳请使用过该程序库的人员回答。

 

这可能与 .fcl 文件的结构有关,我还没有找到一个程序来检查它是否正确。文中的链接也不起作用。也许有谁已经使用过这个程序,请给我回信。

该库原则上非常有趣(如果还能运行)。不幸的是,作者瞥了一眼就消失了。对问题不想回答。无法理解的神秘(或就业)。

TO: SergeyVP/ 没有创建子模型,也没有输入变量。据我所知,你检查过加载的可能性吗?

我们可以交换检查程序吗?

 

与自己在代码中编写三个基本模糊逻辑函数相比,处理库需要花费更多的时间:

fussyOr(double a, double b)

   return  (MathMin(a, b));

}

fussyAnd(double a, double b)

   return  (MathMax(a, b));

}

fussyNot(double a)

   return  (1.0 - a);

}
 

不仅如此。辅助功能、模糊化等。再简单不过了。

 
可能与 .fcl 文件的结构有关

并非如此。函数返回 -1 表示找不到文件。我以为问题出在库本身,于是用 C++ 和 dll 检查了一下,结果一切正常。我从网站上的示例(在示例下载中 提取了示例代码和模型。至于 fcl 文件的结构,如果逻辑出现错误,模型将无法加载,并且会出现类似临界错误的 情况。至少在 C++ 中,如果我指定的模型有明显错误,程序就会崩溃:

terminate called after throwing an instance of 'std::logic_error'
  what():  basic_string::_S_construct null not valid

TO: SergeyVP/ 没有创建子模型,也没有输入变量。所以我理解你是在测试加载的可能性?

是的,目前只是加载。如果模型没有加载,就没有必要创建子模型。

要不要交换程序进行检查?

我不会以任何方式检查 fcl 模型的正确性。我在 MATLAB 中创建一个模型,得到 fis 文件。然后使用fuzzylite 程序将 fis 文件转换为 fcl 文件。

与自己在代码中编写三个基本的模糊逻辑函数相比,处理库需要花费更多的时间:

不幸的是,看起来情况就是这样。我只能自己写了。
 
SergeyVP:

不完全是这样。函数返回 -1 表示找不到文件。我以为问题出在库本身,于是用 C++ 和 dll 检查了一下,结果一切正常。我从网站上的示例(在示例下载中 提取了示例代码和模型。至于 fcl 文件的结构,如果逻辑出现错误,模型将无法加载,并且会出现类似临界错误的情况。至少在 C++ 中,如果我指定的模型有明确的错误,程序就会崩溃:

terminate called after throwing an instance of 'std::logic_error'
  what():  basic_string::_S_construct null not valid

是的,目前只能加载。如果模型没有加载,创建子模型就没有意义了。

我没有以任何方式检查 fcl 模型的正确性。我在 MATLAB 中创建模型,得到 fis 文件。然后使用fuzzylite 程序将 fis 文件转换为 fcl 文件。
不幸的是,看起来情况就是这样。我得自己写了。

明白了。谢谢。

"我从网站上的示例(在示例下载中 提取了示例代码和模型"。

我不明白,是从哪个网站上?请告诉我。

也许将 MATLAB 与 MT4/MT5 连接起来更容易?已经有人提供了更多的解决方案。

如果这个库不能工作,我可能会朝这个方向发展。

 

Тут не понял, с какого сайта? Ткните плз.

来自该库的官方网站 - ffll.sourceforge.net。

更准确地说: http://ffll.sourceforge.net/downloads.htm-> 下载使用 FFLL 的示例应用程序。

其中有 C++ 代码和一个简单的 FCL 模型。

也许将 MATLAB 与 MT4/MT5 连接起来会更容易?尤其是已经提出了解决方案。

在哪里阅读?
 
SergeyVP:

来自该库的官方网站 - ffll.sourceforge.net。

更准确地说: http://ffll.sourceforge.net/downloads.htm-> 下载使用 FFLL 的示例应用程序。

其中有 C++ 代码和一个简单的 fcl 模型。

在哪里阅读?
这里。https://www.mql5.com/zh/articles/44
 

我想听听 "运输车间主任 "的意见,他宣布了这一主题,并写道在 MT4 中一切运行良好。

问题是没有加载 .fcl 文件。

顺便说一句:该库并不完全支持标准。存在例外和限制等。而且输出只能是单元素集。