不适合MT开发者!用什么来代替INIT_PARAMETERS_INCORRECT? - 页 4

 
fxsaber:

我为优化器的垫子模式做了一个测试专家顾问

这是8个代理在完全蛮力模式下并行的优化图,没有交错传递(Rand = false)。

人们在这里可以清楚地看到,代理正在分批执行任务。


为了看到对参数的依赖性,让我们切换显示模式

这里是--一个本地抛物线,其顶部(单元)我们将通过GA寻找。


在洗牌模式下(Rand = true),当然,完全用蛮力找到我们的顶点


 
fxsaber:

这里是本地抛物线,将通过GA寻找其顶部(一)。

在没有GA混合的情况下,我没有找到极值,但接近了它

Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 1
Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 2
Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 3
Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 4
Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 5
Tester  Best result 0.999424 produced at generation 5. Next generation 6
Tester  Best result 0.99987456 produced at generation 6. Next generation 7
Tester  Best result 0.99987456 produced at generation 6. Next generation 8
Tester  Best result 0.99987456 produced at generation 6. Next generation 9
Tester  Best result 0.99987456 produced at generation 6. Next generation 10
Tester  Best result 0.99987456 produced at generation 6. Next generation 11
Tester  Best result 0.99987456 produced at generation 6. Next generation 12
Tester  Best result 0.99987456 produced at generation 6. Next generation 13
Tester  Best result 0.99987456 produced at generation 6. Next generation 14
Tester  Best result 0.99987456 produced at generation 6. Next generation 15
Tester  Best result 0.99987456 produced at generation 6. Next generation 16
Tester  genetic calculation is over
Tester  result cache used 973 times
Tester  genetic optimization finished on pass 1152 (of 10001)
Statistics      optimization done in 0 minutes 00 seconds
Statistics      local 179 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

它花了179次传球。让我提醒你,完整的一套任务是10001次。是的,问题非常简单,但仍然。


现在让我们来试试有洗牌的变体(Rand = true)。

Tester  Best result 0.99949824 produced at generation 0. Next generation 1
Tester  Best result 0.99949824 produced at generation 0. Next generation 2
Tester  Best result 0.99949824 produced at generation 0. Next generation 3
Tester  Best result 0.99949824 produced at generation 0. Next generation 4
Tester  Best result 0.99992256 produced at generation 4. Next generation 5
Tester  Best result 0.99992256 produced at generation 4. Next generation 6
Tester  Best result 0.99992256 produced at generation 4. Next generation 7
Tester  Best result 0.99992256 produced at generation 4. Next generation 8
Tester  Best result 0.99992256 produced at generation 4. Next generation 9
Tester  Best result 0.99992256 produced at generation 4. Next generation 10
Tester  Best result 0.99992256 produced at generation 4. Next generation 11
Tester  Best result 0.99992256 produced at generation 4. Next generation 12
Tester  Best result 0.99992256 produced at generation 4. Next generation 13
Tester  Best result 0.99992256 produced at generation 4. Next generation 14
Tester  Best result 0.99992256 produced at generation 4. Next generation 15
Tester  Best result 0.99992256 produced at generation 4. Next generation 16
Tester  genetic calculation is over
Tester  result cache used 970 times
Tester  genetic optimization finished on pass 1152 (of 10001)
Statistics      optimization done in 0 minutes 01 seconds
Statistics      local 182 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

再次关闭。从日志中可以清楚地看到,有182次是完全计算出来的,有970次是从缓存中提取的。


良好的结果,因此,让我们尝试增加区间内的点数。

 
fxsaber:

这是一个很好的结果,所以让我们试着增加区间内的点的数量。

区间内的点数为一百万。


Rand = false

Tester  Best result 0.9999999424 produced at generation 3. Next generation 32
Tester  genetic calculation is over
Tester  result cache used 7533 times
Tester  genetic optimization finished on pass 8704 (of 1000001)
Statistics      optimization done in 0 minutes 04 seconds
Statistics      local 1171 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)


Rand = true (在一百万个点中,随机选择的一对被交换了一亿次)

Tester  Best result 0.999998294364 produced at generation 10. Next generation 32
Tester  genetic calculation is over
Tester  result cache used 7452 times
Tester  genetic optimization finished on pass 8704 (of 1000001)
Statistics      optimization done in 0 minutes 04 seconds
Statistics      local 1252 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)


结果表明,我的自我安慰的声明

关于交易、自动交易系统和交易策略测试的论坛

不适合MT开发者!用什么来代替INIT_PARAMETERS_INCORRECT?

fxsaber, 2018.07.10 16:27

很明显,如果你追踪y=x^2的完整列举。然后随机洗刷优化行,并在洗刷的基础上创建一个新的集合。那么GA将无法找到抛物线的顶点。

是假的而不是真的。


另一方面,将健身函数选择为抛物线最初是极其短视的,因为接近1的点的数量是不多的。


对于GA来说,只有一个问题,既然所选的函数是理想的,为什么没有找到准确的极值,而没有混合?

 
fxsaber:

另一方面,选择健身函数为抛物线最初是极其短视的,因为接近1的点的数量是不计其数的。

我想,如果你选择一个有尖锐峰值的函数,GA在混合后仍然会断裂。而这样的函数更接近于TC。

 
fxsaber:

我已经为优化器的数学模式发布了一个测试EA

不幸的是,我的知识不足以理解这一切 ))))

我决定让它变得更简单。一般来说,我在我的专家顾问中加入了合法链文件中的记录。我在117649中发现了1953个可能的变体。顺便说一下,我花了3天时间对3天的间隔进行了全面搜索,只有开盘价 和0个交易。

Tester	optimization finished, total passes 117649 (successful 114123 passes)
Statistics      optimization done in 2 hours 36 minutes 36 seconds

我现在有一个文件。我还不知道如何使用它进行优化。我明天会考虑一下...

而为什么成功的人比较少呢?我们是否必须再做一次?
 
fxsaber:

我想,如果你选择一个有尖锐峰值的函数,GA在混合后仍然会断裂。而这样的函数更接近于TC。

因此,遗传学的目的不是为了捕捉峰值。 它的目的是寻找稳定的区域,这也是TC的要求。 而峰值是噪音,这是一个规则。

至于不正确的参数组合,应在种群形成阶段予以消除,即如果基因交换或突变导致不正确的个体,有必要再次重复其生成,直到获得正确的个体。 然后一切都会好起来。

如果INIT_PARAMETERS_INCORRECT 的筛选发生在种群形成之后,从而减少了这个种群的规模,那么这当然违反了正常的遗传选择机制。 显然,MQ有这种变体。 而在这种情况下,topicstarter的任务很难解决(在一般情况下),用手鼓跳舞是没有帮助的。

 
Сергей Таболин:

谢谢你的意见,但这里没有讨论方案的架构。如果你还没有注意到...

错了,错了。

我同意你的问题正是程序的错误架构。我认为你只能通过完全的蛮力来获得最大限度,而且会非常不稳定。

 
好吧,我再投5戈比。
最有可能的是,在每一次打勾 时都会使用完全的过冲量。这本身就导致了操作的缓慢。如果是这样,我们应该考虑只在专家顾问的开始/打开栏时 使用全面搜索,然后检查最新数据。这种优化总是能减少资源消耗。
 
Alexey Navoykov:

遗传学的目的不是为了捕捉峰值。 它的目的是寻找稳定的区域,这也是TC的要求。 而峰值是噪音,是一种规则。

不完全是这样。 此外,即使是稳定的优化空间区域,也是有低谷和高峰的区域,FF远非平滑。

遗传学是一个多功能的工具,它可以被调整以优化损坏的FF,但在这种情况下,它将需要更长的时间来优化一个平滑的FF。

我认为,标准的遗传学应该消化有一半INIT_PARAMETERS_INCORRECT的集合,甚至不用考虑它。特别是由于这些地区通常有很好的集群。

但一般来说,最好的解决办法是对输入参数空间进行转换。

 
Georgiy Merts:

徒劳无功,徒劳无功。

我同意你的问题是在程序的错误架构上。我认为你只能通过完全的蛮力来获得最大限度,而且会非常不稳定。

这与建筑无关。这是关于函数的集合和它们的应用顺序。事实上,最初,这些函数有一个单一的常数序列。然后我决定,也许我应该试验一下调用它们的顺序,而不调用其中一些。我通过INIT_PARAMETERS_INCORRECT来实现。你可以看到进展。但我对遗传优化有一个问题。

现在进入正题。我已经创建了一个带有合法链的文件。现在如何使用它?我怀疑,我应该使用onTester,框架...看了一下文件,但有些地方不对劲。想不出如何处理它。

我想把它读到一个数组中,然后从中获取数据...