Организация кода для переменной (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 )
)
)
{ ... }