private void RemoveWorstOrderLeg(ThreadSafeAsk ask, ProposedOrder propOrder, bool useLock = false) { while (propOrder.IsValidOrder && propOrder.BuyRatio < ask.GetBuyRatio(propOrder.SellCommodityID, propOrder.BuyCommodityID) && propOrder.ProposedQuanityBuy > 0) { var worstPerfomingOrderLeg = propOrder.RemoveWorstPerforming(useLock); if (worstPerfomingOrderLeg == null) { break; } RebalanceOrder(propOrder, useLock); propOrder.CleanUpOrder(); } }
private ProposedOrder BuildProposedOrder(ThreadSafeAsk ask, long askQuantity, IEnumerable <ProposedOrderLeg> orderLegs, bool useLock = false, bool isMarketOrder = false) { ProposedOrder propOrder = new ProposedOrder(ask); if (ask.IsBuy) { BuildProposedOrderForBuy(ask, askQuantity, orderLegs, propOrder, useLock); } else { BuildProposedOrderForSell(ask, askQuantity, orderLegs, propOrder, useLock); } propOrder.CleanUpOrder(); if (!isMarketOrder && ask.AllowPartialFill && propOrder.IsValidOrder) { RemoveWorstOrderLeg(ask, propOrder, useLock); } orderLegs = null; return(propOrder); }