请教一下各路大神关于PositionClose的问题

 

我在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

 

平仓时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(),")");
      }
   }
}
 
Ziheng Zhuang #:

平仓时PositionClose (...)不建议用symbol传参,而应该用ticket,原因我就不详细解释了.

PositionClose(ticket)的返回值为true并不代表单子成功平仓,只表示平台服务器接受处理该订单,需要分析返回结果,但是比较繁琐,初学者可以简单的认为"平仓成功".

把你的代码修改如下,供参考:

感谢,测试成功了

原因: