Обсуждение статьи "Работа с таймсериями в библиотеке DoEasy (Часть 58): Таймсерии данных буферов индикаторов"
Руководство с примерами решения различных задач будет сделано после полного завершения создания библиотеки.
На данный же момент в каждой статье есть примеры использования описанного в статье функционала.
Надо автору медаль за абсолютный рекорд по кол-ву частей одной библиотеки :)
Надо автору медаль за абсолютный рекорд по кол-ву частей одной библиотеки :)
Что вам мешает самому написать и забрать сию медаль?
Цикл этих статей о процессе создания библиотеки. Не об улучшении её первой реализации, а о последовательном создании функционала. Примеры работы с ордерной системой, естественно, находятся в статьях, посвящённых созданию этого функционала библиотеки.
Проблема в том что после последующих доработок и последовательном создании функционала,
примеры которые видимо раньше работали в статьях посвященных этому функционалу теперь в следующих
версиях не работают, во всяком случае у меня. Поэтому я и попросил Вас о помощи так как думал что у Вас
они заработают.
Проблема в том что после последующих доработок и последовательном создании функционала,
примеры которые видимо раньше работали в статьях посвященных этому функционалу теперь в следующих
версиях не работают, во всяком случае у меня. Поэтому я и попросил Вас о помощи так как думал что у Вас
они заработают.
Естественно, библиотека расширяется, меняется что-то. Но основные принципы же остаются однотипными. В примерах показана логика, а не чёткий план действий.
В експерте 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".
- www.metatrader5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Работа с таймсериями в библиотеке DoEasy (Часть 58): Таймсерии данных буферов индикаторов:
В завершении темы работы с таймсериями организуем хранение, поиск и сортировку данных, хранящихся в буферах индикаторов, что позволит в дальнейшем проводить анализ на основе значений индикаторов, создаваемых на основе библиотеки в своих программах. Общая концепция всех классов-коллекций библиотеки позволяет легко находить нужные данные в соответствующей коллекции, и соответственно, это же будет возможным и в создаваемом сегодня классе.
Скомпилируем советник и запустим его на графике, указав в настройках использовать только текущий символ и текущий таймфрейм. В комментариях на графике будут выведены данные первого и нулевого (текущего) баров всех созданных индикаторов:
Для наглядности на график нанесены те же индикаторы с точно такими же настройками — данные индикаторов в комментариях на графике и в окне данных (Ctrl+D) совпадают и значения на текущем баре обновляются.
Автор: Artyom Trishkin