没有适当的错误反馈,OrderClose 在 MQL4 中不起作用

OrderClose not working in MQL4 without proper error feedback

所以我有这个 EA,它应该在特定条件下一起平仓 2 笔交易。有时它只关闭 1/2,有时它会顺利关闭。我无法真正确定它只关闭一个并检测到一种模式的时间,因此我可以发现逻辑错误。

P.S.: 显然交易来自 1 chart/pair.

内 EA 的不同对 运行

错误信息是这样的: OrderClose 函数的无效票证

但交易显然存在,并且我确保我在每次重新启动 EA 时都将其包含在 int 中,如果交易已经打开(通过评论检测到),它会显示这样的消息: “买入交易:[票号],已确认。” 所以我确实知道它被识别并且在正确的 int 范围内被使用。关于错误来源的任何想法?

OrderClose(TicketA,LotSize,iClose(NULL,0,0),Slippage,clrGray);
OrderClose(TicketB,LotSize,iClose(SymbolB,0,0),Slippage,clrGray);

这会解决这个问题吗?我的意思是...它会出错 2/4 关闭订单...但我真的不在乎它看起来有多漂亮。

OrderClose(TicketA,LotSize,Ask,Slippage,clrGray);
OrderClose(TicketB,LotSize,Bid,Slippage,clrGray);
OrderClose(TicketA,LotSize,Ask,Slippage,clrGray);
OrderClose(TicketB,LotSize,Ask,Slippage,clrGray);

确保您没有在某处覆盖 TicketATicketB 变量。

您可以使用 OrderLots() 函数而不是使用 LotSize,尤其是当此值在 EA 过程中发生变化时。此外,通过检查 OrderType(),您将避免收盘价出现错误。

示例:

if(yourCloseCondition){
    if(OrderSelect(ticket, SELECT_BY_TICKET)){
        if(OrderType() == OP_BUY){
            if(OrderClose(ticket, OrderLots(), Bid, 0)){
                //Print("success");
            }
        }
        if(OrderType() == OP_SELL){
            if(OrderClose(ticket, OrderLots(), Ask, 0)){
                //Print("success");
            }
        }
    }
}

同时检查文档:OrderClose() and OrderType().

更新:

对于 1 个图表中的不同货币对 运行 使用来自 MarketInfo

的收盘价

示例:

MarketInfo("EURUSD",MODE_BID);

检查MarketInfo()