所以我有这个 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);
确保你没有在某处覆盖TicketA
或TicketB
变量。
你可以使用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()。
所以你会建议我这样做: OrderClose(ticket, OrderLots(), MarketInfo("EURUSD",MODE_BID), 0); TicketA 和 TicketB 当然不会被覆盖。Lotsize 是稳定的,很好的建议。
是的,根据您的情况自定义示例。如果没有帮助,请粘贴更多代码以找出问题所在。
问题通过一些“闪电”解决并完全重写。还使用了所有 6 种方式来关闭订单以防万一。这导致 4 个错误和 2 个成功关闭。所以工作......谢谢!