Запретить вызов блока кода без надобности

Viktar Dzemikhau  

Есть такой блок кода.

  if (m_ptrZZ.getExtremumProperties(1).price > m_ptrZZ.getExtremumProperties(0).price) {
    if (m_ptrZZ.getExtremumProperties(1).price - m_ptrZZ.getExtremumProperties(2).price >= i_firstWaveSize * m_ptrSymbol.pt()) {
      if (m_ptrZZ.getExtremumProperties(1).price - m_ptrZZ.getExtremumProperties(0).price >= i_secondWaveSize * m_ptrSymbol.pt()) {
        if (m_ptrSymbol.getLastTick().bid - m_ptrZZ.getExtremumProperties(0).price >= m_ptrSymbol.stopLevel()) {
          m_extremumTime = getBarOpenTime(m_ptrZZ.getExtremumProperties(0).index, m_ptrSymbol.getName());
          m_extremumPrice = ND(m_ptrZZ.getExtremumProperties(0).price, m_ptrSymbol.getName());
          m_ptrZZ.printZZProperties();
          Print(__FUNCTION__, " ", SELL);
          return SELL;
        }
      }
    } else if (m_ptrZZ.getExtremumProperties(1).price - m_ptrZZ.getExtremumProperties(2).price >= i_firstWaveSize * m_ptrSymbol.pt()) {
      if (m_ptrZZ.getExtremumProperties(1).price - m_ptrZZ.getExtremumProperties(0).price >= i_secondWaveSize * m_ptrSymbol.pt()) {
        if (m_ptrZZ.getExtremumProperties(1).price - m_ptrSymbol.getLastTick().ask >= m_ptrSymbol.stopLevel()) {
          m_extremumTime = getBarOpenTime(m_ptrZZ.getExtremumProperties(1).index, m_ptrSymbol.getName());
          m_extremumPrice = ND(m_ptrZZ.getExtremumProperties(1).price, m_ptrSymbol.getName());
          m_ptrZZ.printZZProperties();
          Print(__FUNCTION__, " ", BUY);
          return BUY;
        }
      }
    }
  } else {
    if (m_ptrZZ.getExtremumProperties(2).price - m_ptrZZ.getExtremumProperties(1).price >= i_firstWaveSize * m_ptrSymbol.pt()) {
      if (m_ptrZZ.getExtremumProperties(0).price - m_ptrZZ.getExtremumProperties(1).price >= i_secondWaveSize * m_ptrSymbol.pt()) {
        if (m_ptrSymbol.getLastTick().bid - m_ptrZZ.getExtremumProperties(1).price >= m_ptrSymbol.stopLevel()) {
          m_extremumTime = getBarOpenTime(m_ptrZZ.getExtremumProperties(1).index, m_ptrSymbol.getName());
          m_extremumPrice = ND(m_ptrZZ.getExtremumProperties(1).price, m_ptrSymbol.getName());
          m_ptrZZ.printZZProperties();
          Print(__FUNCTION__, " ", SELL);
          return SELL;
        }
      }
    } else if (m_ptrZZ.getExtremumProperties(2).price - m_ptrZZ.getExtremumProperties(1).price >= i_firstWaveSize * m_ptrSymbol.pt()) {
      if (m_ptrZZ.getExtremumProperties(0).price - m_ptrZZ.getExtremumProperties(1).price >= i_secondWaveSize * m_ptrSymbol.pt()) {
        if (m_ptrZZ.getExtremumProperties(2).price - m_ptrSymbol.getLastTick().ask >= m_ptrSymbol.stopLevel()) {
          m_extremumTime = getBarOpenTime(m_ptrZZ.getExtremumProperties(0).index, m_ptrSymbol.getName());
          m_extremumPrice = ND(m_ptrZZ.getExtremumProperties(0).price, m_ptrSymbol.getName());
          m_ptrZZ.printZZProperties();
          Print(__FUNCTION__, " ", BUY);
          return BUY;
        }
      }
    }
  }

Места, где я запоминаю время и цену последнего бара, по которому я получил сигнал выделены жёлтым цветом. Нужно, сделать так, что бы, если в переменных m_extremumTime и m_extremumPrice находятся время и цена такая, которую им присваиваются в выделенных жёлтых полях, то этот блок не выполнять (до наступления нового бара точно).

Можно в каждом if дописывать условие, но это как-то громоздко получается. Как это по изящнее реализовать можно?

Причина обращения: