Как уменьшить прожорливость хендла индикатора?

 

Код EA с инициализацией только 1 хендла индикатора iMA:

int handle;
//---
int OnInit()
  {
   handle=iMA("EURUSD",PERIOD_M1,10,0,MODE_EMA,PRICE_CLOSE);
   if(handle<0)
     {
      Print("Kosyak. Handle=",INVALID_HANDLE,".\n Error=",GetLastError());
      return INIT_FAILED;
     }
   return(INIT_SUCCEEDED);
  }
//---
void OnDeinit(const int reason) {}
//---
void OnTick() {}

Количество памяти, которое МТ5 занимает в ОЗУ = 176 608 К:


Количество памяти, которое МТ5 занимает в ОЗУ после установки ЕА (см. код выше) = 618 596 К:

А почему так много то? Хотел бы в одном ЕА использовать 10, в идеале 30 индикаторов (анализ других торговых символов), но так оперативки не хватает. Кто-нибудь знает как можно уменьшить прожорливость хендлов индикаторов?

 
Maxim Khrolenko:

Код EA с инициализацией только 1 хендла индикатора iMA:

Количество памяти, которое МТ5 занимает в ОЗУ = 176 608 К:


Количество памяти, которое МТ5 занимает в ОЗУ после установки ЕА (см. код выше) = 618 596 К:

А почему так много то? Хотел бы в одном ЕА использовать 10, в идеале 30 индикаторов (анализ других торговых символов), но так оперативки не хватает. Кто-нибудь знает как можно уменьшить прожорливость хендлов индикаторов?


Ну вот же идет почти такое же обсуждение: https://www.mql5.com/ru/forum/189572
Обсуждение статьи "Рецепты MQL5 - Создаем кольцевой буфер для быстрого расчета индикаторов в скользящем окне"
Обсуждение статьи "Рецепты MQL5 - Создаем кольцевой буфер для быстрого расчета индикаторов в скользящем окне"
  • www.mql5.com
Опубликована статья Рецепты MQL5 - Создаем кольцевой буфер для быстрого расчета индикаторов в скользящем окне: Автор: Vasiliy Sokolov...
 
Уменьшить количество баров на чарте
 
MetaQuotes Software Corp.:
Уменьшить количество баров на
Благодарю за помощь.
1) Статья интересная, автору респект, кое-что возьму на заметку.
2) В свойствах МТ5 в "Charts", в "Max bars in chart" было "Unlimited". Поменял на 1000, хотя после ОК и проверки данного значения МТ5 поставил 5000 (наверное это минимальное допустимое значение). В любом случае с 5000 баров и после установки тестового ЕА такой хендл съел только около 10 000 К, а не 450 000 К, как до этого. Наверное всё-таки получится сделать грааль :)
 
MetaQuotes Software Corp.:
Уменьшить количество баров на чарте
Maxim Khrolenko:
Благодарю за помощь.
1) Статья интересная, автору респект, кое-что возьму на заметку.
2) В свойствах МТ5 в "Charts", в "Max bars in chart" было "Unlimited". Поменял на 1000, хотя после ОК и проверки данного значения МТ5 поставил 5000 (наверное это минимальное допустимое значение). В любом случае с 5000 баров и после установки тестового ЕА такой хендл съел только около 10 000 К, а не 450 000 К, как до этого. Наверное всё-таки получится сделать грааль :)

Круто что помогло. С другой стороны не круто, что эта величина задаваемая вручную пользователем, влияет на объем памяти при работе экспертов и индикаторов.
 
Vasiliy Sokolov:

Круто что помогло. С другой стороны не круто, что эта величина задаваемая вручную пользователем, влияет на объем памяти при работе экспертов и индикаторов.
В mql5 можно программно управлять глубиной закачки - т.е. зачитывать ровно столько баров сколько необходимо , независимо от того сколько задано баров руками в настройках. Кстати держать там unlimited , не совсем хорошо.,смысла нет.

 
Maxim Khrolenko:
Благодарю за помощь.
1) Статья интересная, автору респект, кое-что возьму на заметку.
2) В свойствах МТ5 в "Charts", в "Max bars in chart" было "Unlimited". Поменял на 1000, хотя после ОК и проверки данного значения МТ5 поставил 5000 (наверное это минимальное допустимое значение). В любом случае с 5000 баров и после установки тестового ЕА такой хендл съел только около 10 000 К, а не 450 000 К, как до этого. Наверное всё-таки получится сделать грааль :)

Можно неплохо экономить память задавая в функции количество читаемых баров.
Mql5

 
Yuriy Zaytsev:
В mql5 можно программно управлять глубиной закачки - т.е. зачитывать ровно столько баров сколько необходимо , независимо от того сколько задано баров руками в настройках. Кстати держать там unlimited , не совсем хорошо.,смысла нет.

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



int  CopyHigh( 
   string           symbol_name,      // имя символа 
   ENUM_TIMEFRAMES  timeframe,        // период 
   int              start_pos,        // откуда начнем  
   int              count,            // сколько копируем 
   double           high_array[]      // массив для копирования максимальных цен 
   );
 

Обращение по начальной дате и количеству требуемых элементов



int  CopyHigh( 
   string           symbol_name,      // имя символа 
   ENUM_TIMEFRAMES  timeframe,        // период 
   datetime         start_time,       // с какой даты 
   int              count,            // сколько копируем 
   double           high_array[]      // массив для копирования максимальных цен 
   );
 

Обращение по начальной и конечной датам требуемого интервала времени



int  CopyHigh( 
   string           symbol_name,      // имя символа 
   ENUM_TIMEFRAMES  timeframe,        // период 
   datetime         start_time,       // с какой даты 
   datetime         stop_time,        // по какую дату 
   double           high_array[]      // массив для копирования максимальных цен 
   );
 

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

 
Yuriy Zaytsev:

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

Это не работает для индикаторов. При создании хендла автоматом ресайзятся все буферы под кол-во баров в окне, и это невозможно изменить.

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

 
Andrey Khatimlianskii:

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

В четверке аналогично буфера индикаторов под всю историю чарта выделялись.

Кроме того, затраты памяти (особенно в экспертах) в четверке были чрезмерными из-за множества прозрачно создаваемых копий данных. Ее спасало только то, что данных обычно было мало.

С таким подходом нельзя было переходить к системе, которая должна оперировать почти бесконечными историческими данными. Поэтому пятерку и пришлось написать с нуля. Получилось очень эффективно.

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