文章 "神经网络变得轻松(第二十八部分):政策梯度算法"

 

新文章 神经网络变得轻松(第二十八部分):政策梯度算法已发布:

我们继续研究强化学习方法。 在上一篇文章中,我们领略了深度 Q-学习方法。 按这种方法,已训练模型依据在特定情况下采取的行动来预测即将到来的奖励。 然后,根据政策和预期奖励执行动作。 但并不总是能够近似 Q-函数。 有时它的近似不会产生预期的结果。 在这种情况下,近似方法不应用于功用函数,而是应用于动作的直接政策(策略)。 其中一种方法是政策梯度。

第一个已测试模型是 DQN。 它展现出意想不到的惊喜。 该模型产生了盈利。 但它仅执行了一个交易操作,持仓会贯穿整个测试过程。 已执行成交的品种图表如下所示。

测试 DQN

评估品种图表上的成交,您可以看到该模型清楚地识别出全局趋势,并顺着其方向开仓成交。 这笔成交是可盈利的,但问题是该模型是否能够及时了结这样的一笔成交? 事实上,我们基于过去 2 年的历史数据训练了模型。 在过去的 2 年中,所分析金融产品的行情一直由看跌趋势所主导。 这就是为什么我们想知道该模型是否可以及时了结成交。

若采用贪婪策略,政策梯度模型给出类似的结果。 请记住,当我们开始研究强化学习方法时,我反复强调正确选择奖励政策的重要性。 如此,我决定试验奖励政策。 特别是,为了避免亏损持仓持有的时间过长,我决定增加对无盈利持仓的处罚。 为此,我还采用新的奖励政策训练了政策梯度模型。 针对模型超参数进行的一些试验,我设法达成了 60% 的盈利操作。 测试图如下所示。

平均持仓时间为 1 小时 40 分钟。

作者:Dmitriy Gizlyk

 

下午好


德米特里,从哪里可以获得 values.Assign 和 MathRandomNormal 函数?您的脚本没有生成,并且提到没有这些函数。文件 VAE.mqh 已被拒绝。

 
Viktor Kudriavtsev #:

下午好。


德米特里,从哪里可以获得 values.Assign 和 MathRandomNormal 函数?您的脚本没有生成,并且提到没有这些函数。文件 VAE.mqh 已被拒绝。

您好,维克多。

关于values.Assign,请尝试更新终端。这是最近添加到 MQL5 的内置函数。 MathRandomNormal 包含在终端的标准库中,并添加在文件 "\MQL5\Include\Math\Stat\Normal.mqh "中

 


Dmitry 我的终端版本是 3391,日期是 2022 年 8 月 5 日(最后一个稳定版本)。现在我尝试升级到 2022 年 9 月 5 日的测试版 3420。values.Assign 的错误消失了。但MathRandomNormal 的错误 没有消失。我在路径上有一个带有该函数的库,就像你写的那样。但在VAE.mqh 文件中,您没有引用该函数库,但在 NeuroNet.mqh 文件中 ,您按如下方式指定了该函数库:


命名空间 Math

{

#include <Math\Stat\Normal.mqh

}


但我不是这样组装的。:(

PS: 如果我在VAE.mqh 文件中直接指定库的路径可以这样做吗?我不太明白您是如何在NeuroNet.mqh 文件中设置库的,难道不会有冲突吗?

 
在我看来,编程语言的复杂性不断增加,拉大了交易者与程序员之间的距离。这就好比进一步拉开了手和头脑的距离。它拉开了理论与实践的距离。因此,你可以随心所欲地扭曲编程,但这不会带来结果。交易员和程序员之间应该是一种共生关系。这就好比理解驾驶员的思维和理解汽车制造商的思维。这不是最好的比喻,但我还没有想到更好的比喻。
 

我尝试直接在VAE .mqh 文件中添加 #include <Math\Stat\Normal . mqh> ,但没有成功。编译器仍然写入 'MathRandomNormal' - 未声明的标识符 VAE.mqh 92 8。如果擦除该函数并重新开始键入,则会出现带有该函数的工具提示,据我理解,这表明可以从VAE.mqh 文件中看到该函数。

总之,我在另一台电脑上用不同版本的 vinda 进行了尝试,结果是一样的--看不到该功能,也无法编译。mt5 最新版本 betta 3420 来自 2022 年 9 月 5 日。

德米特里,您是否在编辑器中启用了任何设置?

 
Viktor Kudriavtsev 添加 #include <Math\Stat\Normal . mqh> ,但没有成功。编译器仍然写入 'MathRandomNormal' - 未声明的标识符 VAE.mqh 92 8。如果擦除该函数并重新开始键入,则会出现一个包含该函数的工具提示,据我所知,该函数应该可以从VAE.mqh 文件中看到。

总之,我在另一台使用不同 Windows 版本的计算机上进行了尝试,结果是一样的--看不到该功能,也无法编译。mt5 最新版本 betta 3420 自 2022 年 9 月 5 日起。

德米特里,您在编辑器中是否启用了任何设置?

试着注释掉"命名空间 Math " 一行

 
Viktor Kudriavtsev #:


Dmitry 我的终端版本是 3391,日期是 2022 年 8 月 5 日(最后一个稳定版本)。现在我尝试升级到 2022 年 9 月 5 日的测试版 3420。values.Assign 的错误消失了。但MathRandomNormal 的错误 没有消失。我在路径上有一个带有该函数的库,就像你写的那样。但在VAE.mqh 文件中,您没有引用该函数库,但在 NeuroNet.mqh 文件中 ,您按如下方式指定了该函数库:


命名空间 数学

{

#include <Math\Stat\Normal.mqh>

}


但我并没有这样做。:(

PS:如果直接在文件VAE.mqh 中指定库的路径。可以这样做吗?我不太明白您是如何在NeuroNet.mqh 文件中设置库的,难道不会有冲突吗?

9 月 23 日的 3445 - 同样的问题。

 

你好。

需要建议:)重新安装后刚加入终端,我想进行培训,却出现错误

附加的文件:
tti_le9fr8.jpg  269 kb
 
Borys Ivanov #:

你好

需要建议:)重新安装后刚加入终端,我想进行培训,却出现错误

您好,问题解决了吗?