Эквиобъёмное тестирование

 

собсно, на мысль навёл Ренат:

Renat 24.04.2010 15:33 
TheXpert писал(а) >>
Ну не знаю -- побаровые советники по тикам тестятся очень даже шустро.

Да, если эксперт сразу же отсекает вызовы при tick_volume>1, то и при потиковом тестировании все работает очень быстро.

Но надо помнить, что индикаторы в фоне будут все равно считаться.


Он конечно не совсем эту мысль высказал, но совсем рядышком :) :)

Итак: считаем вызовы OnTick() и реагируем только на кратные заданному в настройках значению.

Тестируется/оптимизируется быстрее, чем по тикам, но притом разумнее, чем при грануляции по времени.

В аттаче полный рабочий пример (переделанный "MACD Sample"). Здесь ключевой изменённый фрагмент:

void OnTick()
  {
   static uint current_ticks = -1; // добавлено // MetaDriver
   current_ticks++;                // добавлено // MetaDriver
   current_ticks %= InpTicksOut;   // добавлено, input int InpTicksOut - добавлена в Input-параметры   // MetaDriver
// Это то что было:   static datetime limit_time=0; // last trade processing time + timeout
//--- don't process if timeout
// Это то что было:  if(TimeCurrent()>=limit_time)
   if(!current_ticks)  // добавлено // MetaDriver
     {
      //--- check for data
      if(Bars(Symbol(),Period())>2*InpMATrendPeriod)
        {
         //--- change limit time by timeout in seconds if processed
         ExtExpert.Processing();  // добавлено // MetaDriver
//Это то что было:           if(ExtExpert.Processing()) limit_time=TimeCurrent()+ExtTimeOut;  
        }
     }
//---
  }
Файлы:
Причина обращения: