如何取出对冲的单?

 

下了好多单,有buy 和sell的,手数都不同。

如果一个buy 的利润加上一个sell的利润大于0, 同时平了这两个单。

我写的代码总是测试不成功,那位高手帮看看啊?或者发一段现成的代码给我也可以的。

//close 
void zcloseall(){
   bool   result;
   double bprice;
   int    cmd,error;

int total = OrdersTotal();
   for (int i = total - 1; i >= 0; i --)
   {

      if(OrderSelect(i,SELECT_BY_POS))
     {
      cmd=OrderType();
      //---- if  order is buy 
      if(cmd==OP_BUY )
        {bprice=Bid;
         while(true)
           {
             Profit=OrderProfit();
             k=OrderTicket();
             // call sell ticket
             mcloseall();
            
             
           }
        }
     }
     
   else Print( "Error when order select ", GetLastError());
   }


}


void mcloseall(){
   bool   result;

    double sprice;
   int    cmd,error;

int total = OrdersTotal();
   for (int i = total - 1; i >= 0; i --)
   {

      if(OrderSelect(i,SELECT_BY_POS))
     {
      cmd=OrderType();
    //---- if  order is sell
      if(cmd==OP_SELL)
        {
         while(true)
           {sprice=Ask;
          
             if (Profit+OrderProfit()>0&&Profit+OrderProfit()<5)
               { result=OrderClose(OrderTicket(),OrderLots(),sprice,3,CLR_NONE) ;
                 OrderClose(k,OrderLots(),sprice,3,CLR_NONE) ;
               }
             
             
           }
        }
     }
     
   else Print( "Error when order select ", GetLastError());
   }
//----

}
 

记录对应编号,或 下单时 做标记

原因: