Особенности языка mql5, тонкости и приёмы работы - страница 334
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Иногда могу открыть/закрыть.
Считаю, что 5/6 результатов ниже правильные.
Я считаю, что 5 из 6 приведенных ниже результатов верны.
Исправление:
Результат:
Исправление:
Да, теперь совпадает.
Я взял реальную задачу, когда в конце бэктеста нужно посчитать длительность всех позиций. Сохранил Open/Close-время позиций в массив. И прогнал на нем следующий скрипт.
В подобных задачах нужен только однократный проход по всем позициям, поэтому не удалось получить преимущество через кеширование. Наверное, тут могут помочь только вшитые в код до компиляции табличные данные. Но бороться за половину миллисекунды, наверное, не стоит. Спасибо за исследование!
ЗЫ Благодаря Вам обнаружил у себя ошибку.
Еще раз спасибо.Я взял реальную задачу, в которой по итогам бэктеста мне нужно было рассчитать продолжительность всех позиций. Я сохранил время открытия и закрытия позиций в массиве. Затем я запустил на нем следующий скрипт.
Прилагаемый файл «Time.bin» содержит 324 865 позиций, из которых 324 425 (99,87 %) имеют короткую продолжительность < 24 часа (не охватывают выходные и праздничные дни).
Для объективного сравнения увеличьте долю позиций с более длительной продолжительностью, и вы увидите реальное повышение эффективности благодаря моим оптимизациям.
Прилагаемый файл «Time.bin» содержит 324 865 позиций, из которых 324 425 (99,87 %) имеют короткую продолжительность < 24 часа (не охватывают выходные и праздничные дни).
Для объективного сравнения увеличьте долю позиций с более длительной продолжительностью, и вы увидите реальное повышение эффективности благодаря моим оптимизациям.
Результат.
Чем больше это слагаемое, тем быстрее вариант с кэшем.
P.S. Благодаря вам я обнаружил ошибку в своём собственном коде.
Ещё раз спасибо.Тест:
Добрый день,
К сожалению, при проведении симуляции даты и времени я обнаружил, что ни одна из более быстрых замен для StructToTime() и TimeToStruct(), опубликованных ранее здесь и здесь, не работала корректно для лет после 2100 года.
Мне пришлось переработать реализации, чтобы устранить эту проблему, и теперь они корректно работают для всех лет.
Кроме того, удалось добиться значительного повышения производительности (благодаря некоторым микрооптимизациям, таким как использование беззнакового деления и модуля).
Альтернатива функции StructToTime() на языке MQL:
Замена функции TimeToStruct() в MQL:
Тесты производительности:
не работала корректно для лет после 2100 года
Я извиняюсь, но сейчас 2026, а вот к 2100 скорее всего о терминале МТ5 не останется в интернете даже воспоминаний.
Зачем всё это?
В чём смысл всего этого?
Высокопроизводительные функции работы со временем, действующие для всего диапазона дат и времени MQL5 (с 1 января 1970 года по 31 декабря 3000 года):
(На основе алгоритма преобразования календарей Нери–Шнайдера: здесь)
Прилагаемый файл скрипта содержит исходные коды и полные проверки.