Обсуждение статьи "Прочие классы в библиотеке DoEasy (Часть 66): Класс-коллекция Сигналов MQL5.com"

 

Опубликована статья Прочие классы в библиотеке DoEasy (Часть 66): Класс-коллекция Сигналов MQL5.com:

В статье создадим класс-коллекцию сигналов Сервиса Сигналов MQL5.com с функциями управления подписанными сигналами, а также доработаем класс объекта-снимка стакана цен для отображения общего объёма стакана на покупку и на продажу.

Скомпилируем советник и запустим его на графике символа, предварительно задав в настройках работу на текущем символе/таймфрейме и установив флаг необходимости работы с торговыми сигналами сервиса Сигналы MQL5.com:


Во вкладке "Общие" окна настроек советника обязательно нужно установить галочку на пункте "Разрешить изменение настроек Сигналов":


Без этого советнику будет запрещено работать с сервисом Сигналов MQL5.com.

После запуска советника, в журнал будет выведено сообщение об успешном создании коллекции сигналов и её краткое описание:

Коллекция сигналов сервиса сигналов mql5.com создана успешно
Коллекция сигналов сервиса сигналов mql5.com:
- Бесплатных сигналов: 195, Платных сигналов: 805

Автор: Artyom Trishkin

 

Почему таг стоит "торговые системы" в разделе статей? здесь же нет ТС

Весь раздел "торговые системы" забит вашими статьями, по итогу

 
Maxim Dmitrievsky:

Почему таг стоит "торговые системы" в разделе статей? здесь же нет ТС

Весь раздел "торговые системы" забит вашими статьями, по итогу

Потому, что библиотека создаётся в частности и для создания торговых систем.

 
Artyom Trishkin:

Потому, что библиотека создаётся в частности и для создания торговых систем.

в этом есть некоторое логическое противоречие

 
Maxim Dmitrievsky:

в этом есть некоторое логическое противоречие

Да. Равно, как в задачке про курицу и яйцо.
 

Boa noite!

Saudações aqui do Brasil.


Estou tendo impedimento na hora de compilar o código e como meu conhecimento de mql5 é muito básico, resta pedir sua ajuda para superar os problemas na compilação...não sei resolver.

Quero aproveitar e parabenizá-lo pelo trabalho brilhante, seus códigos me ajudam muito.

 
Francisco Carlos Sobral Ribeiro #:

Boa noite!

Saudações aqui do Brasil.


Estou tendo impedimento na hora de compilar o código e como meu conhecimento de mql5 é muito básico, resta pedir sua ajuda para superar os problemas na compilação...não sei resolver.

Quero aproveitar e parabenizá-lo pelo trabalho brilhante, seus códigos me ajudam muito.

В файле Trading.mqh нужно некоторые методы перенести в защищённую секцию - чтобы к ним был доступ из производных классов. Сейчас же они находятся в приватной секции класса. Эта ошибка была допущена мною по невнимательности, но старый компилятор её пропустил. После обновления терминала эта ошибка стала обнаруживаться.

В строках 84 - 89 файла Trading.mqh нужно сделать такие изменения:


In the Trading.mqh file, some methods need to be moved to a protected section so that they can be accessed from derived classes. Now they are in the private section of the class. This mistake was made by me inadvertently, but the old compiler missed it. After updating the terminal, this error began to be detected.

In lines 84 - 89 of the Trading.mqh file, you need to make the following changes:

//--- Возвращает направление ордера по типу операции
   ENUM_ORDER_TYPE      DirectionByActionType(const ENUM_ACTION_TYPE action)  const;
//--- Устанавливает торговому объекту нужный звук
   void                 SetSoundByMode(const ENUM_MODE_SET_SOUND mode,const ENUM_ORDER_TYPE action,const string sound,CTradeObj *trade_obj);

protected:
//--- Устанавливает цены торгового запроса
   template <typename PR,typename SL,typename TP,typename PL> 
   bool                 SetPrices(const ENUM_ORDER_TYPE action,const PR price,const SL sl,const TP tp,const PL limit,const string source_method,CSymbol *symbol_obj);

private:
//--- Возвращает флаг проверки разрешённости по дистанции (1) StopLoss, (2) TakeProfit, (3) цены установки ордера от цены по уровню StopLevel
   bool                 CheckStopLossByStopLevel(const ENUM_ORDER_TYPE order_type,const double price,const double sl,const CSymbol *symbol_obj);
   bool                 CheckTakeProfitByStopLevel(const ENUM_ORDER_TYPE order_type,const double price,const double tp,const CSymbol *symbol_obj);
   bool                 CheckPriceByStopLevel(const ENUM_ORDER_TYPE order_type,const double price,const CSymbol *symbol_obj,const double limit=0);


и в строках 155 - 181 сделать аналогичные правки:


and in lines 155 - 181 make similar edits:
//--- Возвращает метод обработки ошибки
   ENUM_ERROR_CODE_PROCESSING_METHOD   ResultProccessingMethod(const uint result_code);
//--- Корректировка ошибок
   ENUM_ERROR_CODE_PROCESSING_METHOD   RequestErrorsCorrecting(MqlTradeRequest &request,const ENUM_ORDER_TYPE order_type,const uint spread_multiplier,CSymbol *symbol_obj,CTradeObj *trade_obj);

protected:
//--- (1) Открывает позицию, (2) устанавливает отложенный ордер
   template<typename SL,typename TP> 
   bool                 OpenPosition(const ENUM_POSITION_TYPE type,
                                    const double volume,
                                    const string symbol,
                                    const ulong magic=ULONG_MAX,
                                    const SL sl=0,
                                    const TP tp=0,
                                    const string comment=NULL,
                                    const ulong deviation=ULONG_MAX,
                                    const ENUM_ORDER_TYPE_FILLING type_filling=WRONG_VALUE);
   template<typename PR,typename PL,typename SL,typename TP>
   bool                 PlaceOrder( const ENUM_ORDER_TYPE order_type,
                                    const double volume,
                                    const string symbol,
                                    const PR price,
                                    const PL price_limit=0,
                                    const SL sl=0,
                                    const TP tp=0,
                                    const ulong magic=ULONG_MAX,
                                    const string comment=NULL,
                                    const datetime expiration=0,
                                    const ENUM_ORDER_TYPE_TIME type_time=WRONG_VALUE,
                                    const ENUM_ORDER_TYPE_FILLING type_filling=WRONG_VALUE);

private:
//--- Возвращает индекс объекта-запроса в списке по (1) идентификатору,
//--- (2) тикету ордера, (3) тикету позиции в запросе
   int                  GetIndexPendingRequestByID(const uchar id);
   int                  GetIndexPendingRequestByOrder(const ulong ticket);
   int                  GetIndexPendingRequestByPosition(const ulong ticket);

public:

После этого всё будет компилироваться.

Исправленный файл прилагаю к этому посту.


After that, everything will compile.

The corrected file is attached to this post.

Файлы:
Trading.mqh  448 kb
Причина обращения: