
Торговый инструментарий MQL5 (Часть 5): Расширение EX5-библиотеки для управления историей функциями последнего исполненного отложенного ордера
Введение
Доступ к сведениям о последнем исполненном отложенном ордере особенно ценен в сценариях, когда ваша торговая логика зависит от типа последнего исполненного отложенного ордера. Например, вы можете использовать эти данные для уточнения своих торговых стратегий на основе того, был ли последний исполненный ордер Buy Limit, Sell Stop, Buy Stop, Sell Limit, Buy Stop Limit или Sell Stop Limit. Понимание типа ордера может дать представление о рыночных условиях и помочь скорректировать ваш подход, например, изменить точки входа или выхода.
Эта информация также имеет решающее значение для сбора и анализа исторических торговых данных с целью оптимизации ваших торговых систем или сбора данных о том, насколько быстро ваш брокер исполняет отложенные ордера при их срабатывании. Изучая такие детали, как проскальзывание, время, прошедшее с момента размещения ордера до его исполнения, а также условия, при которых ордер был исполнен, вы можете выявить закономерности и области для улучшения вашей стратегии. Кроме того, эти данные позволяют контролировать качество исполнения, гарантируя, что ордера исполняются в соответствии с ожиданиями, и помогая устранять потенциальные неэффективности торговых операций. Такой подробный анализ может улучшить процесс принятия решений и со временем привести к созданию более эффективных и надежных торговых стратегий.
EX5-библиотека для управления историей (History Management) упрощает процесс получения данных и свойств последнего исполненного отложенного ордера. Вызвав одну функцию, вы можете получить доступ к этим данным без необходимости указывать период поиска по торговой истории — EX5-библиотека легко справится с этим. Все, что вам нужно сделать, это предоставить соответствующей функции запроса истории переменную для сохранения конкретного свойства отложенного ордера в качестве входных данных. Затем функция сохранит извлеченные данные в указанной вами переменной.
Если функция успешно извлекает запрошенные данные, она возвращает true, информируя об успешном выполнении. Если указанные данные отложенного ордера недоступны, возвращается false. Этот оптимизированный подход устраняет ненужные сложности, позволяя вам сосредоточиться на анализе или интеграции полученных данных в ваши торговые стратегии, обеспечивая как эффективность, так и точность ваших торговых операций.
Для начала откроем файл HistoryManager.mq5 из предыдущей статьи, в которой мы создали функции поиска истории позиций и начнем с создания функции GetLastFilledPendingOrderData(). Убедитесь, что вы загрузили исходный файл HistoryManager.mq5 , приложенный к предыдущей статье. Мы продолжим добавлять новый код ниже функции LastClosedPositionDuration(), на которой мы остановились ранее.
Функция получения данных последнего исполненного отложенного ордера
Функция GetLastFilledPendingOrderData() отвечает за извлечение свойств последнего исполненного отложенного ордера из доступной торговой истории. Она систематически проверяет исторические данные на предмет наличия исполненных отложенных ордеров и, если такой ордер найден, сохраняет соответствующие данные в указанной переменной getLastFilledPendingOrderData.
Функция работает в паре с FetchHistoryByCriteria() для извлечения необходимой торговой истории. Она обеспечивает учет только исполненных отложенных ордеров и обновляет предоставленную структуру данными последнего исполненного отложенного ордера.
Начнем с определения сигнатуры функции GetLastFilledPendingOrderData(). Поскольку эта функция отмечена как export, она доступна любому файлу исходного кода MQL5, который импортирует скомпилированную библиотеку. Функция ссылается на переменную getLastFilledPendingOrderData , в которой будут храниться извлеченные данные.
bool GetLastFilledPendingOrderData(PendingOrderData &getLastFilledPendingOrderData) export { //-- Function logic will be implemented here }
Далее мы будем использовать функцию FetchHistoryByCriteria() и передадим константу GET_PENDING_ORDERS_HISTORY_DATA в качестве параметра функции, чтобы убедиться, что у нас есть необходимые данные истории отложенных ордеров. Если данные не найдены, выведем сообщение и вернем false.
if(!FetchHistoryByCriteria(GET_PENDING_ORDERS_HISTORY_DATA)) { Print(__FUNCTION__, ": No trading history available. Last filled pending order can't be retrieved."); return(false); }
Если нам удалось получить данные, мы приступаем к поиску последнего исполненного отложенного ордера. Мы получаем общее количество отложенных ордеров из функции GetTotalDataInfoSize(), затем проходим по массиву pendingOrderInfo для поиска исполненного отложенного ордера. После того, как ордер найден, присваиваем его данные структуре getLastFilledPendingOrderData. Наконец, функция возвращает true если найден исполненный отложенный ордер и его данные сохранены. Если исполненный отложенный ордер не найден, выходим из функции и возвращаем false.
int totalPendingOrderInfo = GetTotalDataInfoSize(GET_PENDING_ORDERS_HISTORY_DATA); for(int x = 0; x < totalPendingOrderInfo; x++) { if(pendingOrderInfo[x].state == ORDER_STATE_FILLED) { getLastFilledPendingOrderData = pendingOrderInfo[x]; break; } } return(true);
Вот полная реализация функции GetLastFilledPendingOrderData() со всеми сегментами кода в правильной последовательности.
bool GetLastFilledPendingOrderData(PendingOrderData &getLastFilledPendingOrderData) export { if(!FetchHistoryByCriteria(GET_PENDING_ORDERS_HISTORY_DATA)) { Print(__FUNCTION__, ": No trading history available. Last filled pending order can't be retrieved."); return(false); } //-- Save the last filled pending order data in the referenced getLastFilledPendingOrderData variable int totalPendingOrderInfo = GetTotalDataInfoSize(GET_PENDING_ORDERS_HISTORY_DATA); for(int x = 0; x < totalPendingOrderInfo; x++) { if(pendingOrderInfo[x].state == ORDER_STATE_FILLED) { getLastFilledPendingOrderData = pendingOrderInfo[x]; break; } } return(true); }
Функция типа последнего исполненного отложенного ордера
Функция LastFilledPendingOrderType() отвечает за определение типа последнего исполненного отложенного ордера. Она сохраняет этот тип в указанной переменной lastFilledPendingOrderType. Эта возможность крайне важна для приложений, которым необходимо анализировать типы выполнения ордеров или отслеживать эффективность определенных категорий ордеров.
Начнем с определения сигнатуры функции. Поскольку эта функция помечена как экспортируемая, она будет доступна для использования в любом исходном файле MQL5, импортирующем библиотеку EX5. The function accepts the referenced lastFilledPendingOrderType variable as an input, where the type of the last filled pending order will be stored.
bool LastFilledPendingOrderType(ENUM_ORDER_TYPE &lastFilledPendingOrderType) export { //-- Function logic will be implemented here }
Начнем с объявления переменной типа PendingOrderData с именем lastFilledPendingOrderInfo. Эта переменная будет временно хранить сведения о последнем исполненном отложенном ордере.
PendingOrderData lastFilledPendingOrderInfo;
Далее мы будем использовать функцию GetLastFilledPendingOrderData() для получения информации о последнем исполненном отложенном ордере. Если операция пройдет успешно, мы извлечем поле type из структуры lastFilledPendingOrderInfo, сохраним ее в указанной переменной lastFilledPendingOrderType и вернем true. Если извлечение не удалось, мы пропустим обновление указанной переменной и вернем false, чтобы указать, что данные не найдены.
if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderType = lastFilledPendingOrderInfo.type; return(true); } return(false);
Полная реализация функции LastFilledPendingOrderType().
bool LastFilledPendingOrderType(ENUM_ORDER_TYPE &lastFilledPendingOrderType) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderType = lastFilledPendingOrderInfo.type; return(true); } return(false); }
Функция символа последнего исполненного отложенного ордера
Функция LastFilledPendingOrderSymbol() извлекает символ последнего исполненного отложенного ордера и сохраняет его в указанной переменной lastFilledPendingOrderSymbol. Она принимает указанную переменную lastFilledPendingOrderSymbol как входной параметр для хранения символа.
Во-первых, мы объявляем переменную PendingOrderData, lastFilledPendingOrderInfo, для временного хранения данных последнего исполненного отложенного ордера. Затем мы используем функцию GetLastFilledPendingOrderData() для получения информации об ордере. В случае успеха извлекаем символ из lastFilledPendingOrderInfo, store it in lastFilledPendingOrderSymbol, and return true. Если извлечение не удалось, возвращаем false без обновления указанной переменной.
Реализация функции LastFilledPendingOrderSymbol() в коде.
bool LastFilledPendingOrderSymbol(string &lastFilledPendingOrderSymbol) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderSymbol = lastFilledPendingOrderInfo.symbol; return(true); } return(false); }
Функция тикета последнего исполненного отложенного ордера
Функция LastFilledPendingOrderTicket() извлекает номер тикета последнего исполненного отложенного ордера и сохраняет его в указанной переменной lastFilledPendingOrderTicket. Она принимает переменную lastFilledPendingOrderTicket в качестве входного параметра, в котором сохраняется номер тикета.
Начнем с определения переменной PendingOrderData с именем lastFilledPendingOrderInfo, которая служит временным контейнером для сведений о последнем исполненном отложенном ордере. Далее вызываем функцию GetLastFilledPendingOrderData() для извлечения информации об ордере. После успешного извлечения, получаем тикет из lastFilledPendingOrderInfo, сохраняем его в переменной lastFilledPendingOrderTicket и информируем об успешном выполнении, вернув true. Если извлечение не удалось, функция возвращает false, оставляя указанную переменную неизменной.
Ниже представлена реализация функции LastFilledPendingOrderTicket().
bool LastFilledPendingOrderTicket(ulong &lastFilledPendingOrderTicket) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderTicket = lastFilledPendingOrderInfo.ticket; return(true); } return(false); }
Функция цены открытияпоследнего исполненного отложенного ордера
Функция LastFilledPendingOrderPriceOpen() извлекает цену открытия последнего исполненного отложенного ордера и сохраняет его в указанной переменной lastFilledPendingOrderPriceOpen. Она принимает переменную lastFilledPendingOrderPriceOpen в качестве входного параметра для хранения цены открытия.
Во-первых, мы объявляем переменную PendingOrderData, lastFilledPendingOrderInfo, для временного хранения данных последнего исполненного отложенного ордера. Затем мы используем функцию GetLastFilledPendingOrderData() для получения информации об ордере. В случае успеха мы извлекаем priceOpen из lastFilledPendingOrderInfo, сохраняем его в lastFilledPendingOrderPriceOpen и возвращаем true. Если поиск не удался, возвращаем false без обновления указанной переменной.
Ниже представлена реализация функции LastFilledPendingOrderPriceOpen().
bool LastFilledPendingOrderPriceOpen(double &lastFilledPendingOrderPriceOpen) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderPriceOpen = lastFilledPendingOrderInfo.priceOpen; return(true); } return(false); }
Функция цены стоп-лосс последнего исполненного отложенного ордера
Функция LastFilledPendingOrderSlPrice() извлекает цену стоп-лосса последнего исполненного отложенного ордера и сохраняет ее в указанной переменной lastFilledPendingOrderSlPrice. Она принимает переменную lastFilledPendingOrderSlPrice в качестве входного параметра для хранения извлеченной цены стоп-лосса. Функция особенно полезна в сценариях, где требуется отслеживать или анализировать уровни стоп-лосса недавно исполненных отложенных ордеров.
Начнем с объявления переменной PendingOrderData с именем lastFilledPendingOrderInfo для временного хранения данных последнего исполненного отложенного ордера. Затем мы используем функцию GetLastFilledPendingOrderData() для извлечения деталей ордера.
Если извлечение данных прошло успешно, поле slPrice из lastFilledPendingOrderInfo извлекается и сохраняется в переменной lastFilledPendingOrderSlPrice. Затем функция возвращает true для информирования об успехе. Если извлечение не удается, функция завершает работу без обновления указанной переменной и возвращает false для оповещения о том, что данные не найдены.
Полная реализация функции LastFilledPendingOrderSlPrice():
bool LastFilledPendingOrderSlPrice(double &lastFilledPendingOrderSlPrice) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderSlPrice = lastFilledPendingOrderInfo.slPrice; return(true); } return(false); }
Функция цены тейк-профита последнего исполненного отложенного ордера
Функция LastFilledPendingOrderTpPrice() извлекает цену тейк-профита последнего исполненного отложенного ордера и сохраняет ее в указанной переменной lastFilledPendingOrderTpPrice. Эта функция необходима для приложений, которые анализируют или управляют уровнями тейк-профита исполненных отложенных ордеров. Она принимает переменную lastFilledPendingOrderTpPrice как входные данные для хранения цены тейк-профита.
Начнем с объявления переменной PendingOrderData, lastFilledPendingOrderInfo, для временного хранения данных последнего исполненного отложенного ордера. Затем мы используем функцию GetLastFilledPendingOrderData() для извлечения информации об ордере. В случае успеха мы извлекаем tpPrice из lastFilledPendingOrderInfo, сохраняем его в переменной lastFilledPendingOrderTpPrice и возвращаем true. Если поиск не удался, возвращаем false без обновления указанной переменной.
Ниже представлена реализация функции LastFilledPendingOrderTpPrice().
bool LastFilledPendingOrderTpPrice(double &lastFilledPendingOrderTpPrice) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderTpPrice = lastFilledPendingOrderInfo.tpPrice; return(true); } return(false); }
Функция пипсов стоп-лосса последнего исполненного отложенного ордера
Функция LastFilledPendingOrderSlPips() извлекает значение пипсов стоп-лосса последнего исполненного отложенного ордера и сохраняет его в указанной переменной lastFilledPendingOrderSlPips. Эта функция имеет решающее значение для анализа параметров риска, связанных с исполненными отложенными ордерами.
Сначала объявляем переменную PendingOrderData с именем lastFilledPendingOrderInfo. Эта переменная будет временно хранить данные последнего исполненного отложенного ордера. Затем мы используем функцию GetLastFilledPendingOrderData() для извлечения данных ордера. Если всё прошло успешно, извлекаем поле slPips из структуры lastFilledPendingOrderInfo и сохраняем его в указанной переменной lastFilledPendingOrderSlPips. Затем функция возвращает true для информирования об успехе. Если извлечение не удается, функция завершает работу без обновления указанной переменной и возвращает false для оповещения о том, что данные не найдены.
Ниже представлена реализация функции LastFilledPendingOrderSlPips().
bool LastFilledPendingOrderSlPips(int &lastFilledPendingOrderSlPips) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderSlPips = lastFilledPendingOrderInfo.slPips; return(true); } return(false); }
Функция пипсов тейк-профита последнего исполненного отложенного ордера
Функция LastFilledPendingOrderTpPips() извлекает значение пипсов тейк-профита последнего исполненного отложенного ордера и сохраняет его в указанной переменной lastFilledPendingOrderTpPips. Этот функционал полезен для отслеживания уровней тейк-профита исполненных отложенных ордеров и может использоваться для анализа производительности или корректировки стратегии.
Сначала объявляем переменную PendingOrderData с именем lastFilledPendingOrderInfo. Эта переменная используется для временного хранения данных о последнем исполненном отложенном ордере. Затем мы вызываем функцию GetLastFilledPendingOrderData() для получения сведений об ордере. Если поиск прошел успешно, значение tpPips извлекается из lastFilledPendingOrderInfo и хранится в переменной lastFilledPendingOrderTpPips. Затем функция возвращает true. Если извлечение не удается, указанная переменная остается неизменной, а функция возвращает false, указывая на неудачу.
Ниже представлена полная реализация функции LastFilledPendingOrderTpPips().
bool LastFilledPendingOrderTpPips(int &lastFilledPendingOrderTpPips) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderTpPips = lastFilledPendingOrderInfo.tpPips; return(true); } return(false); }
Функция времени установки последнего исполненного отложенного ордера
Функция LastFilledPendingOrderTimeSetup() извлекает время установки последнего исполненного отложенного ордера. Она сохраняет это время в указанной переменной lastFilledPendingOrderTimeSetup. Эта функция необходима для отслеживания момента инициирования определенных отложенных ордеров, что позволяет проводить временной анализ активности ордеров.
Функция LastFilledPendingOrderTimeSetup() принимает указанную переменную lastFilledPendingOrderTimeSetup в качестве входных данных. Переменная содержит время установки последнего исполненного отложенного ордера после выполнения функции. Чтобы добиться этого, функция начинается с объявления переменной PendingOrderData с именем lastFilledPendingOrderInfo. Эта переменная используется для временного хранения сведений о последнем исполненном отложенном ордере.
Далее функция GetLastFilledPendingOrderData() вызывается для извлечения сведений о последнем исполненном отложенном ордере. Если извлечение прошло успешно, поле timeSetup из структуры lastFilledPendingOrderInfo извлекается и сохраняется в переменной lastFilledPendingOrderTimeSetup. Затем функция возвращает true для информирования об успехе. Если извлечение не удалось, функция возвращает false без обновления указанной переменной.
Ниже представлена полная реализация функции LastFilledPendingOrderTimeSetup().
bool LastFilledPendingOrderTimeSetup(datetime &lastFilledPendingOrderTimeSetup) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderTimeSetup = lastFilledPendingOrderInfo.timeSetup; return(true); } return(false); }
Функция времени исполнения последнего исполненного отложенного ордера
Функция LastFilledPendingOrderTimeDone() извлекает время срабатывания последнего исполненного отложенного ордера (time done) и сохраняет его в указанной переменной lastFilledPendingOrderTimeDone. Эта функция необходима для отслеживания времени исполнения отложенных ордеров, позволяя анализировать сроки исполнения или создавать подробные отчеты.
Функция принимает указанную переменную lastFilledPendingOrderTimeDone в качестве входного параметра для хранения времени исполнения. Мы начинаем с объявления переменной PendingOrderData под именем lastFilledPendingOrderInfo, которая используется для временного хранения сведений о последнем исполненном отложенном ордере.
Далее функция вызывает GetLastFilledPendingOrderData() для извлечения данных по последнему исполненному отложенному ордеру. Если всё прошло успешно, функция извлекает поле timeDone из структуры lastFilledPendingOrderInfo и сохраняет его в указанной переменной lastFilledPendingOrderTimeDone. Затем функция возвращает true для информирования об успехе.
Если извлечение не удается, функция завершает работу без обновления указанной переменной и возвращает false для оповещения о том, что необходимые данные не найдены.
Ниже представлена полная реализация функции LastFilledPendingOrderTimeDone().
bool LastFilledPendingOrderTimeDone(datetime &lastFilledPendingOrderTimeDone) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderTimeDone = lastFilledPendingOrderInfo.timeDone; return(true); } return(false); }
Функция истечения срока действия последнего исполненного отложенного ордера
Функция LastFilledPendingOrderExpirationTime() извлекает время истечения последнего исполненного отложенного ордера и сохраняет его в указанной переменной lastFilledPendingOrderExpirationTime. Эта функция полезна для управления и анализа срока действия отложенных ордеров, особенно при мониторинге срока их действия.
Функция принимает указанную переменную lastFilledPendingOrderExpirationTime в качестве входного параметра для хранения времени истечения срока действия. Начнем с объявления переменной PendingOrderData с именем lastFilledPendingOrderInfo, которая служит временным контейнером для сведений о последнем исполненном отложенном ордере.
Затем функция вызывает GetLastFilledPendingOrderData() для извлечения данных по последнему исполненному отложенному ордеру. Если всё прошло успешно, функция извлекает поле expirationTime из структуры lastFilledPendingOrderInfo и сохраняет ее в указанной переменной lastFilledPendingOrderExpirationTime. Она возвращает true для указания успешного извлечения данных.
Если извлечение не удается, функция оставляет указанную переменную неизменной и возвращает false для оповещения о том, что необходимые данные не найдены.
Ниже представлена полная реализация функции LastFilledPendingOrderExpirationTime().
bool LastFilledPendingOrderExpirationTime(datetime &lastFilledPendingOrderExpirationTime) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderExpirationTime = lastFilledPendingOrderInfo.expirationTime; return(true); } return(false); }
Функция идентификатора позиции последнего исполненного отложенного ордера
Функция LastFilledPendingOrderPositionId() извлекает идентификатор позиции последнего исполненного отложенного ордера и сохраняет его в указанной переменной lastFilledPendingOrderPositionId. Эта функция особенно полезна для связывания отложенных ордеров с соответствующими им позициями, что позволяет лучше отслеживать и управлять торговой активностью.
Функция принимает указанную переменную lastFilledPendingOrderPositionId в качестве входного параметра для хранения идентификатора позиции. Начнем с объявления переменной PendingOrderData с именем lastFilledPendingOrderInfo, которая служит временным контейнером для сведений о последнем исполненном отложенном ордере.
Далее функция вызывает GetLastFilledPendingOrderData() для извлечения данных по последнему исполненному отложенному ордеру. Если всё прошло успешно, функция извлекает поле positionId из структуры lastFilledPendingOrderInfo и присваивает его указанной переменной lastFilledPendingOrderPositionId. Затем она возвращает true для информирования об успехе.
Если извлечение не удается, функция завершает работу без обновления указанной переменной и возвращает false, чтобы проинформировать о неудаче.
Ниже представлена реализация функции LastFilledPendingOrderPositionId().
bool LastFilledPendingOrderPositionId(ulong &lastFilledPendingOrderPositionId) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderPositionId = lastFilledPendingOrderInfo.positionId; return(true); } return(false); }
Функция магического числа последнего исполненного отложенного ордера
Функция LastFilledPendingOrderMagic() извлекает магическое число последнего исполненного отложенного ордера и сохраняет его в указанной переменной lastFilledPendingOrderMagic. Эта функция необходима для определения уникального идентификатора, связанного с конкретным ордером, особенно при управлении несколькими стратегиями или системами в рамках одного торгового счета.
Функция принимает указанную переменную lastFilledPendingOrderMagic в качестве входного параметра для хранения магического числа. Начинаем с объявления переменной PendingOrderData с именем lastFilledPendingOrderInfo, которая используется для временного хранения сведений о последнем исполненном отложенном ордере.
Далее функция вызывает GetLastFilledPendingOrderData() для извлечения данных по последнему исполненному отложенному ордеру. Если всё прошло успешно, функция извлекает поле magic из структуры lastFilledPendingOrderInfo и присваивает его указанной переменной lastFilledPendingOrderMagic. Затем она возвращает true для информирования об успехе.
Если извлечение не удается, функция завершает работу без обновления указанной переменной и возвращает false, чтобы проинформировать о неудаче.
Ниже представлена полная реализация функции LastFilledPendingOrderMagic().
bool LastFilledPendingOrderMagic(ulong &lastFilledPendingOrderMagic) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderMagic = lastFilledPendingOrderInfo.magic; return(true); } return(false); }
Функция причины последнего исполненного отложенного ордера
Функция LastFilledPendingOrderReason() извлекает причину последнего исполненного отложенного ордера и сохраняет его в указанной переменной lastFilledPendingOrderReason. Эта функция полезна для отслеживания конкретной причины выполнения ордера. Она позволяет определить, был ли ордер выполнен из мобильного терминала, веб-терминала или десктопного приложения, был ли он активирован советником, скриптом, стоп-лоссом, тейк-профитом или стоп-аутом. Эта информация имеет решающее значение для анализа и отладки, предоставляя информацию о том, как и почему был выполнен ордер.
Функция принимает указанную переменную lastFilledPendingOrderReason в качестве входного параметра для хранения причины. Начинаем с объявления переменной PendingOrderData с именем lastFilledPendingOrderInfo, которая используется для временного хранения сведений о последнем исполненном отложенном ордере.
Далее функция вызывает GetLastFilledPendingOrderData() для извлечения данных по последнему исполненному отложенному ордеру. Если всё прошло успешно, функция извлекает поле причины из структуры lastFilledPendingOrderInfo и присваивает его указанной переменной lastFilledPendingOrderReason. Затем она возвращает true для информирования об успехе.
Если извлечение не удается, функция завершает работу без обновления указанной переменной и возвращает false, чтобы проинформировать о неудаче.
Ниже представлена полная реализация функции LastFilledPendingOrderReason().
bool LastFilledPendingOrderReason(ENUM_ORDER_REASON &lastFilledPendingOrderReason) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderReason = lastFilledPendingOrderInfo.reason; return(true); } return(false); }
Функция типа исполнения последнего исполненного отложенного ордера
Функция LastFilledPendingOrderTypeFilling() извлекает тип исполнения последнего исполненного отложенного ордера и сохраняет его в указанной переменной lastFilledPendingOrderTypeFilling. Эта функция важна для определения того, как был исполнен отложенный ордер - все/ничего (Fill or Kill), все/частично (Immediate or Cancel), пассивная (Book or Cancel) или Вернуть (Return).
Функция принимает указанную переменную lastFilledPendingOrderTypeFilling в качестве входного параметра для хранения типа исполнения. Начинаем с объявления переменной PendingOrderData, lastFilledPendingOrderInfo, которая используется для временного хранения сведений о последнем исполненном отложенном ордере.
Далее функция вызывает GetLastFilledPendingOrderData() для извлечения данных по последнему исполненному отложенному ордеру. Если всё прошло успешно, функция извлекает поле typeFilling из структуры lastFilledPendingOrderInfo и присваивает его указанной переменной lastFilledPendingOrderTypeFilling. Затем она возвращает true для информирования об успехе.
Если извлечение не удается, функция завершает работу без обновления указанной переменной и возвращает false, чтобы проинформировать о неудаче.
Ниже представлена полная реализация функции LastFilledPendingOrderTypeFilling().
bool LastFilledPendingOrderTypeFilling(ENUM_ORDER_TYPE_FILLING &lastFilledPendingOrderTypeFilling) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderTypeFilling = lastFilledPendingOrderInfo.typeFilling; return(true); } return(false); }
Функция типа времени последнего исполненного отложенного ордера
Функция LastFilledPendingOrderTypeTime() извлекает тип времени последнего исполненного отложенного ордера и сохраняет его в указанной переменной lastFilledPendingOrderTypeTime. Эта функция помогает определить срок действия отложенного ордера.
Функция принимает указанную переменную в качестве входного параметра для хранения типа времени. Начинаем с объявления переменной PendingOrderData, lastFilledPendingOrderInfo, которая используется для временного хранения сведений о последнем исполненном отложенном ордере.
Далее функция вызывает GetLastFilledPendingOrderData() для извлечения данных по последнему исполненному отложенному ордеру. Если данные успешно извлечены, функция извлекает поле typeTime из структуры lastFilledPendingOrderInfo и присваивает его указанной переменной lastFilledPendingOrderTypeTime. Затем она возвращает true для информирования об успехе.
Если извлечение не удается, функция завершает работу без обновления указанной переменной и возвращает false, чтобы проинформировать о неудаче.
Ниже представлена полная реализация функции LastFilledPendingOrderTypeTime().
bool LastFilledPendingOrderTypeTime(datetime &lastFilledPendingOrderTypeTime) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderTypeTime = lastFilledPendingOrderInfo.typeTime; return(true); } return(false); }
Функция комментария к последнему исполненному отложенному ордеру
Функция LastFilledPendingOrderComment() извлекает комментарий, связанный с последним исполненным отложенным ордером, и сохраняет его в переменной lastFilledPendingOrderComment. Эта функция полезна для фиксации любых дополнительных заметок, которые могли быть добавлены к отложенному ордеру.
Функция принимает указанную переменную lastFilledPendingOrderComment в качестве входного параметра для хранения комментария. Начинаем с объявления переменной PendingOrderData, lastFilledPendingOrderInfo, которая используется для временного хранения сведений о последнем исполненном отложенном ордере.
Далее функция вызывает GetLastFilledPendingOrderData() для извлечения данных по последнему исполненному отложенному ордеру. Если данные успешно извлечены, функция извлекает поле комментария из структуры lastFilledPendingOrderInfo и присваивает его указанной переменной lastFilledPendingOrderComment. Затем она возвращает true для информирования об успехе.
Если извлечение не удается, функция завершает работу без обновления указанной переменной и возвращает false, чтобы проинформировать о неудаче.
Ниже представлена полная реализация функции LastFilledPendingOrderComment().
bool LastFilledPendingOrderComment(string &lastFilledPendingOrderComment) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderComment = lastFilledPendingOrderInfo.comment; return(true); } return(false); }
Заключение
Мы успешно разработали экспортируемые функции для извлечения и сохранения свойств последнего исполненного отложенного ордера, что повышает производительность EX5-библиотеки History Management. Эти новые возможности обеспечивают бесперебойный доступ к критически важным данным об исполненных отложенных ордерах, позволяя проводить более простой и эффективный анализ торговли и оптимизацию стратегии, одновременно усиливая способность библиотеки обрабатывать важные операции с историей отложенных ордеров.
В следующей статье мы расширим библиотеку, добавив функции для извлечения и хранения свойств последнего отмененного отложенного ордера. Это дополнение расширит возможности библиотеки по управлению и анализу истории торговли, предложив еще более ценные инструменты для вашего торгового инструментария.
Обновленный исходный код HistoryManager.mq5 со всеми имеющимися на данный момент функциями можно скачать ниже. Спасибо за внимание! До встречи в следующей статье!
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/16742
Предупреждение: все права на данные материалы принадлежат MetaQuotes Ltd. Полная или частичная перепечатка запрещена.
Данная статья написана пользователем сайта и отражает его личную точку зрения. Компания MetaQuotes Ltd не несет ответственности за достоверность представленной информации, а также за возможные последствия использования описанных решений, стратегий или рекомендаций.




- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования