保持敬畏之心
交易是一场持久战

MQL4(50):利用订单注释作为辅助标识符

#MQL4编程入门教学

在此前的课程中,我们一直使用“魔术号”作为EA的唯一标识,来区分EA自己下的订单和手动订单。但如果你的EA变得更复杂,需要在同一个图表上,同时运行多个不同的、独立的子策略,那该怎么办?

比如,你的EA中既有一个长线的趋势跟踪策略,又有一个短线的震荡摸顶抄底策略。这两个策略的开仓逻辑、止损方式、平仓条件都完全不同。此时,仅靠一个魔令号,已经无法区分某个持仓单究竟是属于“趋势策略”还是“震荡策略”了。

这时,订单注释就派上了大用场。它就像是我们发给每个“子策略交易员”的专属身份牌。

“交易团队”管理法

想象一下,你的EA是一个交易团队(由同一个MagicNumber标识)。这个团队里有两位交易员:

  • 交易员A:专门负责执行“策略A”。
  • 交易员B:专门负责执行“策略B”。

当A下单时,我们在订单上贴上他的名牌:“策略A的订单”。当B下单时,也贴上他的名牌。之后,你作为总监(OnTick()主循环),在巡视所有持仓时,就可以通过检查这个“名牌”,来对不同交易员的单子,执行不同的管理操作。

代码实现:

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)) // 选中订单
    {
        // 首先检查魔术数字和交易品种是否匹配 (确认是本EA、本品种的单子)
        if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol())
        {
            // 然后,通过检查“名牌”,来区分到底是哪个“交易员”的单子
            if(OrderComment() == OrderComment1) // 再检查订单注释是否为第一类
            {
                // 此处添加针对“策略A”订单的管理逻辑
            }
            else if(OrderComment() == OrderComment2) // 或者订单注释是否为第二类
            {
                // 此处添加针对“策略B”订单的管理逻辑
            }
        }
    }
}

在上面的代码中,我们通过OrderComment()函数的返回值,作为if判断的关键条件,实现了对不同子策略订单的精准识别和差异化管理。你可以据此实现诸如:为A策略的订单应用移动止损,而为B策略的订单在特定时间平仓等复杂逻辑。

学长避坑指南:使用订单注释的注意事项

  1. 警惕经纪商的“小动作”:某些经纪商可能会在你的订单注释后面,自动附加一些他们自己的标识符(如[sl], [tp], [br])。这会导致你用OrderComment() == "策略A的订单"这样的严格等于判断失效。
    • 更稳妥的做法:使用字符串查找函数StringFind(),来判断你的标识符是否被“包含”在完整的订单注释中。例如:if(StringFind(OrderComment(), "策略A") >= 0)。这样,无论经纪商在后面加什么,只要注释里有“策略A”这几个字,我们的判断就能成功。
  2. MagicNumber vs. OrderComment:从执行效率和严谨性上说,为不同子策略分配不同的魔术号(例如,策略A用12301,策略B用12302)是比比较字符串更高效、更可靠的方式。
    • 那为什么还要用Comment? 因为OrderComment有无与伦比的可读性。当你在交易历史中复盘时,能一眼就看出这笔单子是哪个策略下的,极大地方便了策略分析和优化。
    • 最佳实践:两者结合使用。用唯一的魔术号来进行机器的精准识别和过滤,用清晰的订单注释来方便我们人类的阅读和分析。
  3. 注释长度限制:订单注释的长度是有限的(通常是31个字符左右)。你的身份标识要做到简短而明确。

通过巧妙地运用订单注释,你的EA就可以从一个只会执行单一指令的“士兵”,进化成一个能指挥多个“特种兵”协同作战的“指挥官”,极大地扩展了你策略设计的想象空间。

赞(0)
未经允许不得转载:图道交易 » MQL4(50):利用订单注释作为辅助标识符
分享到

评论 抢沙发

评论前必须登录!

立即登录   注册

登录

找回密码

注册