protected override PriceCalculationRow[] GetMaximumVolumeRows(PriceCalculationRow[] table)
        {
            decimal maxVolume = 0;

              foreach (PriceCalculationRow row in table)
              {
            row.TradeableQuantity = Math.Min(row.AggregateBuyQuantity, row.AggregateSellQuantity);
            if (row.TradeableVolume > maxVolume)
              maxVolume = row.TradeableVolume;
              }

              return table.Where(r => r.TradeableVolume == maxVolume).ToArray();
        }
        protected override PriceCalculationRow[] GetMinimumOrderImbalanceRows(PriceCalculationRow[] table)
        {
            decimal minImbalance = decimal.MaxValue;

              foreach (PriceCalculationRow row in table)
              {
            row.NormalOrderImbalance = Math.Abs(row.AggregateBuyQuantity - row.AggregateSellQuantity) * row.Price;
            if (row.NormalOrderImbalance < minImbalance)
              minImbalance = row.NormalOrderImbalance;
              }

              return table.Where(r => r.NormalOrderImbalance == minImbalance).ToArray();
        }
        protected override PriceCalculationRow[] GetMaximumQuantityRows(PriceCalculationRow[] table)
        {
            int maxQuantity = 0;

              foreach (PriceCalculationRow row in table)
              {
            row.TradeableQuantity = Math.Min(row.AggregateBuyQuantity, row.AggregateSellQuantity);
            if (row.TradeableQuantity > maxQuantity)
              maxQuantity = row.TradeableQuantity;
              }

              return table.Where(r => r.TradeableQuantity == maxQuantity).ToArray();
        }