Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5 - страница 107

 
Aleksei Stepanenko:

Немного поспешил радоваться :)

Функция ObjectFind теперь работает быстрее, но всё равно значительно медленнее, чем до 1968

Сейчас в четвёрке время выполнения 0.

и функции ObjectGetInteger и ObjectGetString стали "поджирать" время

Разберемся, не должно быть таких затрат времени.
 
fxsaber:

Советник (только выставляет в OnInit заданное (Amount) количество позиций)


11 секунд для Amount = 1. И 28 секунд для Amount = 5. Такое замедление - нормально?

А вы в своем тестере на каждый тик профиты, маржу, стопауты по всем правилам и тд считаете?

Насколько я вижу по коду, даже OnTick не реализован. Это означает, что в вашей версии позиции висят без изменения и контроля. А у нас ордеры просчитываются автоматически даже без наличия OnTick.

Как можно сравнивать "тестер", если он даже позиции по рынку не обновляет? Так тестировать нельзя.

 
Renat Fatkhullin:

А вы в своем тестере на каждый тик профиты, маржу, стопауты по всем правилам и тд считаете?

Насколько я вижу по коду, даже OnTick не реализован. Это означает, что в вашей версии позиции висят без изменения и контроля. А у нас ордеры просчитываются автоматически даже без наличия OnTick.

Как можно сравнивать "тестер", если он даже позиции по рынку не обновляет? Так тестировать нельзя.

В том Тестере нет только таймера. Он все считает, кроме некоторых специально не реализованных вещей: маржа и стопауты. Подробности и причины в описании. Ветка к работе служит хорошим дополнением. Тестер в данном случае - один из частных случаев применения. Сценариев использования написано больше десятка.

 
fxsaber:

В том Тестере нет только таймера. Он все считает, кроме некоторых специально не реализованных вещей: маржа и стопауты. Подробности и причины в описании. Ветка к работе служит хорошим дополнением. Тестер в данном случае - один из частных случаев применения. Сценариев использования написано больше десятка.

В обсуждаемом примере нет реализации OnTick.

По затратам на пересчете позиций разберемся и ускорим.
 
Renat Fatkhullin:

В обсуждаемом примере нет реализации OnTick.

Изначально разговор не затевался о Tester vs Virtual, но раз пошла такая тема, то вот полноценный воспроизводимый код. Там OnTick есть.

 

Протестировал на 1971 билде и MetaQuotes-Demo:

AmountMT5-TesterMT5-Virtual
01.5943.141
12.8283.250
23.703
4.141
34.3604.781
45.0165.453
55.5796.00
2014.46914.828


EURUSD,H1: 15515304 ticks, 4663 bars generated

Оказывается, уже оптимизировали расчет позиций и теперь во всех тестах штатный тестер считает быстрее библиотеки виртуализации.
 
Renat Fatkhullin:

Протестировал на 1971 билде и MetaQuotes-Demo:

Оказывается, уже оптимизировали расчет позиций и теперь во всех тестах штатный тестер считает быстрее библиотеки виртуализации.

У меня другие результаты. Привожу только Amount = 1 для краткости.


MT5-Virtual

2019.01.16 03:08:16.428 Statistics      shortest pass 0:00:05.507, longest pass 0:00:13.384, average pass 0:00:07.316


MT5-Tester

 

А почему вы не использовали мои воспроизводимые условия?

Я специально указал все настройки для воспроизведения. Только в таком случае, когда обе стороны имеют возможность повторения тестов, можно что-то сравнивать. Без кастомных данных и непонятных настроек.

 
Renat Fatkhullin:

А почему вы не использовали мои воспроизводимые условия?

Я специально указал все настройки для воспроизведения. Только в таком случае, когда обе стороны имеют возможность повторения тестов, можно что-то сравнивать. Без кастомных данных и непонятных настроек.

Обязательно выложу, как будет готово.


ЗЫ У меня постоянно виснет отладчик на исторических данных, когда делаю SHIFT+F5 после точки останова. Такой лог

2019.01.16 03:42:48.214 2011.01.01 00:00:00   debugging terminated
2019.01.16 03:42:48.214 global initialization failed
2019.01.16 03:42:48.214 global initialization critical error
2019.01.16 03:42:48.214 tester stopped because expert initialization failed
2019.01.16 03:42:48.219 shutdown tester machine
2019.01.16 03:42:48.221 try to cancel expert execution
2019.01.16 03:42:48.224 expert execution canceled
2019.01.16 03:43:48.227 cannot stop tester process [0, 0]
2019.01.16 03:43:48.229 agent shutdown forced
 
Идентичные настройки Тестера

Hedge, RAM-Drive, 1 Agent-only. Советник

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

// #define VIRTUAL_ON // Тестер или Virtual

#ifdef VIRTUAL_ON
  #include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/ru/code/22577
  
  bool NewTick() { VIRTUAL::NewTick(); return(true); } // Добавили первый тик до OnInit.  
  const bool Init = VIRTUAL::SelectByHandle(VIRTUAL::Create()) && NewTick();  
  
  void OnTick() { VIRTUAL::NewTick(); }
#endif // VIRTUAL_ON

input int inRange = 0;          // 1 .. 5
input int inAmount = 1;         // Amount of positions
input int iTakeProfit  = 10000; // TakeProfit in pips

uint iStartTime;

void OnInit()
{   
  const double Price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
  
  for (int i = 0; i < inAmount; i++)
    OrderSend(_Symbol, OP_BUY, 0.1, Price, 100, 0, Price + iTakeProfit * _Point);
    
  iStartTime = GetTickCount(); // Начинается замер специально в OnInit, а не снаружи    
}

double OnTester()
{
  return(GetTickCount() - iStartTime);
}

В нем добавлена выделенная строка, т.к. раньше тестировал только на кастомных по реальным тикам и библиотека немного менялась с момента первого теста.

Время берется shortest из лога (пять проходов Оптимизатора).

AmountMT5-TesterMT5-Virtual
02.1372.761
13.4952.808
24.1962.933
34.6802.793
45.6162.808
56.1623.042
2015.0543.432


Видно, что Tester сильно замедляется, Virtual - нет. Кто быстрее - см. таблицу.


ЗЫ Virtual не вычисляет (специально) маржу, своп и стопаут. Но вряд ли это является причиной сильных отличий.