Скорость оптимизации

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Dmitiry Ananiev
9283
Dmitiry Ananiev  

Судя по маркету и фрилансу более 95% экспертов пишутся для одного символа.  Т.е. все эти роботы рассчитаны на торговлю на определенной паре, но при этом могут использоваться и на других парах. Так вот заметил с выходом последних билдов, что скорость оптимизации упала и достаточно сильно. 

В моем эксперте сравнение типа 

if (OrderSymbol() == _Symbol && OrderMagicNumber == mag) 

используется раза 3 и при этом еще получаю информацию о последнем ордере в истории. Т.е. получается 4 раза. 

Я  убрал эти проверки  для режима тестирования и оптимизации и О! ЧУДО ! скорость возросла в среднем раз в 10. Если прошлая оптимизация проходила за 7-9 часов то теперь меньше чем за час.  

При этом профилировщик не хочет показывать это узкое место, что несколько странно.

Конечно можно обрабатывать открытые ордера посредством одного вызова, тогда тормоза чувствоваться будут не так остро. НО это уже другой вопрос. 

PS Весь код советника выкладывать не буду. Роботов пишу преимущественно под МT4, потому что мой брокер не имеет МТ5,  и конвертирую для тестов с помощью библы MT4Orders.mqh. 

Собственно весь код для этого эффекта выглядит вот так : 

bool Real = true;

void OnInit()
{
        if(IsTesting() || IsOptimization() || IsVisualMode())
         Real = false;
      else
         Real = true;
}

bool CheckOrder()
  {
   if(!Real)
      return true;
   else
     {
      if(OrderSymbol() == _Symbol && OrderMagicNumber() == mag)
         return true;
     }
   return false;
  }
Edgar Akhmadeev
2357
Edgar Akhmadeev  

Если хотите ускорить оптимизацию, используйте раздельные советники для реала и для тестера (условная компиляция). Убирайте из тестерного варианта все ненужные вещи, в том числе проверку на режим оптимизации, которая занимает время. Убирайте проверки на символ и магик (оптимизация идёт на одном символе), минимизируйте обращения к серверу и дорогим системным функциям (старайтесь по возможности запоминать результаты в переменные). Избегайте работы со строками. Убедитесь, что каждый тик не рассчитывается то, что можно рассчитывать раз в N минут (часов). 

Это то, что оптимизатор кода в компиляторе не сделает за вас. Ну а во вторую очередь - обычная оптимизация кода (выведение расчётов из циклов и пр.), что компилятор скорее всего сделает.

Я таким образом постепенно довёл проход за 4 года с нескольких минут до 4 сек.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий