1

我如何将 (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))))

非常感谢。

4

2 回答 2

0
   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 ?
         }
      }
   }
于 2017-03-22T14:14:04.223 回答
0

休斯顿,我们有一个问题:

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

在 MetaTrader 终端 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 )
            )
      )
      { ... }
于 2017-03-22T14:23:55.553 回答