Организация кода для переменной (X) OR (Y) для возврата TRUE

Как бы я сгруппировал список (x) переменных, чтобы быть истинными, ИЛИ и группу (y) переменных, чтобы быть истинными, чтобы активировать команду.

У меня есть следующее, которое включает в себя || Boolean.

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))))

Большое спасибо.

2 ответа

Решение
   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 ?
         }
      }
   }

Хьюстон у нас проблема:

Решение не является чисто логической логической конструкцией, а включает в себя (скрытую) транзакцию - последовательно обусловленный процесс.

В терминале 4 MetaTrader есть все Order*(...) вызовы зависят и должны предшествовать явным OrderSelect() в противном случае - dbPool -engine - похожа на русскую лотерею (ударный револьвер, заряженный одной пулей в неизвестном положении камеры в хранилище цилиндров револьвера). Вот почему 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 )
            )
      )
      { ... }
Другие вопросы по тегам