Обсуждение статьи "Библиотека для простого и быстрого создания программ для MetaTrader (Часть I). Концепция, организация данных, первые результаты" - страница 4

 
fxsaber:

Спасибо, понятно разъяснено. Но все же остался вопрос - понятно что быстрее в МТ4, но если про 5-ку - быстрее ли выполнить все методы отдельно, чем вызвать один CopyRates? Если да, то имеет смысл создать свою структуру/класс бара вместо MQLRates, которая бы записывала не все поля, а только нужные в нашем случае, по маске например.

 
alex_all:

Спасибо, понятно разъяснено. Но все же остался вопрос - понятно что быстрее в МТ4, но если про 5-ку - быстрее ли выполнить все методы отдельно, чем вызвать один CopyRates? Если да, то имеет смысл создать свою структуру/класс бара вместо MQLRates, которая бы записывала не все поля, а только нужные в нашем случае, по маске например.

Попробуйте.

 

Здравствуйте 

Можете считать меня вашим абитуриентом или студентом  так сказать

Вот решил изучить вашу библиотеку потихоньку вникаю но трудно мне , хоть и знаю кое что в MQL  но на первой ступеньке и споткнулся

дошел до пункта  Реализация метода сравнения двух ордеров между собой по заданному свойству:

//+------------------------------------------------------------------+
//| Сравнивает объекты COrder между собой по всем возможным свойствам|
//+------------------------------------------------------------------+
int COrder::Compare(const CObject *node,const int mode=0) const
  {
   const COrder *order_compared=node;
//--- сравнение целочисленных свойств двух ордеров
   if(mode<ORDER_PROP_INTEGER_TOTAL)
     {
      long value_compared=order_compared.GetProperty((ENUM_ORDER_PROP_INTEGER)mode);
      long value_current=this.GetProperty((ENUM_ORDER_PROP_INTEGER)mode);
      return(value_current>value_compared ? 1 : value_current<value_compared ? -1 : 0);
     }
//--- сравнение вещественных свойств двух ордеров
   else if(mode<ORDER_PROP_DOUBLE_TOTAL+ORDER_PROP_INTEGER_TOTAL)
     {
      double value_compared=order_compared.GetProperty((ENUM_ORDER_PROP_DOUBLE)mode);
      double value_current=this.GetProperty((ENUM_ORDER_PROP_DOUBLE)mode);
      return(value_current>value_compared ? 1 : value_current<value_compared ? -1 : 0);
     }
//--- сравнение строковых свойств двух ордеров
   else if(mode<ORDER_PROP_DOUBLE_TOTAL+ORDER_PROP_INTEGER_TOTAL+ORDER_PROP_STRING_TOTAL)
     {
      string value_compared=order_compared.GetProperty((ENUM_ORDER_PROP_STRING)mode);
      string value_current=this.GetProperty((ENUM_ORDER_PROP_STRING)mode);
      return(value_current>value_compared ? 1 : value_current<value_compared ? -1 : 0);
     }
   return 0;
  }
//+------------------------------------------------------------------+

Вот этот код в библиотеке где прописывать 

после

   //--- Сравнивает объекты COrder между собой по всем возможным свойствам
   virtual int       Compare(const CObject *node,const int mode=0) const;

или в защищенном классе абстрактного ордера

protected:
   //--- Защищённый параметрический конструктор
                     COrder(ENUM_ORDER_STATUS order_status,const ulong ticket);
                     
   //--- Получает и возвращает целочисленные свойства выбранного ордера из его параметров
   long              OrderMagicNumber(void)        const;
   long              OrderTicket(void)             const;
   long              OrderTicketFrom(void)         const;
   long              OrderTicketTo(void)           const;
   long              OrderPositionID(void)         const;
   long              OrderPositionByID(void)       const;
   long              OrderOpenTimeMSC(void)        const;
   long              OrderCloseTimeMSC(void)       const;
   long              OrderType(void)               const;
   long              OrderTypeByDirection(void)    const;
   long              OrderTypeFilling(void)        const;
   long              OrderTypeTime(void)           const;
   long              OrderReason(void)             const;
   long              DealOrder(void)               const;
   long              DealEntry(void)               const;
   bool              OrderCloseByStopLoss(void)    const;
   bool              OrderCloseByTakeProfit(void)  const;
   datetime          OrderOpenTime(void)           const;
   datetime          OrderCloseTime(void)          const;
   datetime          OrderExpiration(void)         const;
   datetime          PositionTimeUpdate(void)      const;
   datetime          PositionTimeUpdateMSC(void)   const;
   
   //--- Получает и возвращает вещественные свойства выбранного ордера из его параметров: (1) цену открытия, (2) цену закрытия, (3) профит,
   //---  (4) комиссию, (5) своп, (6) объём, (7) невыполненный объём (8) цену StopLoss, (9) цену TakeProfit (10) цену установки StopLimit-ордера
   double            OrderOpenPrice(void)          const;
   double            OrderClosePrice(void)         const;
   double            OrderProfit(void)             const;
   double            OrderCommission(void)         const;
   double            OrderSwap(void)               const;
   double            OrderVolume(void)             const;
   double            OrderVolumeCurrent(void)      const;
   double            OrderStopLoss(void)           const;
   double            OrderTakeProfit(void)         const;
   double            OrderPriceStopLimit(void)     const;
   
   //--- Получает и возвращает строковые свойства выбранного ордера из его параметров: (1) символ, (2) комментарий, (3) идентификатор на бирже
   string            OrderSymbol(void)             const;
   string            OrderComment(void)            const;
   string            OrderExternalID(void)         const;
   
public:
   //--- Возвращает из массива свойств (1) целочисленное, (2) вещественное и (3) строковое свойство ордера
   long              GetProperty(ENUM_ORDER_PROP_INTEGER property)      const { return m_long_prop[property];                    }
   double            GetProperty(ENUM_ORDER_PROP_DOUBLE property)       const { return m_double_prop[this.IndexProp(property)];  }
   string            GetProperty(ENUM_ORDER_PROP_STRING property)       const { return m_string_prop[this.IndexProp(property)];  }
   
   //--- Возвращает флаг поддержания ордером данного свойства
   virtual bool      SupportProperty(ENUM_ORDER_PROP_INTEGER property)        { return true; }
   virtual bool      SupportProperty(ENUM_ORDER_PROP_DOUBLE property)         { return true; }
   virtual bool      SupportProperty(ENUM_ORDER_PROP_STRING property)         { return true; }

Прошу отнестись с пониманием я уже не молод это молодые схватывают на лету. 

И еще я открыл тему на форуме в Статьи и техническая библиотека по автоматическому трейдингу (12560)  Я Студент там я продублирую эту тему хотелось бы ответ от вас по подробнее про структуру,

работая пошагово по статье . можно ошибаться и не понимать.

Форум трейдеров - MQL5.community: Статьи и техническая библиотека по автоматическому трейдингу
Форум трейдеров - MQL5.community: Статьи и техническая библиотека по автоматическому трейдингу
  • www.mql5.com
Обсуждение статей по трейдингу и примеров на языках MQL4/MQL5
 
Vladimir Andreev:

Здравствуйте 

Можете считать меня вашим абитуриентом или студентом  так сказать

Вот решил изучить вашу библиотеку потихоньку вникаю но трудно мне , хоть и знаю кое что в MQL  но на первой ступеньке и споткнулся

дошел до пункта  Реализация метода сравнения двух ордеров между собой по заданному свойству:

Вот этот код в библиотеке где прописывать 

после

или в защищенном классе абстрактного ордера

Прошу отнестись с пониманием я уже не молод это молодые схватывают на лету. 

И еще я открыл тему на форуме в Статьи и техническая библиотека по автоматическому трейдингу (12560)  Я Студент там я продублирую эту тему хотелось бы ответ от вас по подробнее про структуру,

работая пошагово по статье . можно ошибаться и не понимать.

Есть два способа создать метод класса - это прямо в теле класса:

class CMyClass
  {
   bool Flag(void) { return false; }
  }

и за пределами тела класса:

class CMyClass
  {
   bool Flag(void);
  }
//--- метод, реализованный за пределами тела класса
bool CMyClass::Flag(void) { return false; }

В первом случае метод определяется и реализовывается прямо в теле класса - так удобно делать для коротких методов, которые не занимают много строк. Но если метод объёмный, то удобнее объявить его в теле класса, а саму реализацию вынести за пределы тела класса - как во втором примере.

Понятно, что тут удобнее метод написать полностью внутри тела класса. А вот метод, о котором спрашиваете вы - его удобнее писать отдельно от тела класса.

Впрочем, вы можете загрузить себе все файлы, прилагаемые к статье - в них уже всё есть, они готовы к использованию - и изучать по ним то, что описано в статье.

 

Вообще, серия замечательная! Видно, что вложено много труда, удобная подсветка различными цветами логики повествования. 

"статус ордера, и перечисления, описывающие все параметры ордера, сделки или позиции. Перечислений с параметрами ордера будет три: целочисленныевещественные и строковые."

===========================

1. можно ли увидеть страницу на которой все статьи выведены по порядку? Искать очередную статью в общем списке не совсем удобно.

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

"от разных людей в разное время звучат по сути одни и те же вопросы об алгоритмах и задачах, ими решаемых."

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

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

Больше примеров, хороших и разных!

 
Nikolai Karetnikov:

Вообще, серия замечательная! Видно, что вложено много труда, удобная подсветка различными цветами логики повествования. 

"статус ордера, и перечисления, описывающие все параметры ордера, сделки или позиции. Перечислений с параметрами ордера будет три: целочисленныевещественные и строковые."

===========================

1. можно ли увидеть страницу на которой все статьи выведены по порядку? Искать очередную статью в общем списке не совсем удобно.

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

"от разных людей в разное время звучат по сути одни и те же вопросы об алгоритмах и задачах, ими решаемых."

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

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

Больше примеров, хороших и разных!

Первая часть. Завершена: https://www.mql5.com/ru/articles/7569

Вторая часть. В разработке: https://www.mql5.com/ru/articles/7886

В конце статей есть списки.

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

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

Библиотека для простого и быстрого создания программ для MetaTrader (Часть XXXIV): Отложенные торговые запросы - удаление ордеров, модификация ордеров и позиций по условиям
Библиотека для простого и быстрого создания программ для MetaTrader (Часть XXXIV): Отложенные торговые запросы - удаление ордеров, модификация ордеров и позиций по условиям
  • www.mql5.com
В данной статье мы завершим раздел, посвящённый торговле при помощи отложенных торговых запросов — создадим функционал для удаления отложенных ордеров, а также для модификации уровней StopLoss и TakeProfit позиций и параметров отложенных ордеров. Таким образом у нас будет в наличии весь функционал, при помощи которого можно будет впоследствии...
 
Artyom Trishkin:

Первая часть. Завершена: https://www.mql5.com/ru/articles/7569

Вторая часть. В разработке: https://www.mql5.com/ru/articles/7886

В конце статей есть списки.

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

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

Списки, отлично! С удовольствием буду читать по порядку.

И все-таки примеры очень нужны. Ваши - хорошо! В статье про обертки MqlRates вы упоминаете о том, что класс может быть использован для поиска свечных конфигураций. Код для поиска конфигураций 1-2-3, двойного дна, head-shoulders был бы очень крутым примером

 
Nikolai Karetnikov:

Списки, отлично! С удовольствием буду читать по порядку.

И все-таки примеры очень нужны. Ваши - хорошо! В статье про обертки MqlRates вы упоминаете о том, что класс может быть использован для поиска свечных конфигураций. Код для поиска конфигураций 1-2-3, двойного дна, head-shoulders был бы очень крутым примером

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

 
Artyom Trishkin:

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

Неплохо! )

Вот вопрос-продолжение https://www.mql5.com/ru/forum/332197#comment_16963284

Обсуждение статьи "Библиотека для простого и быстрого создания программ для MetaTrader (Часть XXXIV): Отложенные торговые запросы - удаление ордеров, модификация ордеров и позиций по условиям"
Обсуждение статьи "Библиотека для простого и быстрого создания программ для MetaTrader (Часть XXXIV): Отложенные торговые запросы - удаление ордеров, модификация ордеров и позиций по условиям"
  • 2020.02.06
  • www.mql5.com
Опубликована статья Библиотека для простого и быстрого создания программ для MetaTrader (Часть XXXIV): Отложенные торговые запросы - удаление ордер...
 

@Artyom Trishkin

Артём, хотел уточнить... а разве сейчас нет такой сущности, как "абстрактный класс" ? Имхо, статейный класс COrder выглядит как мега-класс, всё или почти всё в себя включающий...

Не знаю, есть же там в ООП такие штуки как полиформиз..., ой полифромиз ... тьфу ты, напридумывают слов страшных иноземцы проклятущие... полиморфизм, во!

Я себе такую иерархию классов набросал к примеру для MQL5.



Где CBaseTradeObject выступает как абстрактный класс.

Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Абстрактные классы
Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Абстрактные классы
  • www.mql5.com
Абстрактные классы предназначены для создания обобщенных  сущностей, на основе которых в дальнейшем предполагается создавать более конкретные производные классы. Абстрактный класс – это класс, который может использоваться лишь в качестве базового класса для некоторого другого класса, поэтому невозможно создать объект типа абстрактного класса...