将 (X) OR (Y) 变量的代码排列为 return TRUE

Arranging the code for an (X) OR (Y) variable to return TRUE

我如何将 (x) 个变量列表分组为真,或将 (y) 个变量组分组为真以激活命令。

我这里有以下内容,其中包括 || 布尔值。

if(OrderSelect(PosSel,SELECT_BY_POS,MODE_TRADES))
                 if(OrderTicket() > 0)
                 if((OrderMagicNumber() == Period()))
                 if(OrderSymbol() == Symbol())
                 if(TimeCurrent() >=(OrderOpenTime() + 60 * Period()))
                 /*Either the above variables can be met OR the one below can be met. */
                 || if((MarketInfo(Symbol(),MODE_BID)==(iOpen(Symbol(),0,1))))

非常感谢。

   if(OrderSelect(PosSel,SELECT_BY_POS,MODE_TRADES)){
      if(OrderMagicNumber() == Period() && OrderSymbol()==Symbol()){
            RefreshRates(); //must call it before accessing Bid & Ask
            if(TimeCurrent()>=OrderOpenTime()+60*Period() || 
                fabs(Bid-iOpen(Symbol(),0,1))<Point/2){///here 1 OR 2 is true:
            //what to do ?
         }
      }
   }

休斯顿,我们有问题:

解决方案不是纯布尔逻辑构造,而是涉及一个(隐藏)事务 - 一个按顺序调节的过程。

在 MetaTrader Terminal 4 中,所有 Order*(...) 调用都依赖于 & 必须以明确的 OrderSelect() 否则 dbPool-引擎类似于俄罗斯彩票(左轮手枪在 一个未知的腔室位置 中装载了一颗子弹,在左轮手枪的气缸存储中).这就是为什么 OrderSelect() 必须先走。 RefreshRates() 是不言自明的。


需要的不仅仅是轻微的语法磨练 - 解决方案可能是:

首先尝试执行 dbPool.SELECT 并在布尔结构中处理显式结果:

bool OrderSELECT_RESULT = OrderSelect( PosSel, SELECT_BY_POS, MODE_TRADES );
                          RefreshRates();
// a MUST-DO part, indeed _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

if (  (     OrderSELECT_RESULT
      &&    OrderTicket()           >  0
      &&    OrderMagicNumber()      == Period()
      &&    OrderSymbol()           == Symbol()
         )
      && (  OrderOpenTime()         <= TimeCurrent() - ( 60 * Period() )
         || iOpen( Symbol(), 0, 1 ) == MarketInfo( Symbol(), MODE_BID )
            )
      )
      { ... }