云同步错误 - 页 3

 
Clock:

这听起来是个好主意,我很感谢这个提示。

然而,关于这一点,有3点。

1)正如我上面提到的,我也有 "无尽 "循环的问题,但由于我从这个主题中了解到 "无尽循环 "只是对 "一个事件超过10分钟 "的最佳猜测,我接受这可能是我的代码。我使用相当复杂的指标,由于(至少我认为如此)它们在创建句柄时计算其整个历史,这可能(在缓慢的计算机上)需要超过十分钟。

2) 然而!通常我的云计算在10-15分钟后就崩溃了。但是昨天晚上,它完美地工作了8个小时。没有一次崩溃,尽管我根本就没有改变代码。很奇怪!

3) 最重要的是,因为与你的方法有关。当你基于内存拒绝一个代理时,代理(以及整个云)不会崩溃,我明白这一点。但我不认为,更强大的机器会再次尝试相同的参数集,所以你基本上失去了优化数据点,我说的对吗?你说这是我们必须付出的代价吗?


我很想知道,一旦我下班回来,我的代理是否还能工作......

嗨,时钟。

1)首先,除非你在使用指标,例如10年的100万数据,而且指标非常复杂,否则在这个处理能力的时代,我很惊讶在正常的系统上,任何事情都需要5分钟。我在这里强调正常的原因是,我仍然怀疑在云中有一些代理在机器上运行,这些机器要么负载极大,要么只是有Windows(创伤后应激)减速的严重问题。只需要一个哑巴代理就可以杀死你的优化....。

2)我有和你完全一样的情况--即在优化开始后,一些云代理会返回结果,没有任何问题。然后过了5-20分钟,有时甚至更久,一个代理会抛出可怕的错误,然后砰的一声,优化结束。我也有过偶尔的优化,它完成时没有任何问题。非常令人沮丧,因为你无法访问代理的日志文件、系统细节、CPU使用率等,无法看到发生了什么。

3)你说的这一点非常有趣。从我的理解来看,优化器只有在得到一个特定的参数 组合的结果时,才会考虑 "使用 "该参数组合,尽管我可能是错的。也许MetaQuotes的人可以评论一下这一点?

无论如何,我希望你能取得进展!:)

 
angevoyageur:
你拒绝所有 低于32G 内存代理时,有多少代理 可用的

你好。

对于消费者类型的电脑来说,这似乎是一个很大的内存量,但云计算似乎没有任何问题,可以找到具有这些规格的机器。当我开始优化时,优化器很容易找到最初的64个代理,然后迅速提升到128个(当然,这取决于参数 集的配置)。我最初尝试了8GB--优化运行的时间较长,而且经常完成,但我仍然经常有一个代理产生错误,结果是杀死优化。然后我尝试了16GB--同样,它更好,但不是完美无缺。我没有再去尝试24GB--我想我应该直接进入32GB,看看会发生什么。)然后就看到了--完美无缺的优化。

我想多玩玩,看看我是否能更好地磨练代理的配置要求,但当你因玩耍而被收费时,这种动机很快就消失了。)

 
cowil:

你好。

对于消费者类型的电脑来说,这似乎是一个很大的内存量,但云计算似乎没有任何问题,可以找到具有这些规格的机器。当我开始优化时,优化器很容易找到最初的64个代理,然后迅速提升到128个(当然,这取决于参数集的配置)。我最初尝试了8GB--优化运行的时间较长,而且经常完成,但我仍然经常有一个代理产生错误,结果是杀死优化。然后我尝试了16GB--同样,它更好,但不是完美无缺。我没有再去尝试24GB--我想我应该直接进入32GB,看看会发生什么。)然后就看到了--完美无缺的优化。

我想多玩一会儿,看看我是否能更好地磨练代理配置要求,但当你因玩耍而被收费时,这种动力很快就消失了。)

如果能从Metaquotes得到一些回报,那就很有意思了。如果一台16G内存的机器不足以运行一些优化,那就有必要调查。如果我很好地理解,当你在本地运行你的优化时,你没有任何问题,为什么当使用云时,需要这么多内存?
 
angevoyageur:
从Metaquotes得到一些回报将是有趣的。如果一台16G内存的机器不足以运行一些优化,那就需要调查。如果我很好地理解,当你在本地运行你的优化时,你没有任何问题,为什么当使用云时,需要这么多内存?

我完全不知道。我的本地机器是一台8GB i7处理器的机器,MT5在上面安装了8个本地代理(它显然只是一个4核处理器,但在超线程的情况下,Windows和MT5当然把它看作一个8核处理器)。当进行优化时,每个代理似乎使用了约400MB的内存,这显然意味着8个代理需要约3.2GB的内存。离32GB还远着呢....

我在想的另一件事,实际上可能是这个问题的根本原因,就是一个 "坏 "的云代理终止了整个优化的事实。事实上,可能发生的情况是,当云服务器 为优化工作分配代理时(没有说明内存要求),同样的 "坏 "代理被选中。当内存要求在OnInit()中被说明时,"坏 "代理被绕过,因为它们运行的盒子不符合要求,只有好的代理被选中。仔细想想,我怀疑这可能是更多的情况。

是的,我已经向MetaQuotes登记了这个问题,但还没有听到任何回复。

 

如果OnInit(或任何其他函数)被执行超过10分钟,即使是在一个缓慢的代理上,它被认为是对MQL5云计算网络有害的无休止的循环(注意,对于本地和远程代理没有这样的限制)。

对于这种情况,我们已经实现了OnInit函数的返回代码 INIT_AGENT_NOT_SUITABLE。使用它,云计算网络用户可以在测试运行一开始就检查并拒绝不合适的代理。

你可以把这个评论看作是对你的服务台票据的正式答复。我们知道你已经熟悉了上面的信息。

此外。在任何情况下,任何功能都被认为是不正常的、无效的和非最佳的,如果它的执行时间超过10分钟,即使是在最慢的PC上。

 
MetaQuotes:

如果OnInit(或任何其他函数)被执行超过10分钟,即使是在一个缓慢的代理上,它被认为是对MQL5云计算网络有害的无尽循环(注意,本地和远程代理没有这种限制)。

对于这种情况,我们已经实现了OnInit函数的返回代码 INIT_AGENT_NOT_SUITABLE。使用它,云计算网络用户可以在测试运行一开始就检查并拒绝不合适的代理。

你可以把这个评论看作是对你的服务台票据的正式答复。我们知道你已经熟悉了上面的信息。

此外。在任何情况下,如果任何功能的执行时间超过10分钟,即使在最慢的电脑上也被认为是不正常的、无效的和非最佳的。

嗨,MetaQuotes。

首先,非常感谢您的评论--非常感谢。

我面临的问题(如果你回顾这个帖子,显然还有其他问题)是,当使用我的本地代理进行优化时,优化运行良好--即随着优化的进行,每个代理上的 "完成百分比 "状态稳步上升。如果我的专家号中的OnTick()事件处理程序包含任何需要超过一分钟(更不用说10分钟)才能完成的代码,这些 "完成百分比 "的百分比肯定会在这些时间暂停?如果我的代码包含云代理错误所暗示的无休止的循环形式,我不是应该在这些状态百分比中看到10分钟(或更多)的暂停吗?

 

好吧,经过我的专家们的努力,我似乎已经找到了OnInit()或OnTick() "无尽循环 "错误的问题的根源--这就是SymbolInfoInteger()命令。我不知道SymbolInfoDouble()或SymbolInfoTick()是否会导致同样的问题,因为我还没有机会进一步实验。如果有人想试试这个,请在优化器中运行以下专家,使用云代理。

/+------------------------------------------------------------------+
//|                                              MultiSymbolTest.mq5 |
//|                                                                  |
//+------------------------------------------------------------------+
input double var1 = 45;
input double var2 = 54;

input bool onInit = true;
input bool onTick = false;


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit() { 

    
    if (onInit) {
    
        string pairsToTrade[] = {"AUDUSD","EURJPY","EURUSD","GBPUSD","AUDJPY","USDJPY","AUDCAD"};
        for (int i=0; i<ArraySize(pairsToTrade); i++) {
            int digits = SymbolInfoInteger(pairsToTrade[i], SYMBOL_DIGITS);
            if (digits == -1)
                return(INIT_FAILED);
        }
    }           

    // Return...
    return(INIT_SUCCEEDED);
}



//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
void OnTick() {

    if (onTick) {
    
        string pairsToTrade[] = {"AUDUSD","EURJPY","EURUSD","GBPUSD","AUDJPY","USDJPY","AUDCAD"};
        for (int i=0; i<ArraySize(pairsToTrade); i++) {
            int digits = SymbolInfoInteger(pairsToTrade[i], SYMBOL_DIGITS);
            if (digits == -1)
                return;
        }
    }           

    ExpertRemove();
}    

选择你想测试OnInit()或OnTick(),给var1和var2足够的开始/步骤/停止值,产生大约1000个组合(可能更少,但这是我一直使用的),然后启动优化器。大约10分钟后,你会看到 "检测到无尽循环 "的错误。

哦,我之所以把 "ExpertRemove() "放在OnTick()的末尾,是为了表明只需要OnTick()的一次迭代就能产生错误。

不用说,我也已经向服务台报告了这个问题......

 
哦,我忘了说,不管什么原因,我上面提供的内存修复方法似乎在大多数时候都能解决这个问题,但不是全部。我不知道这是怎么/为什么/什么原因,我不知道。它一定是在MT5的肠子里挠到了什么东西......:)
 

我可以确认这个问题:

2013.05.20 14:22:31 MQL5云欧洲2个遗传通(0,22)测试,错误 "OnInit函数中检测到无尽循环,专家被MQL5云网络 拒绝",时间为602秒(PR140)。

 
需要思考...