Новая версия платформы MetaTrader 5 build 3550: улучшения и исправления - страница 2

 
Ещё при оптимизации желательно сделать чистку буферов индикаторов, сделав в настройках возможность указать глубину постоянной истории - это уменьшит потребление памяти. Особенно актуально при использовании стандартных индикаторов или тех, чей код не доступен.
 

Общая область памяти для всех агентов, особенно для больших объёмов данных(бары, тики)

 
elibrarius #:
Уважаемые разработчики MQL может быть уже появилась время/возможность сделать доступной в тестере любую глубину истории, а не только за текущий год и предыдущий??Для МО надо анализировать несколько лет истории. Хотя бы для локального ПК и локальной сети. Видимо это ограничение для экономии траффика в облачных вычислениях.

Такого органичения не было и нет.

 
MetaQuotes #:

Такого органичения не было и нет.

Вот пример вызова индикатора (с экспертами то же самое). В нем через CopyBuffer запрашивается 100 000 элементов. И дополнительно CopyOpen тоже 100000 элементов.

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//---- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
input int MA_Period=21;
input int MA_Shift=0;
input ENUM_MA_METHOD MA_Method=MODE_SMA;
//--- indicator buffers
double         Label1Buffer[];
double         Buffer[];
//--- хэндл пользовательского индикатора Custom Moving Average.mq5
int MA_handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
   ResetLastError();
   Print("exp ",MA_Period," ",MA_Shift," ",MA_Method);
   MA_handle=iCustom(NULL,0,"Examples\\Custom Moving Average",MA_Period, MA_Shift, MA_Method, PRICE_CLOSE);
   Print("MA_handle = ",MA_handle,"  error = ",GetLastError());
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, const int prev_calculated,const datetime &time[], const double &open[], const double &high[],const double &low[], const double &close[],const long &tick_volume[], const long &volume[], const int &spread[])
  {
//--- скопируем значения индикатора Custom Moving Average в наш индикаторный буфер
   int copy=CopyBuffer(MA_handle,0,0,100000,Label1Buffer);
   int copy2=CopyOpen(_Symbol,PERIOD_H1,0,100000,Buffer);
   Print("copy =",copy," copy2 =",copy2, " rates_total =",rates_total," first =",time[0]," last =",time[rates_total-1]);
 
   return(rates_total);
  }

В терминале все 100 000 скопированы:

 test (EURUSD,H1)    copy =100000 copy2 =100000 rates_total =156055 first =1971.01.04 00:00:00 last =2022.12.27 20:00:00



В тестере скопированно только 6207 элементов из 100000 запрошенных. 6207 = равно количеству rates_total. Запуск эксперта с 1 января 2018. time[0] = 2017.01.02 т.е. история за предыдущий год.

copy =6207 copy2 =6207 rates_total =6207 first =2017.01.02 00:00:00 last =2017.12.29 23:00:00

Если запускать в середине года, то будет история за текущий год + история за предыдущий год. 31 декабря будет история за 2 года. А 1 января снова за 1 год.

В общем, нужно увеличить rates_total при запуске в тестере и оптимизаторе на всю доступную в терминале историю, т.е. тоже с 1971 года для EurUsd.

Файлы:
term1.png  54 kb
test1.png  48 kb
test.mq5  4 kb
 
elibrarius #:

Вот пример вызова индикатора (с экспертами то же самое). В нем через CopyBuffer запрашивается 100 000 элементов. И дополнительно CopyOpen тоже 100000 элементов.

В терминале все 100 000 скопированы:

 test (EURUSD,H1)    copy =100000 copy2 =100000 rates_total =156055 first =1971.01.04 00:00:00 last =2022.12.27 20:00:00



В тестере скопированно только 6207 элементов из 100000 запрошенных. 6207 = равно количеству rates_total. Запуск эксперта с 1 января 2018. time[0] = 2017.01.02 т.е. история за предыдущий год.

copy =6207 copy2 =6207 rates_total =6207 first =2017.01.02 00:00:00 last =2017.12.29 23:00:00

Если запускать в середине года, то будет история за текущий год + история за предыдущий год. 31 декабря будет история за 2 года. А 1 января снова за 1 год.

В общем, нужно увеличить rates_total при запуске в тестере и оптимизаторе на всю доступную в терминале историю, т.е. тоже с 1971 года для EurUsd.

При моделировании выдается история на 1000 баров больше начальной даты тестирования.

Поэтому нужно выбирать условия начала тестов с учетом запрашиваемой глубины.

Мы расширим настройки, чтобы в настройках тестера можно было указать произвольную начальную глубину данных.

 
Renat Fatkhullin #:

Мы расширим настройки, чтобы в настройках тестера можно было указать произвольную начальную глубину данных.

Замечательно!

Хорошо бы ещё решить проблему с оптимизацией.

 

Renat Fatkhullin #:

Мы расширим настройки, чтобы в настройках тестера можно было указать произвольную начальную глубину данных.

Ура!!!
Ждем.

Только лучше не в настройках, а например в OnInit(){}

Что-то вроде set_rates_total = 100000;

Глубина будет задаваться через input bars=100000; или даже просто задано в переменной. Из неё можно скопировать в set_rates_total.

А если будет прямо в окне тестера, то надо будет 100000 в двух местах указывать. Хотя в этом случае в тестере по умолчанию буду ставить максимальную историю (возможно это лучший вариант).

Так что любой вариант подойдет. Или оба с приоритетом на set_rates_total .

 
Для получения обновления Терминала не требуется подключение к торговому счету.
2022.12.28 19:40:12.134 LiveUpdate      new version build 3555 (IDE: 3555, Tester: 3555) is available
2022.12.28 19:40:12.138 Network '57880502': authorization on MetaQuotes-Demo failed (Invalid account)
2022.12.28 19:40:40.681 LiveUpdate      'mt5clw64' downloaded (33618 kb)
2022.12.28 19:40:54.818 LiveUpdate      'mt5clwide64' downloaded (23475 kb)
2022.12.28 19:41:01.096 LiveUpdate      'mt5clwtst64' downloaded (10806 kb)
2022.12.28 19:41:01.211 LiveUpdate      downloaded successfully
 
Renat Fatkhullin #:

При моделировании выдается история на 1000 баров больше начальной даты тестирования.

Поэтому нужно выбирать условия начала тестов с учетом запрашиваемой глубины.

Мы расширим настройки, чтобы в настройках тестера можно было указать произвольную начальную глубину данных.

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

Из наиболее критичного:

1. Обеспечить полноценную работу системы событий ChartEvents

2. Разработать спец. стартовые функции для программного задание периода тестирования, таймфрейма и инструментов из кода советника при старте тестера

3. Обеспечить поддержку многооконности и возможность программно располагать окна в заданном порядке

4. Активировать поддержку экрана Экономический Календарь и загрузку исторических значений экономических событий на программно заданую дату

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

 
Gladiator WXT #:

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

БД (SQLite) работают в Тестере. У Вас конкретно какая задача? Вот для оптимизации было бы здорово, если бы добавили примерно такую функцию:

bool  FrameAdd(
   const string  name,        // публичное имя/метка
   long          id,          // публичный id
   double        value,       // значение
   const string  sql_filename // имя файла БД
   );