"Модульный" подход к созданию советника

 
Здрасти. Я не программист, немного заказываю во фрилансе. Была одна работа по внесению изменений в советник и исполнитель сделал это дополнение в виде отдельного файла в формате mqh. Как я понял, само дополнение (все исполняемые функции) находятся в этом файле, а в самом советнике просто ссылка на этот файл, к которой происходит обращение при заданных условиях.  Возникала идея, а нельзя ли сделать все требуемые функции такие как take profit, stop loss, сетка, мартингеил, trailing stop в виде таких вот mqh файлов (в разных) и при обращении во фриланс давать их исполнителям? Т. е. работа исполнителя будет состоять в том что бы написать выработку сигналов индикатора/индикаторов, состыковать это всё с файлами mqh, а дальше уже работу будут брать эти mqh файлы. Есть такая возможность/такой вариант на mql4? Это облегчит работу или усложнит работу исполнителя?
 
Vladislav Alexandrov:
Здрасти. Я не программист, немного заказываю во фрилансе. Была одна работа по внесению изменений в советник и исполнитель сделал это дополнение в виде отдельного файла в формате mqh. Как я понял, само дополнение (все исполняемые функции) находятся в этом файле, а в самом советнике просто ссылка на этот файл, к которой происходит обращение при заданных условиях.  Возникала идея, а нельзя ли сделать все требуемые функции такие как take profit, stop loss, сетка, мартингеил, trailing stop в виде таких вот mqh файлов (в разных) и при обращении во фриланс давать их исполнителям? Т. е. работа исполнителя будет состоять в том что бы написать выработку сигналов индикатора/индикаторов, состыковать это всё с файлами mqh, а дальше уже работу будут брать эти mqh файлы. Есть такая возможность/такой вариант на mql4? Это облегчит работу или усложнит работу исполнителя?
Таким способом можно программистов оставить без работы.
 
Vladislav Alexandrov:
Здрасти. Я не программист, немного заказываю во фрилансе. Была одна работа по внесению изменений в советник и исполнитель сделал это дополнение в виде отдельного файла в формате mqh. Как я понял, само дополнение (все исполняемые функции) находятся в этом файле, а в самом советнике просто ссылка на этот файл, к которой происходит обращение при заданных условиях.  Возникала идея, а нельзя ли сделать все требуемые функции такие как take profit, stop loss, сетка, мартингеил, trailing stop в виде таких вот mqh файлов (в разных) и при обращении во фриланс давать их исполнителям? Т. е. работа исполнителя будет состоять в том что бы написать выработку сигналов индикатора/индикаторов, состыковать это всё с файлами mqh, а дальше уже работу будут брать эти mqh файлы. Есть такая возможность/такой вариант на mql4? Это облегчит работу или усложнит работу исполнителя?

В общем случае - нет.

В теории можно сделать некую библиотеку которая позволяет простейшими include и define получать советник. Но она не покроет даже 5% возникающих потребностей.

Есть более удобные вещи а-ля "конструкторы" - в GUI проставляются галочки, на выходе получается рабочий каркас советника, который программисту остаётся только дополнять. Но и это тоже не покрывает большей части запросов.

 

Проблема в том, что эти mqh должны быть:

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

2) этот mqh должен быть известен и знаком программист, иначе ему нужно значительное время потратить на изучение того, как с ним работать. Инструкции к таким компонентам часто просто нет. А поскольку этот mqh может программисту больше никогда не понадобится, для него это примерно такая же работа, как и написание собственного варианта.

3) Для программиста сложный чужой компонент несет риски, он может наткнутся в нем на глюк, который потребует такого погружения в его устройство, что будет сравнимо с написанием заново.

Что бы можно было организовать работу с чужими компонентами, они должны быть стандартизованы. Эти проблемы пытаются решить за счет стандартной библиотеки. Успешность, по моему мнению, пока что на троечку.

 
Ilya Baranov:

Проблема в том, что эти mqh должны быть:

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

2) этот mqh должен быть известен и знаком программист, иначе ему нужно значительное время потратить на изучение того, как с ним работать. Инструкции к таким компонентам часто просто нет. А поскольку этот mqh может программисту больше никогда не понадобится, для него это примерно такая же работа, как и написание собственного варианта.

3) Для программиста сложный чужой компонент несет риски, он может наткнутся в нем на глюк, который потребует такого погружения в его устройство, что будет сравнимо с написанием заново.

Что бы можно было организовать работу с чужими компонентами, они должны быть стандартизованы. Эти проблемы пытаются решить за счет стандартной библиотеки. Успешность, по моему мнению, пока что на троечку.

По первому пункту, это делается для себя, а не для сторонних людей, так что функционал будет нужный. По второму пункту, программисты, которым не знаком mqh должны отсеиваться сами, просто в работе сразу указать, что требуется работа с данными файлами, что подход к работе такой. Если он всё-равно решился то извиняйте. Вот по поводу третьего пункта хотелось бы подробнее уточнить. Я не понимаю как это работает. Программисту просто (но это, наверно, не просто :)) нужно при определенных условиях передать работу советника на этот файл, дальше файл работает. Зачем ему лезть в код mqh? По типу как нажал я выключатель и дальше лампочка горит без меня (я - это типа сигнал от индикаторов, открытый ордер). Это не так работает в случае mqh файлов?

P.S. это мне нужно не для того что бы этот конструктор потом продавать, а что бы мне в каждой работе не требовать одно и тоже (бывают такие моменты как описываю одинаково всем, а один делает так как надо, другой как не надо). Т. е. я по-любому получу нужный мне функционал, меняются только индикаторы/способы формирования сигналов, всё остальное будет как мне нужно.

 
Vladislav Alexandrov:

По первому пункту, это делается для себя, а не для сторонних людей, так что функционал будет нужный. По второму пункту, программисты, которым не знаком mqh должны отсеиваться сами, просто в работе сразу указать, что требуется работа с данными файлами, что подход к работе такой. Если он всё-равно решился то извиняйте. Вот по поводу третьего пункта хотелось бы подробнее уточнить. Я не понимаю как это работает. Программисту просто (но это, наверно, не просто :)) нужно при определенных условиях передать работу советника на этот файл, дальше файл работает. Зачем ему лезть в код mqh? По типу как нажал я выключатель и дальше лампочка горит без меня (я - это типа сигнал от индикаторов, открытый ордер). Это не так работает в случае mqh файлов?

P.S. это мне нужно не для того что бы этот конструктор потом продавать, а что бы мне в каждой работе не требовать одно и тоже (бывают такие моменты как описываю одинаково всем, а один делает так как надо, другой как не надо). Т. е. я по-любому получу нужный мне функционал, меняются только индикаторы/способы формирования сигналов, всё остальное будет как мне нужно.

Если вы не знакомы с технологией хорошо, то убеждать программиста ее использовать - из разряда "Нарисовать семь прямых красных линий, все они должны быть перпендикулярны друг другу, причем некоторые должны быть нарисованы зеленым цветом, некоторые — прозрачным, плюс одна — в форме котенка".

mqh - фрагмент программы, который даже не скомпилирован. Он может содержать ошибки.

Он может быть запутанным и сложным в использовании.

Иногда в них может быть такое понаписано, что только очень упорный программист станет разбираться, вместо того, чтобы взять (сделать) свой фрагмент программы, который делает то же самое.

Чтобы программист захотел их использовать, он должен видеть выгоды от этого.

Совещание
Совещание
  • alex_aka_jj
  • alex-aka-jj.livejournal.com
Петров пришел во вторник на совещание. Ему там вынули мозг, разложили по блюдечкам и стали есть, причмокивая и вообще выражая всяческое одобрение. Начальник Петрова, Недозайцев, предусмотрительно раздал присутствующим десертные ложечки. И началось. — Коллеги, — говорит Морковьева, — перед нашей организацией встала масштабная задача. Нам...
 

Я не вижу здесь ничего необычного.

ООП-подход - так и организован. На основе базовых виртуальных интерфейсов - пишутся конкретные классы, и потом - работа заключается только лишь в объединении этих интерфейсов в общие модули.

Я уже не раз показывал, как у меня выглядит исполняемый файл эксперта:

//+------------------------------------------------------------------+
//|                                                         EALeague |
//|                                     Copyright 2018, George March |
//+------------------------------------------------------------------+


#include <MyLib\DebugOrRelease\DebugSupport.mqh>
#include <MyLib\Common\CurSymEnum.mq5>

INPUT_PUBLIC   ulong Magic = 0;
INPUT_PUBLIC   double RiskPercent = NULL;
INPUT_PUBLIC   ulong RegCode = 0;

#include <MyLib\DataStructures\BinderExtColl.mq5>

// Объявляем коллекцию ТС.

CBinderExtCollection becCollection(RegCode,Magic,RiskPercent);


// Файл шаблона советника
#include <MyLib\TSTemplate\ExpertAdvisorT.mq5>


Все !!!

Это совершенно реальный файл моей Лиги Торговых Систем, который компилируется у меня в файл, содержащий более 350 советников.

Все стандартные функции - прописаны в файле ExpertAdvisorT.mq5, который представляет из себя следующую конструкцию:

#property library

#include <MyLib\DebugOrRelease\DebugSupport.mqh>
#include <MyLib\TSTemplate\Expert.mq5>


// Объект главного эксперта.
CExpert  etMainExpert;


// Функции обработки событий
int OnInit()
{
   return(etMainExpert.MyOnInit());
};

void OnTick()
{  
   etMainExpert.MyOnTick();
};

// ................ skipped - все остальные функции точно такие же.


То есть, вся функциональность - находится в библиотеке, в шаблоне эксперта объявляется объект etMainExpert(), и в функциях обработки событий - вызываются соответствующие функции этого объекта.

Те, в свою очередь, производят все действия, необходимые по работе эксперта, создавая нужные объекты, которые также описываются в виде библиотечных классов.


Вот только у меня сомнение, что неспециалист сможет с этим работать. Нужно иметь хотя бы небольшой опыт в программировании, да и ООП-подход хорошо понимать.

Для непрограммистов, на мой взгляд, конструкторы экспертов - это "самое, что дохтур прописал".

 
Ilya Barano, господи, о чём Вы? Какая выгода, должен хотеть, не должен хотеть. Тема о том возможно ли такое сделать и всё. 
 
Vladislav Alexandrov:
Господи, о чём Вы? Какая выгода, должен хотеть, не должен хотеть. Тема о том возможно ли такое сделать и всё.

Возможно. Но только "...чтобы задать правильный вопрос - надо знать большую часть ответа".

Боюсь, вы не знаете большей части ответа. Поэтому для вас "конструкторы советников" - это "самое то".

Роберт Шекли. Верный вопрос
  • unhandled-exception.ru
Ответчик был построен, чтобы действовать столько, сколько необходимо, — что очень большой срок для одних и совсем ерунда для других. Но для Ответчика этого было вполне достаточно. Если говорить о размерах, одним Ответчик казался исполинским, а другим — крошечным. Это было сложнейшее устройство, хотя кое-кто считал, что проще штуки не сыскать...
 
Georgiy Merts, спасибо за ответ. Вообщем, такой подход к работе реален, но нужно пробовать, что из этого получится. Лучше, конечно. иметь дело с одним программистом. 
 
Vladislav Alexandrov:
Ilya Barano, господи, о чём Вы? Какая выгода, должен хотеть, не должен хотеть. Тема о том возможно ли такое сделать и всё. 

Можно, если к каждому файлу (в файле) будет конкретное описание. В нем может быть довольно много нюансов, которые не плохо бы знать, чтоб нормально использовать. Как пример можете посмотреть Торговые классы. И описание каждого класса полистайте.

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