При исполнении эксперта со временем заканчивается память и компьютер зависает, что делать? - страница 3

 
Helex писал (а) >>

Хорошо что развили мою тему, но она пошла не в ту сторону, сейчас попробую изложить снова:

1. Я играю на всех парах с помощью одного присоединенного эксперта.

2. Эксперт каждый раз обращается к пользовательскому индикатору на разных парах, что выглядит в логе очень страшно имя_индикатора, пара, М15, loaded successfully и так каждые 3-5 секунд.

3. Даже, если поставить Sleep(15000), все-равно не решает проблемы рано или поздно в системе вылезет сообщение о малом кол-ве памяти, эдак через часов 6-12.

4. Памяти Gb.

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

Вадим -Zhunko  - дал хорошие советы

---

если постоянно возникает сообщение  loaded successfully  -

возможно где то ошибка! такого быть не должно!

как правило при большом наборе пар не хватает озу! и индикатор каждый раз выгружается и загружается

при этом видимо не корректно освобождается память

попробуйте уйти на одну пару сначала! добейтесь отсутвия ошибки!

потом нагнетайте пары

--

учтите! при наличии одной пары требуете  сколько указанно баров в настройке

для каждой пары следующей  озу  требуется ( столько сколько было выделенно для первой пары )

--

1 уменьшайте бары ! в истории и на графике например до  всего до 3000-5000

если индикатор не алчный до истории в общем расчитайте минимальное кол баров которое требуется для вашей ТС

---

файл подкчки тоже можно увеличить

--

еще  докупить озу до максимума - вашей материнки ( скорее всего 2 гига предел - если старая мамка )



 
Helex >>:

имя_индикатора, пара, М15, loaded successfully - от этого можно избавится почему он все время перегружает вместо того чтобы использовать то что загрузил ранее? Я думаю в этом и проблема, утечик памяти и т.п. помогите с реальным ответом, из данного более менее реален 3й пункт

Забыл:

4. Уничтожайте отработавшие массивы.

5. Не используйте строковые массивы. Их можно заменить на символьные.

7. По возможности используйте динамические массивы.

 
Figar0 писал(а) >>

Вариантов может быть много: может индикатор просто криво написан и его вполне можно оптимизировать, можно сделать его расчет по закрытым барам, ограничить колво баров для перерасчета 1 периодом вычислений. Без кода индикатора навярняка никто не скажет и вариант только один - нарастить до упора память.

//Список инструментов для игры
string TWIX[] = {"AUDCAD", "AUDCHF", "AUDJPY", "AUDNZD", "AUDSGD", "AUDUSD",
"CADCHF", "CADJPY", "CHFJPY", "CHFSGD",
"EURAUD", "EURCAD", "EURCHF", "EURGBP", "EURJPY", "EURNZD", "EURSGD", "EURAUD", "EURUSD",
"GBPAUD", "GBPCAD", "GBPCHF", "GBPJPY", "GBPUSD",
"NSDCAD", "NSDCHF", "NSDJPY", "NSDUSD", "SGDJPY",
"USDCAD", "USDCHF", "USDHKD", "USDJPY", "USDSGD",

"AUDDKK", "AUDNOK", "AUDSEK", "CHFNOK",
"EURDKK", "EURHKD", "EURNOK", "EURSEK",
"GBPDKK", "GBPNOK", "GBPSEK", "GBPSGD", "NZDSGD",
"USDDKK", "USDMXN", "USDNOK", "USDSEK", "USDZAR"};

int start()
{
int want;
double bidask;
double SL, TP, lot, max_lot, JB;
int err;

//Перебираем все пары
for(int j = 0; j < ArraySize(TWIX); j++)
{
Twix = TWIX[j];


//Проверка на пики предсказывающие хорошую покупку или продажу, чтобы срабатывал только один ордер
if (want_buy[j] > 50)
{
if (iCustom(Twix, 0, "James Bond", 2, 0) > want_buy[j]){want_buy[j] = iCustom(Twix, 0, "James Bond", 2, 0);}
if (iCustom(Twix, 0, "James Bond", 2, 0) < -100){lets_buy[j] = want_buy[j];}

//кусок кода перебирает все пары
}

 

Всё ясно! Это пипец! Сам через это проходил.

Вам по пункту №5.

 
Zhunko писал (а) >>

Забыл:

4. Уничтожайте отработавшие массивы.

5. Не используйте строковые массивы. Их можно заменить на символьные.

7. По возможности используйте динамические массивы.

Вадим ! еще строковые - символьные - при воможности можно заменить на битовые!

в MQL4 можно юзать  и битовые массивы

---

в бытность 80е годы, писал как то алчную  к памяти задачу, в 16кб памяти  

надо было уместить большой массив ( по тем временам )

использовал битовый массив

---

если надо хранить к примеру флаги! большое количество 

типа ДА - НЕТ

то

---

Массив 

---

ДА

СЛОВО16  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

БАЙТ8       0 0 0 0 0 0 0 1  

 БИТ          1

---

НЕТ

СЛОВО16  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

БАЙТ8       0 0 0 0 0 0 0 0 

 БИТ          0

---

даже при байтах экономия 1:8


 
YuraZ писал(а) >>

Вадим -Zhunko - дал хорошие советы

---

если постоянно возникает сообщение loaded successfully -

возможно где то ошибка! такого быть не должно!

как правило при большом наборе пар не хватает озу! и индикатор каждый раз выгружается и загружается

при этом видимо не корректно освобождается память

попробуйте уйти на одну пару сначала! добейтесь отсутвия ошибки!

потом нагнетайте пары

--

учтите! при наличии одной пары требуете сколько указанно баров в настройке

для каждой пары следующей озу требуется ( столько сколько было выделенно для первой пары )

--

1 уменьшайте бары ! в истории и на графике например до всего до 3000-5000

если индикатор не алчный до истории в общем расчитайте минимальное кол баров которое требуется для вашей ТС

---

файл подкчки тоже можно увеличить

--

еще докупить озу до максимума - вашей материнки ( скорее всего 2 гига предел - если старая мамка )



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

>>>> 1 уменьшайте бары ! в истории и на графике например до всего до 3000-5000

не скромный вопрос как это сделать?

на что влияет #property stacksize в эксперте ??? Каковы пределы, может его стоит установить правильно

Влияет ли указанный #property indicator_buffers 8 если используется только 6

 
Отказавшись от строковых массивов в индикаторе, мне удалось уменьшить потребление памяти МТ4 в 10 раз. До этого он потреблял 1,8 Гб.
 
Helex >>:

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

>>>> 1 уменьшайте бары ! в истории и на графике например до всего до 3000-5000

не скромный вопрос как это сделать?

В настройках МТ4 можно.

 
Zhunko писал(а) >>

Всё ясно! Это пипец! Сам через это проходил.

Вам по пункту №5.

дак всего один масивчик итот в эксперте

 
Helex >>:

дак всего один масивчик итот в эксперте

Он этот массив поднимает в память каждый раз и не выгружает. Помню, что раньше так было. Только это проблема диспетчера памяти МТ4, а не Вашего кода. Это надо было учитывать. Сейчас, может быть, эта проблема Метаквотами устранена.

Вообще-то, конечно, если уменьшить количество баров на графике, то существенно полегче будет.

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