优化范围

 

大家好!

我想问一个关于用于优化EA 的数据范围的问题。也就是说,在哪些时间段选择哪些范围。例如,对于H1来说,在一个月、三个月或一年的数据上优化一个EA就足够了吗?我希望看到不同时间段的这些数值,并至少对选择进行简要证实。非常感谢你。

 
这是一个经常出现的问题。优化本质上是有争议的--它有反对者,也有支持者。这是一个纯粹的个人问题,主要取决于交易系统的特殊性和市场行为。此外,它还取决于优化参数的性质。
 
ITeXPert >> :


我想问一个关于用于优化EA的数据范围的问题。也就是说,在哪些时间段选择哪些范围。例如,对于H1来说,在月度、三年期和年度数据上优化专家顾问是否足够?我希望看到不同时间段的这些数值,并至少对选择进行简要证实。

关于测试和优化的好书
 

没有明确的标准;每个人都有自己的看法。我将尝试给你提供我的意见。

在整个历史时期的优化,纯粹是自欺欺人。这就是为什么优化时间间隔必须至少是测试期的一半。然而,测试期中用于优化的部分越少越好。在优化部分选择参数后,在你选择的全部间隔时间内运行测试,作为测试周期。你可以开始 "相信 "获得的结果,如果样本至少达到100个交易。但即使如此,对许多人来说也是不够的。很明显,更多的交易量 可以对系统进行更准确的估计。例如,我可以 "相信 "至少200笔交易的样本。1000次交易是最理想的,但完美的交易是没有限制的...

 

这个问题在Jezev和Shumsky那里得到了很好的处理。以下是通过总结他们所做的事情可以说的。

学习理论的任务不是最小化学习误差,而是最小化为所有未来可能的例子所定义的概括误差。这就是优化的TS将具有最大的预测能力。而这里的困难在于,实际可观察到的是也只有学习错误。归纳的误差只能根据一些考虑来估计。测试者对新数据的预测 误差由模型对数据描述的总长度以及模型本身的描述决定

近似误差

由于TC做出的决定的数量通常比其中调整的参数数量小得多, 在这种情况下,近似的 平均误差将通过拟合参数的总数w表示如下Eapprox= d/w,其中d是TS分析的输入参数的数量。在绝大多数情况下,d=w得到了满足(所有的拟合参数都集中在TC输入处)。

学习算法的主要问题,被称为过度学习 或适应历史的问题。这个问题的本质最好用一个具体的例子来解释。假设训练实例是由一个我们想要复制的函数产生的。在学习理论中,这种功能被称为教师。考虑到有限数量的训练实例,总是有可能构建学习误差 为零的测试运行,即误差定义在训练实例集上。要做到这一点,就必须采取一个拟合参数数量大于实例数量的TS。事实上,为了重现每个例子,我们有P个 方程,用于W 未知数如果未知数的数量少于方程的数量,那么这样的系统是欠确定的,并允许有无限多的解决方案。这就是主要问题:我们没有足够的信息来选择唯一正确的解决方案--教师职能。结果,随机选择的函数对训练样本中没有的新例子产生了很差的预测,即使Tester在历史上无误地再现了后者。他没有对已知的例子进行归纳,而是 它们记住了。这种效应被称为过度学习

与模型的复杂性有关的误差。

对一个模型的描述基本上归结为传递其子调整参数的值。 对于一个给定的精度,这样的描述将需要大约W 比特因此,与模型的复杂性有关的每个例子的具体误差可以估计如下。Ecomplex=W/P正如我们所看到的,它随着例子数量的增加(训练中的历史长度)而单调地减少。

事实上,为了毫不含糊地确定 拟合参数由P 给定的例子,有必要将系统的方程的P 必须超定,即参数W 数量必须大于方程的数量过度决定的程度越大,学习结果对训练实例子集的特定选择的依赖就越小。上面定义的泛化误差部分正是与由于例子数量的有限性而导致的解决方案变化 有关。

因此,我们估计了策略测试者 泛化误差的两个组成部分 E=Eapprox+ Ecomplex=d/W+W/P>SQRT(d/P)。重要的是,这些成分对拟合参数W的数量有不同的依赖,这意味着可以选择使整体误差最小的最佳尺寸。在参与策略优化的历史数据的最佳长度上达到最小误差(等号):P=k*W^2/d=k*W,其中k-常数大约等于4。

因此,如果历史数据的长度是策略测试器中拟合参数数量的四倍,在策略测试器中优化的正向测试中,专家顾问的预测误差将达到最小。

如果我们在测试器中优化5个参数(例如,马赫周期),那么历史的最佳长度应该是这样的:测试器将在上面使用4*5=20个交易。它可能需要1到......200天的历史,这完全取决于所采取的策略。减少这个数字将导致测试者与历史相适应,而增加--导致近似质量的恶化,从而导致预测精度的恶化。

 
简单地说, 我将透露一个小秘密,从哪些方面考虑选择网站优化的长度,什么是优化??????,是的,它是修剪,没有别的,所以我做修剪花费的方式如下,我把最后的年度图表放在H1(如果这是TS的主要时间框架),然后,他们确定了2个厚的部分,其中一个海湾,另一个 -细胞,并在每个部分做一个低劣的适合sootv。对于买入和卖出--我得到2套调整值,在未来我只包括在更高的时间框架上被一些工具过滤过的一套,在这个例子中我过滤了D1,每年适度-150% ,但对面包的配给来说已经足够了!"。 :-о)

 
будьте проще, открою маленький секрет

认识这个世界有很多方法。

有些人通过爱来认识它。有些是通过冥想等。我给出了一种通过逻辑和数学来估计利息价值的方法。所以你的秘密根本就不是秘密,它只是另一个方面...

P.S. 我上面谈到的只是优化参数的一个行为。要评估一个优化的EA的性能,一个点是不够的,你需要收集统计数据,统计学上有意义的结果始于对独立数据的一百次运行,每一次的过度优化 ...

因此,在测试器中进行充分优化的秘诀不会很简单。

 

非常感谢大家,特别是中子 的详细描述。最近我在论坛上发现了一个非常有趣的想法,我正在努力在我的代码中实现它。同时,我在演示中测试了它,得到了相当好的结果,3天后约为150%,但我有一些细微的差别......为了不创建一个新的主题,我将在这里问。

当定义一个进场点时,有必要查明在同一方向上是否已经有一个订单在n个点的距离内打开。 以下代码不工作,但我不能理解为什么。

bool buy=true。

for(int cnt=0;cnt<OrdersTotal();cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)。
如果(OrderType()==OP_BUY && OrderOpenPrice()<=Bid && Bid-OrderOpenPrice()<50*Point) buy=false;
}
如果(买入)OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0, "MyAdvisor",0,0,Blue)。

结果是,当我运行一个有10个可能开仓的EA时,它从一个点开始全部开仓。 我想让它开一个订单,只有在当前价格和当前开仓订单的价格之间的差异超过50点时才开下一个订单。

 

中子

这两类错误是否适用于任何TC,还是只适用于神经网络?

 
budimir 你是否选择趋势部分来定义参数?你是否抛弃了方向变化和横向趋势部分?
 
khorosh >> :
Budimir 你选择了趋势区域作为参数的定义?你会选择趋势线和侧面趋势线吗?

我选择了最热闹的趋势 部分,而拟合部分只转出20-30笔交易,而拟合部分的样本至少应该是100-1000笔交易,用于

母体的可靠性--所有这些都是无稽之谈,好吧,假设你拿了一个拟合图,直接与未来相邻,确定了市场的阶段--一个趋势,或者它是一个横盘的趋势,或者一个方向的变化,然后呢? 什么都没有!市场不是静止的,我们不知道它在未来会走向何方。


to ITeXPert > 不要取笑3天内150%的订单。

在我的TS中,你可以 在3天内以150%的价格买到十几 手这样的股票。:о)