public override IEnumerable <Order> SplitOrder(Order order) { var totalWeight = InnerPortfolios.Sum(p => p.Value); var orders = InnerPortfolios .Select(p => { var newOrder = order.ReRegisterClone(newVolume: order.Balance); newOrder.Portfolio = p.Key; newOrder.Volume = order.Volume * p.Value / totalWeight; return(newOrder); }) .ToArray(); return(orders); }
public override IEnumerable <Order> SplitOrder(Order order) { var orders = InnerPortfolios .Select(p => { var newOrder = order.ReRegisterClone(newVolume: order.Balance); var price = order.Security.GetCurrentPrice(_strategy, Sides.Buy, MarketPriceTypes.Middle); if (price == null) { return(null); } newOrder.Portfolio = p.Key; newOrder.Volume = p.Key.CurrentValue * p.Value / (decimal)price; return(newOrder); }) .Where(o => o != null) .ToArray(); return(orders); }