平仓时PositionClose (...)不建议用symbol传参,而应该用ticket,原因我就不详细解释了.
PositionClose(ticket)的返回值为true并不代表单子成功平仓,只表示平台服务器接受处理该订单,需要分析返回结果,但是比较繁琐,初学者可以简单的认为"平仓成功".
把你的代码修改如下,供参考:
for(int i=PositionsTotal()-1; i>=0; i--) { ulong Positionticket = PositionGetTicket(i); if(Positionticket>0 && _Symbol==PositionGetString(POSITION_SYMBOL) && PositionGetInteger(POSITION_MAGIC)==magic) { if(!trade.PositionClose(Positionticket)) { //--- 报错信息 Print("平仓失败. 代码=",trade.ResultRetcode(),". 错误内容: ",trade.ResultRetcodeDescription()); Print("magic=",PositionGetInteger(POSITION_MAGIC),". 订单: ",Positionticket); } else { Print("平仓成功. 代码=",trade.ResultRetcode()," (",trade.ResultRetcodeDescription(),")"); } } }
我在EA中使用PositionClose(_Symbol)进行平仓操作,开始一切正常,后来我加了一个挂单的功能,发现挂单之后,平仓就失败了,出10006错误。我把挂单功能关掉,又可以正常平仓了。
有没有大神知道是怎么回事的。
for(int i=PositionsTotal()-1; i>=0; i--)
{
if(_Symbol==Symbol() && PositionGetInteger(POSITION_MAGIC)==magic)
{
if(!trade.PositionClose(_Symbol))
{
//--- 报错信息
ulong Positionticket = PositionGetTicket(i);
Print("平仓失败. 代码=",trade.ResultRetcode(),". 错误内容: ",trade.ResultRetcodeDescription());
Print("magic=",PositionGetInteger(POSITION_MAGIC),". 订单: ",Positionticket);
}
else
{
Print("平仓成功. 代码=",trade.ResultRetcode()," (",trade.ResultRetcodeDescription(),")");
}
}
}
持仓订单的 ticket 和 magic 都能获取到,就是不平仓,提示10006