文章 "在 MetaTrader 中使用神经网络"

 

新文章 在 MetaTrader 中使用神经网络已发布:

本文介绍如何轻松在你的 MQL4 代码中使用神经网络,利用最佳的免费人工神经网络库 (FANN),并在 MQL4 代码中采用多个神经网络。

你们中很多人可能已考虑过在你们的 EA 中使用神经网络的可能性。 这个主题非常热门,尤其是在 2007 年自动交易锦标赛上,Better 以其基于神经网络的系统横扫对手之后,更是炙手可热。 很多互联网论坛充斥着与神经网络和外汇交易相关的主题。 然而遗憾的是,编写神经网络的本机 MQL4 实现并不简单。 它要求一些编程技巧,而且结果并不会很有效,尤其是当你想要在测试程序中针对大量数据测试你的最终结果时。

本文中,我将展示如何在你的 MQL4 代码中使用免费(在 LGPL 下)的著名快速人工神经网络库 (FANN),同时避免某些障碍和限制。 我进一步假设读者熟悉人工神经网络 (ann) 和与此主题相关的术语,因此我会侧重介绍使用以 MQL4 语言编写的人工神经网络的具体实现的实践性环节。



FANN 功能

为了充分了解 FANN 实现的可能性,读者需要熟悉其文档和 最常用的函数。 FANN 的典型用例是创建一个简单的前馈网络,用一些数据训练此网络并运行它。 然后可将已创建并训练过的网络保存到文件中,之后可恢复以备进一步使用。 要创建一个人工神经网络,用户必须使用 fann_create_standard() 函数。 我们来看看它的语法:

FANN_EXTERNAL struct fann *FANN_API fann_create_standard(unsigned int num_layers, int lNnum, ... )

作者:Mariusz Woloszyn

 
您好,请教下,我写了个程序,将新创建的网络保存在C:\ANN目录下,ann_save 返回值为0,表示保存成功,并且C:\ANN目录是存在的,但是C:\ANN目录下没有任何文件,请问是什么原因?
 
看来效果不是很理想,两种结果交易次数相差很大,代表交易手续费也相差很大,这样对比没什么意义。
 
 for(i=0;i<=AnnInputs-1;i=i+3) 
     {
      InputVector[i]=
         10*iMACD(NULL,0,FastMA,SlowMA,SignalMA,PRICE_CLOSE,
                  MODE_MAIN,i*3);
      InputVector[i+1]=
         10*iMACD(NULL,0,FastMA,SlowMA,SignalMA,PRICE_CLOSE,
                  MODE_SIGNAL,i*3);
      InputVector[i+2]=InputVector[i-2]-InputVector[i-1];
     }

 InputVector[i+2]=InputVector[i-2]-InputVector[i-1];  This can pass when the i is equal to zero?

One more problem!There is nothing in the path "c:\ANN",but is true that the ANN is running!

 

'path' - parameter conversion not allowed NeuroMACD-fixed.mq4 88 33

int f2M_save(int ann, char &path[]);

!!!!!!!!!!!!!!!!!!!!!!!!

void ann_save (int ann, string path)

{

    int ret = -1;

    ret = f2M_save (ann, path);

!!!!!!!!!!!!!!!!!!!!!!

看来f2M_save要的是char &path[],而程序里送的是string path

怎么解决?

 

I am a new guy.

When I compile "NeuroMACD-fixed.mq4" I got error

!!!!!!!!!!!!!!!!!

'path' - parameter conversion not allowed NeuroMACD-fixed.mq4 88 33

!!!!!!!!!!!!!!!

I found in "Fann2MQL.mqh" the function as follow:

int f2M_save(int ann, char &path[]);

!!!!!!!!!!!!!!!!!!!!!!!!

And in "NeuroMACD-fixed.mq4", the functoin as follow:

void ann_save (int ann, string path)

{

    int ret = -1;

    ret = f2M_save (ann, path);

!!!!!!!!!!!!!!!!!!!!!!

It looks like the function f2M_save needs char &path[],and the function send string path and couse the error.

How to resolve?Please, help.

 

你好,

我已经测试你的程序,设计思路非常好,有几个问题。

1、训练方法问题,案例中使用的是FANN_SIGMOID_SYMMETRIC_STEPWISE,其他算法是否可用?有什么区别?

2、程序中只是进行了训练,但是没有对训练次数和训练结果进行要求,希望加上f2M_get_MSE。

3、如果对训练结果有要求,开仓次数会更少,很多机会就会错失,也丧失了很多再次训练的计划,针对这个问题,希望加上模拟交易,这样就可以提高交易频率。

4、案例中Parallel=true的模式下,没有使用f2M_train_parallel对AnnsArray进行训练,而是通过f2M_train对AnnsArray[i]进行训练,再用anns_run_parallel进行读取,这个方式是否欠妥?希望引入f2M_train_parallel。


我自己也在对上述问题进行修改,希望大家多交流。

 

我针对第二条和第三条进行程序修改。

回测周期 18年5月3日到18年10月11日

NeuroFilter=false 回测图如下


NeuroFilter=True回测图如下


情况有了明显改善。交易次数减少了,交易结果同样发生了性质上的改变。

 
Qing Gao:

我针对第二条和第三条进行程序修改。

回测周期 18年5月3日到18年10月11日

NeuroFilter=false 回测图如下


NeuroFilter=True回测图如下


情况有了明显改善。交易次数减少了,交易结果同样发生了性质上的改变。

你好,能一起交流一下FANN的修改经验吗
 
Qing Gao:

我针对第二条和第三条进行程序修改。

回测周期 18年5月3日到18年10月11日

NeuroFilter=false 回测图如下


NeuroFilter=True回测图如下


情况有了明显改善。交易次数减少了,交易结果同样发生了性质上的改变。

找不到人可以交流这个
 
iop02008:
你好,能一起交流一下FANN的修改经验吗
Qing Gao:

我针对第二条和第三条进行程序修改。

回测周期 18年5月3日到18年10月11日

NeuroFilter=false 回测图如下


NeuroFilter=True回测图如下


情况有了明显改善。交易次数减少了,交易结果同样发生了性质上的改变。

非常好,能否把你修改过的内容发布出来,让大家参考一下?
原因: