Обсуждение статьи "Реализация шаблона "Декоратор" в MQL5: Добавление логирования, измерения времени выполнения и фильтрации к любому индикатору без изменения исходного кода"
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Опубликована статья Реализация шаблона "Декоратор" в MQL5: Добавление логирования, измерения времени выполнения и фильтрации к любому индикатору без изменения исходного кода:
Чтобы добавить измерение времени выполнения в существующий класс индикатора RSI, разработчик обычно размещает вызовы GetMicrosecondCount() до и после вычислений. Когда второму разработчику требуется логирование, он открывает тот же файл и добавляет вызовы Print(). Когда третьему разработчику требуется пороговая фильтрация, он добавляет условную логику возврата. После нескольких итераций класс RSI накапливает код, не связанный с вычислением RSI. Он содержит инфраструктурные сквозные аспекты, относящиеся к вызывающему контексту, а не к индикатору.
Такой подход нарушает принцип открытости/закрытости, согласно которому класс должен быть открыт для расширения, но закрыт для модификации. Каждое изменение исходного кода для добавления сквозного аспекта увеличивает риск регрессий в основной вычислительной части индикатора. Изменение необходимо проверить на всех существующих сценариях использования. Если класс индикатора используется несколькими советниками, изменение одновременно влияет на все эти советники. Если класс находится под контролем версий и другой разработчик внес несвязанные изменения в тот же файл, вероятность конфликтов слияния повышается.
Более глубокая проблема состоит в том, что добавляемые аспекты не являются свойствами индикатора. Измерение времени, логирование и фильтрация относятся к способу использования индикатора в конкретном контексте. Другому советнику может потребоваться измерение времени, но не логирование. Окружению для тестирования на исторических данных может не потребоваться ни то, ни другое. Класс индикатора вообще не должен содержать эти аспекты.
Автор: Ushana Kevin Iorkumbul