![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
я так понял что использовал новое описание - старые
в описании отсутствуют, но еще подсвечиваются редакторомПри использовании даной функции возникает ошибка "2012.11.28 09:58:32 4194304 bytes not available", помогите понять, увеличил файл подкачки до 10 ГБт.
Yedelkin:
А лог-файл случайно алёртами не забивается?
Проверил, лог 10 кБт., бывали и больше,
ошибка "MemoryException 09:36:12 4194304 bytes not available", в нем повторяется часто.
Заметил (по предідущему коду):
// Выбор периода из масива по индексу (от PERIOD_M5 (индекс - 5) до PERIOD_D1 (индекс - 19))
если брать для перебора меньше периодов (например PERIOD_M5 - PERIOD_M6), то ошибки нет.
// Выбор периода из масива по индексу (от PERIOD_M5 (индекс - 5) до PERIOD_D1 (индекс - 19))
1. О массиве какого типа идёт речь?
2. Какое значение содержится в этом массиве под индексом, например, 19?
1. О массиве какого типа идёт речь?
2. Какое значение содержится в этом массиве под индексом, например, 19?
Думаю проще сделать так, я написал функцию как отдельный експерт, можно запустить и самому посмотреть.
Эсли есть время и желание помогите. (Ошибка та же)
Дублирую код:
Файл прилагаэтся. Параметры тестера (на всякий случай)
EURUSD.e
H1
OHLC
2012.1.1 - 2012.4.1
Обновляю вопрос, меня интерисуют две ошибки:
1. 2012.11.28 11:45:18 4194304 bytes not available
решить пока не могу, но если вместо перебора периодов m_period = PERIOD_INDEX[iperiod], выставить например PERIOD_H1, то ошибки не будет,
но мне нужны все периоды.
2. 2012.11.28 11:45:49 2012.01.01 00:00:00 Alert: Ошибка CopyBuffer - номер ошибки: 4806
для решения данной ошибки, разкомментирую Sleep(1000);, тогда она пропадает и данные с буфера копируются нормально.
вопрос: почему так? можна ли както обойтись без Sleep(1000), для избежания дополнительных потерь времени?
К сожалению, тестера нет под рукой.
По мелочи. У Вас в строчке
слева стоит переменная типа int, справа - значение типа ENUM_TIMEFRAMES. Почему бы сразу в пятой строчке не объявить 'ENUM_TIMEFRAMES m_period;' ?
2. У Вас - тройной вложенный цикл, в котором за достаточно короткое время вызывается один и тот же индикатор. Только для одного символа происходит около 1400 вызовов. Использованные индикаторы просто не успевают освобождать память. Посмотрите поиском по форуму темы про функцию IndicatorRelease(). Как-то было сказано, что само использование этой функции в коде уже является ошибкой.
Быстрая смена индикаторов в коде объясняет также появление ошибки 4806. Новый индикатор просто не успевает подгрузить нужные ему данные.
Скажите как избавится от Abnormal termination?
Советник прекращает работать, и это можно увидеть только в журнале, на графике зеленый цвет.
С учётом Вашых замечаний изменил код:
(исправил m_period = PERIOD_INDEX[iperiod];, ошибка не существенна в данном случае - но спасибо, исправил)
вопрос с ошибкой (Ошибка CopyBuffer - номер ошибки: 4806) - снимаю, излечиваю его задержкой Sleep(1000); - списываю на то что индикатор не успевает создатся.
Вопрос с ошибкой (4194304 bytes not available), остаётся.
Замечание о IndicatorRelease() - учёл, в процесе обработки.
Если у когото ёсть мисли делитесь, спасибо.