lusp >>:
Добрый день.
Пишу мультитаймфреймовый советник. Для получения котировок с разных ТФ использую функцию АrrауCopyRates
Индикаторы с ТФ расчитываются и хранятся в советнике в массивах, для ускорения доступа к их значениям.
Размеры индикаторных массивов приводятся в соответствие с количеством баров на каждом ТФ конструкцией
После запуска советник работает нормально. Однако спустя несколько часов в журнале терминала появляется вот такая ошибка:
2010.04.14 12:51:17 Memory handler: cannot allocate 3089960 bytes of memory
С чем это связано, и как с этим бороться?
Добрый день.
Пишу мультитаймфреймовый советник. Для получения котировок с разных ТФ использую функцию АrrауCopyRates
Индикаторы с ТФ расчитываются и хранятся в советнике в массивах, для ускорения доступа к их значениям.
Размеры индикаторных массивов приводятся в соответствие с количеством баров на каждом ТФ конструкцией
После запуска советник работает нормально. Однако спустя несколько часов в журнале терминала появляется вот такая ошибка:
2010.04.14 12:51:17 Memory handler: cannot allocate 3089960 bytes of memory
С чем это связано, и как с этим бороться?
посмотрите на загрузку оперативы, у вас наверно слишком большие массивы.
Оперативки не хватает.
массивы лучше использовать впритык по потребностям, то есть если у вас используются 2 разных тайфрейма с разными количествами баров, то само собой они не должны быть использованы в одном многомерной массиве. Если часть данных уже не нужна то это тоже нужно учесть.
Массивы порядочные, но инициализируются на весь объем в init эксперта. Потом к ним по мере появления добавляются только значения для новых баров. Однако ошибка появляется не сразу, а спустя несколько часов после старта эксперта. При этом объем памяти занимаемой терминалом медленно растет. Если терминал перезагрузить, то ошибки выделения памяти пропадут на несколько часов, хотя все массивы проинициализировались на новое значение количества баров.
Может где-то что-то надо освобождать принудительно?
Может где-то что-то надо освобождать принудительно?
lusp писал(а) >>
Массивы порядочные, но инициализируются на весь объем в init эксперта. Потом к ним по мере появления добавляются только значения для новых баров. Однако ошибка появляется не сразу, а спустя несколько часов после старта эксперта. При этом объем памяти занимаемой терминалом медленно растет. Если терминал перезагрузить, то ошибки выделения памяти пропадут на несколько часов, хотя все массивы проинициализировались на новое значение количества баров.
Может где-то что-то надо освобождать принудительно?
Массивы порядочные, но инициализируются на весь объем в init эксперта. Потом к ним по мере появления добавляются только значения для новых баров. Однако ошибка появляется не сразу, а спустя несколько часов после старта эксперта. При этом объем памяти занимаемой терминалом медленно растет. Если терминал перезагрузить, то ошибки выделения памяти пропадут на несколько часов, хотя все массивы проинициализировались на новое значение количества баров.
Может где-то что-то надо освобождать принудительно?
lusp >>:
Добрый день.
Пишу мультитаймфреймовый советник. Для получения котировок с разных ТФ использую функцию АrrауCopyRates
Индикаторы с ТФ расчитываются и хранятся в советнике в массивах, для ускорения доступа к их значениям.
Размеры индикаторных массивов приводятся в соответствие с количеством баров на каждом ТФ конструкцией
После запуска советник работает нормально. Однако спустя несколько часов в журнале терминала появляется вот такая ошибка:
2010.04.14 12:51:17 Memory handler: cannot allocate 3 089 960 bytes of memory
С чем это связано, и как с этим бороться?
Добрый день.
Пишу мультитаймфреймовый советник. Для получения котировок с разных ТФ использую функцию АrrауCopyRates
Индикаторы с ТФ расчитываются и хранятся в советнике в массивах, для ускорения доступа к их значениям.
Размеры индикаторных массивов приводятся в соответствие с количеством баров на каждом ТФ конструкцией
После запуска советник работает нормально. Однако спустя несколько часов в журнале терминала появляется вот такая ошибка:
2010.04.14 12:51:17 Memory handler: cannot allocate 3 089 960 bytes of memory
С чем это связано, и как с этим бороться?
Зачем вам ВСЕ значения по всей истории в советнике?
По коду. Ресайз лучше делать не на каждом тике, а только на новом поступившем баре соотв. тф. На память это влиять, по идее, не должно, но на быстродействие - точно.
Еще. Если вы перенесете в индикаторы то, что вы делаете сейчас в советнике, то проблема, скорее всего, будет устранена.
lusp >>:
#define num 60 //количество элементов в массиве, 60 -вроде как 60 сек или мин :)
static double Mass[num];
ArrayCopy(Mass,Mass,0,1,WHOLE_ARRAY); //сдвигаем массив на одну позицию
.......................
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Пишу мультитаймфреймовый советник. Для получения котировок с разных ТФ использую функцию АrrауCopyRates
Индикаторы с ТФ расчитываются и хранятся в советнике в массивах, для ускорения доступа к их значениям.
Размеры индикаторных массивов приводятся в соответствие с количеством баров на каждом ТФ конструкцией
После запуска советник работает нормально. Однако спустя несколько часов в журнале терминала появляется вот такая ошибка:
2010.04.14 12:51:17 Memory handler: cannot allocate 3089960 bytes of memory
С чем это связано, и как с этим бороться?