使用交易工具及智能交易系统时,订单管理是一项基本任务。在某些情况下,特别是在触发某项风险管理规则时,您可能想要关闭所有未平仓订单。在本文中,我们将看到用于执行此操作的 MQL4 代码,而且您还可以下载一项免费的 MT4 版“关闭所有订单”脚本——该脚本可以自动关闭所有未平仓订单。
MQL4 关闭所有订单
编写智能交易系统时,我们都应该采取安全措施以避免自己遭受巨大的损失。风险管理是智能交易系统的基石。因此,有必要设置相关的规则,以便您的智能交易系统在满足某些条件时可以关闭所有订单。
一些可能会触发关闭所有订单操作的示例包括:
一组订单触及止盈位。
未平仓订单的累计亏损导致资产净值或保证金低于特定阈值。
即将发布的报告可能会对价格产生重大影响。
意外事件导致汇率突然变动。
以上只是一部分可能会促使您立即关闭所有未结订单的情况。您可以通过一段简单的 MQL4 代码来实现这一点。
您可能已经读过我们的 OrderClose 函数指南;该函数可以关闭单笔订单。接下来,我们想展示该如何使用它来关闭所有具有自定义函数的订单。
以下MQL4 版“关闭所有订单”函数可以在同一次运行中关闭所有未平仓订单。
void CloseOrders()
{
// 在关闭订单前更新汇率。
RefreshRates();
// 在终端登录并显示订单总数,包括当前订单及历史订单。
Print(OrdersTotal());
// 开始一次循环来扫描所有订单。
// 循环从最后一笔订单开始,倒退进行;否则,它会跳过一些订单。
for (int i = (OrdersTotal() - 1); i >= 0; i--)
{
// 如果无法选择该订单,则显示并记录错误。
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false)
{
Print("错误 - 无法选择订单 - ", GetLastError());
break;
}
// 创建所需的变量。
// 结果变量 - 用于检查操作是否成功。
bool res = false;
// 允许滑点 - 当前价格与收盘价之间的差值。
int Slippage = 0;
// 订单工具的买入及卖出价格。
double BidPrice = MarketInfo(OrderSymbol(), MODE_BID);
double AskPrice = MarketInfo(OrderSymbol(), MODE_ASK);
// 根据订单类型使用正确的价格关闭订单。
if (OrderType() == OP_BUY)
{
res = OrderClose(OrderTicket(), OrderLots(), BidPrice, Slippage);
}
else if (OrderType() == OP_SELL)
{
res = OrderClose(OrderTicket(), OrderLots(), AskPrice, Slippage);
}
// 如果发生错误,则记录日志。
if (res == false) Print("错误 - 无法关闭订单 - ", OrderTicket(), " - ", GetLastError());
}
}
MQL4 版关闭所有订单函数的逻辑
函数逻辑如下:
更新价格。
使用循环扫描所有订单。
如果订单未了结,则获取详细信息。
用正确的价格关闭订单。
检查每笔订单的操作是否成功,若不成功则返回错误。
潜在的提升
这项函数并不复杂,可以通过添加额外的过滤器来改进。例如,您可能希望应用以下过滤器:
仅关闭盈利订单。
仅关闭亏损订单。
仅关闭特定货币对的订单。
仅关闭设有特定幻数的订单。
其他过滤器
以上函数在我们的多款智能交易系统中均有使用。
关闭所有订单脚本
如果您想关闭 MT4 中的所有订单,除非您使用外部工具,否则您需要手动操作。
不过,MT4 不允许同时选择所有未结订单并对它们一次性平仓。
但您有一个解决方案!您可以使用上述函数作为模板来编写自己的脚本,或者使用现成的工具。
您可以将下文中的脚本复制到您的 MT4 平台上,并且仅需几次点击即可关闭所有订单。
下载
下载“关闭所有订单”脚本
MT4 版关闭所有订单脚本的安装
如要安装这款脚本,请按照以下说明操作:
下载脚本的存档文件。
打开 MetaTrader 4 的数据文件夹(通过文件→打开数据文件夹)。
打开 MQL4 文件夹。
将存档中的所有文件夹直接复制到 MQL4 文件夹。
重启 MetaTrader 4 或用右键点击平台上的导航子窗口并选择刷新,以刷新脚本列表。
您也可以查阅一份更详细的说明,以了解如何完成安装操作。
在执行此脚本时,请确保在常规选项卡中启用了允许实盘交易,并且还要在平台的菜单工具→选项→智能交易系统中进行设置。否则,它将无法关闭任何订单。
如何在 MT4 中为脚本启用实盘交易?
结语
以上代码通过一个基础示例解释了如何使用订单关闭脚本。我们用于 MT4 的免费“关闭所有订单”脚本提供了一项现成的工具,可用于关闭经过筛选的未结订单。此外,它还提供了有关 MQL4 源代码的更高级示例,可用于学习、修改、升级以及用于其他程序。有了它,您可以轻松创建自己的脚本,并在 MetaTrader 中根据自定义条件及过滤器关闭订单
MT4 版关闭所有订单脚本
标题:MT4 版关闭所有订单脚本,收录于搜汇网, 本文禁止任何商业性转载、分享,如需转载需联系小编并注明来源,部分内容整理自网络,如有侵权请联系删除。