在此前的讨论中,我们一直采用“魔术号”作为订单的唯一标识符,用以区分某个特定EA所发出的订单。然而,如果您的EA需要同时管理多个订单,并且您希望对这些订单进行差异化处理(例如,应用不同的管理策略),那么订单注释可以作为一种有效的辅助标识手段。
举个例子,假设您的EA需要同时发出两种不同类型的订单。您希望能独立地修改或平仓这两类订单。要实现这一点,您可以在EA中使用两个独立的 OrderSend()
函数来分别创建这两类订单,并在调用时为它们分别赋予不同的订单注释内容。之后,当您在代码中使用循环来筛选订单,以便进行修改或平仓操作时,就可以将 OrderComment()
函数返回的注释内容作为筛选条件之一。
string OrderComment1 = "策略A的订单"; // 为第一类订单定义注释
string OrderComment2 = "策略B的订单"; // 为第二类订单定义注释
// 下单操作
int Ticket1 = OrderSend(Symbol(), OP_BUY, LotSize, OpenPrice, UseSlippage, BuyStopLoss,
BuyTakeProfit, OrderComment1, MagicNumber, 0, Green);
int Ticket2 = OrderSend(Symbol(), OP_BUY, LotSize, OpenPrice, UseSlippage, BuyStopLoss,
BuyTakeProfit, OrderComment2, MagicNumber, 0, Green);
// 订单修改操作示例
for(int Counter = 0; Counter < OrdersTotal(); Counter++) // 遍历所有当前持仓和挂单
{
if(OrderSelect(Counter, SELECT_BY_POS)) // 选中订单
{
// 首先检查魔术数字和交易品种是否匹配
if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol())
{
if(OrderComment() == OrderComment1) // 再检查订单注释是否为第一类
{
// 此处添加修改第一个订单的逻辑
}
else if(OrderComment() == OrderComment2) // 或者订单注释是否为第二类
{
// 此处添加修改第二个订单的逻辑
}
}
}
}
在上述代码中,我们首先声明了两个字符串变量,OrderComment1
和 OrderComment2
,用于存储不同的订单注释。接着,通过两次调用 OrderSend()
函数,我们分别创建了两个订单,每个订单都附带了各自独特的注释。在后续的订单修改示例循环中,OrderComment()
函数被用作一个关键的筛选条件,帮助我们精确定位到需要操作的特定订单。
通过检查 OrderComment()
的返回值,您可以实现诸如独立平仓特定类型的订单、为不同订单应用差异化的追踪止损策略等功能,或者任何其他根据您交易系统需求而定的精细化订单管理操作。