Обсуждение статьи "Работа с таймсериями в библиотеке DoEasy (Часть 58): Таймсерии данных буферов индикаторов"

 

Опубликована статья Работа с таймсериями в библиотеке DoEasy (Часть 58): Таймсерии данных буферов индикаторов:

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

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


Для наглядности на график нанесены те же индикаторы с точно такими же настройками — данные индикаторов в комментариях на графике и в окне данных (Ctrl+D) совпадают и значения на текущем баре обновляются.

Автор: Artyom Trishkin

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

 
Alexander:
Да, насчет паровоза это верно. Мне кажется, что по итогам уже сделанного
можно было бы написать руководство как этим пользоваться. Я вот захотел
с учетом текущего состояния библиотеки получить все данные по результатам
торговли за некий определенный период в прошлом, там, сколько было всего сделок,
 по каким символам, с какой прибылью и т.д. и так и не смог с этим разобраться.
Подскажите как это сделать?

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

На данный же момент в каждой статье есть примеры использования описанного в статье функционала.

 

Надо автору медаль за абсолютный рекорд по кол-ву частей одной библиотеки :)

 
Aleksey Mavrin:

Надо автору медаль за абсолютный рекорд по кол-ву частей одной библиотеки :)

Что вам мешает самому написать и забрать сию медаль?

 
Вы представляете если бы все программисты пишущие программы и постоянно их улучшающие, например тот же
Metaquotes, прежде чем написать справку по платформе и по языку MQL, говорил всем еще когда только выпустил платформу
МТ4, подождите, мы собираемся еще выпустить МТ5, а потом интеграцию с SQL, а потом с Piton'ом вот когда
закончим все, тогда и выпустим справку по всему сразу. А во-вторых, я не нашел в последнем вашем релизе советника
ToDoEasyPart56 ни строчки о работе с историческими ордерами
 
Alexander:
Вы представляете если бы все программисты пишущие программы и постоянно их улучшающие, например тот же
Metaquotes, прежде чем написать справку по платформе и по языку MQL, говорил всем еще когда только выпустил платформу
МТ4, подождите, мы собираемся еще выпустить МТ5, а потом интеграцию с SQL, а потом с Piton'ом вот когда
закончим все, тогда и выпустим справку по всему сразу. А во-вторых, я не нашел в последнем вашем релизе советника
ToDoEasyPart56 ни строчки о работе с историческими ордерами
Цикл этих статей о процессе создания библиотеки. Не об улучшении её первой реализации, а о последовательном создании функционала. Примеры работы с ордерной системой, естественно, находятся в статьях, посвящённых созданию этого функционала библиотеки.
 
Artyom Trishkin:
Цикл этих статей о процессе создания библиотеки. Не об улучшении её первой реализации, а о последовательном создании функционала. Примеры работы с ордерной системой, естественно, находятся в статьях, посвящённых созданию этого функционала библиотеки.

Проблема в том что после последующих доработок и последовательном создании функционала, 

примеры которые видимо раньше работали в статьях посвященных этому функционалу теперь в следующих 

версиях не работают, во всяком случае у меня. Поэтому я и попросил Вас о помощи так как думал что у Вас 

они заработают.

 
Alexander:

Проблема в том что после последующих доработок и последовательном создании функционала, 

примеры которые видимо раньше работали в статьях посвященных этому функционалу теперь в следующих 

версиях не работают, во всяком случае у меня. Поэтому я и попросил Вас о помощи так как думал что у Вас 

они заработают.

Естественно, библиотека расширяется, меняется что-то. Но основные принципы же остаются однотипными. В примерах показана логика, а не чёткий план действий. 
Просто покажите ваш код, и скажите что не получается у вас.
 
Artyom Trishkin:
Естественно, библиотека расширяется, меняется что-то. Но основные принципы же остаются однотипными. В примерах показана логика, а не чёткий план действий. 
Просто покажите ваш код, и скажите что не получается у вас.

В експерте TestDoEasyPart56 в функции void OnInitDoEasy() в самый ее конец, я вставил такой код, чтобы

получить коллекцию исторических ордеров с даты D'2020.12.11 10:00' по текущую. И у меня ни одного

ордера не выдал этот код.

CArrayObj* list_positions=engine.GetListHistoryOrders();
           // list_positions=CSelect::ByOrderProperty(list_positions,ORDER_PROP_SYMBOL,Symbol(),EQUAL);
            list_positions=CSelect::ByOrderProperty(list_positions,ORDER_PROP_TIME_CLOSE,D'2020.12.11 10:00',MORE);
            //--- Выбираем позиции с прибылью болше нуля
            list_positions=CSelect::ByOrderProperty(list_positions,ORDER_PROP_PROFIT_FULL,0,MORE);
            if(list_positions!=NULL)
              {Print("OK1");
               //--- Сортируем список по прибыли 
               //list_positions.Sort(SORT_BY_ORDER_PROFIT);
               list_positions.Total();
               Print(list_positions.Total());//                                здесь получаем 0
               //--- Получаем индекс позиции с наибольшей прибылью
               int index=CSelect::FindOrderMax(list_positions,ORDER_PROP_PROFIT);
               if(index>WRONG_VALUE)
                 {Print("index= ",index);
                  COrder* position=list_positions.At(index);
                  if(position!=NULL)
                    {
                     //--- Получаем тикет позиции с наибольшей прибылью и закрываем позицию по тикету
                     Print("OK");
                     Print(engine.GetListDeals());
                    }
                 }
              }

В том месте где я Принтую  Print(list_positions.Total()); у меня выдает "0".

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
Причина обращения: