Новая версия платформы MetaTrader 5 build 2007: Экономический календарь, MQL5-программы в виде сервисов - страница 35
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Не странно. Вы просто не задумываетесь, какие портянки пишут некоторые люди.
Резать многотысячно строковые функции на более мелкие - это правильно. Я же не говорю резать на микрофункции по 5-10 строк.
Мне тоже странно.
Портянка, порезанная на функции, разве не будет собрана обратно в портянку инлайном при компиляции?
По коду не увидел криминала. Поясните, пожалуйста.
В функцию:
передается ссылка на элемент массива. Внутри функции этот же массив изменяет свой размер. В большинстве случаев изменение размера массива не приводит к изменению места расположения его элементов в памяти. Но иногда, когда для выделения очередной порции памяти не хватает существующего фрагмента памяти, массив меняет свое местоположение. Старый кусок памяти освобождается, выделяется новый и в него копируется весь массив. В итоге ссылка показывает в пустоту, что и приводит к Access violation.
Мне тоже странно.
Портянка, порезанная на функции, разве не будет собрана обратно в портянку инлайном при компиляции?
Нет.
Инлайнинг работает до определенного размера функций. Разумно инлайнить микрофункции.
Мне тоже странно.
Портянка, порезанная на функции, разве не будет собрана обратно в портянку инлайном при компиляции?
думаю тут все завязано на возможность правильно загружать память кэша процессора
Билд 2007
Если график промотать влево, так чтобы подгрузились новые бары, при вызове OnCaclulate в индикаторе в момент, когда меняется количество баров возникает такая ошибка:
Вызов iBarShift() возвращает -1, GetLastError() - 4401 ERR_HISTORY_NOT_FOUND (Запрашиваемая история не найдена)
А если переключить график на символ, который ранее не подгружался, то сначала случается вызов OnCalculate() с некоторым числом в rates_total, например, 10 000, а функция Bars( Symbol() , PERIOD_CURRENT ) возвращает 0.
Приходится все контролировать вручную, очень громоздко.
Нет.
Инлайнинг работает до определенного размера функций. Разумно инлайнить микрофункции.
Теперь ясно.
Было бы полезно знать примерный размер таких функций.
Вы просто не задумываетесь, какие портянки пишут некоторые люди.
Есть какой-нибудь автоматизированный критерий оценки "портяночности" кода и "микрофункчиновщины"?
Мнение по поводу КБ-индикаторов и КБ-советников (специально отдельно выделил их) по этой теме озвучите?
Есть какой-нибудь автоматизированный критерий оценки "портяночности" кода и "микрофункчиновщины"?
Мнение по поводу КБ-индикаторов и КБ-советников (специально отдельно выделил их) по этой теме озвучите?
Общие рекомендации хорошего кода описаны для любого языка. Они универсальны.
В такие базовые моменты программирования мы вдаваться не будем.
Отобразится в лучшую сторону.
Хочется проверить, но никак не могу дождаться окончания оптимизации, после последних веяний раздачи задач.
Жду уже не первый час окончания оптимизации, и ещё 1 час 30 минут предлагается ждать, при этом агенты явно простаивают.
Почему нельзя как то оценивать время оптимизации, и если оно явно превышает 1 минуту на проход(или дать пользователям возможность самостоятельной настройки времени, после которой происходит перераспределение заданий, если агенты простаивают), то перераспределять задания на свободные агенты - ну хотя бы для своих сетей. Очень прошу оптимизировать этот процесс! У меня 4300 проходов рассчитываются 51 час (13 ядер), поэтому такие нерациональные распределения ресурсов критичны.
Кроме того, отсутствует возможность запрашивать потерянные фреймя во время оптимизации - почему нельзя сделать функцию, которая сообщит число ожидаемых фреймов от одного прохода и, если фреймов пало а проход завершен, то либо перезапросит фреймы, либо перезапустит проход повторно. Проблемы возникает при обрыве интернета или банальной остановке агента, который уже 1 фрейм передал из 1000.
Если сейчас отключить первого агента, его задания, по идее, распределятся остальным.