请问mql5 获取订单的止损价格的2种方法有何区别

 

请问mql5 获取订单的止损价格的2种方法有何区别

第一种:   

       if(PositionSelect(_Symbol))    

     {

      double _SL =    PositionGetDouble(POSITION_SL) ;   

}


第二种: if ( OrderSelect(Ticket) )  //选择工作订单。如果函数成功调用返回真值,如果函数没能完成,返回错误值,

            {         double _SL =  OrderGetDoubleORDER_SL);

     }

麻烦各位大神解释一下,是不是第一种只是开仓时候的止损价 ,第二种是订单中途修改了的止损价?


 

 
icy888:

请问mql5 获取订单的止损价格的2种方法有何区别

第一种:   

       if(PositionSelect(_Symbol))    

     {

      double _SL =    PositionGetDouble(POSITION_SL) ;   

}


第二种: if ( OrderSelect(Ticket) )  //选择工作订单。如果函数成功调用返回真值,如果函数没能完成,返回错误值,

            {         double _SL =  OrderGetDoubleORDER_SL);

     }

麻烦各位大神解释一下,是不是第一种只是开仓时候的止损价 ,第二种是订单中途修改了的止损价?


 

position 是已经开仓的持仓位,order 是挂单属于限价单,不要把两者混淆,但是两者都可以在途中被修改,也同时开两种仓位,两种选择到不同的仓位止损价。你可以在模拟账户里同时开这两种仓位,然后选中之后用Alert 显示出来看看时间和价位是否一样?
 
icy888:

请问mql5 获取订单的止损价格的2种方法有何区别

第一种:   

       if(PositionSelect(_Symbol))    

     {

      double _SL =    PositionGetDouble(POSITION_SL) ;   

}


第二种: if ( OrderSelect(Ticket) )  //选择工作订单。如果函数成功调用返回真值,如果函数没能完成,返回错误值,

            {         double _SL =  OrderGetDoubleORDER_SL);

     }

麻烦各位大神解释一下,是不是第一种只是开仓时候的止损价 ,第二种是订单中途修改了的止损价?


 

mt5这块的确有点乱,持仓单(position)和挂单(order),功能函数并不是完全对应的。

positionSelect(_Symbol) 这个函数个人没用过,具我所知hedging对冲模式基本用不到,netting用的比较多。

正常hedging模式返回止损价应该是如下:

int t=PositionsTotal();
for(int i=0; i<t; i++)
 {
 if(PositionGetTicket(i)>0)
   }
     double _SL =    PositionGetDouble(POSITION_SL) ;  //返回开仓后订单的止损价   
   }
 }

第二种 对应上面的应该OrderGetTicket(i)>0

至于

OrderSelect()

应该是:

if ( OrderSelect(Ticket) )  //选择指定订单号

    {     
      double _SL =  OrderGetDouble( ORDER_SL);//返回该订单号挂单的止损价格
    }

当然这只是目前个人的理解,仅供参考,大家可以一起探讨,共同进步!

 

如樓上 Tiecheng 大神說的 MT5是容易搞混的語法

你需要先知道Position是持倉單也就是說已經成交的單子 在你的賬上會出現盈虧的單就屬Position

掛單是Order 在清單裡面掛著還沒交易成功 帳面上不出現盈虧的就是Order

所以 你提到的第一種狀況 獲取的是持倉單的SL 第二種獲取的是掛單的SL

當掛單成交 成為持倉單後 就要用第一種方式才能獲取持倉單的SL

如果中途有修改SL(無論是持倉或是掛單) 調用出來的都是最後的SL

原因: