我怎样才能获得订单打开后的最高价。 - 页 5

 

你是说

double LastOpenPrice(int ordertype)    { 
double OpenPrice;                            
datetime lastOpen;    
for ( int pos = OrdersTotal()- 1 ; pos >= 0 ; pos--)       
if ( OrderSelect (pos, SELECT_BY_POS) // Only my orders w/
    &&OrderMagicNumber() == MagicNumberLong || MagicNumberShort // my magic number
    &&OrderSymbol() == Symbol()    // and my pair.
    &&OrderType() == ordertype       
    &&OrderOpenTime() > lastOpen )  {        
            if(OpenPrice = OrderOpenPrice()&&OpenPrice!=0)          
               break;          }
               return (OpenPrice);} //  
求你了,我需要看一下你的药水
 
Hand:

请给我看看你的药方

......你需要学习 ......自己努力改变一下,读一读书 (https://book.mql4.com//) 读一读文档 (https://docs.mql4.com//) ......对长线和分类交易有不同的魔法数字是愚蠢的,没有 必要 ....... .
 

也许通过这种方式,它将工作。

if( ( (LastOpenPrice(OP_SELL)+0.0030)<MarketInfo("EURUSD",MODE_BID) )&&( LastOpenPrice(OP_SELL)>0))<--------------- 0+0.0030=0.0030<Bid:TRUE // 我想这是可行的
{ BUY("EURUSD",B_EURUSD_LS_1,B_EURUSD_TP_1,B_EURUSD_SL_1,B_EURUSD_TS_1," if (

 
Hand:

也许通过这种方式,它将工作。

if( ( (LastOpenPrice(OP_SELL)+0.0030)<MarketInfo("EURUSD",MODE_BID) )&&( LastOpenPrice(OP_SELL)>0))<--------------- 0+0.0030=0.0030<Bid:TRUE // 我想这是可行的
{ BUY("EURUSD",B_EURUSD_LS_1,B_EURUSD_TP_1,B_EURUSD_SL_1,B_EURUSD_TS_1," if (

当我问 "你的游戏计划是什么?"我真的是这个意思。换句话说,你的策略是什么?

如果你不想在没有最后开盘价 时进行交易,你能这样考虑吗?

如果(LastOpenPrice(OP_SELL) <=0){ 返回?做什么?----- 卖出的案例

if(LastOpenPrice(OP_BUY) <=0){ 返回?...或者做什么?------买入的情况

然后,代码的其余部分进行....

有了这样的错误,我担心你不能在你的代码中 "填补漏洞"。你的策略看起来被毁了。

你对此有什么答案、想法等吗?

 
Hand:

你是说。

求你了,我需要看到你的苏拉提斯

我完全忘记了提及这一点,但这是最重要的 整体,和永恒的事情,有关。你想看到我的解决方案,而我却没有,这真是太疯狂了。

在地球上,你在哪里?你认为我是谁?你的守护天使、萨满、个人精灵,等等?

无论你把什么放进你的脑子里,我真的帮不上忙,只是为了你的信息。

 

伙计们。

请检查下面的函数(如果正确与否),我需要做这个条件

if ( lastOpenOpenPriceBuy()-lastOpenOpenPriceSell() )>=0.0060

{ 做一些事情 }

double lastOpenedOpenPriceBuy()
  {
   double ret = 0;
   datetime time=0;
   for(int i=0; i<OrdersTotal(); i++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()==OP_BUY && OrderOpenTime()>time) {
         time = OrderOpenTime();
         ret = OrderOpenPrice();
      }
   }
   
   return(ret);
  }


double lastOpenedOpenPriceSell()
  {
   double ret = 0;
   datetime time=0;
   for(int i=0; i<OrdersTotal(); i++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()==OP_SELL && OrderOpenTime()>time) {
         time = OrderOpenTime();
         ret = OrderOpenPrice();
      }
   }
   
   return(ret);
  }



double lastClosedClosePrice()
  {
   double ret = 0;
   datetime time = 0;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
      OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
      if(OrderType()<2 && OrderCloseTime()>time) {
         time = OrderCloseTime();
         ret = OrderClosePrice();
      }
   }
   
   return(ret);
  }



double beforelastClosedClosePrice()
  {
   double ret = 0;
   double ret2 = 0;
   datetime time = 0;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
      OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
      if(OrderType()<2 && OrderCloseTime()>time) {
         time = OrderCloseTime();
         ret = ret2;
         ret2 = OrderClosePrice();
      }
   }
   if(ret==0) {
      ret = ret2;
   }
   
   return(ret);
  }
 

我可以帮助解决第一个问题,也许其他人可以来解决其他问题。

<-------------------- can consider to use if(OrdersTotal()>0..then proceed  ---------------->
double lastOpenedOpenPriceBuy()  <----- what a name...confusing, maybe.
  {
   double ret = 0;
   datetime time=0; <---- can consider setting Lowest Limit to -9999, at least -1, rather than 0.  
   for(int i=0; i<OrdersTotal(); i++) { <----- do consider counting down.
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES); <------ This returns some BOOLEAN result.then what? -----(?)
      if(OrderType()==OP_BUY && OrderOpenTime()>time) { <------ This can return runtime OrderSelect ERR bec. of above line (?). ------ (!) 
         time = OrderOpenTime(); 
         ret = OrderOpenPrice();
      }
   }
   
   return(ret);<------ return double as UnNormalized price. you sure about this?
  }

 

请注意。

当我把这个条件

if (  ((lastOpenedOpenPriceBuy()-0.0030)>MarketInfo("EURUSD",MODE_BID))  ) 
   {  SELL("EURUSD",S_EURUSD_LS_1,S_EURUSD_TP_1,S_EURUSD_SL_1,S_EURUSD_TS_1,"if (  ( (lastOpenedOpenPriceBuy()-0.0030)>MarketInfo(EURUSD,MODE_BID) )  )") ;}

不起作用,但当我再添加一个条件时

if (  (lastOpenedOpenPriceBuy()>0)&&((lastOpenedOpenPriceBuy()-0.0030)>MarketInfo("EURUSD",MODE_BID))  ) 
   {  SELL("EURUSD",S_EURUSD_LS_1,S_EURUSD_TP_1,S_EURUSD_SL_1,S_EURUSD_TS_1,"if (  ( (lastOpenedOpenPriceBuy()-0.0030)>MarketInfo(EURUSD,MODE_BID) )  )") ;}
看起来很好(lastOpenOpenPriceBuy()>0)。
 
<-------------------- 可以考虑使用 if(OrdersTotal()>0...then proceed---------------->
double lastOpenedOpenPriceBuy() <----- what a name...confusing, maybe.
{double ret = 0; datetime time=0;<---- 可以考虑将Lowest Limit设置为-9999,至少是-1,而不是0。 没有订单打开时间可以<=0for(int i=0; i<OrdersTotal(); i++) { <----- 确实考虑倒数。 没有什么不同。OrderSelect(i, SELECT_BY_POS, MODE_TRADES); <------ 这返回一些BOOLEAN结果。然后呢?  -----(?)如果在循环中,订单必须存在,当订单存在时,OrderSelect不会引起错误。if(OrderType()==OP_BUY && OrderOpenTime()>time) { <------ 这可能会返回运行时的OrderSelect ERR,因为上面这一行(?)。------ (!) 与上一行的原因相同。
time =OrderOpenTime(); ret =OrderOpenPrice
(); } } return(ret);<------ return double asUnNormalized price. You sure about this?在第一行已经定义了ret=0。}
 

孩子啊,你真是太了不起了。谢谢你指出这些,特别是这个。

OrderSelect(i, SELECT_BY_POS, MODE_TRADES); <------如果在循环中,订单必须存在,当订单存在时,OrderSelect不会引起错误。如果不在循环中,这一行就不会被执行。我认为你的这一行有一些胡迪尼的能力,在没有订单的时候从循环中消失,在有订单的时候重新出现。