求教获取的止损值的问题

 

在MT5中随便开一个订单(带止损),然后在EA测试中 测试止损的值

void OnTick()

  {

 if(PositionSelect(_Symbol))     

      {

      double _SL =    PositionGetDouble(POSITION_SL) ;   //开仓止损水平

      double _TP =    PositionGetDouble(POSITION_TP) ;    //开仓获利水平

      double PROFIT = PositionGetDouble(POSITION_PROFIT);  //当前利润

   int a=0;

  }

 

}

调试中插入 _SL   _TP和 PROFIT的值,怎么显示如下一串数字? _SL 为1.6546258479223347E-320   ; _TP 为-5977167.9992803046479821205;  PROFIT为-7.3783727404262270E-261


麻烦哪位大神能告诉我怎么处理??谢谢各位

 
遍历订单方法不对
 
请问mql5 获取订单的止损价格的2种方法有何区别
请问mql5 获取订单的止损价格的2种方法有何区别
  • 2021.08.10
  • www.mql5.com
请问mql5 获取订单的止损价格的2种方法有何区别 第一种: if(PositionSelect(_Symbol)) { double _SL = PositionGetDouble(POSITION_SL) ; } 第二种: if ( OrderSelect(Ticket) ) //选择工作...
 
Wen Tao Xiong:
遍历订单方法不对

直接手动开一单,用开的单号(1076906852)直接写进去,也是一串数字啊??


if (PositionSelectByTicket(1076906852)==true)

 {

 double sl =  NormalizeDouble(PositionGetDouble( POSITION_SL),_Digits); 

 } 


调试结果 sl=1.4049744770787528E-319

 
icy888:

直接手动开一单,用开的单号(1076906852)直接写进去,也是一串数字啊??


if (PositionSelectByTicket(1076906852)==true)

 {

 double sl =  NormalizeDouble(PositionGetDouble( POSITION_SL),_Digits); 

 } 


调试结果 sl=1.4049744770787528E-319

 Print(" PositionSelectByTicket(1076906852)=", PositionSelectByTicket(1076906852) );

if (PositionSelectByTicket(1076906852)==true)

 {

double sl =  NormalizeDouble(PositionGetDouble( POSITION_SL),_Digits); 

 } 

可以考虑先打印看调用结果。

 
Lin Luo:

 Print(" PositionSelectByTicket(1076906852)=", PositionSelectByTicket(1076906852) );

if (PositionSelectByTicket(1076906852)==true)

 {

double sl =  NormalizeDouble(PositionGetDouble( POSITION_SL),_Digits); 

 } 

可以考虑先打印看调用结果。

直接printf 在mt5客户端可以显示正确结果, 在程序调试窗口确是一堆看不懂的数字,莫非这软件有BUG?

 
icy888:

直接printf 在mt5客户端可以显示正确结果, 在程序调试窗口确是一堆看不懂的数字,莫非这软件有BUG?

那就是调试中没有获取到该订单。感觉似乎在程序初始化时没有读取订单,而并非此代码段的问题。

 
icy888:

直接printf 在mt5客户端可以显示正确结果, 在程序调试窗口确是一堆看不懂的数字,莫非这软件有BUG?

每次开仓订单号是不一样的,

订单设置magic,再for循环查找该magic,这是常用且实用的方法。

 
卸载重新安装当前最新版后试试  
原因: