错误、漏洞、问题 - 页 320

 
stringo:
代码从根本上讲是不同的。

哇...我很震惊...

你能发布任何简单的x32和x64代码片段进行比较吗?只是为了满足你的好奇心,可以这么说......

 
KffAlex:


亲爱的先生们!这是第三次 遇到这个问题了。在Windows7 x64下创建一个外部库会导致某些奇迹。


对不起,耽搁了。在私下里回答了你。

请附上源代码。如果可能的话,请通过servicedesk 进行。这将最大限度地减少此类延误的可能性。

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
AlexSTAL:

哇...我很震惊...

你能为x32和x64的比较列出一个简单的代码片段吗?为了安抚你的好奇心,可以这样说...

我不能直接给你代码--我手头没有这个特性。

差异如下。

  • 寄存器是64位-32位。相应地,64位算术适合于一条指令(在32位中,两个64位整数的除法在40条汇编指令中完成)。
  • 有更多的64位寄存器。相应地,寄存器的寻址也不同。
  • 呼叫惯例是不同的。例如,在64位中,一个函数的前4个参数是在寄存器中传递的
 
我们应该在MT5中增加优化时间。这是在MT4中,在这里将是正确的修复)
 
Renat:

在测试停止后,本地代理在内存中挂着它们的缓存,再过5分钟,等待新任务的执行。如果在5分钟内没有人加载它们,它们就会自动卸载,并释放所有资源。

这种等待机制允许代理在重复的任务上提高响应速度,以牺牲准备/提高基础设施为代价。

ps:这是关于本地代理。作为服务运行的远程代理不会被卸载,但也会在一些停机时间后释放资源。

使用404构建。我说的是远程代理上的问题。即使经过10个小时的停机,内存也没有被释放出来。

还有几个问题。

1.在运行 策略测试 时,几乎一直是这样,每个处理器上的第一道程序很快就结束了,并返回零结果。

而如果你停止并重新启动,这些零点不会被重新计算。我在大量的处理器上运行测试,40-50个结果是零,没有机会重新计算这个数据。

有时其中一个处理器切换到失败状态,并开始每秒返回几次零结果。但如果我停止它,这些数据将再次被重新计算(表中的橙色区域)。

3.当在16个处理器上运行远程代理时,互联网1兆层不允许有这么快的下载历史,很明显,因为超时,所有的处理器都会失败。如果你一次启用一个处理器,通常就能成功。是否可以使用有16个处理器的系统,将历史记录下载到第一个处理器,然后复制到其他处理器?或者只是在加载历史记录时增加超时。

 
a483483:

使用404构建。我说的是远程代理上的问题。即使经过10个小时的闲置时间,内存也没有被释放出来。

还有几个问题。

1.在运行策略测试时,几乎总是在每个处理器上的第一道程序迅速结束并返回零结果。

而如果你停止并重新启动,这些零点不会被重新计算。我在大量的处理器上运行测试,40-50个结果是零,没有机会重新计算这个数据。

有时其中一个处理器切换到失败状态,并开始每秒返回几次零结果。但如果我停止它,这些数据将再次被重新计算(表中的橙色区域)。

3.当在16个处理器上运行远程代理时,互联网1兆层不允许有这么快的下载历史,很明显,因为超时,所有的处理器都会失败。如果你一次启用一个处理器,通常就能成功。是否可以使用有16个处理器的系统,将历史记录下载到第一个处理器,然后复制到其他处理器?或者只是在加载历史记录时增加超时。


需要代理日志、设置、符号、服务器。

你可以EX5专家,但更好的,当然是来源。

最好是在serviced。

 
KffAlex:
如果将这些功能移到程序的主体中,这个问题就不存在了,在Windows XP上,这个问题根本不存在!!。
这似乎是位数的问题(64/32),在Windows XP中你是在32位下工作的,所以错误没有重现。
请向Servicedesk提出请求,并附上问题EX5文件。(您与服务台的链接)
 

帮助,我不知道如何比较这两个数字,已经2天了

(今天的日期) > (昨天的日期)

          datetime bark[1];
          CopyTime(Symbol1,NULL,0,1,bark);
          if(bark[0]<=order)

订单 - (昨天的日期)

还是根本就不可能?

 

写了这个。

       for (uint k=0; k<66; k++)
         {
          datetime order=(datetime)HistoryDealGetInteger(ticket,DEAL_TIME);
          datetime bark[1];
          CopyTime(Symbol1,NULL,k,1,bark);
          if(bark[0]<=order)
            {

测试器被卡住了,就是这样。

 
alexluek:

写了这个。

有东西在测试器中循环,就是这样。

未来的时间比过去的时间长,你的这段代码没有说明问题,不清楚你在if块中做什么,你想从里面得到什么......

在我看来,这里有关于比较时间的详尽信息 :)

//+------------------------------------------------------------------+
//|                                                         test.mq5 |
//|                                                           mrProF |
//|                                                          http:// |
//+------------------------------------------------------------------+
#property copyright "mrProF"
#property link      "http://"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   datetime past=D'2010.12.1'; //Прошлое
   datetime future=D'2010.12.02'; //Будущее

   if(past<future)
     {
      Print(past," раньше чем: ",future);
     }

   datetime buffTime[1]; //Буфер для времени последнего бара
   CopyTime(_Symbol,_Period,0,1,buffTime); //Копируем время последнего бара

   if(buffTime[0]>past)
     {
      Print(past," раньше чем: ",buffTime[0]);
     }

  }
//+------------------------------------------------------------------+