English 中文 Español Deutsch 日本語 Português
preview
Торговый инструментарий MQL5 (Часть 7): Расширение EX5-библиотеки для управления историей функциями последнего отмененного отложенного ордера

Торговый инструментарий MQL5 (Часть 7): Расширение EX5-библиотеки для управления историей функциями последнего отмененного отложенного ордера

MetaTrader 5Примеры |
320 0
Wanateki Solutions LTD
Kelvin Muturi Muigua

Введение

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

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

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

Чтобы начать, откройте файл HistoryManager.mq5 из предыдущей статьи, в которой мы разработали функции для обработки последнего исполненного отложенного ордера. В этом разделе мы начнем реализовывать функцию GetLastCanceledPendingOrderData(), которая играет центральную роль в обработке отмененных отложенных ордеров. Прежде чем продолжить, убедитесь, что вы загрузили исходный файл HistoryManager.mq5, приложенный к предыдущей статье.

Когда файл будет готов, найдите раздел, на котором мы закончили предыдущую статью. Мы продолжим добавлять новый код под функцией LastFilledPendingOrderComment(). Такое размещение обеспечивает логическую организацию новых функций вместе со связанными функциями, что упрощает навигацию по библиотеке и ее расширение в будущем.


Основное содержание

  1. Получение данных о последнем отмененном отложенном ордере
  2. Получение типа последнего отмененного отложенного ордера
  3. Получение символа последнего отмененного отложенного ордера
  4. Получение последнего отмененного тикета отложенного ордера
  5. Получение цены открытия последнего отмененного отложенного ордера
  6. Получение цены стоп-лосса последнего отмененного отложенного ордера
  7. Получение цены тейк-профита последнего отмененного отложенного ордера
  8. Получение последнего отмененного отложенного ордера стоп-лосс в пунктах
  9. Получение последнего отмененного отложенного ордера тейк-профит в пунктах
  10. Получение настройки времени последнего отмененного отложенного ордера
  11. Получение времени выполнения последнего отмененного отложенного ордера
  12. Получение времени истечения срока действия последнего отмененного отложенного ордера
  13. Получение идентификатора позиции последнего отмененного отложенного ордера
  14. Получение последнего отмененного отложенного ордера Magic
  15. Получение причины последнего отмененного отложенного ордера
  16. Получение типа исполнения последнего отмененного отложенного ордера
  17. Получение типа времени последнего отмененного отложенного ордера
  18. Получение последнего отмененного комментария к отложенному ордеру
  19. Заключение



Функция получения данных о последнем отмененном отложенном ордере

Функция GetLastCanceledPendingOrderData() извлекает данные о последнем отмененном отложенном ордере и сохраняет эту информацию в getLastCanceledPendingOrderData. Она полагается на функцию FetchHistoryByCriteria() для доступа к историческим торговым данным, идентифицирующая последний отмененный отложенный ордер путем анализа соответствующего набора данных. Если такие данные не найдены, функция регистрирует сообщение об ошибке и возвращает false. В случае успеха она сохраняет полученную информацию в предоставленной ссылке и возвращает true.

Начнем с создания определения или сигнатуры функции. Функция GetLastCanceledPendingOrderData() должна быть доступна для импорта программ MQL5 для внешнего использования, поэтому мы определили ее как exported.

bool GetLastCanceledPendingOrderData(PendingOrderData &getLastCanceledPendingOrderData) export
  {
//-- Function implementation will be explained step by step below.
  }

Попытаемся получить историю отложенных ордеров с помощью функции FetchHistoryByCriteria() с аргументом GET_PENDING_ORDERS_HISTORY_DATA. Это гарантирует, что функция имеет доступ к необходимым данным по отмененным отложенным ордерам.

Если функция FetchHistoryByCriteria() возвращает false, это означает, что история торговли отсутствует. В этом случае мы регистрируем сообщение об ошибке, используя функцию Print() для помощи в отладке. Функция возвращает false, что означает невозможность извлечения данных.

if(!FetchHistoryByCriteria(GET_PENDING_ORDERS_HISTORY_DATA))
  {
   Print(__FUNCTION__, ": No trading history available. Last canceled pending order can't be retrieved.");
   return(false);
  }

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

Далее пройдем по циклу pendingOrderInfo для поиска ордера с состоянием ORDER_STATE_CANCELED. Функция сохранит первый совпадающий ордер в переменную getLastCanceledPendingOrderData. Цикл обеспечивает проверку состояния каждого ордера, и как только отмененный ордер найден, он сохраняется в ссылочной переменной, после чего цикл завершается. После сохранения данных для последнего отмененного отложенного ордера функция возвращает true, что свидетельствует об успешности операции.

int totalPendingOrderInfo = GetTotalDataInfoSize(GET_PENDING_ORDERS_HISTORY_DATA);
for(int x = 0; x < totalPendingOrderInfo; x++)
  {
   if(pendingOrderInfo[x].state == ORDER_STATE_CANCELED)
     {
      getLastCanceledPendingOrderData = pendingOrderInfo[x];
      break;
     }
  }
return(true);

Если исторические данные недоступны, выводится сообщение об ошибке с помощью функции Print(), включая имя функции (__FUNCTION__) для ясности. Это сообщение помогает выявить проблему во время отладки. Функция гарантирует, что предоставленная ссылочная переменная останется неизменной в случае сбоя операции, сохраняя целостность входных данных.

Ниже показана полная реализация функции GetLastCanceledPendingOrderData().

bool GetLastCanceledPendingOrderData(PendingOrderData &getLastCanceledPendingOrderData) export
  {
   if(!FetchHistoryByCriteria(GET_PENDING_ORDERS_HISTORY_DATA))
     {
      Print(__FUNCTION__, ": No trading history available. Last canceled pending order can't be retrieved.");
      return(false);
     }

//-- Save the last canceled pending order data in the referenced getLastCanceledPendingOrderData variable
   int totalPendingOrderInfo = GetTotalDataInfoSize(GET_PENDING_ORDERS_HISTORY_DATA);
   for(int x = 0; x < totalPendingOrderInfo; x++)
     {
      if(pendingOrderInfo[x].state == ORDER_STATE_CANCELED)
        {
         getLastCanceledPendingOrderData = pendingOrderInfo[x];
         break;
        }
     }
   return(true);
  }


Функция типа последнего отмененного отложенного ордера

Функция LastCanceledPendingOrderType() отвечает за извлечение типа ордера последнего отмененного отложенного ордера и сохранение его в указанной переменной lastCanceledPendingOrderType. Эта переменная передается в функцию в качестве входных данных, где она сохраняет полученный тип ордера.

Чтобы добиться этого, объявляется временная переменная PendingOrderData, lastCanceledPendingOrderInfo, для хранения сведений о последнем отмененном отложенном ордере. Затем функция вызывает GetLastCanceledPendingOrderData() для получения необходимой информации об ордере.

Если получение прошло успешно, поле type из lastCanceledPendingOrderInfo извлекается и назначается lastCanceledPendingOrderType. Затем функция возвращает true для подтверждения успешности операции. И наоборот, если извлечение не удается, функция возвращает false, оставляя переменную lastCanceledPendingOrderType без изменений.

Ниже представлена полная реализация функции LastCanceledPendingOrderType().

bool LastCanceledPendingOrderType(ENUM_ORDER_TYPE &lastCanceledPendingOrderType) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderType = lastCanceledPendingOrderInfo.type;
      return(true);
     }
   return(false);
  }


Функция символа последнего отмененного отложенного ордера

Функция LastCanceledPendingOrderSymbol() предназначена для извлечения торгового символа, связанного с последним отмененным отложенным ордером. Этот символ хранится в представленной переменной lastCanceledPendingOrderSymbol, предлагающая простой способ доступа к этому конкретному свойству. Функция пользуется утилитой GetLastCanceledPendingOrderData() для получения необходимых данных ордера.

Процесс начинается с вызова GetLastCanceledPendingOrderData() для извлечения данных по последнему отмененному отложенному ордеру. Если извлечение прошло успешно, поле символа из извлеченных данных присваивается указанной переменной lastCanceledPendingOrderSymbol, а функция возвращает true для подтверждения успешности операции.

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

Ниже представлена полная реализация функции LastCanceledPendingOrderSymbol().

bool LastCanceledPendingOrderSymbol(string &lastCanceledPendingOrderSymbol) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderSymbol = lastCanceledPendingOrderInfo.symbol;
      return(true);
     }
   return(false);
  }


Функция тикета последнего отмененного отложенного ордера

Функция LastCanceledPendingOrderTicket() извлекает номер тикета (ticket) последнего отмененного отложенного ордера и хранит его в указанной переменной lastCanceledPendingOrderTicket. Она вызывает функцию GetLastCanceledPendingOrderData() для извлечения данных ордера.

Если извлечение данных прошло успешно, номер тикета сохраняется в указанной переменной, а функция возвращает true. Если процесс завершается неудачей, функция возвращает false, оставляя переменную неизменной.

Ниже приведен полный код для функции LastCanceledPendingOrderTicket().
bool LastCanceledPendingOrderTicket(ulong &lastCanceledPendingOrderTicket) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTicket = lastCanceledPendingOrderInfo.ticket;
      return(true);
     }
   return(false);
  }


Функция цены открытия последнего отменного отложенного ордера

Функция LastCanceledPendingOrderPriceOpen() извлекает цену открытия последнего отмененного отложенного ордера и хранит его в указанной переменной lastCanceledPendingOrderPriceOpen. Она вызывает GetLastCanceledPendingOrderData() для сбора данных об ордере.

После успешного извлечения цена открытия сохраняется в предоставленной переменной, а функция возвращает true. Если извлечение не удалось, функция возвращает false не изменяя переменную.

Ниже представлена полная реализация функции LastCanceledPendingOrderPriceOpen().

bool LastCanceledPendingOrderPriceOpen(double &lastCanceledPendingOrderPriceOpen) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderPriceOpen = lastCanceledPendingOrderInfo.priceOpen;
      return(true);
     }
   return(false);
  }


Функция цены стоп-лосс последнего отмененного отложенного ордера

Функция LastCanceledPendingOrderSlPrice() получает цену стоп-лосса последнего отмененного отложенного ордера и хранит его в указанной переменной lastCanceledPendingOrderSlPrice. Она использует функцию GetLastCanceledPendingOrderData() для извлечения данных ордера.

Если извлечение прошло успешно, цена стоп-лосса сохраняется в указанной переменной, а функция возвращает true. Если процесс завершается неудачей, функция возвращает false не изменяя переменную.

Ниже представлена реализация функции LastCanceledPendingOrderSlPrice().

bool LastCanceledPendingOrderSlPrice(double &lastCanceledPendingOrderSlPrice) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderSlPrice = lastCanceledPendingOrderInfo.slPrice;
      return(true);
     }
   return(false);
  }


Функция цены тейк-профита последнего отмененного отложенного ордера

Функция LastCanceledPendingOrderTpPrice() извлекает цену тейк-профита последнего отмененного отложенного ордера и хранит его в указанной переменной lastCanceledPendingOrderTpPrice. Она использует функцию GetLastCanceledPendingOrderData() для извлечения данных ордера.

Если извлечение данных прошло успешно, цена тейк-профита сохраняется в указанной переменной и функция возвращает true. Если извлечение не удалось, функция возвращает false без изменения переменной.

Ниже представлена полная реализация функции LastCanceledPendingOrderTpPrice().

bool LastCanceledPendingOrderTpPrice(double &lastCanceledPendingOrderTpPrice) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTpPrice = lastCanceledPendingOrderInfo.tpPrice;
      return(true);
     }
   return(false);
  }


Функция пипсов стоп-лосса последнего отмененного отложенного ордера

Функция LastCanceledPendingOrderSlPips() извлекает значение пипсов стоп-лосса последнего отмененного отложенного ордера и хранит его в указанной переменной lastCanceledPendingOrderSlPips. Используя функцию GetLastCanceledPendingOrderData(), она обращается к соответствующим данным ордера, чтобы извлечь это конкретное значение.

Функция начинается с вызова GetLastCanceledPendingOrderData() для получения данных последнего отмененного отложенного ордера. Если поиск прошел успешно, значение пипсов стоп-лосса извлекается из полученных данных и присваивается переменной lastCanceledPendingOrderSlPips. Затем функция указывает на успех, возвращая true.

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

Ниже представлена полная реализация функции LastCanceledPendingOrderSlPips().

bool LastCanceledPendingOrderSlPips(int &lastCanceledPendingOrderSlPips) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderSlPips = lastCanceledPendingOrderInfo.slPips;
      return(true);
     }
   return(false);
  }


Функция пипсов тейк-профита последнего отмененного отложенного ордера

Функция LastCanceledPendingOrderTpPips() извлекает значение пипсов прибыли, связанное с последним отмененным отложенным ордером. Полученное значение сохраняется в указанной переменной lastCanceledPendingOrderTpPips. Для достижения этой цели функция использует функцию GetLastCanceledPendingOrderData(), которая извлекает необходимые данные ордера.

Первоначально переменная PendingOrderData объявляется для временного хранения сведений о последнем отмененном отложенном ордере. Затем вызывается функция GetLastCanceledPendingOrderData() для заполнения этой переменной соответствующими данными. Если операция прошла успешно, значение пипсов тейк-профита извлекается из переменной и хранится в переменной lastCanceledPendingOrderTpPips. Затем функция возвращает true, указывая на успех.

Однако, если извлечение данных не удается, функция возвращает false, оставляя указанную переменную неизменной.

Ниже представлена полная реализация функции LastCanceledPendingOrderTpPips().

bool LastCanceledPendingOrderTpPips(int &lastCanceledPendingOrderTpPips) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTpPips = lastCanceledPendingOrderInfo.tpPips;
      return(true);
     }
   return(false);
  }


Функция времени установки последнего отмененного отложенного ордера

Функция LastCanceledPendingOrderTimeSetup() извлекает установку времени последнего отмененного отложенного ордера и хранит его в указанной переменной lastCanceledPendingOrderTimeSetup. Для выполнения этой операции функция использует GetLastCanceledPendingOrderData() для доступа к необходимой информации об отмененном ордере.

Мы начинаем с объявления переменной PendingOrderData для временного хранения данных по последнему отмененному отложенному ордеру. Затем вызывается функция GetLastCanceledPendingOrderData() для заполнения этой переменной соответствующими данными по ордеру. Если поиск прошел успешно, значение time setup извлекается и хранится в переменной lastCanceledPendingOrderTimeSetup. Функция впоследствии возвращает true, что подтверждает успешность операции.

Однако, если извлечение данных не удается, функция возвращает false, гарантируя, что переменная lastCanceledPendingOrderTimeSetup остается неизменной.

Ниже представлена полная реализация функции LastCanceledPendingOrderTimeSetup().

bool LastCanceledPendingOrderTimeSetup(datetime &lastCanceledPendingOrderTimeSetup) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTimeSetup = lastCanceledPendingOrderInfo.timeSetup;
      return(true);
     }
   return(false);
  }


Функция времени исполнения последнего отмененного отложенного ордера

Функция LastCanceledPendingOrderTimeDone() извлекает время установки последнего отмененного отложенного ордера. Это время хранится в указанной переменной lastCanceledPendingOrderTimeDone, обеспечивая простой способ доступа к этому конкретному фрагменту данных. Функция пользуется утилитой GetLastCanceledPendingOrderData() для сбора необходимых сведений об отмененном ордере.

Функция начинается с вызова GetLastCanceledPendingOrderData() для извлечения сведений о последнем отмененном отложенном ордере. Если операция по извлечению прошла успешно, поле time из извлеченных данных назначается из переменной lastCanceledPendingOrderTimeDone, а функция возвращает true, подтверждая успешность операции.

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

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

Ниже представлена полная реализация функции LastCanceledPendingOrderTimeDone().

bool LastCanceledPendingOrderTimeDone(datetime &lastCanceledPendingOrderTimeDone) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTimeDone = lastCanceledPendingOrderInfo.timeDone;
      return(true);
     }
   return(false);
  }


Функция истечения срока действия последнего отмененного отложенного ордера

Функция LastCanceledPendingOrderExpirationTime() извлекает время истечения последнего отмененного отложенного ордера и назначает его указанной переменной lastCanceledPendingOrderExpirationTime. Она вызывает функцию GetLastCanceledPendingOrderData() для извлечения данных ордера.

Если извлечение данных прошло успешно, время истечения сохраняется в указанной переменной и функция возвращает true. Если извлечение не удалось, функция возвращает false не изменяя переменную.

Ниже представлена полная реализация функции LastCanceledPendingOrderExpirationTime() .
bool LastCanceledPendingOrderExpirationTime(datetime &lastCanceledPendingOrderExpirationTime) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderExpirationTime = lastCanceledPendingOrderInfo.expirationTime;
      return(true);
     }
   return(false);
  }


Функция идентификатора позиции последнего отмененного отложенного ордера

Функция LastCanceledPendingOrderPositionId() извлекает идентификатор позиции последнего отмененного отложенного ордера и обновляет указанную переменную lastCanceledPendingOrderPositionId с этим значением. Чтобы получить доступ к необходимым данным, она вызывает функцию GetLastCanceledPendingOrderData().

Если операция прошла успешно, идентификатор позиции помещается в указанную переменную и функция возвращает true. В случае неудачного извлечения функция возвращает false, оставляя переменную неизменной.

Вот полная реализация функцииLastCanceledPendingOrderPositionId().
bool LastCanceledPendingOrderPositionId(ulong &lastCanceledPendingOrderPositionId) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderPositionId = lastCanceledPendingOrderInfo.positionId;
      return(true);
     }
   return(false);
  }


Функция магического числа последнего отмененного отложенного ордера

Функция LastCanceledPendingOrderMagic() получает магическое число, связанное с последним отмененным отложенным ордером, и присваивает его указанной переменной lastCanceledPendingOrderMagic. Процесс основан на функции GetLastCanceledPendingOrderData() для извлечения необходимых данных.

Если извлечение данных прошло успешно, магическое число передается в указанную переменную и функция возвращает true. Если операция не удалась, функция возвращает false, оставляя переменную неизменной.

Ниже представлена полная реализация функцииLastCanceledPendingOrderMagic().
bool LastCanceledPendingOrderMagic(ulong &lastCanceledPendingOrderMagic) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderMagic = lastCanceledPendingOrderInfo.magic;
      return(true);
     }
   return(false);
  }


Функция причины последнего отмененного отложенного ордера

Функция LastCanceledPendingOrderReason() извлекает код причины последнего отмененного отложенного ордера и сохраняет его в указанной переменной lastCanceledPendingOrderReason. Она использует вспомогательную функцию GetLastCanceledPendingOrderData() для получения информации об ордере.

Код причины указывает, как или почему был размещен ордер. Например, ORDER_REASON_CLIENT показывает, что ордер был размещен вручную с декстопного терминала, ORDER_REASON_EXPERT - что он был размещен советником, а ORDER_REASON_WEB - что он был размещен через веб-платформу. Другие возможные причины включают срабатывание стоп-лосса или тейк-профита, или наступление стоп-аута.

Если извлечение данных прошло успешно, функция сохраняет код причины в предоставленной переменной и возвращает true. В случае неудачи функция возвращает false не изменяя переменную.

Ниже представлена полная реализация функции LastCanceledPendingOrderReason().

bool LastCanceledPendingOrderReason(ENUM_ORDER_REASON &lastCanceledPendingOrderReason) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderReason = lastCanceledPendingOrderInfo.reason;
      return(true);
     }
   return(false);
  }


Функция типа исполнения последнего отменного отложенного ордера

Функция LastCanceledPendingOrderTypeFilling() определяет тип исполнения последнего отмененного отложенного ордера и назначает его указанной переменной lastCanceledPendingOrderTypeFilling. Это достигается вызовом функции GetLastCanceledPendingOrderData() для сбора необходимых данных об ордере.

Тип исполнения предоставляет важную информацию о том, как предполагалось исполнить ордер. При Fill or Kill (FOK) (все/ничего) ордер должен быть исполнен полностью по запрошенной цене, а если это невозможно, то отменен. При Immediate or Cancel (IOC) (все/частично) ордер выполняется немедленно для доступного объема по запрошенной цене, а невыполненный объем отменяется. Тип Return (возврат) разрешает частичное исполнение, если полный объем недоступен, а неисполненный объем преобразуется в лимитный ордер. Этот лимитный ордер остается активным на рынке до исполнения или отмены вручную или советником.

Если извлечение данных прошло успешно, тип исполнения сохраняется в предоставленной переменной, а функция возвращает true. Если извлечение не удалось, функция возвращает false без изменения указанной переменной.

Ниже представлена полная реализация функции LastCanceledPendingOrderTypeFilling().

bool LastCanceledPendingOrderTypeFilling(ENUM_ORDER_TYPE_FILLING &lastCanceledPendingOrderTypeFilling) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTypeFilling = lastCanceledPendingOrderInfo.typeFilling;
      return(true);
     }
   return(false);
  }


Функция типа времени последнего отмененного отложенного ордера

Функция LastCanceledPendingOrderTypeTime() извлекает тип времени последнего отмененного отложенного ордера и обновляет указанную переменную lastCanceledPendingOrderTypeTime с этим значением. Она использует функцию GetLastCanceledPendingOrderData() для получения необходимых данных ордера.

Тип времени ордера указывает, как долго ордер остается действительным. Существует несколько типов времени, связанного с ордерами: Good Till Cancel (GTC) (действителен до отмены) - ордер остается активным, пока не будет отменен вручную; Good Till Current Trade Day (действителен в течение текущего торгового дня) - действие ордера истекает в конце торгового дня; Good Till Expired (действителен до истечения) - действие ордера истекает после определенной даты или времени и Good Till Specified Day (действителен до указанного дня) - ордер действителен до 23:59:59 с дополнительным условием, что если время выходит за пределы торговой сессии, действие ордера истекает в ближайшее торговое время.

Если извлечение прошло успешно, функция присваивает время типа к указанной переменной и возвращает true. Если извлечение не удается, переменная остается неизменной и возвращается false.

Ниже показана полная реализация функции LastCanceledPendingOrderTypeTime().

bool LastCanceledPendingOrderTypeTime(datetime &lastCanceledPendingOrderTypeTime) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTypeTime = lastCanceledPendingOrderInfo.typeTime;
      return(true);
     }
   return(false);
  }


Функция комментария последнего отмененного отложенного ордера

Функция LastCanceledPendingOrderComment() извлекает комментарий, связанный с последним отмененным отложенным ордером, и помещает его в указанную переменную lastCanceledPendingOrderComment. Она использует функцию GetLastCanceledPendingOrderData() для извлечения необходимой информации об ордере.

Если данные ордера успешно получены, комментарий присваивается указанной переменной и функция возвращает true. Если операция завершается неудачей, указанная переменная остается немодифицированной и функция возвращает false.

Ниже представлена полная реализация функции LastCanceledPendingOrderComment().
bool LastCanceledPendingOrderComment(string &lastCanceledPendingOrderComment) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderComment = lastCanceledPendingOrderInfo.comment;
      return(true);
     }
   return(false);
  }


Заключение

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

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

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

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

Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/16906

Прикрепленные файлы |
HistoryManager.mq5 (81.42 KB)
HistoryManager.ex5 (33.63 KB)
Нейросети в трейдинге: От трансформеров к спайковым нейронам (SpikingBrain) Нейросети в трейдинге: От трансформеров к спайковым нейронам (SpikingBrain)
Фреймворк SpikingBrain демонстрирует уникальный подход к обработке данных: нейроны реагируют только на значимые события, эффективно фильтруя шум. Его событийная архитектура снижает вычислительные затраты, сохраняя ключевую информацию о движениях. Адаптивные пороги и возможность использования предварительно обученных модулей обеспечивают гибкость и масштабируемость модели.
Прогнозирование условного распределения с помощью MLP Прогнозирование условного распределения с помощью MLP
В данной статье мы рассмотрим модель регрессии на базе MLP, которая прогнозирует не только условное математическое ожидание, но и условную дисперсию. Другими словами, мы будем учить нашу сеть предсказывать целое распределение будущих цен на основе входного вектора признаков. Но для этой цели нам придется написать свою собственную функцию потерь.
Разработка инструментария для анализа движения цен (Часть 9): Внешние библиотеки Разработка инструментария для анализа движения цен (Часть 9): Внешние библиотеки
В статье рассматривается новое измерение анализа с использованием внешних библиотек, специально разработанных для расширенной аналитики. Эти библиотеки, такие как pandas, предоставляют мощные инструменты для обработки и интерпретации сложных данных, позволяя трейдерам получать более глубокое представление о динамике рынка. Интегрируя такие технологии, мы можем сократить разрыв между необработанными данными и практическими стратегиями. Здесь мы заложим основу для этого инновационного подхода и раскроем потенциал объединения технологий с опытом трейдинга.
Стратегии торговли прорыва: разбор ключевых методов Стратегии торговли прорыва: разбор ключевых методов
Стратегии прорыва диапазона открытия (Opening Range Breakout, ORB) основаны на идее о том, что начальный торговый диапазон, установленный вскоре после открытия рынка, отражает значимые уровни цен, когда покупатели и продавцы договариваются о стоимости. Выявляя прорывы определенного диапазона вверх или вниз, трейдеры могут извлекать выгоду из моментума, который часто возникает, когда направление рынка становится более отчетливым. В этой статье рассмотрим три стратегии ORB, адаптированные из материалов компании Concretum Group.