Да, это бесконечный цикл, но в этом и заключается идея.
Чтобы постоянно перебирать все символы.
Код ниже срабатывает каждые 3 секунды.
Вот фрагмент кода (все в одном методе для демонстрации):
void OnTimer() { // Find next symbol long symbolsTotal = SymbolsTotal(false); long count = GlobalVariableGet("testmem"); if(count >= symbolsTotal) { count = 0; } string newSymbol = SymbolName(count, false); SymbolSelect(newSymbol, true); count++; GlobalVariableSet("testmem", count); // Change chart symbol ChartSetSymbolPeriod(0, newSymbol, Period()); // Remove other symbols from Market Watch CArrayString *symbols = new CArrayString(); for(int i = 0; i < SymbolsTotal(true); i++) { string symbol = SymbolName(i, true); // Get name from local market watch symbols.Add(symbol); } int total = symbols.Total(); for(int i = 0; i < total; i++) { string symbolToRemove = symbols.At(i); // Is the symbol not the current chart or about to // be added? if(newSymbol != symbolToRemove) { // Remove from Market Watch SymbolSelect(symbolToRemove, false); } } delete symbols; }
Не уверен, что вы подразумеваете под "символами", но код выше находится в новом эксперте с ExecuteTimer(), установленным на 3 секунды.
Вот код (это в советнике):
int OnInit()
{
//--- создаем таймер
EventSetTimer(3);
//---
return(INIT_SUCCEEDED);
}
Я добавил полный текст скрипта в прикрепленный файл "ForumQuestion1.mq5".
Шаги для воссоздания ошибки:
- Откройте прилагаемый скрипт в Metaeditor (это безопасно) для Metatrader 5
- Откройте диспетчер задач в Windows
- Найдите "Клиентский терминал Metatrader 5" и обратите внимание на количество памяти
- Запустите скрипт и следите за колонкой памяти в диспетчере задач.
Память медленно увеличивается по мере того, как скрипт перебирает символы.
Здравствуйте,
Я добавил полный текст скрипта в прикрепленный файл "ForumQuestion1.mq5".
Шаги для воссоздания ошибки:
- Откройте прилагаемый скрипт в Metaeditor (это безопасно) для Metatrader 5
- Откройте диспетчер задач в Windows
- Найдите "Клиентский терминал Metatrader 5" и обратите внимание на количество памяти
- Запустите скрипт и посмотрите столбец памяти в диспетчере задач.
Память медленно увеличивается по мере того, как скрипт перебирает символы.
Я попробовал ваш код и не испытываю проблем с памятью.
MT5 Build 1325.
Привет Ален,
Спасибо за ответ.
У меня такая же сборка. Увеличение памяти происходит медленно. Это занимает несколько минут. В основном она увеличивается постепенно.
См. прикрепленный файл "Memory increase.docx.png", там есть несколько скриншотов, показывающих увеличение памяти со временем.
Я нахожусь на той же сборке "MT5 Build 1325".
Информация о машине:
- Windows 8.1 Enterprise
- 64-битная ОС
- 16Gb RAM
- процессор i7
Спасибо
Привет, Ален,
Спасибо за ответ.
У меня такая же сборка. Увеличение памяти происходит медленно. Это занимает несколько минут. В основном она увеличивается постепенно.
См. прикрепленный файл "Memory increase.docx.png", там есть несколько скриншотов, показывающих увеличение памяти со временем.
Я на той же сборке "MT5 Build 1325".
Информация о машине:
- Windows 8.1 Enterprise
- 64-разрядная ОС
- 16 Гб ОЗУ
- процессор i7
Спасибо
Я на Windows 10, если это имеет значение.
Ваш скрипт запущен за несколько минут до моего предыдущего сообщения. В настоящее время использование памяти ниже, чем когда я его запускал (280 Мб против 300 Мб).
EDIT: Я только что проверил еще раз и сейчас 189 Мб!!! все еще уменьшается :D
EDIT2: Работает на демо-сервере Metaquotes.
Спасибо за обратную связь.
Думаю, я обновлю Windows 10 и посмотрю, изменит ли это ситуацию.
Я установил его на Windows Server 12 R2, и это также увеличило объем памяти.
Позвольте мне понаблюдать за этим некоторое время и оставить отзыв в этой теме.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
У меня есть советник, который настроен на циклический перебор символов, и он жрет много памяти.
Я заметил, что это происходит, когда символы загружаются в Обзор рынка и удаляются из него, что медленно увеличивается. Так что это не график циклически перебирает существующие элементы в Обзоре рынка, а больше, когда новые символы загружаются и удаляются.
Он настроен на выполнение следующих действий:
Когда я удаляю как можно больше пользовательского кода и просто использую описанные выше шаги для циклического просмотра графика через доступные символы, я замечаю, что использование памяти на моей машине продолжает расти.
Процессор остается на стабильном уровне, но память растет.
Вопросы:
(например, открыть новый график с помощью ChartOpen() вместо того, чтобы использовать существующий график с помощью ChartSetSymbolPeriod()).
(т.е. это просто так работает).
Большое спасибо