MQL5 交易工具包(第 6 部分):使用最新成交的挂单函数扩展历史管理 EX5 库
概述
在您的交易逻辑取决于最后一个已完成挂单的类型的情况下,访问最近完成的挂单的详细信息尤其有价值。例如,您可以利用这些数据,根据最近成交的订单是买入限价、卖出止损、买入止损、卖出限价、买入止损限价还是卖出止损限价来完善您的交易策略。了解订单类型可以提供对市场状况的洞察,并为调整您的方法提供信息,例如调整进入或退出点。
这些信息对于收集和分析历史交易数据以优化您的交易系统或收集有关您的经纪商在触发和激活挂单时填充或执行挂单的速度的数据也至关重要。通过检查滑点、从下单到执行的时间以及订单完成的条件等细节,您可以识别策略中的模式和需要改进的领域。此外,这些数据使您能够监控执行质量,确保您的订单按预期完成,并帮助您解决交易操作中潜在的效率低下问题。随着时间的推移,这种详细的分析可以增强决策,并导致更有效和更稳健的交易策略。
此历史管理 EX5 库简化了检索最近填写的挂单的详细信息和属性的过程。通过调用单个函数,您可以访问这些数据,而无需额外指定交易历史搜索的时间段 —— EX5 库会为您无缝管理这些数据。您需要做的就是为相关的历史查询函数提供一个变量,以存储特定的挂单属性作为输入。然后,该函数会将检索到的详细信息保存到您提供的引用变量中。
如果函数成功检索到请求的数据,则返回 true ,表示成功。如果指定的挂单数据不可用,则返回 false 。这种简化的方法消除了不必要的复杂性,使您能够专注于分析或整合检索到的数据到您的交易策略中,确保交易操作的效率和准确性。
首先,我们将打开上一篇文章中的 HistoryManager.mq5 文件,我们在其中创建了仓位历史记录检索函数,然后开始创建 GetLastFilledPendingOrderData() 函数。确保您已下载 HistoryManager.mq5 源文件,您可以在上一篇文章的末尾找到该文件。我们将继续在 LastClosedPositionDuration() 函数下方添加新代码,这是我们之前停止的地方。
获取最新成交挂单数据函数
GetLastFilledPendingOrderData() 函数负责从可用的交易历史记录中检索最后成交的挂单的属性。它系统地检查历史数据中是否有任何已成交的挂单,如果发现这样的订单,它会将相关数据保存在引用的 getLastFilledPendingOrderData 变量中。
此函数与 FetchHistoryByCriteria() 函数协同工作以获取必要的交易历史数据。它确保只考虑已成交的挂单,并使用最后填写的挂单数据更新提供的结构。
让我们首先定义 GetLastFilledPendingOrderData() 函数签名。由于该函数被标记为 export ,因此任何导入已编译 EX5 库的 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。 对于需要分析订单执行类型或跟踪特定订单类型表现的应用程序来说,此函数至关重要。
让我们首先定义函数签名。由于该函数被标记为 export,因此可以在导入 EX5 库的任何 MQL5 源文件中使用它。该函数接受引用的 lastFilledPendingOrderType 变量作为输入,其中将存储最后成交的挂单的类型。
bool LastFilledPendingOrderType(ENUM_ORDER_TYPE &lastFilledPendingOrderType) export { //-- Function logic will be implemented here }
我们首先声明一个名为 lastFilledPendingOrderInfo 的 PendingOrderData 类型的变量。该变量将临时存储最近成交的挂单的详细信息。
PendingOrderData lastFilledPendingOrderInfo;
接下来,我们将使用 GetLastFilledPendingOrderData() 函数来检索最后成交的挂单的详细信息。如果操作成功,我们将从 lastFilledPendingOrderInfo 结构中提取 type 字段,将其存储在引用的 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 中提取交易品种,将其存储在 lastFilledPendingOrderSymbol 中,并返回 true 。如果检索失败,我们将返回 false 而不更新引用的变量。
以下是 LastFilledPendingOrderSymbol() 函数的实现。
bool LastFilledPendingOrderSymbol(string &lastFilledPendingOrderSymbol) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderSymbol = lastFilledPendingOrderInfo.symbol; return(true); } return(false); }
最后成交的挂单单号函数
LastFilledPendingOrderTicket() 函数检索最近成交的挂单的单号并将其存储在引用的 lastFilledPendingOrderTicket 变量中。它接受 lastFilledPendingOrderTicket 变量作为输入,其中将保存单号。
我们首先定义一个名为 lastFilledPendingOrderInfo 的 PendingOrderData 变量,该变量作为最近成交的挂单详细信息的临时容器。接下来,我们调用 GetLastFilledPendingOrderData() 函数来获取订单信息。检索成功后,我们从 lastFilledPendingOrderInfo 中提取 ticket,将其保存到 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() 函数来检索订单详细信息。如果成功,我们从 lastFilledPendingOrderInfo 中提取 priceOpen ,将其存储在 lastFilledPendingOrderPriceOpen 中,并返回 true 。如果检索失败,我们将返回 false 而不更新引用的变量。
以下是 LastFilledPendingOrderPriceOpen() 函数的实现。
bool LastFilledPendingOrderPriceOpen(double &lastFilledPendingOrderPriceOpen) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderPriceOpen = lastFilledPendingOrderInfo.priceOpen; return(true); } return(false); }
最后成交挂单止损价函数
LastFilledPendingOrderSlPrice() 函数检索最近填写的挂单的止损价格并将其存储在引用的 lastFilledPendingOrderSlPrice 变量中。它接受 lastFilledPendingOrderSlPrice 变量作为输入来存储检索到的止损价格。此功能对于需要跟踪或分析最近完成的挂单的止损水平的场景特别有用。
让我们首先声明一个名为 lastFilledPendingOrderInfo 的 PendingOrderData 变量来临时保存最后成交的挂单的详细信息。然后我们使用 GetLastFilledPendingOrderData() 函数来获取订单的详细信息。
如果数据检索成功,则从 lastFilledPendingOrderInfo 中提取 slPrice 字段并将其保存在引用的 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() 函数来检索订单详细信息。如果检索成功,我们从 lastFilledPendingOrderInfo 中提取 tpPrice ,将其存储在 lastFilledPendingOrderTpPrice 变量中,并返回 true 。如果检索失败,我们将返回 false 而不更新引用的变量。
这是 LastFilledPendingOrderTpPrice() 函数的实现。
bool LastFilledPendingOrderTpPrice(double &lastFilledPendingOrderTpPrice) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderTpPrice = lastFilledPendingOrderInfo.tpPrice; return(true); } return(false); }
最后成交的挂单止损点数函数
LastFilledPendingOrderSlPips() 函数检索最近填写的挂单的止损点数值并将其存储在引用的 lastFilledPendingOrderSlPips 变量中。此函数对于分析与已执行挂单相关的风险参数至关重要。
首先,我们声明一个名为 lastFilledPendingOrderInfo 的 PendingOrderData 变量。此变量将暂时保存最后成交的挂单的详细信息。然后我们使用 GetLastFilledPendingOrderData() 函数来获取订单详细信息。如果操作成功,我们从 lastFilledPendingOrderInfo 结构中提取 slPips 字段并将其存储在引用的 lastFilledPendingOrderSlPips 变量中。然后该函数返回 true 以表示成功。如果检索过程失败,引用的变量保持不变,并且函数返回 false 以表示未找到数据。
以下是 LastFilledPendingOrderSlPips() 函数的完整实现,
bool LastFilledPendingOrderSlPips(int &lastFilledPendingOrderSlPips) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderSlPips = lastFilledPendingOrderInfo.slPips; return(true); } return(false); }
最后成交挂单止盈点数函数
LastFilledPendingOrderTpPips() 函数检索最近填写的挂单的止盈点数值,并将其保存在引用的 lastFilledPendingOrderTpPips 变量中。此函数对于跟踪已执行挂单的止盈水平很有价值,并且可用于性能分析或策略调整。
为了实现这一点,我们首先声明一个名为 lastFilledPendingOrderInfo 的 PendingOrderData 变量。此变量用于临时保存最近填成交的挂单的详细信息。然后我们调用 GetLastFilledPendingOrderData() 函数来检索订单的详细信息。如果检索成功,则从 lastFilledPendingOrderInfo中提取 tpPips 值并将其存储在 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 作为输入。该变量将保存函数执行后最后成交的挂单的设置时间。为了实现这一点,该函数首先声明一个名为 lastFilledPendingOrderInfo 的 PendingOrderData 变量。此变量用于临时存储最后成交的挂单的详细信息。
接下来,调用 GetLastFilledPendingOrderData() 函数来检索最后成交的挂单的详细信息。如果检索成功,则从 lastFilledPendingOrderInfo 结构中提取 timeSetup 字段并将其存储在 lastFilledPendingOrderTimeSetup 变量中。然后该函数返回 true 以表示成功。如果检索失败,函数将返回 false 而不更新引用的变量。
这是 LastFilledPendingOrderTimeSetup() 函数的完整实现。
bool LastFilledPendingOrderTimeSetup(datetime &lastFilledPendingOrderTimeSetup) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderTimeSetup = lastFilledPendingOrderInfo.timeSetup; return(true); } return(false); }
最后成交挂单时间完成函数
LastFilledPendingOrderTimeDone() 函数检索最近成交的挂单被触发的时间(完成时间)并将其保存在引用的 lastFilledPendingOrderTimeDone 变量中。此函数对于跟踪已完成挂单的执行时间至关重要,可让您分析订单时间或创建详细报告。
该函数以引用的 lastFilledPendingOrderTimeDone 变量作为输入来存储完成时间。它首先声明一个名为 lastFilledPendingOrderInfo 的 PendingOrderData 变量,用于临时存储最近成交的挂单的详细信息。
接下来,该函数调用 GetLastFilledPendingOrderData() 来检索最后填写的挂单的数据。如果操作成功,该函数将从 lastFilledPendingOrderInfo 结构中提取 timeDone 字段并将其保存在引用的 lastFilledPendingOrderTimeDone 变量中。然后它返回 true 以表示成功。
如果检索失败,该函数不会更新引用的变量,而是返回 false 来表示未找到有效数据。
这是 LastFilledPendingOrderTimeDone() 函数的完整实现。
bool LastFilledPendingOrderTimeDone(datetime &lastFilledPendingOrderTimeDone) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderTimeDone = lastFilledPendingOrderInfo.timeDone; return(true); } return(false); }
最后成交挂单到期时间函数
LastFilledPendingOrderExpirationTime() 函数检索最近成交的挂单的到期时间,并将其保存在引用的 lastFilledPendingOrderExpirationTime 变量中。此功能对于管理和分析挂单的生命周期很有用,特别是在监控其有效期时。
该函数接受引用的 lastFilledPendingOrderExpirationTime 变量作为输入来存储到期时间。首先声明一个名为 lastFilledPendingOrderInfo 的 PendingOrderData 变量,该变量作为最近成交的挂单详细信息的临时容器。
然后,该函数调用 GetLastFilledPendingOrderData() 来获取最后成交的挂单的数据。如果操作成功,它将从 lastFilledPendingOrderInfo 结构中提取 expirationTime 字段并将其保存在引用的 lastFilledPendingOrderExpirationTime 变量中。返回 true 表示成功检索数据。
如果检索失败,该函数将保持引用变量不变并返回 false 以表示缺少有效数据。
这是 LastFilledPendingOrderExpirationTime() 函数的完整实现。
bool LastFilledPendingOrderExpirationTime(datetime &lastFilledPendingOrderExpirationTime) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderExpirationTime = lastFilledPendingOrderInfo.expirationTime; return(true); } return(false); }
最后成交的挂单仓位 ID 函数
LastFilledPendingOrderPositionId() 函数检索最近成交的挂单的仓位 ID ,并将其保存在引用的 lastFilledPendingOrderPositionId 变量中。此函数对于将挂单与其对应的仓位关联起来特别有用,可以更好地跟踪和管理交易活动。
该函数以引用的 lastFilledPendingOrderPositionId 变量作为输入来存储仓位 ID 。首先声明一个名为 lastFilledPendingOrderInfo 的 PendingOrderData 变量,该变量作为最近成交的挂单详细信息的临时容器。
接下来,该函数调用 GetLastFilledPendingOrderData() 来获取最后成交的挂单的数据。如果数据检索成功,它会从 lastFilledPendingOrderInfo 结构中提取 positionId 字段并将其分配给引用的 lastFilledPendingOrderPositionId 变量。然后返回 true 以表明操作成功。
如果数据检索失败,该函数不会修改引用的变量并返回 false 以表示失败。
以下是 LastFilledPendingOrderPositionId() 函数的完整实现。
bool LastFilledPendingOrderPositionId(ulong &lastFilledPendingOrderPositionId) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderPositionId = lastFilledPendingOrderInfo.positionId; return(true); } return(false); }
最后成交的挂单幻数函数
LastFilledPendingOrderMagic() 函数检索最近填充的挂单的幻数并将其保存在引用的 lastFilledPendingOrderMagic 变量中。此函数对于识别与特定订单相关的唯一标识符至关重要,尤其是在管理同一交易账户内的多个策略或系统时。
该函数以引用的 lastFilledPendingOrderMagic 变量作为输入来存储幻数。首先声明一个名为 lastFilledPendingOrderInfo 的 PendingOrderData 变量,该变量临时保存最近填写的幻数的详细信息。
接下来,该函数调用 GetLastFilledPendingOrderData() 来检索最后填写的挂单的数据。如果数据检索成功,它会从 lastFilledPendingOrderInfo 结构中提取 magic 字段并将其分配给引用的 lastFilledPendingOrderMagic 变量。然后返回 true 以表明操作成功。
如果数据检索失败,函数不会修改引用的变量并返回 false 以指示失败。
这是 LastFilledPendingOrderMagic() 函数的完整实现。
bool LastFilledPendingOrderMagic(ulong &lastFilledPendingOrderMagic) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderMagic = lastFilledPendingOrderInfo.magic; return(true); } return(false); }
最后成交挂单原因函数
LastFilledPendingOrderReason() 函数检索最近填写的挂单的原因并将其存储在引用的 lastFilledPendingOrderReason 变量中。此功能对于追踪订单执行背后的具体原因很有用。它有助于识别订单是从移动端、网页端或桌面应用程序执行的,由 EA 交易或脚本触发的,还是由止损、止盈或强制平仓事件激活的。这些信息对于分析和调试至关重要,可以深入了解订单的完成方式和原因。
该函数以引用的 lastFilledPendingOrderReason 变量作为输入来存储原因。首先声明一个名为 lastFilledPendingOrderInfo 的 PendingOrderData 变量,该变量临时保存最后填写的挂单的详细信息。
接下来,该函数调用 GetLastFilledPendingOrderData() 来检索最后填写的挂单的数据。如果数据检索成功,它会从 lastFilledPendingOrderInfo 结构中提取 reason 字段并将其分配给引用的 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 变量中。此函数对于确定挂单如何执行非常重要,可以通过全部执行或取消、立即执行或取消、被动(预订或取消)或返回政策执行。
该函数以引用的 lastFilledPendingOrderTypeFilling 变量作为输入来存储成交类型。首先声明一个 PendingOrderData 变量 lastFilledPendingOrderInfo ,该变量临时保存最后成交的挂单的详细信息。
接下来,该函数调用 GetLastFilledPendingOrderData() 来检索最后填写的挂单的数据。如果数据检索成功,它会从 lastFilledPendingOrderInfo 结构中提取 typeFilling 字段并将其分配给引用的 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 变量中。此函数有助于确定挂单的有效期。
该函数以引用的 lastFilledPendingOrderTypeTime 变量作为输入来存储时间类型。它首先声明一个 PendingOrderData 变量 lastFilledPendingOrderInfo 来临时保存最后成交的挂单的详细信息。
然后,该函数调用 GetLastFilledPendingOrderData() 来检索最后成交的挂单的数据。如果数据检索成功,它会从 lastFilledPendingOrderInfo 结构中提取 typeTime 字段并将其分配给引用的 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 结构中提取 comment 字段并将其分配给引用的 lastFilledPendingOrderComment 变量。然后该函数返回 true 以表明操作成功。
如果数据检索失败,函数不会修改引用的变量并返回 false 以指示失败。
以下是 LastFilledPendingOrderComment() 函数的完整实现。
bool LastFilledPendingOrderComment(string &lastFilledPendingOrderComment) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderComment = lastFilledPendingOrderInfo.comment; return(true); } return(false); }
结论
我们已成功开发可导出的函数来检索和存储最近成交的挂单的属性,增强了历史管理 EX5 库的资源丰富性。这些新函数可以无缝访问有关已完成挂单的关键数据,从而实现更直接、更有效的交易分析和策略优化,同时增强了库处理基本挂单历史操作的能力。
在下一篇文章中,我们将通过添加函数来获取和存储最近取消的挂单的属性,从而进一步扩展该库。这一新增功能将增强该库管理和分析交易历史的能力,为您的交易工具包提供更有价值的工具。
更新后的 HistoryManager.mq5 库源代码(包括本文和之前文章中创建的所有函数)可在本文末尾找到。感谢您的关注,我期待着在下一篇文章中与您继续这段旅程。
本文由MetaQuotes Ltd译自英文
原文地址: https://www.mql5.com/en/articles/16742
注意: MetaQuotes Ltd.将保留所有关于这些材料的权利。全部或部分复制或者转载这些材料将被禁止。
本文由网站的一位用户撰写,反映了他们的个人观点。MetaQuotes Ltd 不对所提供信息的准确性负责,也不对因使用所述解决方案、策略或建议而产生的任何后果负责。
在 MQL5 中构建自优化EA(第六部分):自适应交易规则(二)
财经建模中合成数据的生成式对抗网络(GAN)(第 2 部分):创建测试合成品种
日内交易:拉里·康纳斯(Larry Connors)RSI2均值回归策略
MQL5交易策略自动化(第十二部分):实现缓解型订单块(MOB)策略