股票量化软件:在 赫兹量化 中使用神经网络

文章介绍了如何使用FANN库创建和训练神经网络,包括fann_create_standard函数来构建网络,fann_train进行增量训练,以及fann_run执行预测。由于MQL4不支持某些FANN函数,文章提出了通过包装函数来适应MQL4的限制。
摘要由CSDN通过智能技术生成

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

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

 

​其中, num_layers 代表总层数,包括输入和输出层。 lNnum 和以下参数代表各个层(从输入层开始,以输出层结束)中的神经元数量。赫兹量化软件 要创建一个包含一个隐藏层且层中有 5 个神经元、10 个输入和 1 个输出的网络,用户必须进行如下调用:

fann_create_standard(3,10,5,1);

一旦创建了人工神经网络,下一步操作就是使用一些输入和输出数据对其进行训练。 最简单的训练方法是增量训练,可通过以下函数执行:赫兹量化软件

FANN_EXTERNAL void FANN_API fann_train(
        struct  fann    *       ann,

        
        fann_type       *       input,

        
        fann_type       *       desired_output  )

此函数将指针指向之前由 fann_create_standard() 返回的 struct fann 以及输入数据向量和输出数据向量。 输入和输出向量是 fann_type 类型的数组。 该类型事实上是 double 或 float 类型,具体取决于 FANN 的编译方式。 在此实现中,输入和输出向量都将成为 double 数组。赫兹量化软件

一旦人工神经网络训练完成,下一个期望功能将是运行该网络。 函数实现定义如下:

FANN_EXTERNAL fann_type * FANN_API fann_run(    struct  fann    *       ann,

        
        fann_type       *       input   )

此函数将指针指向 struct fann ,代表之前创建的网络和已定义类型(double 数组)的输入向量。 返回的值是一个输出向量数组。 这个事实是非常重要的,对于一个输出网络,我们始终获得一个带输出值的元素数组,而不是输出值本身。赫兹量化软件

遗憾的是,大部分 FANN 函数使用指向 struct fann 的指针, 代表无法直接由不支持结构作为数据类型的 MQL4 处理的人工神经网络 为了避免该限制,我们必须用某个方法进行一些包装,绕开 MQL4。 最简单的方法是创建一个用于保存正确值的 struct fann 指针数组,并用 int 变量表示的索引来参考它们。 用这种方法,我们可以将不受支持的变量类型替换为受支持类型,并创建一个可以轻松与 MQL4 代码整合的包装库。赫兹量化软件


 

包装 FANN

据我所知,MQL4 不支持带变量参数列表的函数,所以我们还得解决这个问题。 另一方面,如果调用了带过多参数的 C 函数(变量参数长度)且并未发生任何问题,那么我们可以假定 MQL4 函数中有固定的最大参数数量被传递到 C 库。 结果包装函数如下所示:

/* Creates a standard fully connected backpropagation neural network.
* num_layers - The total number of layers including the input and the output layer.
* l1num - number of neurons in 1st layer (inputs)
* l2num, l3num, l4num - number of neurons in hidden and output layers (depending on num_layers).
* Returns:
* handler to ann, -1 on error
*/int __stdcall f2M_create_standard(unsigned int num_layers, int l1num, int l2num, int l3num, int l4num);

我们将先导的 fann_ 更改为 f2M_ (表示 FANN TO MQL),使用静态的参数数量(4 层),返回值现在是人工神经网络的内部数组的索引,其中包含 FANN 操作所需的 struct fann 数据。 用这种方法,我们可以轻松从 MQL 代码中调用此类函数。赫兹量化软件

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值