Warm tip: This article is reproduced from serverfault.com, please click

forex-如果没有正确的错误反馈,OrderClose 在 MQL4 中不起作用

(forex - OrderClose not working in MQL4 without proper error feedback)

发布于 2021-02-22 22:59:03

所以我有这个 EA 应该在某些条件下关闭 2 笔交易。有时它只关闭 1/2,有时它平滑地关闭。我无法真正确定它只关闭一个的时间并检测一种模式,以便我可以发现逻辑错误。

PS:显然,交易来自在 1 个图表/对内从 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);
Questioner
Pantelis Pap.
Viewed
0
tomgny 2021-02-24 22:31:53

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

你可以使用OrderLots()function 而不是 using 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()OrderType()

更新:

对于在 1 个图表内运行的不同货币对,请使用来自 MarketInfo

例子:

MarketInfo("EURUSD",MODE_BID);

检查MarketInfo()