Сочетание наборов условий с логикой (и)+(или) в одном операторе if

 
Одинаковый набор действий производиться если выполняются набор условий a,b, объединенных логикой (и)
или набор условий c,d, также объединенных логикой (и), т.е. два набора объединенный логикой (или). Возможно ли их объединить в одном операторе if. Бывает и наоборот наборы объединены логикой (и), а условия внутри набора - логикой (или). Что-то вроде этого:
if((условие А && условие В)||(условие С && условие D))...
 
Я делал что-то подобное, только с перестраховкой

if (((условие А)&&(условие B))||((условие C)&&(условие D)))
 
а для такого куска
         if(fAMA[cb+1]>fAMA[cb+2])
         {
            BeatDn[cb]=Close[cb+1]-Shadow2Up_calc(cb);
            Flag[cb]=11;
         }
         else
         {
            if(fAMA[cb+1]==fAMA[cb+2]&&fAMA[cb+3]>fAMA[cb+4])
            {
               BeatDn[cb]=Close[cb+1]-Shadow2Up_calc(cb);
               Flag[cb]=11;
            }
         }

можно так

if((fAMA[cb+1]>fAMA[cb+2])||((fAMA[cb+1]==fAMA[cb+2]) && (fAMA[cb+3]>fAMA[cb+4])))
{
    BeatDn[cb]=Close[cb+1]-Shadow2Up_calc(cb);
    Flag[cb]=11;
}
 
Все условия можно объединить, но делайте проще - будет меньше ошибок в собственной логике.