При исполнении эксперта со временем заканчивается память и компьютер зависает, что делать? - страница 3
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Хорошо что развили мою тему, но она пошла не в ту сторону, сейчас попробую изложить снова:
1. Я играю на всех парах с помощью одного присоединенного эксперта.
2. Эксперт каждый раз обращается к пользовательскому индикатору на разных парах, что выглядит в логе очень страшно имя_индикатора, пара, М15, loaded successfully и так каждые 3-5 секунд.
3. Даже, если поставить Sleep(15000), все-равно не решает проблемы рано или поздно в системе вылезет сообщение о малом кол-ве памяти, эдак через часов 6-12.
4. Памяти Gb.
5. Как решить проблему, я так понимаю возможен кеш индикатора или что-то в этом духе, зачем же все время загружать индикатор???
Вадим -Zhunko - дал хорошие советы
---
если постоянно возникает сообщение loaded successfully -
возможно где то ошибка! такого быть не должно!
как правило при большом наборе пар не хватает озу! и индикатор каждый раз выгружается и загружается
при этом видимо не корректно освобождается память
попробуйте уйти на одну пару сначала! добейтесь отсутвия ошибки!
потом нагнетайте пары
--
учтите! при наличии одной пары требуете сколько указанно баров в настройке
для каждой пары следующей озу требуется ( столько сколько было выделенно для первой пары )
--
1 уменьшайте бары ! в истории и на графике например до всего до 3000-5000
если индикатор не алчный до истории в общем расчитайте минимальное кол баров которое требуется для вашей ТС
---
файл подкчки тоже можно увеличить
--
еще докупить озу до максимума - вашей материнки ( скорее всего 2 гига предел - если старая мамка )
имя_индикатора, пара, М15, loaded successfully - от этого можно избавится почему он все время перегружает вместо того чтобы использовать то что загрузил ранее? Я думаю в этом и проблема, утечик памяти и т.п. помогите с реальным ответом, из данного более менее реален 3й пункт
Забыл:
4. Уничтожайте отработавшие массивы.
5. Не используйте строковые массивы. Их можно заменить на символьные.
7. По возможности используйте динамические массивы.
Вариантов может быть много: может индикатор просто криво написан и его вполне можно оптимизировать, можно сделать его расчет по закрытым барам, ограничить колво баров для перерасчета 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.
Забыл:
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
Вадим -Zhunko - дал хорошие советы
---
если постоянно возникает сообщение loaded successfully -
возможно где то ошибка! такого быть не должно!
как правило при большом наборе пар не хватает озу! и индикатор каждый раз выгружается и загружается
при этом видимо не корректно освобождается память
попробуйте уйти на одну пару сначала! добейтесь отсутвия ошибки!
потом нагнетайте пары
--
учтите! при наличии одной пары требуете сколько указанно баров в настройке
для каждой пары следующей озу требуется ( столько сколько было выделенно для первой пары )
--
1 уменьшайте бары ! в истории и на графике например до всего до 3000-5000
если индикатор не алчный до истории в общем расчитайте минимальное кол баров которое требуется для вашей ТС
---
файл подкчки тоже можно увеличить
--
еще докупить озу до максимума - вашей материнки ( скорее всего 2 гига предел - если старая мамка )
на одной паре данное сообщение грузилось только в начале
>>>> 1 уменьшайте бары ! в истории и на графике например до всего до 3000-5000
не скромный вопрос как это сделать?
на что влияет #property stacksize в эксперте ??? Каковы пределы, может его стоит установить правильно
Влияет ли указанный #property indicator_buffers 8 если используется только 6
на одной паре данное сообщение грузилось только в начале
>>>> 1 уменьшайте бары ! в истории и на графике например до всего до 3000-5000
не скромный вопрос как это сделать?
В настройках МТ4 можно.
Всё ясно! Это пипец! Сам через это проходил.
Вам по пункту №5.
дак всего один масивчик итот в эксперте
дак всего один масивчик итот в эксперте
Он этот массив поднимает в память каждый раз и не выгружает. Помню, что раньше так было. Только это проблема диспетчера памяти МТ4, а не Вашего кода. Это надо было учитывать. Сейчас, может быть, эта проблема Метаквотами устранена.
Вообще-то, конечно, если уменьшить количество баров на графике, то существенно полегче будет.