Используете ли вы CExpert при создании роботов? - страница 8

 

Интересная тема. Но, как часто бывает, размыли её тут в ветке широтой обсуждения...

Использую с некоторыми модификациями...

Имхо, сам класс CExpert воплощает суть практически любой ТС, схему которой можно представить примерно так:



 
Dennis Kirichenko:

Интересная тема. Но, как часто бывает, размыли её тут в ветке широтой обсуждения...

Использую с некоторыми модификациями...

Имхо, сам класс CExpert воплощает суть практически любой ТС, схему которой можно представить примерно так:



Денис, у тебя модификации в наследнике CExpert или ты просто включаешь этот класс в свою реализацию эксперта?
 
Alexey Volchanskiy:
Денис, у тебя модификации в наследнике CExpert или ты просто включаешь этот класс в свою реализацию эксперта?
Наследуюсь. Пример в статье, раздел 2.2 Класс торговой стратегии CEquidChannelExpert.
Рецепты MQL5 - Торговые сигналы скользящих каналов
Рецепты MQL5 - Торговые сигналы скользящих каналов
  • 2016.09.06
  • //www.mql5.com/ru/users/denkir">
  • www.mql5.com
В статье представлен процесс разработки и реализации класса-сигнальщика на основе скользящих каналов. За каждой из версий сигнала следует торговая стратегия с результатами тестирования. Используются классы Стандартной библиотеки для создания производных классов.
 
Alexander Puzanov:
В MQL4 не пахло никакими классами. В MQL5 МетаКвоты пошли в сторону программистов а не трейдеров. Конечно спасибо от программистов, но это таки не похоже на путь в светлое будущее - требовать большей квалификации от программиста => сокращать кол-во пользователей языка. А одной ногой усложнять язык, другой - усложнять 'мастер' для чайников => попа же может треснуть
Давайте будем объективными: непрофессиональные пользователи в любом случае ничего не напишут. В лучшем случае они смогут скачать что-то из кодебазы и скомпилировать. Поэтому ориентировать на них язык не стоит - прогресс и новые вещи создают профессионалы, им и карты в руки.
 
Alexey Volchanskiy:
Задумался, а возможно ли вообще написать такой базовый класс, от которого будет комфортно рождать экспертов и он был бы удобен для всех? 
Да, это возможно, но это не CExpert.
 

Мнение как пользователя в теме (постоянно пользуюсь стандартными классами, а однажды даже пришлось работать с CExpert вплотную): 

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

Что касается CExpert - то он производит смешанные чувства: бесконечные цепочки наследования, запутанные вызовы базовых классов, смешивание в кучу индикаторов, стратегий модулей ММ и трейлингов, противоречивые наследования(например модуль ММ - на самом деле ничто иное как торговый эксперт, внутри другого торгового эксперта:)

Помню я как-то трассировал расчет стандартного индикатора - были какие-то бесконечные вызовы CIndicators -> CBuffer -> CDoubleBuffer -> CArrayDouble... Откуда бралось то или иное значение, я так тогда и не понял.

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

 

Пробовал CExpert как основу для стратегии - не понравился. ИМХО, абсолютно пустой класс, по крайней мере для моих целей.

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

 

У меня шаблон ТС - полностью построен на основе CExpert, однако, к настоящему времени - в нем уже много методов переопределено.

Фактически, класс CExpertT (мой наследник) представляет собой каркас, который запрашивает у "фабрики частей ТС" генератор входов, определитель ТП-СЛ, фильтры и так далее, подключает эти части ТС в свой код - и работает.

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

С другой стороны - все мои ТС - это, фактически, просто "фабрики частей ТС", и если я перепишу шаблон эксперта - он сможет точно так же использовать эти фабрики, для создания и подключения частей ТС в свой код.

Насчет рыночной информации - ее предоставляет класс CDataProvider, который выдается фабрике частей эксперта при ее создании, и если какой-то части нужны данные - она просто запрашивает CDataProvider у фабрики. Собственно данные - хранятся в коллекции CIndicators, как это предусматривается Стандартной Библиотекой, а класс  CExpertDataProvider (наследник CDataProvider) - инициирует их создания внутри CExpert, а потом выдает указатели всем, кто их запрашивает. При этом - избегаем двойного или тройного создания таймсерий или индикаторов - если такая таймсерия уже есть - то CExpertDataProvider не запрашивает создание новой, а просто выдает указатель на имеющуюся.

 

Как на MQL4 писали ТС?! Для чего матрешки-то такие с ООП-наследованием?

Задумался, а может пишу советники совсем не так, как тут озвучивают. Может, совсем по-другому представляю архитектуру советника.

Читаешь и думаешь - ради чего столько городят? Ну не ООП же ради ООП.

Сам ООП и наследования использую во всю.  Но чтобы городить какие-то умопомрачительные матрешки при написании ТС... не понимаю.

И да, совершенно не представляю ТС в виде конструктора. Типа, не было трейлинга. Захотелось добавить - добавил соответствующий объект, отвечающий за трейлинг, и вот он уже работает.

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

Ни одной ТС из кубиков не написал. И написал-то меньше 10 штук. Потому что это не Лего, а идеи. Вдумчивые, с пониманием и некоторым обоснованием. ТС - это не "лего".

 
George Merts:

У меня шаблон ТС - полностью построен на основе CExpert, однако, к настоящему времени - в нем уже много методов переопределено.

Фактически, класс CExpertT (мой наследник) представляет собой каркас, который запрашивает у "фабрики частей ТС" генератор входов, определитель ТП-СЛ, фильтры и так далее, подключает эти части ТС в свой код - и работает.

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

С другой стороны - все мои ТС - это, фактически, просто "фабрики частей ТС", и если я перепишу шаблон эксперта - он сможет точно так же использовать эти фабрики, для создания и подключения частей ТС в свой код.

Насчет рыночной информации - ее предоставляет класс CDataProvider, который выдается фабрике частей эксперта при ее создании, и если какой-то части нужны данные - она просто запрашивает CDataProvider у фабрики. Собственно данные - хранятся в коллекции CIndicators, как это предусматривается Стандартной Библиотекой, а класс  CExpertDataProvider (наследник CDataProvider) - инициирует их создания внутри CExpert, а потом выдает указатели всем, кто их запрашивает. При этом - избегаем двойного или тройного создания таймсерий или индикаторов - если такая таймсерия уже есть - то CExpertDataProvider не запрашивает создание новой, а просто выдает указатель на имеющуюся.

Фабрика классов - правильный подход, сам стараюсь использовать.
Причина обращения: