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(); }