mql5语言的特点、微妙之处以及技巧 - 页 41

 
斯拉瓦
你忘了指定测量的开始是在第一个OnTick的开始。测量的结束是在OnDeinit的开始。
或者在OnTester的开始,因为
// После окончания бэктеста сначала вызывается OnTester, затем OnDeinit

在主题中

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

虫子,虫子,问题

fxsaber, 2016.08.25 11:13

生命周期
// Возвращает true, если полностью выполнился OnTick() на последнее событие NewTick в тестере - окончание бэктеста. Иначе - false.
   static bool BACKTEST::IsEnding(void)
     {
      return(::TesterStatistics(STAT_BALANCEMIN) > 0);
     }
 
fxsaber:
或者在OnTester的开始,如


并将测量结果作为OnTester的返回代码返回。
 
斯拉瓦
并将测量结果作为OnTester的返回代码返回。

还没有在测试器中 测试GetTickCount我假设这个功能将被测试者模拟,这在某些情况下可能是合理的。

顺便问一下,如何理解测试器中的当前时间 到最近的毫秒?SymbolInfoTick+Tick.time_msc允许你找出主符号的OnTick调用时间。因此,即使是检查测试仪的滑动模式的正确性。但似乎没有其他办法。


真的,我想问的是别的事情。为了在优化器中自动进行批处理,并放弃第一个和最后一个值,我应该通过框架来行动(传递OnTester-result),否则会扭曲结果?

 
测试器中的GetTickCount 正常工作,没有被模拟,与Sleep不同。
 
fxsaber:

真的,我想问的是别的事情。为了使优化器中的工作台自动放弃第一个和最后一个值,我是否需要通过框架来行动(以传递OnTester-result),或者会扭曲结果?

它不应该。它是在测量后发送的。尝试
 
Slava:
不要使用微秒计时器进行质量测量使用常规的毫秒级GetTickCount。

GetMicrosecondCount 的速度是否比GetTickCount更慢(或者它是模拟的)?

还是EventSetMillisecondTimer的失败是指?

 
fxsaber:

GetMicrosecondCount的速度是否比GetTickCount更慢(或者它是模拟的)?

还是EventSetMillisecondTimer的失败是指?

我是指GetMicrosecondCount。不能确定它是否会减慢服务器的速度。它可能有间接影响。因此,最好使用系统中的GetTickCount

GetMicrosecondCount用于测量代码执行的短时期。要测量大量的OnTick执行,最好使用GetTickCount。

当你得到稳定的结果时,尝试使用GetMicrosecondsCount而不是GetTickCount。你要在这里告诉我。也许我担心的太多了。

 
目前有两个历史表,其数据可以通过历史功能访问--订单表和交易表。

它们的内容只能通过HistorySelect函数来影响。而它的发生情况如下

  • HistorySelect和HistorySelectByPosition- 同时影响两个表。
  • HistoryDealSelect只影响交易表(对当前的订单-历史表没有影响)。
  • HistoryOrderSelect只影响订单表(不影响当前交易历史表)。

 
在订单中,可以设置Request.expiration字段,最高包括LONG_MAX + 2。如果订单处于活动状态(不在历史表中),其值将通过ORDER_TIME_EXPIRATION 完全可用。
 
平衡交易的PositionIdentifier为零。因此,很容易写出,比如说,这个函数
// Возвращает сумму всех балансовых не торговых операций (начисления + списания)
double GetSumBalanceOperations( void )
{
  double Res = 0;
  
  if (HistorySelectByPosition(0))
    for (int i = HistoryDealsTotal() - 1; i >= 0; i--)
      Res += HistoryDealGetDouble(HistoryDealGetTicket(i), DEAL_PROFIT);
      
  return(Res);
}

这种交易的DEAL_ENTRY是DEAL_ENTRY_IN(0)。