没有适当的错误反馈,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);
确保您没有在某处覆盖 TicketA
或 TicketB
变量。
您可以使用 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()。
所以我有这个 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);
确保您没有在某处覆盖 TicketA
或 TicketB
变量。
您可以使用 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()。