请教一下关于orderopenprice()=true 的显示问题

 

请问 如下:

 double  sumok=0;

double  sumno=0;

     if(  OrderSelecct(i,SELECT_BY_POS,MODE_HISTORY)==true )

            {

                      if(OrderOpenPrice()==true)

                         {

                             sumok+=1;

                           }

                       if(OrderOpenPrice()==false)

                             {

                             sumno+=1;

                                 }

                 }

  我的问题是 sumno可以正确的显示,但是sumok显示不出来始终显示为0 ,有可能是什么原因呢? 

  希望能哪位大神可以给解释一下,谢谢!

 
shuiguangcheng:

请问 如下:

 double  sumok=0;

double  sumno=0;

     if(  OrderSelecct(i,SELECT_BY_POS,MODE_HISTORY)==true )

            {

                      if(OrderOpenPrice()==true)

                         {

                             sumok+=1;

                           }

                       if(OrderOpenPrice()==false)

                             {

                             sumno+=1;

                                 }

                 }

  我的问题是 sumno可以正确的显示,但是sumok显示不出来始终显示为0 ,有可能是什么原因呢? 

  希望能哪位大神可以给解释一下,谢谢!

OrderOpenPrice()函数的返回值是double型数据,不是bool型。
 
Nianfu Li:
OrderOpenPrice()函数的返回值是double型数据,不是bool型。

已解决  谢谢您的回复

用       OrderOpenPrice()==0   来进行判定就可以了 

 
shuiguangcheng:

已解决  谢谢您的回复

用       OrderOpenPrice()==0   来进行判定就可以了 

奇怪,OrderOpenPrice() 不可能为 0,这段逻辑是要完成什么作用呢?
 
Xiangdong Guo:
奇怪,OrderOpenPrice() 不可能为 0,这段逻辑是要完成什么作用呢?

OrderOpenPrice()==0  是存在的

只是你没有注意到 

 
shuiguangcheng:

OrderOpenPrice()==0  是存在的

只是你没有注意到 

什么平台、什么货币对,居然可能以价格0.00000开仓,还成交了?好奇!
 
Nianfu Li:
什么平台、什么货币对,居然可能以价格0.00000开仓,还成交了? 好奇!

  也可能是我没搞清楚----我也是初学的,

  但是我写的一个小程序却可以完整的表达出来哪些单子是真实成交的单子,

  哪些单子只有定单号却没有成交----(没有成交在这里表示为没有成交价格-即市场中只存在报价,而没有成交价)

我的理解为OpenPrice()==0,并不是说开仓的价格是0.00000,而是在OrderSelect()==true 的前题下,OrderOpenPrice()根本不存在.


另:    难道你们都没有注意到这一点吗,还是说你们的EA  比较复杂和平滑  把一点给过滤掉了(这一点指偏离实际价格的超高或者超低报价-非成交价) 

 
shuiguangcheng:

  也可能是我没搞清楚----我也是初学的,

  但是我写的一个小程序却可以完整的表达出来哪些单子是真实成交的单子,

  哪些单子只有定单号却没有成交----(没有成交在这里表示为没有成交价格-即市场中只存在报价,而没有成交价)

我的理解为OpenPrice()==0,并不是说开仓的价格是0.00000,而是在OrderSelect()==true 的前题下,OrderOpenPrice()根本不存在.


另:    难道你们都没有注意到这一点吗,还是说你们的EA  比较复杂和平滑  把一点给过滤掉了(这一点指偏离实际价格的超高或者超低报价-非成交价) 

“我也是初学的”,你能不能把这个“也”字去掉。这论坛里大部分的确是初学者,大概也包括我。但也不乏MQL编程的专家级人物,比如Xiangdong Guo。

看来你确实没搞清楚。OrderOpenPrice()函数是计算持仓或已经结束的订单的开仓价格,的确是不可能为0的。因为任何货币对的结算汇率不可能为0。

 
Nianfu Li:

“我也是初学的”,你能不能把这个“也”字去掉。这论坛里大部分的确是初学者,大概也包括我。但也不乏MQL编程的专家级人物,比如Xiangdong Guo。

看来你确实没搞清楚。OrderOpenPrice()函数是计算持仓或已经结束的订单的开仓价格,的确是不可能为0的。因为任何货币对的结算汇率不可能为0。


首先 你误会了 "也"字了, 这只是一个语气词 可能和我们当地的方言有关系,没有你想的那种意思   

  另外  我得确是选取了很多这样的单子 

     至于具体的交易的过程我并不是很清楚,但是在我的账户历史数据中 经常会存在很多这样的单子

     也就是说,得确会存在很多,这种看起来已经开了仓,但是实际上却并没有成交的订单


     OrderOpenPrice()函数是计算持仓或已经结束的订单的开仓价格,的确是不可能为0的


     但是如果我没有持仓呢(或者是说系统显示我已经有了订单,但是实际上并没有买进或卖出呢)

     这个问题也困扰了我很久,我也没有一个明确的答案,希望可以得到你的解答! 谢谢!

     (我的EA测试很简单就是一个13日均线和一个5日均线)

 另外,我的想法是这样的 

    一个成功的订单包括买方和卖方  是不是会存在这样一种假设即   卖方的报价可以达到我的指标标准--由此我的订单发出--但是卖方在很短的时间内取消订单--导致我的订单退回--从而达成一个虚假交易

    --即我的订单虽然发出但是由于卖方的订单取消导致我的订单没有成交--- 同时在系统里又已经有了这样一笔订单记录---从而形成OrderSelect()==true,但是又由于订单取消所以OrderOpenPrice() 根本就不存在.

    不知道上面的想法错误在哪里   迫切希望得到解答, 谢谢!


以下是小程序

void OnTick(void)

  {



double sumyes=0;

double sumno=0;

double sumlag=0;

double sumlbg=0;

for(int i=0;i<OrdersHistoryTotal()-1;i++)

  {

   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)

   {

    // if(OrderOpenPrice()==0)

    // {

     //sumyes+=1;

    // }

    

    if(OrderOpenPrice()==0)

    {

     sumno+=1;

     }

    else

    {

     sumyes+=1;

    }

    if(OrderProfit()>=50*Point)

    {

     sumlag+=1;

     }

    if(OrderProfit()<0)

    {

     sumlbg+=1;

     }

     }

   Comment(OrdersHistoryTotal(),"  sumno=",sumno,"  sumyes=",sumyes,"   sumlag=",sumlag,"   sumlbg=",sumlbg);

   }


 
shuiguangcheng:

首先 你误会了 "也"字了, 这只是一个语气词 可能和我们当地的方言有关系,没有你想的那种意思   

  另外  我得确是选取了很多这样的单子 

     至于具体的交易的过程我并不是很清楚,但是在我的账户历史数据中 经常会存在很多这样的单子

     也就是说,得确会存在很多,这种看起来已经开了仓,但是实际上却并没有成交的订单


     OrderOpenPrice()函数是计算持仓或已经结束的订单的开仓价格,的确是不可能为0的


     但是如果我没有持仓呢(或者是说系统显示我已经有了订单,但是实际上并没有买进或卖出呢)

     这个问题也困扰了我很久,我也没有一个明确的答案,希望可以得到你的解答! 谢谢!

     (我的EA测试很简单就是一个13日均线和一个5日均线)

 另外,我的想法是这样的 

    一个成功的订单包括买方和卖方  是不是会存在这样一种假设即   卖方的报价可以达到我的指标标准--由此我的订单发出--但是卖方在很短的时间内取消订单--导致我的订单退回--从而达成一个虚假交易

    --即我的订单虽然发出但是由于卖方的订单取消导致我的订单没有成交--- 同时在系统里又已经有了这样一笔订单记录---从而形成OrderSelect()==true,但是又由于订单取消所以OrderOpenPrice() 根本就不存在.

    不知道上面的想法错误在哪里   迫切希望得到解答, 谢谢!


以下是小程序

void OnTick(void)

  {



double sumyes=0;

double sumno=0;

double sumlag=0;

double sumlbg=0;

for(int i=0;i<OrdersHistoryTotal()-1;i++)

  {

   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)

   {

    // if(OrderOpenPrice()==0)

    // {

     //sumyes+=1;

    // }

    

    if(OrderOpenPrice()==0)

    {

     sumno+=1;

     }

    else

    {

     sumyes+=1;

    }

    if(OrderProfit()>=50*Point)

    {

     sumlag+=1;

     }

    if(OrderProfit()<0)

    {

     sumlbg+=1;

     }

     }

   Comment(OrdersHistoryTotal(),"  sumno=",sumno,"  sumyes=",sumyes,"   sumlag=",sumlag,"   sumlbg=",sumlbg);

   }


还需要加强学习。你这段代码错谬之处不少。相信你会日有所悟,不断进步。

订单如果没有成交,账户里不可能出现相应的持仓订单记录。持仓订单如果没有平仓,在历史订单里不可能出现相应的历史订单记录。不明白你到底是怎么回事。

 
Nianfu Li:

还需要加强学习。你这段代码错谬之处不少。相信你会日有所悟,不断进步。

订单如果没有成交,账户里不可能出现相应的持仓订单记录。持仓订单如果没有平仓,在历史订单里不可能出现相应的历史订单记录。不明白你到底怎么回事

   好的   仍然谢谢您        OrderBalance() 

原因: