Memory handler: cannot allocate ** bytes of memory

 

Добрый вечер

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

 Что у меня имеется... Значит есть робот, который играет на EURUSD (точнее 4 робота, но это не важно), таймфрейм = 1минута.

Через часов 7 начались сыпаться ошибки:

"Memory handler: cannot allocate ** bytes of memory"

и что-то еще с AddTick error

на графике бары больше не рисовались...

У меня следующие вопросы:

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

2) эта ошибка мешает работе эксперта? или ему в принципе пофигу, что график не обновляется?

PS скажите, как вы боретесь с этим...

Спасибо 

 
ramnek:

Добрый вечер

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

 Что у меня имеется... Значит есть робот, который играет на EURUSD (точнее 4 робота, но это не важно), таймфрейм = 1минута.

Через часов 7 начались сыпаться ошибки:

"Memory handler: cannot allocate ** bytes of memory"

и что-то еще с AddTick error

на графике бары больше не рисовались...

У меня следующие вопросы:

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

2) эта ошибка мешает работе эксперта? или ему в принципе пофигу, что график не обновляется?

PS скажите, как вы боретесь с этим...

Спасибо 

Не только. Посмотрите, что прикреплено к графикам. Скорее всего, используется много индикаторов. Нужно какими-то из них (или всеми) пожертвовать. Также, возможно, сам советник использует вызов каких-то индикаторов через iCustom. В таком случае можно попробовать переделать эти вызовы на расчет значений прямо в советнике (трудоемко, но результат того стоит).

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

 

Scriptong

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

>Почему его при этом нужно перезагружать? 

потому что когда сыпятся одни ошибки в журнале.. это смущает

 

кстати, так эти ошибки влияют вообще на работу эксперта? 

 

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

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

Бета-версия будет доступна на сервере MetaQuote-Demo.

 
ramnek:

Scriptong

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

Стандартные индикаторы при большой глубине истории занимают много памяти. Так, чаще всего, требуется знать значения индикатора на 1-2 барах от текущего. В то же время значения индикатора хранятся для всех исторических баров. Здесь как раз выход - сделать свой вариант расчета для нужного количества баров. При таком подходе расчет индикатора не должен работать медленнее (а то и быстрее). Но более рациональное использование памяти - гарантировано. Формулы для расчета технических индикаторов есть - https://ta.mql4.com/ru/indicators

 

>Почему его при этом нужно перезагружать? 

потому что когда сыпятся одни ошибки в журнале.. это смущает

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

 

кстати, так эти ошибки влияют вообще на работу эксперта? 

Сами ошибки - никак. А вот то, на что они указывают, существенно. Эксперт будет оперировать неверными данными (в худшем случае) или вообще не будет работать, т. к. новые тики не приходят (в лучшем случае).
 
Scriptong:

Стандартные индикаторы при большой глубине истории занимают много памяти. Так, чаще всего, требуется знать значения индикатора на 1-2 барах от текущего. В то же время значения индикатора хранятся для всех исторических баров. Здесь как раз выход - сделать свой вариант расчета для нужного количества баров. При таком подходе расчет индикатора не должен работать медленнее (а то и быстрее). Но более рациональное использование памяти - гарантировано. Формулы для расчета технических индикаторов есть - https://ta.mql4.com/ru/indicators

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

Сами ошибки - никак. А вот то, на что они указывают, существенно. Эксперт будет оперировать неверными данными (в худшем случае) или вообще не будет работать, т. к. новые тики не приходят (в лучшем случае).

Так, речь об адресном пространстве данных, или об адресном пространстве ком анд? Вы, вообще, говорите об адресации: возможно - о проблеме управления стеком, Ренат - о чистке исторических данных, мои наблюдения за собственными программами наводят на мысль о том, что память данных нужно иначе не высвобождать, а распределять. 

ЗЫ Тяжела и неказиста жизнь простого программиста (: 

ЗЫ* Мои искренние извинения за недавний пьяный беспредел и искренняя признательность модератору, усыпившему меня на сутки. 

 
tara:

адресном пространстве ком анд?

Однозначно в анналы ))

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