Как исправить при оптимизации "No memory in OnTick function" ? - страница 2

 
Alexey Volchanskiy:

Стопудово утечки памяти в программе, их ищите.

Кстати, да.

Что у вас там с операторами new ?  На каждый в обязательном порядке существует и вовремя вызывается delete ?

 
George Merts:

Кстати, да.

Что у вас там с операторами new ?  На каждый в обязательном порядке существует и вовремя вызывается delete ?

Кстати, если есть утечки, при выходе из советника терминал пишет что-то типа memory leaks 12 Kb, точно не помню, но понятно

 
George Merts:

Кстати, да.

Что у вас там с операторами new ?  На каждый в обязательном порядке существует и вовремя вызывается delete ?

С этим все хорошо. 

Если остаются объекты, терминал пишет соответствующие сообщение.

delete вызывается везде вовремя, все объекты удаляются.

 

По поводу моего индикатора:

Терминал иногда пишет: indicator is too slow, please,rewrite it. (точно уже не воспроизведу, сообщение редко возникает, и сейчас его нет).

Оно появляется не при тестах, а когда индикатор просто на графике находится.

Может в MQl5 есть какое ограничение на вес индикатора? Ну допустим если ты напишешь индикатор весом в 10Мб, такой весь тяжелый, где куча мат. формул и куча всяких расчетов, то может MQL5 даже на график его загрузить не сможет, выдаст что -то типа не хватает памяти и что- то еще..., не??

Мой индикатор весит 284 Кб... На М30 расчитывается около 5 сек.

Но не думаю что это слишком много для MQL5

George Merts:

Запрос - TerminalInfoInteger() с соответствующим флагом.

Ошибка на неподходящий агент - ищите в документации по слову INIT_AGENT_NOT_SUITABLE (О, даже автоматически вам нашло - читайте)

Это я попробую, спасибо.

На такое чувство, что если поставлю это программное условие на память агента, он всех агентов забракует...

 
Alexey Volchanskiy:

Стопудово утечки памяти в программе, их ищите.

какие могут быть еще утечки, кроме пропуска delete ?

B если бы были утечки, у меня бы память жралась при оптимизации, а у меня все норм.
 
Nexxtor:

какие могут быть еще утечки, кроме пропуска delete ?

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

Вроде больше никаких. Надеюсь, у вас нет массивов по сотням Мб? А рекурсия есть? Если есть, будет жраться стек, его можно увеличить в настройках, где-то в настроечных файлах терминала это есть.

И насчет индикаторов, 5 сек на проход это много. Индикаторы все работают в одном потоке и он будет тормозить остальные.

 
А кстати можно ли в облаке оптимизировать эксперты с iCustom? У агентов в облаке скорее всего нету такого индикатора, может из-за этого и ошибка?
 
Alexey Volchanskiy:

Вроде больше никаких. Надеюсь, у вас нет массивов по сотням Мб? А рекурсия есть? Если есть, будет жраться стек, его можно увеличить в настройках, где-то в настроечных файлах терминала это есть.

И насчет индикаторов, 5 сек на проход это много. Индикаторы все работают в одном потоке и он будет тормозить остальные.

Больших массивов нет. Есть индикаторные буферы на 10 последних баров и все.

Рекурсии тоже нет. Но можно про стек и про настройки про увеличение по подробнее, чтоб на будущее. Может статья, ссылка на справку?

У меня индикатор работает один. Тормозить ему некого. 5 сек никак не уменьшить, нейросетям надо обучиться.

Может если в будущем по методу Адама сделаю обучение, может получится до 3-4 сек снизить. Этот метод обучения на лето 2017 считался одним из самых лучших.

Dr. Trader:
А кстати можно ли в облаке оптимизировать эксперты с iCustom? У агентов в облаке скорее всего нету такого индикатора, может из-за этого и ошибка?

Писал выше, это уже исключил:

Nexxtor:

IndicatorCreate() вместо iCustom() тоже не помогает.

Есть у кого какие идеи, как решить проблему?

 
Nexxtor:

Но можно про стек и про настройки про увеличение по подробнее, чтоб на будущее. Может статья, ссылка на справку?

Вот веселая статейка )) https://habrahabr.ru/post/128991/  или погуглить на "стек процессора". А вот в настройках МТ5 я сходу не нашел, прошелся поиском Total Commander по файлам настроек, слово stack не обнаружено. В МТ4 точно где-то видел задание размера.

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

void foo()
{
   double arr[64*1024*1024]; // тут реально память может и не выделится, это компиляторо-зависимо
   for(int n = 0; n < 64*1024*1024; n++) // а вот тут точно выделится физически
      arr[n] = n;

}

, то есть шанс получить ошибки, см. stdlib.mq5

      case 4003: error_string="no memory for function call stack";                         break;

      case 4004: error_string="recursive stack overflow";                                       break;

      case 4005: error_string="not enough stack for parameter";                            break;

      case 4006: error_string="no memory for parameter string";                            break;


Организация памяти
Организация памяти
  • 2023.09.11
  • habrahabr.ru
За последнюю неделю дважды объяснял людям как организована работа с памятью в х86, с целью чтобы не объяснять в третий раз написал эту статью. И так, чтобы понять организацию памяти от вас потребуется знания некоторых базовых понятий, таких как регистры, стек и тд. Я по ходу попробую объяснить и это на пальцах, но очень кратко потому что это...
 
Nexxtor:

По поводу моего индикатора:

Терминал иногда пишет: indicator is too slow, please,rewrite it. (точно уже не воспроизведу, сообщение редко возникает, и сейчас его нет).

Оно появляется не при тестах, а когда индикатор просто на графике находится.

Может в MQl5 есть какое ограничение на вес индикатора? Ну допустим если ты напишешь индикатор весом в 10Мб, такой весь тяжелый, где куча мат. формул и куча всяких расчетов, то может MQL5 даже на график его загрузить не сможет, выдаст что -то типа не хватает памяти и что- то еще..., не??

Мой индикатор весит 284 Кб... На М30 расчитывается около 5 сек.

Но не думаю что это слишком много для MQL5

Это сообщение не про размер файла индикатора, а про его быстродействие. 

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