internal static decimal CalculateTotalAutoCloseLot(AccountClass.Instrument instrument, bool isBuy, decimal unfilledLot, Dictionary <Guid, decimal> remainLotsDict) { decimal result = 0m; decimal remainUnfilledLot = unfilledLot; foreach (Transaction eachTran in instrument.GetTransactions()) { if (remainUnfilledLot <= 0) { break; } foreach (Order eachOrder in eachTran.Orders) { if (eachOrder.IsBuy != isBuy && eachOrder.IsOpen && eachOrder.Phase == OrderPhase.Executed) { var items = FilledCalculator.CalculateOrderCanCloseLot(eachOrder, unfilledLot, remainLotsDict); decimal canClosedLot = items.Item1; decimal remainLot = items.Item2; remainLotsDict[eachOrder.Id] = remainLot - canClosedLot; remainUnfilledLot -= canClosedLot; result += canClosedLot; if (remainUnfilledLot <= 0) { break; } } } } return(result); }