English Русский Español Deutsch 日本語 Português
preview
MQL5 交易工具包(第 7 部分):使用最近取消的挂单函数扩展历史管理 EX5 库

MQL5 交易工具包(第 7 部分):使用最近取消的挂单函数扩展历史管理 EX5 库

MetaTrader 5示例 |
199 0
Wanateki Solutions LTD
Kelvin Muturi Muigua

概述

在本系列文章中,我们投入了大量精力来构建一套全面的交易 EX5 库。这些库旨在简化 MQL5 应用程序的开发过程,大大减少处理交易操作和管理订单、交易和仓位历史数据所需的时间和精力。通过提供结构良好和直观的函数,这些库简化了复杂的任务,使开发人员能够精确高效地无缝处理交易历史。

在本文中,我们将完成历史管理 EX5 库中最后一个模块的开发,该模块专门用于处理与最近取消的挂单相关的属性的检索和存储。该模块解决了 MQL5 语言的一个关键限制,即缺乏直接的单行函数来访问和管理此类历史数据。通过弥合这一差距,我们的库为开发人员提供了一个简化的解决方案,可以有效地处理已取消的挂单信息。

该模块的重点是提供一种简单而有效的方法来检索和存储已取消挂单的关键详细信息,例如其交易品种、开盘价、基于点的止损、止盈、基于时间的持续时间和其他相关属性。通过将此功能封装到易于使用的函数中,该库允许开发人员以最小的努力和复杂性访问所需的数据。这使得它成为任何希望构建依赖于精确和可访问的交易历史数据的 MQL5 应用程序的人不可或缺的工具。对于那些对分析交易表现感兴趣的人来说,这个模块简化了过程,使您能够专注于更大的图景。

首先,打开上一篇文章中的 HistoryManager.mq5 文件,我们在其中开发了用于处理最近成交的挂单的函数。在本节中,我们将开始实现 GetLastCanceledPendingOrderData() 函数,该函数是处理已取消挂单的核心。在继续之前,请确保您已下载 HistoryManager.mq5 源文件,该文件附在上一篇文章的末尾

文件准备好后,找到我们在上一篇文章中结束的部分。具体来说,我们将继续在 LastFilledPendingOrderComment() 函数下方添加新代码。这种布局确保了新功能在逻辑上与相关函数一起组织,使库在未来需要时更容易导航和扩展。


主要内容

  1. 获取最后取消的挂单数据
  2. 获取最后取消的挂单类型
  3. 获取最后取消的挂单交易品种
  4. 获取最后取消的挂单单号
  5. 获取最后取消的挂单价格
  6. 获取最后取消的挂单止损价格
  7. 获取最后取消的挂单止盈价格
  8. 获取最后取消的挂单止损点数
  9. 获取最后取消的挂单止盈点数
  10. 获取最后取消的挂单时间设置
  11. 获取最后取消的挂单完成时间
  12. 获取最后取消的挂单到期时间
  13. 获取最后取消的挂单仓位 ID
  14. 获取最后取消的挂单幻数
  15. 获取最后取消待挂单的原因
  16. 获取最后取消的挂单成交类型
  17. 获取最后取消的挂单类型时间
  18. 获取最后取消的挂单注释
  19. 结论



获取最后取消的挂单数据函数

GetLastCanceledPendingOrderData() 函数检索最近取消的挂单的详细信息,并将此信息保存在指定的 getLastCanceledPendingOrderData 引用中。它依靠 FetchHistoryByCriteria() 函数来访问历史交易数据,通过分析相关数据集来识别最后取消的挂单。如果没有找到这样的数据,该函数将记录一条错误消息并返回 false 。成功时,它会将检索到的信息存储在提供的引用中并返回 true

让我们从创建函数定义或签名开始。GetLastCanceledPendingOrderData() 函数应该可供导入 MQL5 程序供外部使用,这就是我们将其定义为导出的原因。

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

我们将继续尝试使用带有 GET_PENDING_ORDERS_HISTORY_DATA 参数的 FetchHistoryByCriteria() 函数来获取挂单的历史记录。这确保该函数可以访问已取消挂单所需的数据。

如果 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() 来获取所需的订单信息。

如果检索成功,则从 lastCanceledPendingOrderInfo 中提取 type 字段并将其分配给 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() ,检索最后取消的挂单的详细信息。如果检索成功,则将获取的数据中的 symbol 字段分配给引用的 lastCanceledPendingOrderSymbol 变量,并且函数返回 true 以确认操作成功。

如果数据检索失败(例如没有相关的订单历史记录),该函数将保持引用变量不变并返回 false 以指示失败。

以下是 LastCanceledPendingOrderSymbol() 函数的完整实现。

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


最后取消的挂单单号函数

LastCanceledPendingOrderTicket() 函数检索最近取消的挂单的单号并将其存储在引用的 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() 函数,将相关的订单详细信息填充到此变量中。如果检索成功,则提取设置时间值并将其存储在 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() ,提取最近取消的挂单的详细信息。如果检索操作成功,则将获取的数据的时间字段分配给 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);
  }


最后取消的挂单仓位 ID 函数

LastCanceledPendingOrderPositionId() 函数提取最后取消的挂单的仓位 ID ,并使用该值更新引用的 lastCanceledPendingOrderPositionId 变量。为了访问必要的数据,它调用 GetLastCanceledPendingOrderData() 函数。

如果操作成功,则仓位 ID被放入引用变量中,并且函数返回 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 表示订单是由 EA 交易下达的, 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() 函数来收集必要的订单详细信息来实现这一点。

完成类型提供了有关如何执行订单的重要信息。如果类型为 “全部成交或取消(FOK) ”,则订单必须按照要求的价格全部成交,如果不可能,则订单被取消。对于 “立即执行或取消 (IOC) ”,订单将按照要求的价格立即执行可用数量,并且任何未完成的部分将被丢弃。“返回”类型允许在全部交易量不可用时部分执行订单,剩余未执行的交易量将转换为限价订单。此限价订单在市场上保持有效,直到被手动或 EA 交易完成取消

如果数据检索操作成功,则完成类型存储在提供的变量中,并且函数返回 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() 函数来检索必要的订单详细信息。

订单类型时间表示订单的有效期。与订单相关的时间类型有几种:有效至取消 (GTC) ,订单保持有效直至手动取消有效至当前交易日,订单在交易日结束时到期有效至到期,订单在特定日期或时间后到期有效至指定日,订单有效至指定日期的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 。在下一篇文章中,我们将通过提供完整的实现文档和实际示例来总结历史管理库,以指导您有效地使用此 EX5 库。感谢您的关注,我期待着在我们将这个项目推向最后阶段时再次与您联系。

本文由MetaQuotes Ltd译自英文
原文地址: https://www.mql5.com/en/articles/16906

附加的文件 |
HistoryManager.mq5 (81.42 KB)
HistoryManager.ex5 (33.63 KB)
从基础到中级:模板和类型名称(四) 从基础到中级:模板和类型名称(四)
在本文中,我们将非常仔细地研究如何解决上一篇文章末尾提出的问题。尝试创建这种类型的模板,以便能够创建数据联合的模板。
从基础到中级:模板和类型名称(三) 从基础到中级:模板和类型名称(三)
在本文中,我们将讨论该主题的第一部分,这对初学者来说并不容易理解。为了避免更加困惑并正确解释这个话题,我们将把解释分为几个阶段。我们将把这篇文章用于第一阶段。然而,尽管在本文末尾,我们似乎已经陷入僵局,但事实上,我们将朝着另一种情况迈出一步,这将在下一篇文章中得到更好的理解。
在 MQL5 中创建交易管理面板(第九部分):代码组织(三):通信模块 在 MQL5 中创建交易管理面板(第九部分):代码组织(三):通信模块
欢迎参与本次深度讨论,我们将揭示 MQL5 界面设计的最新进展,着重介绍重新设计的通信面板,并继续我们关于使用模块化原则构建新管理面板的系列文章。我们将逐步开发 CommunicationsDialog 类,并详细解释如何从 Dialog 类进行继承。此外,在我们的开发过程中,还将利用数组(arrays)和 ListView 类。获取可行的方案,以提升您的 MQL5 开发技能——请阅读本文,并在评论区加入讨论!
通过配对交易中的均值回归进行统计套利:用数学战胜市场 通过配对交易中的均值回归进行统计套利:用数学战胜市场
本文描述了投资组合层面的统计套利基础知识。其目标是帮助没有深厚数学知识的读者理解统计套利的原则,并提出一个概念性的起点框架。文章包含一个可运行的智能交易系统(EA)、一些关于其一年回测的笔记,以及用于复现实验的相应回测配置设置(.ini 文件)。