Новая версия платформы MetaTrader 5 build 2007: Экономический календарь, MQL5-программы в виде сервисов - страница 3

 
Сломали таймер в Тестере
void OnInit() { Print(EventSetTimer(672 * 3600)); } // 672 часа - таймер каждые 28 суток

void OnTimer() { Print(__FUNCTION__); } // Не срабатывает.

Раньше работал при таких значения, сейчас - нет. Если задать, например, 100 часов, будет работать.

Интервал тестирования достаточный, чтобы несколько раз сработать. Тест по реальным тикам.

 

Проблемы с автообновлением в билде 1999. Терминал работал весь день 21.02.2019,  время от времени проверял обновления на последнюю бета, все остановилось на 1999. Счет MQ Demo Hedge.

Только что еще раз попробовал - нет обновлений. Перезапустил терминал - обновился на 2005. Лог-файл прилагаю, вкратце:

GL 0 01:40:32.362 LiveUpdate check for beta version // проверяю вручную

DS 0 01:40:32.637 LiveUpdate you are using the latest version

OQ 0 01:41:14.720 Terminal stopped // выключил

// запустил снова

RE 0 01:41:29.415 Terminal MetaTrader 5 - RoboForex x64 build 1999 started (ROBOFOREX LP)

LH 0 01:41:31.865 LiveUpdate new version build 2005 (IDE: 2005, Tester: 2005) is available

PE 0 01:41:39.887 LiveUpdate downloaded successfully

FO 0 01:41:48.517 Terminal stopped

CL 0 01:41:49.696 LiveUpdate updating...

HG 0 01:42:00.987 LiveUpdate updated successfully

Файлы:
20190222.zip  2 kb
 

И еще по мелочам.

Сейчас первый раз запустил 2005, открыл редактор, открылся также фоном хелп - был открыт в прошлый раз. Хотел посмотреть справку по функции под курсором, в редакторе нажал F1 - нет реакции.

Закрыл хелп. Нажал F1, появился мессадж - справка настраивается для использования в первый раз, потом все заработало нормально. 

 
Ilyas:

Возможно ли добавить какую-то оптимизацию при переборе элементов массива?

template <typename T>
void f( const T& ) { Print(__FUNCTION__); }

void OnStart()
{
  int Array[1000];
  ArrayInitialize(Array, 0);
  
  for (int i = ArraySize(Array) - 1; i >= 0; i--)
    f(Array[i]); // Каждый раз по индексу вычисляется смещение в памяти от начала массива.
}

В MQL нет указателей, где можно было бы писать просто f(Ptr--);

Получается, что при переборе совершаются мат. действия не только сравнения, что не вышел за пределы, но и расчет места в памяти в виде умножения. Никак не учитывается, где было предыдущее обращение к массиву, а где - текущее.

 
void OnStart()
{
  int a[] = {0};
  
  a[1] = 1; // 'a' - index out of range
}
На этапе компиляции, класс!
 
Намертво вешается Терминал
void OnStart()
{
  const string Name = "TEMP12345";
  
  if (CustomSymbolCreate(Name, NULL, "EURUSD"))
  {
    MqlRates Rates[1];
          
    CopyRates(Name, PERIOD_M1, D'2019.01.01', 1, Rates);    
  }
}
 или так
void OnStart()
{
  const string Name = "TEMP123456655";
  
  if (CustomSymbolCreate(Name, NULL, "EURUSD"))     
    Print(Bars(Name, PERIOD_M1));
}
 
fxsaber:

Возможно ли добавить какую-то оптимизацию при переборе элементов массива?

В MQL нет указателей, где можно было бы писать просто f(Ptr--);

Получается, что при переборе совершаются мат. действия не только сравнения, что не вышел за пределы, но и расчет места в памяти в виде умножения. Никак не учитывается, где было предыдущее обращение к массиву, а где - текущее.

Немного изменил код, чтобы код функции был осмысленным

template <typename T>
void f( const T& x)
  {
   Print(x);
  }

void OnStart()
{
  int Array[1000];
  ArrayInitialize(Array, 0);
  
  for (int i = ArraySize(Array) - 1; i >= 0; i--)
    f(Array[i]); // Каждый раз по индексу вычисляется смещение в памяти от начала массива.
}

При компиляции под x64 Release получаем следующий псевдокод

int *ptr=&Array[0];

ArrayInit(ptr,4000,0);

for(int N=4000; N; )
   Print(ptr[--N]);
 
Ilyas:

Немного изменил код, чтобы код функции был осмысленным

При компиляции под x64 Release получаем следующий псевдокод

Это красиво! А такое?

void OnStart()
{
  int Array[1000];
  ArrayInitialize(Array, 0);
  int i = ArraySize(Array) - 1;
  
  while (i > 0)
  {
    f(Array[i]);
    f(Array[i - 1]);
    i -= 2;
  }
}
 
Aidas Geguzis:

Как то очень странно себя ведёт тестер в версии 1999 в режиме Fast genetic based algorithm.

В версии 1966 (до красной линии) всё было нормально, но после обновления стало творится что-то не понятное.

Советник для открытия позиции использует синтетики.

 

Терминал обновился до версии 2005. Но ситуация с тестером в режиме Fast genetic based algorithm та же самая как и в версии 1999.

Тест запускается на 1 minute OHLC. Период тестирования 2016.01.01 -2018.12.31

В версии 2005 тест заканчивается за 2 минуты.

В версии 1966 тест длится более чем одни сутки.

Результаты тестов при изменении версии терминала отличаются кардинально.

Советник для открытия позиции использует синтетики. 

Причина обращения: