Примеры: MetaEditor: Опираясь на силу шаблонов

 

New article MetaEditor: Опираясь на силу шаблонов has been published:

Не все знают, что подготовительную работу по написанию советника можно сделать один раз, и потом пользоваться этим постоянно.

Author: MetaQuotes Software Corp.

 
Rosh, спасибо за статью!
Я когда-то пользовался шаблонами - подправил все стандартные mqt для ускорения создания нового кода.
Остановила меня тогда их перезапись при установке нового билда - неудобно каждый раз их бекапить а потом восстанавливать, да и не всегда вспоминаешь вовремя.

Хотя, фича, несомненно, удобная ;)
 

Ух как здорово-то! Rosh, респект. Я уже давно подумывал о чем-то подобном, чтобы минимальными усилиями переводить аналитические сигналы индикатора, входящего в систему, в торговые - эксперта.

 
Огромное спасибо! Полезная статья в разных аспектах. Почерпнул для себя много интересного.
 

Эпиграф (ИМХО) исключительно точно отражает содержание работы: и Архимед и автор предлагают работу, которую использовать на практике бессмысленно. Идея и метод замечательны, но только сами по себе - как чистое алгоритмическое искусство программирования. В самом начале изучения MQL (еще на 3 версии) я написал и отладил универсальный шаблон, в котором очень "универсально" вызывались внешние функции анализа рынка и управления торговлей. Расплатой за универсализм стали жуткие тормоза в работе - вместо простых и прямо в лоб написанных операторов вызывались целые цепочки взаимосвязанных функций...

Для того чтобы написать красивую и правильно работающую программу много кода не нужно (кто не верит - пусть посмотрит 3D игрушку-стрелялку с музыкой, размер единственного файла которой всего 97,280 байт (имено байт а не мегабайт!!!) загрузить можно здесь, а кому лень запустить 97Кб - просто посмотрите скриншоты.

Переболел я этим универсализмом, к счастью, достаточно быстро, чего и вам желаю. Теперь пишу коды практически под каждую задачу индивидуально. Естественно и "шаблонами" пользуюсь, но только гораздо проще: Ctrl+C/Ctrl+V - и в новом коде ничего лишнего "универсального". Да и както мне не верится, что существуют алгоритмы, способные "штамповаться" методом почкования и каждый из которых успешно приносит прибыль. Поэтому, мой совет - не тратьте время на академическую корректность и универсальность кода. Сосредоточтесь на том, что должен делать советник, и напишите это так, чтобы его текст можно было читать без многостраничной "инструкции пользователя".

"Краткость - сестра таланта" Чехов
"Краткость приятна, когда она сочитается с ясностью"
Дионисий

Прошу прощения за многословие.

 

ForexTools, Не думаю, что автор  3D игрушки-стрелялки с музыкой(размер единственного файла которой всего 97,280 байт)   за 7 секунд  сможет изменить логику игры или что-то в нее добавить!!! Это - плата за скорость!

 
VBAG:

ForexTools, Не думаю, что автор  3D игрушки-стрелялки с музыкой(размер единственного файла которой всего 97,280 байт)   за 7 секунд  сможет изменить логику игры или что-то в нее добавить!!! Это - плата за скорость!

 

Гланое не скорость написания программы, а качество! За 7 секунд программы не пишутся  и советники в том числе

 

Не думаю, что автор  3D игрушки-стрелялки с музыкой(размер единственного файла которой всего 97,280 байт)   за 7 секунд  сможет изменить логику игры или что-то в нее добавить!!! Это - плата за скорость!

Полностью согласен! Я просто обратил внимание на то, что за универсальность шаблона тоже надо будет платить - его негибкостью и замедленным временем реакции. Пример с игрушкой был приведен как доказательство того, что под конкретную задачу (написать минимальную по размеру файла игрушку) лучше использовать индивидуальное кодирование, а не шаблоны - плоскогобубцами можно и гвозди забивать и гайки крутить и даже кисточку при покраске стены держать (чтоб не запачкаться). И это возможный их "use case". Но мне больше по душе индивидуально заточенные инструменты!

Гланое не скорость написания программы, а качество! За 7 секунд программы не пишутся  и советники в том числе

И с этим согласен! Но если у меня есть куча времени на разработку, зачем мне его экономить использованием шаблонов? Попробуйте на базе одного и того же шаблона создать создать три одинаково эффективные стратегии пипсовки, дейтрейдинга и торговли на графике W1. В лучшем случае будет получен полуприличный средний результат. А мне хочется большего :)

А работа автора - замечательная, но только для своей области применения. Не пытайтесь бездумно применять его методику везде и всюду. Не смотря на универсализм его подхода - это тоже индивидуально заточенный инструмент ;)

 

Сначала ложка меда. Статья познавательна с точки зрения освоения малоизвестных и малоприменяемых приемов программирования.

 

Теперь бочка дегтя.  Хотелось бы посоветовать автору не увлекаться многостраничными портянками исходного кода, потому как "за деревьями не видно леса". Подробности кодирования конечно тоже важны, но важнее все-таки донести общую структуру и логику, тем более что есть возможность приложить сам код отдельно для подробного изучения.

 

Что же касается самого "шаблонного" программирования, то трудно сказать лучше, чем Ален Голуб в своей книге о программировании:

"... Реализация самого общего случая из возможных, не думая о том, что на самом деле предполагается делать, почти всегда приводит к тому, что в результате получается система, которая может делать все, но при этом слишком сложна, чтобы быть пригодной для использования..."

 

И его советы:

1. Подавляйте демонов сложности. 

2. Не решайте проблем, которых не существует.

3. Решайте конкретную проблему, а не общий случай.

 

Мой личный опыт и личное мнение таково: более простой, короткий и ясный код, заточенный под конкретную задачу, работает быстрее и эффективнее (не всегда, но как правило), его проще сопровождать, проще мофицировать, в нем легче найти баги и проще найти для него повторное применение.

 
Отличная статья!!! Автору респект и уважение за проделанную работу!!! Статья мне кажется не для простого копи-паста сделана, а понимания необходимых вещей советнику, и способов их реализации.
 
Что же касается самого "шаблонного" программирования, то трудно сказать лучше, чем Ален Голуб в своей книге о программировании:

"... Реализация самого общего случая из возможных, не думая о том, что на самом деле предполагается делать, почти всегда приводит к тому, что в результате получается система, которая может делать все, но при этом слишком сложна, чтобы быть пригодной для использования..."

 

И его советы:

1. Подавляйте демонов сложности. 

2. Не решайте проблем, которых не существует.

3. Решайте конкретную проблему, а не общий случай.

 

Мой личный опыт и личное мнение таково: более простой, короткий и ясный код, заточенный под конкретную задачу, работает быстрее и эффективнее (не всегда, но как правило), его проще сопровождать, проще мофицировать, в нем легче найти баги и проще найти для него повторное применение.


1. Логичнее всего разбить задачу на несколько отдельных подзадач, это и называется упрощение. Писать сразу весь код в одной процедуре - это не самый лучший путь.  Если  вам удалось  свести одну  сложную задачу (создание торгового советника) разложить на несколько подзадач попроще  - значит  вы уже гораздо лучше понимаете и  саму задачу. В  случае создания  советника такими подзадачами являются отдельные  модули :

  • идентификация "своих" ордеров;
  • выработка торгового сигнала;
  • вычисление уровней SL,TP, направления и объема открытия ордера;
  • отправка приказа на открытие ордера;
  • вычисление новых уровней SL и TP для уже существующих ордеров;
  • модификация существующих ордеров;
  • выявления ордеров, которые требуется закрыть или удалить;
  • удаление и закрытие ордеров.

Если есть возможность и время все это писать с нуля каждый раз - пожалуйста.

Сами торговые стратегии, которые предполагается реализовать в виде торгового робота обычно не являются сложными. Самое сложное - идентификация торгового сигнала. Дальше уже дело техники. А жалеть машинное время на оптимизацию ... Я больше ценю собственное время на написание.

2. Проблема как раз таки в том, что нет смысла каждый раз изобретать велосипед при проверке какой-то простой задачи. Если стратегия действительно робастная, то она будет робастна и в первом приближении. Вы же рассуждаете таким образом, что у Вас уже есть 100% прибыльная стратегия априори, и Ваша задача состоит только в том, чтобы написать ее макисмально эффективно именно с точки зрения экономии ресурсов компьютера. Получили подтверждение о том, что стратегия что-то из себя представляет - пишите конкретно заточенную программу, оптимизируйте ее по максимуму. Вы рассуждаете как программист, иеющий четкое Техзадание, я же исхожу с позиции исследователя, которому экономически  невыгодно для проверки очередной гипотезы каждый раз писать заново Word или Excel для публикации своих мыслей.

3. Это не общий случай, это общее решение. Шаблоны прграммирования были придуманы не из академического интереса, а из практической необходимости. Представтье, что у Вас есть готовый класс "Торговый советник", и Вам необходимо на его основе создать свой собственный подкласс, в котором Вы переопределяете только необходимые функции. Вы же не будете писать каждый раз свою реализацию того или иного объекта, Вы воспользуетесь готовой библиотекой. В данном случае шаблон как раз и представляет из себя такой СуперКласс. При этом. воспользовавшись шаблоном, Вы уже не забудете реализовать в нем ту или иную функцию. Отказаться же от ненужной функции Вы всегда успеете, достаточно ее просто удалить из кода.


Конечно, в идеале было  бы удобно, если перед глазами был только тот код, который несет в себе саму идею, и весь обслуживающий функционал скрыт и не раздражает свои присутствием в теле советника. Но если у Вас хватает знаний для критики, значит их достаточно и для того, чтобы сделать так, как Вам удобно. В конце концов, никого не принуждают пользоваться только шаблонами. Например, для меня пока является неразрешимой задачей создание шаблона для написания индикатора. Но я и не пытаюсь эту задачу решать, пока решение не придет само собой. А может такого решения и не существует.

Но вот решение для быстрого создания советника с якобы избыточной функциональностью (переворот торговой системы, любопытство о поведении системы в определенные дни недели, информационная поддержка работы советника и прочее) существует, и я его показал. Кроме  того, показан сам процесс создания шаблона, что по моему мнению также является полезной информацией.

Причина обращения: