Особенности языка mql5, тонкости и приёмы работы - страница 130
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Спасибо. Использовать функцию ArraySwap мне бы в голову не пришло.
Я так понимаю ваша функция будет, работать как при увеличении так при уменьшении размера т.е как полный аналог ArrayResize.
Не лучше ли при увеличении массива просто вызвать стандартную ArrayResize, чем вызывать три функции ArraySwap, ArrayResize, ArrayCopy
p.s Проверил вашу версию и мою с двумя копированиями при уменьшении массива MqlTick c 1 000 000 до 500 0000. Ваша версия справляется за 22 милесекуныд. Моя за 37-38.Не лучше ли при увеличении массива просто вызвать стандартную ArrayResize, чем вызывать три функции ArraySwap, ArrayResize, ArrayCopy
Думал об этом, но делать не стал, т.к. нюансов на самом деле больше. Поэтому решил остановиться на лаконичной версии.
Один из нюансов таков. Если брать массив из структур с конструкторами/деструкторами, то ArrayResize в любую из сторон вызывает их в количестве, равном разнице величин.
А вот применение ArrayCopy - это вызов всех конструкторов. Удаление ArrayTmp - вызов всех деструкторов. Так что ArrayResize2 - это не совсем ArrayResize.
После Оптимизации увидите такое
Если выключить советник во фрейм-режиме и запустить его в стандартном режиме, он покажет те же данные, что получал во время Оптимизации.
Такой подход позволяет многократно возращаться к результатам Оптимизации.
ЗЫ На чарте, что открывается в Терминале для фрейм-режиме советника, нельзя запустить не один советник. Поэтому если нужно запустить в стандартном режиме, нужно запускать на чартах, которые не были открыты для фреймов.
fxsaber:
extern теперь является жестко заданным макросом
Соответственно, заставить работать в MT5 mq4-код без изменений не всегда будет возможно.
В документации нет изменений. Можете поподробней объяснить это?
В документации нет изменений. Можете поподробней объяснить это?
Такой код
всегда будет выдавать предупреждение. По поводу "невозможности" - погорячился. Переопределить возможно, так что просто предупреждения будут висеть всегда в таких ситуациях.
Один из нюансов таков. Если брать массив из структур с конструкторами/деструкторами, то ArrayResize в любую из сторон вызывает их в количестве, равном разнице величин.
А вот применение ArrayCopy - это вызов всех конструкторов. Удаление ArrayTmp - вызов всех деструкторов. Так что ArrayResize2 - это не совсем ArrayResize.
Тогда наверное правильнее называть это ArrayReallocate. Хотя какого-то смысла таком принудительном перекопировании не вижу. Лишние тормоза.
Освобождение памяти - единственная причина.