文章 "神经网络变得轻松(第五十部分):软性扮演者-评价者(模型优化)"

 

新文章 神经网络变得轻松(第五十部分):软性扮演者-评价者(模型优化)已发布:

在上一篇文章中,我们实现了软性扮演者-评论者算法,但未能训练出一个可盈利的模型。在此,我们将优化先前创建的模型,以期获得所需的结果。

我们继续研究软性扮演者-评论者算法。在上一篇文章中,我们实现了该算法,但未能训练出一个可盈利的模型。今天,我们将研究可能的解决方案。在“模型拖延症,原因和解决方案”一文中已经提过类似的问题。我建议扩展我们在这一领域的知识,并以我们的软性扮演者-评论者模型为例研究新方式。



在我们转到直接优化我们构建的模型之前,我要提醒您,软性扮演者-评论者是一种在连续动作空间中随机模型的强化学习算法。这种方法的主要特点是在奖励函数中引入了熵分量。

使用随机扮演者策略可令模型更加灵活,并且能够解决复杂环境中的问题,在这些环境中,某些操作可能不确定或无法定义明确的规则。在处理包含大量噪声的数据时,该策略往往更健壮,因为它考虑到概率分量,并且不受明确规则的约束

作者:Dmitriy Gizlyk

 
//--- 演员
actor.Clear();
//--- 输入层
if(!(descr = new CLayerDescription()))))
返回 false;
descr.type = defNeuronBaseOCL;
int prev_count = descr.count = (HistoryBars * BarDescr);
descr.window = 0;
descr.activation = None;
descr.optimisation = ADAM.优化
if(!actor.Add(descr))
{
删除 descr;
返回 false;
}
// 层 1 | 多层多头关注层 - 1
如果 (!(descr = new CLayerDescription())
返回 false;
descr.type = defNeuronMLMHAttentionOCL;
descr.count = 2048;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
删除 descr;
返回 false;
}
PrintFormat("[Actor] Layer 1: Multilayer Multi-Head Attention Layer - 1: Data successfully passed.\n");
//--- 第 2 层 | 批量规范化层
if (!(descr = new CLayerDescription())
return false;
descr.type = defNeuronBatchNormOCL;
descr.count = prev_count;
descr.batch = 1000;
descr.activation = None;
descr.optimisation = ADAM;
如果 (!actor.Add(descr))
{
删除 descr;
返回 false;
}
PrintFormat("[Actor] Layer 2: Batch Normalisation Layer: Data successfully passed.\n");
// 第 3 层 | 多层多头注意层 - 2
if (!(descr = new CLayerDescription())
返回 false;
descr.type = defNeuronMLMHAttentionOCL;
descr.count = 2048;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
删除 descr;
返回 false;
}
PrintFormat("[Actor] Layer 3: Multilayer Multi-Head Attention Layer - 2: Data successfully passed.\n");
//--- 第 2 层
if(!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = prev_count - 1;
descr.window = 2;
descr.step = 1;
descr.window_out = 8;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
删除 descr;
返回 false;
}
//--- 第 3 层
if(!(descr = new CLayerDescription()))))
返回 false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = prev_count;
descr.window = 8;
descr.step = 8;
descr.window_out = 8;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
删除 descr;
返回 false;
}
//--- 第 7 层 | 卷积层 - 4
如果 (!(descr = new CLayerDescription())
返回 false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = BarDescr;
descr.window = 8;
descr.step = 1;
descr.window_out = 9;
descr.activation = LReLU;
descr.optimisation = ADAM;
如果 (!actor.Add(descr))
{
删除 descr;
返回 false;
}
PrintFormat("[Actor] Layer 7: Convolutional Layer - 4: Data successfully passed.\n");
//--- 第 8 层 | 卷积层 - 5
if (!(descr = new CLayerDescription())
return false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = BarDescr;
descr.window = 9;
descr.step = 1;
descr.window_out = 7;
descr.activation = LReLU;
descr.optimisation = ADAM;
如果 (!actor.Add(descr))
{
删除 descr;
返回 false;
}
PrintFormat("[Actor] Layer 8: Convolutional Layer - 5: Data successfully passed.\n");
//--- 第 9 层 | 卷积层 - 6
if (!(descr = new CLayerDescription())
return false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = BarDescr;
descr.window = 7;
descr.step = 1;
descr.window_out = 5;
descr.activation = LReLU;
descr.optimisation = ADAM;
如果 (!actor.Add(descr))
{
删除 descr;
返回 false;
}
PrintFormat("[Actor] Layer 9: Convolutional Layer - 6: Data successfully passed.\n");
//--- 第 10 层 | 卷积层 - 7
if (!(descr = new CLayerDescription())
return false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = prev_count;
descr.window = 5;
descr.step = 1;
descr.window_out = 4;
descr.activation = LReLU;
descr.optimisation = ADAM;
如果 (!actor.Add(descr))
{
删除 descr;
返回 false;
}
PrintFormat("[Actor] Layer 10: Convolutional Layer - 7: Data successfully passed.\n");
// 层 11 | 多层多头注意力层 - 3
if (!(descr = new CLayerDescription())
返回 false;
descr.type = defNeuronMLMHAttentionOCL;
descr.count = 2048;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
删除 descr;
返回 false;
}
PrintFormat("[Actor] Layer 11: Multilayer Multi-Head Attention Layer - 3: Data successfully passed.\n");
// 第 12 层 | 多层多头注意力层 - 4
if (!(descr = new CLayerDescription())
返回 false;
descr.type = defNeuronMLMHAttentionOCL;
descr.count = 2048;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
删除 descr;
返回 false;
}
PrintFormat("[Actor] Layer 12: Multilayer Multi-Head Attention Layer - 4: Data successfully passed.\n");
// 第 13 层 | 多层多头注意力层 - 5
if (!(descr = new CLayerDescription())
返回 false;
descr.type = defNeuronMLMHAttentionOCL;
descr.count = 2048;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
删除 descr;
返回 false;
}
PrintFormat("[Actor] Layer 13: Multilayer Multi-Head Attention Layer - 5: Data successfully passed.\n");
//--- 第 4 层
if(!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 2048;
descr.optimisation = ADAM;
descr.activation = LReLU;
if(!actor.Add(descr))
{
删除 descr;
返回 false;
}
//--- 第 5 层
如果(!(descr = new CLayerDescription()))))
返回 false;
descr.type = defNeuronBaseOCL;
prev_count = descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
删除 descr;
返回 false;
}
// 第 13 层 | 多层多头注意力层 - 5
如果 (!(descr = new CLayerDescription())
返回 false;
descr.type = defNeuronMLMHAttentionOCL;
descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
删除 descr;
返回 false;
}
PrintFormat("[Actor] Layer 13: Multilayer Multi-Head Attention Layer - 5: Data successfully passed.\n");
//--- 第 6 层
if(!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronConcatenate;
descr.count = LatentCount;
descr.window = prev_count;
descr.step = AccountDescr;
descr.optimisation = ADAM;
descr.activation = SIGMOID;
如果(!actor.Add(descr))
{
删除 descr;
返回 false;
}
//--- 第 16 层 | Softmax 层
如果 (!(descr = new CLayerDescription())
返回 false;
descr.type = defNeuronSoftMaxOCL;
descr.count = 1024;
descr.optimisation = ADAM;
descr.activation = SIGMOID;
如果 (!actor.Add(descr))
{
删除 descr;
返回 false;
}
PrintFormat("[Actor] Softmax Layer: Data successfully passed.\n");
//--- 第 7 层
如果(!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 2048;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
删除 descr;
返回 false;
}
//--- 第 8 层
如果(!(descr = new CLayerDescription()))))
返回 false;
descr.type = defNeuronBaseOCL;
descr.count = 2048;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
删除 descr;
返回 false;
}
//--- 第 8 层
如果(!(descr = new CLayerDescription()))))
返回 false;
descr.type = defNeuronBaseOCL;
descr.count = 2048;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
删除 descr;
返回 false;
}
//--- 第 9 层
如果(!(descr = new CLayerDescription()))))
返回 false;
descr.type = defNeuronSoftActorCritic;
descr.count = NActions;
descr.window_out = 32;
descr.optimisation = ADAM;
descr.activation = SIGMOID;
if(!actor.Add(descr))
{
删除 descr;
返回 false;
}
//---批评者
critic.Clear();
//--- 输入层
if(!(descr = new CLayerDescription()))
返回 false;
descr.type = defNeuronBaseOCL;
prev_count = descr.count = LatentCount;
descr.window = 0;
descr.activation = None;
descr.optimisation = ADAM;
if(!critic.Add(descr))
{
删除 descr;
返回 false;
}
//--- 第 1 层
如果(!(descr = new CLayerDescription()))))
返回 false;
descr.type = defNeuronConcatenate;
descr.count = 1024;
descr.window = prev_count;
descr.step = 6;
descr.optimisation = ADAM;
descr.activation = LReLU;
if(!critic.Add(descr))
{
删除 descr;
返回 false;
}
//--- 第 2 层
if(!(descr = new CLayerDescription()))
返回 false;
descr.type = defNeuronBaseOCL;
descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!critic.Add(descr))
{
删除 descr;
返回 false;
}
//--- 第 3 层
if(!(descr = new CLayerDescription()))))
返回 false;
descr.type = defNeuronBaseOCL;
descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!critic.如果(!critic.Add(descr))
{
删除 descr;
return false;
}
--- 第 4 层
if(!( descr = new CLayerDescription())))
返回 false;
descr.type = defNeuronBaseOCL;
descr.count = 1;
descr.optimisation = ADAM;
descr.activation = None;
if(!critic.如果(!critic.Add(descr))
{
删除 descr;
return false;
}
//---
return true;
}
 
//--- 演员
actor.Clear();
//--- 输入层
if(!(descr = new CLayerDescription()))))
返回 false;
descr.type = defNeuronBaseOCL;
int prev_count = descr.count = (HistoryBars * BarDescr);
descr.window = 0;
descr.activation = None;
descr.optimisation = ADAM.优化
if(!actor.Add(descr))
{
删除 descr;
返回 false;
}
// 层 1 | 多层多头关注层 - 1
如果 (!(descr = new CLayerDescription())
返回 false;
descr.type = defNeuronMLMHAttentionOCL;
descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
删除 descr;
返回 false;
}
PrintFormat("[Actor] Layer 1: Multilayer Multi-Head Attention Layer - 1: Data successfully passed.\n");
//--- 第 2 层 | 批量规范化层
if (!(descr = new CLayerDescription())
return false;
descr.type = defNeuronBatchNormOCL;
descr.count = prev_count;
descr.batch = 1024;
descr.activation = None;
descr.optimisation = ADAM;
如果 (!actor.Add(descr))
{
删除 descr;
返回 false;
}
PrintFormat("[Actor] Layer 2: Batch Normalisation Layer: Data successfully passed.\n");
// 第 3 层 | 多层多头注意层 - 2
if (!(descr = new CLayerDescription())
返回 false;
descr.type = defNeuronMLMHAttentionOCL;
descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
删除 descr;
返回 false;
}
PrintFormat("[Actor] Layer 3: Multilayer Multi-Head Attention Layer - 2: Data successfully passed.\n");
//--- 第 4 层
如果(!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = prev_count - 1;
descr.window = 2;
descr.step = 1;
descr.window_out = 8;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
删除 descr;
返回 false;
}
//--- 第 5 层
如果(!(descr = new CLayerDescription()))))
返回 false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = prev_count;
descr.window = 8;
descr.step = 8;
descr.window_out = 8;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
删除 descr;
返回 false;
}
//--- 第 6 层 | 卷积层 - 4
如果 (!(descr = new CLayerDescription())
返回 false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = BarDescr;
descr.window = 8;
descr.step = 1;
descr.window_out = 9;
descr.activation = LReLU;
descr.optimisation = ADAM;
如果 (!actor.Add(descr))
{
删除 descr;
返回 false;
}
PrintFormat("[Actor] Layer 7: Convolutional Layer - 4: Data successfully passed.\n");
//--- 第 7 层 | 卷积层 - 5
if (!(descr = new CLayerDescription())
return false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = BarDescr;
descr.window = 9;
descr.step = 1;
descr.window_out = 7;
descr.activation = LReLU;
descr.optimisation = ADAM;
如果 (!actor.Add(descr))
{
删除 descr;
返回 false;
}
PrintFormat("[Actor] Layer 8: Convolutional Layer - 5: Data successfully passed.\n");
//--- 第 8 层 | 卷积层 - 6
if (!(descr = new CLayerDescription())
return false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = BarDescr;
descr.window = 7;
descr.step = 1;
descr.window_out = 5;
descr.activation = LReLU;
descr.optimisation = ADAM;
如果 (!actor.Add(descr))
{
删除 descr;
返回 false;
}
PrintFormat("[Actor] Layer 9: Convolutional Layer - 6: Data successfully passed.\n");
//--- 第 9 层 | 卷积层 - 7
if (!(descr = new CLayerDescription())
return false;
descr.type = defNeuronConvOCL;
prev_count = descr.count = prev_count;
descr.window = 5;
descr.step = 1;
descr.window_out = 4;
descr.activation = LReLU;
descr.optimisation = ADAM;
如果 (!actor.Add(descr))
{
删除 descr;
返回 false;
}
PrintFormat("[Actor] Layer 10: Convolutional Layer - 7: Data successfully passed.\n");
// 第 10 层 | 多层多头注意力层 - 3
if (!(descr = new CLayerDescription())
返回 false;
descr.type = defNeuronMLMHAttentionOCL;
descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
删除 descr;
返回 false;
}
PrintFormat("[Actor] Layer 11: Multilayer Multi-Head Attention Layer - 3: Data successfully passed.\n");
// 第 11 层 | 多层多头注意力层 - 4
if (!(descr = new CLayerDescription())
返回 false;
descr.type = defNeuronMLMHAttentionOCL;
descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
删除 descr;
返回 false;
}
PrintFormat("[Actor] Layer 12: Multilayer Multi-Head Attention Layer - 4: Data successfully passed.\n");
//--- 第 12 层
if(!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronLSTMOCL;
descr.count = 1024;
descr.optimisation = ADAM;
descr.activation = SIGMOID;
if(!actor.Add(descr))
{
删除 descr;
返回 false;
}
//--- 第 13 层
if(!(descr = new CLayerDescription()))))
返回 false;
descr.type = defNeuronBaseOCL;
prev_count = descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
删除 descr;
返回 false;
}
// 第 14 层 | 多层多头关注层 - 5
如果 (!(descr = new CLayerDescription())
返回 false;
descr.type = defNeuronMLMHAttentionOCL;
descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if (!actor.Add(descr))
{
删除 descr;
返回 false;
}
PrintFormat("[Actor] Layer 13: Multilayer Multi-Head Attention Layer - 5: Data successfully passed.\n");
//--- 第 15 层
if(!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronConcatenate;
descr.count = LatentCount;
descr.window = prev_count;
descr.step = AccountDescr;
descr.optimisation = ADAM;
descr.activation = SIGMOID;
如果(!actor.Add(descr))
{
删除 descr;
返回 false;
}
//--- 第 16 层 | Softmax 层
如果 (!(descr = new CLayerDescription())
返回 false;
descr.type = defNeuronSoftMaxOCL;
descr.count = 1024;
descr.optimisation = ADAM;
descr.activation = SIGMOID;
如果 (!actor.Add(descr))
{
删除 descr;
返回 false;
}
PrintFormat("[Actor] Softmax Layer: Data successfully passed.\n");
//--- 第 17 层
如果(!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronBaseOCL;
descr.count = 512;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
删除 descr;
返回 false;
}
//--- 第 18 层
if(!(descr = new CLayerDescription()))))
返回 false;
descr.type = defNeuronBaseOCL;
descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
删除 descr;
返回 false;
}
//--- 第 19 层
if(!(descr = new CLayerDescription()))))
返回 false;
descr.type = defNeuronBaseOCL;
descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
删除 descr;
返回 false;
}
//--- 第 20 层
if(!(descr = new CLayerDescription()))))
返回 false;
descr.type = defNeuronBaseOCL;
descr.count = 1024;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!actor.Add(descr))
{
删除 descr;
返回 false;
}
//--- 第 21 层
if(!(descr = new CLayerDescription()))))
返回 false;
descr.type = defNeuronSoftActorCritic;
descr.count = NActions;
descr.window_out = 32;
descr.optimisation = ADAM;
descr.activation = SIGMOID;
if(!actor.Add(descr))
{
删除 descr;
返回 false;
}
//---批评者
critic.Clear();
//--- 输入层
if(!(descr = new CLayerDescription()))
返回 false;
descr.type = defNeuronBaseOCL;
prev_count = descr.count = LatentCount;
descr.window = 0;
descr.activation = None;
descr.optimisation = ADAM;
if(!critic.Add(descr))
{
删除 descr;
返回 false;
}
// 第 1 层 | 多层多头注意力层 - 4
如果 (!(descr = new CLayerDescription())
返回 false;
descr.type = defNeuronMLMHAttentionOCL;
descr.count = 512;
descr.activation = LReLU;
descr.optimisation = ADAM;
如果 (!critic.Add(descr))
{
删除 descr;
返回 false;
}
PrintFormat("[Actor] Layer 12: Multilayer Multi-Head Attention Layer - 4: Data successfully passed.\n");
//--- 第 2 层
if(!(descr = new CLayerDescription()))
return false;
descr.type = defNeuronConcatenate;
descr.count = 512;
descr.window = prev_count;
descr.step = 6;
descr.optimisation = ADAM;
descr.activation = LReLU;
if(!critic.Add(descr))
{
删除 descr;
返回 false;
}
//--- 第 3 层
if(!(descr = new CLayerDescription()))))
返回 false;
descr.type = defNeuronBaseOCL;
descr.count = 512;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!critic.Add(descr))
{
删除 descr;
返回 false;
}
//--- 第 4 层
如果(!(descr = new CLayerDescription()))))
返回 false;
descr.type = defNeuronBaseOCL;
descr.count = 512;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!critic.Add(descr))
{
删除 descr;
返回 false;
}
//--- 第 5 层
如果(!(descr = new CLayerDescription()))))
返回 false;
descr.type = defNeuronBaseOCL;
descr.count = 512;
descr.activation = LReLU;
descr.optimisation = ADAM;
if(!critic.如果(!critic.Add(descr))
{
删除 descr;
return false;
}
--- 第 6 层
if(!( descr = new CLayerDescription())))
返回 false;
descr.type = defNeuronBaseOCL;
descr.count = 1;
descr.optimisation = ADAM;
descr.activation = None;
if(!critic.如果(!critic.Add(descr))
{
删除 descr;
return false;
}
//---
返回 true;


也可以简单地将图片拖入文本,或使用Ctrl+V 粘贴图片
 
研究未能实现任何正交易。数据目录中没有文件。 共享数据文件夹中的 SoftAC.bd 文件似乎为空(12 字节)。研究 "不粘附在图表上。您能告诉我该怎么做吗?
 
star-ik #:
研究未能实现任何正交易。数据目录中没有文件。 共享数据文件夹中的 SoftAC.bd 文件似乎为空(12 字节)。研究 "不粘附在图表上。您能告诉我该怎么做吗?

1. "研究 "一开始的正交易差异是很自然的,因为使用的是绝对随机的网络。交易也将同样随机。启动智能交易系统时,尽可能将最小盈利设置为负值。然后,SoftAC.bd 文件中将充满用于初始化模型训练的示例。

2.研究文件中有一项检查。如果SoftAC.bd 文件中没有示例,它将不起作用。它没有用于模型训练的数据。

 
谢谢,很有用。绿点开始出现了。我没想到最小盈利可以设置在负值范围内。但还有一个问题。我必须手动删除第一个数据库吗?哪个文件?
 
star-ik #:
谢谢,很有用。绿点开始出现了。我没想到最小盈利可以设置在负值范围内。但还有一个问题。是否需要手动删除第一个数据库?哪个文件?

整个示例数据库都在 SoftAC.bd 中。我手动删除了第一个数据库。但在 Expert Advisor 中有一个 MaxReplayBuffer 500 常量,它将示例数据库的大小限制为 500 个轨迹。如果您愿意,可以更改并重新编译文件。这样就可以在示例数据库中只保留最后 500 个轨迹。

 
Dmitriy Gizlyk #:

整个示例数据库都在 SoftAC.bd 中。我手动删除了第一个。但 Expert Advisor 有一个 MaxReplayBuffer 500 常量,它将示例数据库的大小限制为 500 个轨迹。如果您愿意,可以更改并重新编译文件。这样就可以在示例数据库中只保留最后 500 个轨迹。

再次感谢。

 

德米特里,在填充示例数据库和添加新示例时,是否会删除或意外删除最老的示例?或者说,是否有必要建立一个包含全部交易次数的 示例数据库,同时考虑到训练中添加的示例,即以 1000 个轨迹为基础?

如果我没理解错的话,您是用 Test.mqh Expert Advisor 做了 10 次测试(经过 500 000 次迭代训练)。然后您说您又做了 15 次收集-训练-测试(循环)。然后你得到了一个有效的模型。所以我不明白,你是否在循环的每个阶段都运行了 10 次 Test.mqh Expert Advisor?我遇到的问题是,如果我这样做,基础中就会有更多的负面示例,Expert Advisor 最终就会开始负向交易。

假设我收集了 200 个轨迹库。我对它进行了 100,000 次迭代训练。然后 从测试中添加了 10 次,Research.mqh 在数据库中添加了 10-15 个新示例。我设置了 MinProfit 边界,例如-3000

我进行下一次训练(100 000 次迭代)。我再次从Research.mqh 中添加了 10 个测试通过实例和 10-15 个实例,并将 MinProfit 设置为 -2500

再次进行训练(100000 次迭代)。 MinProfit=-2000.

以此类推。我明白了吗?让我感到困惑的是,测试中经常会出现 -7000 甚至 -9000 的大负值。而且在基础中会有很多。难道网络不是被训练成故意在负值中交易的吗?

如果测试结果比前一次更差,该怎么办?我是否应该将MinProfit 改为负值?如果Research.mqh 在 指定限制(例如,MinProfit =-500)的100 次测试中无法在数据库中找到并添加任何内容,该怎么办

 
Viktor Kudriavtsev 交易数量 的示例数据库,同时考虑到训练中添加的示例,比如说以 1000 条轨迹为基础?

最老的会被删除。它是根据先进先出原则组织的,即先进先出。

 
Viktor Kudriavtsev #:

如果我没理解错的话,这里写的是您用 Test.mqh Expert Advisor 做了 10 次测试(经过 500 000 次迭代训练)。然后,您说您又做了 15 次收集-训练-测试(循环)。然后你得到了一个工作模型。所以我不明白,你是否在循环的每个阶段都运行了 10 次 Test.mqh Expert Advisor?我遇到的问题是,如果我这样做,就会在基础中得到更多的负面示例,而智能交易系统最终会开始负向交易。

我在策略测试器中有条件地运行了 10 次,以估算模型结果的散点极限。在随后的优化模式下收集轨迹时,我会选择上量值来选择最佳轨迹。