错误、漏洞、问题 - 页 2438

 
Slava:

2. 在OnTesterPass中读取一种类型的框架,在OnTesterDeinit中完成。其他框架在OnTesterDeinit中被读取。

如果每一次有几个帧,这个功能不允许我们对计算出的通过的结果进行实时工作。

 
这里似乎是一个纯粹的方法论的缺陷

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

在EA中用自动替换的结果测试策略时间表

斯拉瓦, 2013.04.10 15:04

void OnTesterDeinit()
  {
   string        name;
   ulong         pass;
   long          id;
   double        value;
   int           handle,i;
   BalanceInTime balance[];
   MqlRates      rates[];
//---
   FrameFirst();
   FrameFilter("",1);
   while(FrameNext(pass,name,id,value,balance))
     {
      handle=FileOpen(name+"_"+string(id)+"_"+IntegerToString(pass,5,'0')+".txt",FILE_WRITE|FILE_CSV|FILE_ANSI);
      if(handle!=INVALID_HANDLE)
        {
         for(i=0; i<ArraySize(balance); i++)
            FileWrite(handle,balance[i].date,EnumToString(balance[i].entry),DoubleToString(balance[i].price,5),DoubleToString(balance[i].balance,2));
         FileClose(handle);
        }
     }
//---
   FrameFirst();
   FrameFilter("",2);
   while(FrameNext(pass,name,id,value,rates))
     {
      handle=FileOpen(name+"_"+string(id)+"_"+IntegerToString(pass,5,'0')+".txt",FILE_WRITE|FILE_CSV|FILE_ANSI);
      if(handle!=INVALID_HANDLE)
        {
         for(i=0; i<ArraySize(rates); i++)
            FileWrite(handle,rates[i].time,DoubleToString(rates[i].open,5),DoubleToString(rates[i].high,5),DoubleToString(rates[i].low,5),DoubleToString(rates[i].close,5),string(rates[i].tick_volume));
         FileClose(handle);
        }
     }
//---
  }
在循环中的FrameNext之前,最好在循环的每一次传递中调用ArrayFree。
 
Slava:

1.是的,可能是多余的。

2.在OnTesterPass中读取一种类型的框架,在OnTesterDeinit中完成。剩余的帧在OnTesterDeinit中被读取。

这种发射-接收几种类型的帧的能力使我们能够纠正测试器中一些难以产生的错误。只有在与某些参考值存在差异时,才会传送帧。

先前我提到了帧的损失,如果一次通过了许多帧,而代理出现了问题--连接中断--对这种情况是否会采取一些措施?

 
fxsaber:

你会打开opt-format吗?

是的。

作为交换,公布读取opt文件的代码

 
fxsaber:

如果每遍有几个帧,这个功能不允许你实时处理计数的结果。

是的。

这就是为什么我们必须在优化完成后读取 "非核心 "类型的帧。

 
Aleksey Vyazmikin:

先前我谈到了帧丢失,如果一次传输了许多帧,而代理出现了故障--通信中断--对这种情况会采取什么措施吗?

你能做什么?

优化结果 在任何情况下都会比其框架更早、更快离开。如果代理已经停滞(计算机关闭,服务停止),肯定没有什么可做的。

我们可以尝试做以下事情:在帧被发送之前,不要发送结果。但不知道我们什么时候能解决这个问题。

 
fxsaber:
这似乎是一个纯粹的方法论缺陷
在循环中的FrameNext之前,在每个循环通道上调用ArrayFree是一个好主意。

我们避免了不必要的内存重新分配。

在这种情况下,有99%的概率,阵列缓冲区将被分配一次

 
Slava:

你能做什么?

无论如何,优化的结果 将比其框架更早、更快离开。如果代理已经停滞(计算机关闭,服务停止),你完全没有办法。

我们可以尝试以下方法:在发送一帧之前,不要发送结果。但不知道我们什么时候会纠正它。

也许在传输帧之前,你可以说预计有多少帧,如果比预计的少,而且代理无法使用,那么把通行证给另一个代理,并覆盖已经收到的帧?

或者在每一帧的正文中写上总数和它的序列号,同样的,如果全部没有来,就重新优化。
 
Slava:

是的。

作为交换,公布读取opt文件的代码

我对录音更感兴趣。如果知道格式,我会做阅读。

 
Aleksey Vyazmikin:

在开始传输之前,你能不能知道预期有多少帧,如果比预期到的少,而且代理无法使用,那么就把通行证给另一个代理,并覆盖已经收到的帧?

或者在每一帧的正文中写上总的数量和它的序列号,用同样的方法,如果都没来,重新优化。

如果不是每次传球都能返回一帧呢?

我在上面举了一个关于在测试器中捕捉错误的例子。只有当某些结果值与基准值不一致时,才会发送帧。