Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 600
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здесь не клуб телепатов. Свой код Вы не приложили, поэтому о том, где размещать delete, думайте сами.
Неправильно.
Так вот же показал код, что еще надо? Как правильно, если неправильно?
Спасибо.
Эк вы всё позапутали. Не правильное планирование задачи как раз и приводит к таким вот последствиям.
Если объекты создаются в классе, то по завершении его работы он должен их удалить в своём деструкторе. Другие же классы, прежде чем получить указатель на объект, должны проверить его валидность. И в принципе не должно быть таких переплетённых взаимосвязей. Клубок наплели какой-то. Сложно - не означает качественно. Всё должно быть прозрачно и отслеживаемо. В первую же очередь - для вас.
Давайте лучше будет показать код.
Вот я на старте программы считываю некоторые данные из файла.
То есть, на итерации создаю объект CCandleCondition *candle_cond, а затем добавляю его в коллекцию candles_one_rules.
Вот у метод AddCondition класса CCandlesOneRules:
CCandleRule это просто класс-контейнер для conditions. Условия я добавляю в правила, а правила в CCandleOneRules, которые в свою очередь в CCandlesOneRules....
Вот этот цикл while на старте не проходит, вылетает с ошибкой out of memory. Причем там не особо много этих условий, всего 7 до остановки считывается. Если снизить число данных в читаемом файле, то работает, без всяких ошибок undeleted objects и прочее.
Давайте лучше будет показать код.
Я начинаю терять терпение.
Где определение метода Add?
Судя по коду у Вас полное не понимание того, что Вы делаете.
Я начинаю терять терпение.
Где определение метода Add?
Судя по коду у Вас полное не понимание того, что Вы делаете.
CCandleOneRules, CCandlesOneRules, CCandleRule всё классы, наследумые от CArrayObj.
Судя по вашим общим ответам, вы просто не понимаете мои вопросы. По массиву с CArrayObj вы так и не ответили, как правильно. Ещё раз повторю ту задачу. Есть класс, в методе класса глобальные объекты класса добавляются в массив (объект типа CArrayObj), который объявляется там же в этом методе. В данном методе производятся в этом массиве некоторые действия. По завершении, объект-массив не нужен, члены массива нужны. Как правильно избавиться от этого объекта-массива, сохранив члены массива? Если не избавиться от него, то в логе получим сообщения вида undeleted objects. Я привел своё решение, вы сказали неправильно. Как правильно? Как я могу разместить delete в OnDeinit (либо в Deinit методе класса, который будет вызываться из OnDeinit), если данный объект-массив виден только в пределах метода класса?
Более того, если объекты удалять только в OnDeinit, в процессе выполнения программы/тестирования можно так же нарваться на out of memory...
Здравствуйте, коллеги.
Помогите разобраться с таким вопросом. Где рациональнее всего использовать функцию ArraySetAsSeries() для указания порядка нумерации элементов индикаторного буфера? В предустановленных в терминал индикаторах часто наблюдал, что её используют внутри OnCalculate(). Но индикаторный буфер объявляется глобально. Не логично ли в этом случае единожды использовать ArraySetAsSeries() внутри функции OnInit() для однократного вызова? Или из-за пополнения индикаторного буфера новыми элементами может слететь порядок нумерации и есть необходимость обращаться к ArraySetAsSeries() каждый раз внутри OnCalculate()? Хочется написать оптимальный код, где нет лишних вызовов функций, когда это не нужно. Буду благодарен за помощь.
Здравствуйте, коллеги.
Помогите разобраться с таким вопросом. Где рациональнее всего использовать функцию ArraySetAsSeries() для указания порядка нумерации элементов индикаторного буфера? В предустановленных в терминал индикаторах часто наблюдал, что её используют внутри OnCalculate(). Но индикаторный буфер объявляется глобально. Не логично ли в этом случае единожды использовать ArraySetAsSeries() внутри функции OnInit() для однократного вызова? Или из-за пополнения индикаторного буфера новыми элементами может слететь порядок нумерации и есть необходимость обращаться к ArraySetAsSeries() каждый раз внутри OnCalculate()? Хочется написать оптимальный код, где нет лишних вызовов функций, когда это не нужно. Буду благодарен за помощь.
ИМХО, я бы писал индикаторы вообще без этих функций (если с нуля, конечно). А так - для буферов - в OnInit(), для таймсерий - в OnCalculate().
И, чтобы говорить об оптимальном коде, нужно знать, сколько времени выполняется эта функция. Так что, сначала должен идти профилировщик, а только потом вопросы по производительности.
ИМХО, я бы писал индикаторы вообще без этих функций (если с нуля, конечно). А так - для буферов - в OnInit(), для таймсерий - в OnCalculate().
И, чтобы говорить об оптимальном коде, нужно знать, сколько времени выполняется эта функция. Так что, сначала должен идти профилировщик, а только потом вопросы по производительности.
К такому выводу и склонялся. Спасибо за подсказку.
Добрый день. Возник такой вопрос: почему когда накладываю полосы болинджера на MACD, берутся значения сигнальной линии, а не самой гистограммы?
Добрый день. Возник такой вопрос: почему когда накладываю полосы болинджера на MACD, берутся значения сигнальной линии, а не самой гистограммы?
Вы имеете возможность указывать какой графический буфер использовать для расчета?