Обсуждение статьи "Работа с таймсериями в библиотеке DoEasy (Часть 35): Объект "Бар" и список-таймсерия символа"

 

Опубликована статья Работа с таймсериями в библиотеке DoEasy (Часть 35): Объект "Бар" и список-таймсерия символа:

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

С этой статьи мы начинаем новый раздел в описании создания библиотеки для удобного написания программ для терминалов MetaTrader5 и 4. Первая серия статей (34 части) была посвящена разработке концепции объектов библиотеки и их взаимосвязей, и на основании разработанной концепции был создан функционал для работы со счётом — его текущим состоянием и историей.

На текущий момент библиотека обладает следующим функционалом:

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

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

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


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

Автор: Artyom Trishkin

 

Как-то некошерно иметь новый класс CSeries, когда есть одноимённый в СБ.

Документация по MQL5: Стандартная библиотека / Индикаторы / Базовые классы / CSeries
Документация по MQL5: Стандартная библиотека / Индикаторы / Базовые классы / CSeries
  • www.mql5.com
Класс CSeries обеспечивает всем своим потомкам (классам таймсерий и индикаторов) возможность упрощенного доступа к общим функциям API MQL5 в части работы с серийными данными.
 
Denis Kirichenko:

Как-то некошерно иметь новый класс CSeries, когда есть одноимённый в СБ.

Согласен. Спасибо, поправлю.

 

Очень важным параметром каждого бара является время цена High и время цена Low, или по крайней мере флаг, указывающий какой из двух цен High или Low произошел первым во времени. Это необходимо для организации правильного зигзага. Эта информация может быть получена путем анализа баров с более низкого таймфрейма или непосредственно из M1. Прошу добавить такой функционал.

 
Rosimir Mateev:

Очень важным параметром каждого бара является время цена High и время цена Low, или по крайней мере флаг, указывающий какой из двух цен High или Low произошел первым во времени. Это необходимо для организации правильного зигзага. Эта информация может быть получена путем анализа баров с более низкого таймфрейма или непосредственно из M1. Прошу добавить такой функционал.

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

 

Привет Артём - используя DoEasy вместо стандартной библиотеки, какой лучший подход для создания класса для обнаружения различных свечных паттернов, аналогичного CCandlePattern в https://www.mql5.com/ru/code/316?

Я спрашиваю, чтобы не сделать что-то, что будет полностью противоречить будущему направлению, в котором вы собираетесь использовать эту библиотеку... Я думал либо (1) модифицировать или расширить классы CBar & CSeries, чтобы сделать то, что мне нужно; или (2) или использовать события DoEasy для обнаружения новых баров на интересующих меня символах/периодах, оттуда реализовать свой код для проверки моих свечных паттернов и снова использовать DoEasy для размещения ордеров или открытия позиций. Возможно, вариант №2 более чистый и менее рискованный относительно ваших будущих разработок, но дайте мне знать, если у вас есть другое предложение, пожалуйста.

acandlepatterns.mqh

class  CCandlePattern : public  CExpertSignal
  {
protected:

// ...

   //--- методы, используемые для проверки формирования свечных моделей
   double            AvgBody(int ind);
   double            MA(int ind)                const { return(m_MA.Main(ind));             }
   double            Open(int ind)              const { return(m_open.GetData(ind));        }
   double            High(int ind)              const { return(m_high.GetData(ind));        }
   double            Low(int ind)               const { return(m_low.GetData(ind));         }
   double            Close(int ind)             const { return(m_close.GetData(ind));       }
   double            CloseAvg(int ind)          const { return(MA(ind));                    }
   double            MidPoint(int ind)          const { return(0.5*(High(ind)+Low(ind)));   }
   double            MidOpenClose(int ind)      const { return(0.5*(Open(ind)+Close(ind))); }
   //--- методы проверки свечных моделей
   bool              CheckPatternThreeBlackCrows();
   bool              CheckPatternThreeWhiteSoldiers();
   bool              CheckPatternDarkCloudCover();
   bool              CheckPatternPiercingLine();
   bool              CheckPatternMorningDoji();
   bool              CheckPatternEveningDoji();
   bool              CheckPatternBearishEngulfing();
   bool              CheckPatternBullishEngulfing();
   bool              CheckPatternEveningStar();
   bool              CheckPatternMorningStar();
   bool              CheckPatternHammer();
   bool              CheckPatternHangingMan();

MQL5 Wizard - Trade Signals Based on Hammer/Hanging Man + MFI
MQL5 Wizard - Trade Signals Based on Hammer/Hanging Man + MFI
  • www.mql5.com
The generic idea is the following: the class of trading signals is derived from CExpertSignal, the next, it's necessary to override the LongCondition() and ShortCondition() virtual methods with your own methods. The best way is to create the separate class, derived from CExpertSignal for checking of formation of candlestick patterns. For...
 
ddiall :

Привет Артём - используя DoEasy вместо стандартной библиотеки, как лучше всего создать класс для обнаружения различных свечных паттернов, аналогичный CCandlePattern в https://www.mql5.com/ru/code/316?

Я спрашиваю, чтобы не сделать что-то, что будет полностью противоречить будущему направлению, в котором вы собираетесь использовать эту библиотеку... Я думал либо (1) модифицировать или расширить классы CBar & CSeries, чтобы сделать то, что мне нужно; или (2) или использовать события DoEasy для обнаружения новых баров на интересующих меня символах/периодах, оттуда реализовать мой код для проверки моих свечных паттернов и снова использовать DoEasy для размещения ордеров или открытия позиций. Возможно, вариант №2 более чистый и менее рискованный относительно ваших будущих разработок, но дайте мне знать, если у вас есть другое предложение, пожалуйста.

acandlepatterns.mqh

class   CCandlePattern :  public   CExpertSignal
  {
protected :

// ...

    //--- методы, используемые для проверки формирования свечных моделей
    double             AvgBody( int  ind);
    double             MA( int  ind)                 const  {  return (m_MA.Main(ind));             }
    double             Open( int  ind)               const  {  return (m_open.GetData(ind));        }
    double             High( int  ind)               const  {  return (m_high.GetData(ind));        }
    double             Low( int  ind)                const  {  return (m_low.GetData(ind));         }
    double             Close( int  ind)              const  {  return (m_close.GetData(ind));       }
    double             CloseAvg( int  ind)           const  {  return ( MA(ind) );                    }
    double             MidPoint( int  ind)           const  {  return ( 0.5 *(High(ind)+Low(ind)) );   }
    double             MidOpenClose( int  ind)       const  {  return ( 0.5 *(Open(ind)+Close(ind)) ); }
    //--- методы проверки свечных моделей
    bool               CheckPatternThreeBlackCrows();
    bool               CheckPatternThreeWhiteSoldiers();
    bool               CheckPatternDarkCloudCover();
    bool               CheckPatternPiercingLine();
    bool               CheckPatternMorningDoji();
    bool               CheckPatternEveningDoji();
    bool               CheckPatternBearishEngulfing();
    bool               CheckPatternBullishEngulfing();
    bool               CheckPatternEveningStar();
    bool               CheckPatternMorningStar();
    bool               CheckPatternHammer();
    bool               CheckPatternHangingMan();

Библиотека будет содержать класс для поиска свечных паттернов PriceAction и различных японских свечных формаций.

Я считаю наиболее разумным добавить новое свойство в класс объекта CBar. Соответственно, в коллекции таймсерий можно будет искать нужные свечи и паттерны.

Так оно и будет в библиотеке.

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

 
Artyom Trishkin:

Библиотека будет содержать класс для поиска свечных паттернов PriceAction и различных японских свечных формаций.

Я считаю наиболее разумным добавить новое свойство в класс объекта CBar. Соответственно, в коллекции таймсерий можно будет искать нужные свечи и паттерны.

Так оно и будет в библиотеке.

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

Звучит здорово! Есть идеи, когда вы начнете реализовывать все это добро? Заинтересованы ли вы в каком-либо вкладе в код?

 
Dima Diall :

Звучит здорово! Есть идеи, когда вы начнете внедрять все это добро? Заинтересованы ли вы в каком-либо вкладе в код?

Как только придет время :)