Судя по Вашим таблицам загрузки памяти и распределения процессов по ядрам процессора при запуске терминала и после пробуждения компьютера, причин здесь три:
1. Высокая вычислительная сложность индикатора и большое количество его одновременно запускаемых копий.
2. Алгоритм распределения ресурсов, реализованный в терминале. При пробуждении компьютера явно применяется другой алгоритм.
3. Некорректность Ваших действий при запуске большого количества ресурсоемких процессов.
Как с этим бороться(imheнько):
1. Перед закрытием терминала удалите все окна, кроме одного.
2. После открытия терминала откройте ранее удаленные окна.
ЗЫ: Наталья дело говорит, опять-же imheнько.
У меня два идентичных по расчетам индикатора высокой вычислительной сложности. Различие в числе отображаемых буферов. У первого их два, у второго - двенадцать. Второй при старте вешает терминал намертво.
Как я это поборол. Установил задержку расчетов этого индикатора в 30 секунд с момента инициализации.
Всем большое спасибо за подсказки, буду изучать информацию и что-то думать! Если у кого нибудь есть еще какие то мысли, с удовольствием с ними ознакомлюсь.
Если виснет терминал, то это надо индикатор ремонтировать. Скорее всего там некорректно оформлен цикл обработки баров в истории, с этим всегда проблемы, или в тестере медленно ползёт индикатор, или залипает терминал при загрузки.
Вот пример который заставляет индикатор работать правильно:
int counted_bars=IndicatorCounted();
int i,limit;
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit = MathMin(Bars-counted_bars,Bars-1);
if(counted_bars==0) {
limit--; // чтобы не выйти за пределы массива при counted_bars==0
limit-=10; // в расчетах используется смещение на 10 баров вглубь истории, поэтому добавим это смещение при первом расчете
}else{ // индикатор уже рассчитывался ранее, counted_bars>0
limit++; // при повторных вызовах увеличим limit на 1, чтобы гарантированно обновлять значения индикатора для последнего бара
}
for(i=limit; i>=0; i--) {
//далее код индикатора//
}
ИЛИ
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated, // Количество просчитанных баров constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---int i; // Индекс бара
i = rates_total-prev_calculated-1; // Индекс первого не посчитанногоwhile(i >= 0) // Цикл по не посчитанным барам
{
//далее код индикатора//
i--; // Расчёт индекса следующего бара
}
return(rates_total);
}
Как много советов от тех, кто даже не посмотрел код индикатора...
Aleksandr Novikov:
Используя индикатор Portfolio Modeller, периодически сталкиваюсь с проблемой перегрузки памяти или с невозмоностью запустить терминал, т.к. он сразу падает.
Вот пример, когда использовал в 1 терминале 10 графиков и к каждому начал применять шаблон с 7 индикаторами - на 5-6 графике случилась такая лажа
Как вы собираетесь одновременно анализировать 70 портфелей? Зачем?
Разделите их на порции и загружайте последовательно (сменой профиля или шаблона).
Нужно понимать, что для построения портфеля из Х инструментов нужно загрузить в память как минимум Х тайм-серий. Каждому индикатору.
Индикатор конечно тяжёлый (но тому есть причины) при каждом цикле делается ZeroMemory основных объектов,
интересно что после того как терминал набрал гигабайт памяти и если переключиться на другой шаблон без портфелей вообще то память все равно не отпускается,
поэтому мне кажется (я до конца правда не уверен) что проблема в архитектуре МТ4, а не в индикаторе
А еще странно то ,что когда загружаю шаблон с 6-8 индикаторами на 5-7 график, то терминал падает, при том, что проц в этот момент не загружается и до 50% и памяти так же еще более 50% свободной! У меня тоже есть подозрения, что что-то не так с терминалом. Пока что ограничился 1 выбором - поставил макс. баров истории и в окне поставил по 1000. 5 графиков, в каждом по 7 индикаторов, с периодом расчета 24 бара Н1 - память держится в районе 350Мб Было такое, что после падения не мог запустить терминал - он сразу падал. Открытым по счету он был 5-6 из всех открытых. Приходилось закрывать 2-3 терминала, что бы запустить этот и потом уже запускал закрытые.
Вообще странно, что грузится память даже в выходные дни, когда нет потока котировок.
Судя по Вашим таблицам загрузки памяти и распределения процессов по ядрам процессора при запуске терминала и после пробуждения компьютера, причин здесь три:
1. Высокая вычислительная сложность индикатора и большое количество его одновременно запускаемых копий.
2. Алгоритм распределения ресурсов, реализованный в терминале. При пробуждении компьютера явно применяется другой алгоритм.
3. Некорректность Ваших действий при запуске большого количества ресурсоемких процессов.
Как с этим бороться(imheнько):
1. Перед закрытием терминала удалите все окна, кроме одного.
2. После открытия терминала откройте ранее удаленные окна.
ЗЫ: Наталья дело говорит, опять-же imheнько.
У меня два идентичных по расчетам индикатора высокой вычислительной сложности. Различие в числе отображаемых буферов. У первого их два, у второго - двенадцать. Второй при старте вешает терминал намертво.
Как я это поборол. Установил задержку расчетов этого индикатора в 30 секунд с момента инициализации.
Если у кого нибудь есть еще какие то мысли, с удовольствием с ними ознакомлюсь.
Если виснет терминал, то это надо индикатор ремонтировать.
Скорее всего там некорректно оформлен цикл обработки баров в истории,
с этим всегда проблемы, или в тестере медленно ползёт индикатор, или залипает терминал при загрузки.
Вот пример который заставляет индикатор работать правильно:
ИЛИ
Как много советов от тех, кто даже не посмотрел код индикатора...
Используя индикатор Portfolio Modeller, периодически сталкиваюсь с проблемой перегрузки памяти или с невозмоностью запустить терминал, т.к. он сразу падает.
Вот пример, когда использовал в 1 терминале 10 графиков и к каждому начал применять шаблон с 7 индикаторами - на 5-6 графике случилась такая лажа
Как вы собираетесь одновременно анализировать 70 портфелей? Зачем?
Разделите их на порции и загружайте последовательно (сменой профиля или шаблона).
Нужно понимать, что для построения портфеля из Х инструментов нужно загрузить в память как минимум Х тайм-серий. Каждому индикатору.
Как много советов от тех, кто даже не посмотрел код индикатора...
Как вы собираетесь одновременно анализировать 70 портфелей? Зачем?
Разделите их на порции и загружайте последовательно (сменой профиля или шаблона).
Нужно понимать, что для построения портфеля из Х инструментов нужно загрузить в память как минимум Х тайм-серий. Каждому индикатору.
Проблема проявляется только при старте терминала.
После этого работает анализ десятков и сотен портфелей.
Проблема проявляется только при старте терминала.
После этого работает анализ десятков и сотен портфелей.
Тогда, возможно, индикатор можно доработать, чтобы он стартовал "постепенно".
Для этого нужно сформировать корректный баг-репорт и обратиться к автору (который уже отметился шуткой в этой ветке, т.е. читает ее).
Тогда, возможно, индикатор можно доработать, чтобы он стартовал "постепенно".
Для этого нужно сформировать корректный баг-репорт и обратиться к автору (который уже отметился шуткой в этой ветке, т.е. читает ее).
У меня была подобная проблема. Решение нашлось такое: индикатор начинает полноценно работать через 30 секунд после логина.
Замечено что терминал постепенно набирает память по мере работы и не отпускает её, после перезапуска снова всё нормально
Индикатор конечно тяжёлый (но тому есть причины) при каждом цикле делается ZeroMemory основных объектов,
интересно что после того как терминал набрал гигабайт памяти и если переключиться на другой шаблон без портфелей вообще то память все равно не отпускается,
поэтому мне кажется (я до конца правда не уверен) что проблема в архитектуре МТ4, а не в индикаторе
У меня тоже есть подозрения, что что-то не так с терминалом.
Пока что ограничился 1 выбором - поставил макс. баров истории и в окне поставил по 1000. 5 графиков, в каждом по 7 индикаторов, с периодом расчета 24 бара Н1 - память держится в районе 350Мб
Было такое, что после падения не мог запустить терминал - он сразу падал. Открытым по счету он был 5-6 из всех открытых. Приходилось закрывать 2-3 терминала, что бы запустить этот и потом уже запускал закрытые.
Вообще странно, что грузится память даже в выходные дни, когда нет потока котировок.