/// <summary> /// 计算冻结保证金。 /// </summary> /// <param name="orderBook"></param> /// <returns></returns> private decimal CalcOrderFronzonMargin(OrderBookCalcItem orderBook) { if (orderBook.IsFinish) { return(0m); } ; if (orderBook.OffsetType != USeOffsetType.Open) { return(0m); } int volumeMultiple = orderBook.InstrumentDetail.VolumeMultiple; USeMargin productMargin = orderBook.MarginRate; decimal frozonMargin = 0; if (orderBook.OrderSide == USeOrderSide.Buy) { frozonMargin = ((orderBook.OrderQty - orderBook.TradeQty) * productMargin.BrokerLongMarginRatioByVolume) + (orderBook.OrderPrice * (orderBook.OrderQty - orderBook.TradeQty) * volumeMultiple * productMargin.BrokerLongMarginRatioByMoney); } else if (orderBook.OrderSide == USeOrderSide.Sell) { frozonMargin += ((orderBook.OrderQty - orderBook.TradeQty) * productMargin.BrokerShortMarginRatioByVolume) + (orderBook.OrderPrice * (orderBook.OrderQty - orderBook.TradeQty) * volumeMultiple * productMargin.BrokerShortMarginRatioByMoney); } else { Debug.Assert(false); } return(frozonMargin); }
/// <summary> /// 计算冻结手续费。 /// </summary> /// <param name="orderBook"></param> /// <returns></returns> private decimal CalcOrderFronzonFee(OrderBookCalcItem orderBook) { if (orderBook.IsFinish) { return(0m); } ; if (orderBook.OffsetType != USeOffsetType.Open) { return(0m); } int volumeMultiple = orderBook.InstrumentDetail.VolumeMultiple; USeFee productFee = orderBook.FeeRate; decimal frozonFee = 0m; if (orderBook.OrderSide == USeOrderSide.Buy) { frozonFee += ((orderBook.OrderQty - orderBook.TradeQty) * productFee.OpenRatioByVolume) + (orderBook.OrderPrice * (orderBook.OrderQty - orderBook.TradeQty) * volumeMultiple * productFee.OpenRatioByMoney); } else if (orderBook.OrderSide == USeOrderSide.Sell) { frozonFee += ((orderBook.OrderQty - orderBook.TradeQty) * productFee.OpenRatioByVolume) + (orderBook.OrderPrice * (orderBook.OrderQty - orderBook.TradeQty) * volumeMultiple * productFee.OpenRatioByMoney); } else { Debug.Assert(false); } return(frozonFee); }
/// <summary> /// 查询委托回报。 /// </summary> /// <returns></returns> private List <OrderBookCalcItem> QueryOrderBooks() { USeOrderDriver orderDriver = USeManager.Instance.OrderDriver; List <USeOrderBook> orderBookList = orderDriver.QueryOrderBooks(); List <OrderBookCalcItem> list = new List <OrderBookCalcItem>(); if (orderBookList == null) { return(list); } foreach (USeOrderBook orderBookItem in orderBookList) { USeInstrumentDetail detail = orderDriver.QueryInstrumentDetail(orderBookItem.Instrument); USeMargin productMargin = orderDriver.QueryInstrumentMargin(orderBookItem.Instrument); USeFee productFee = orderDriver.QueryInstrumentFee(orderBookItem.Instrument); OrderBookCalcItem calcItem = new OrderBookCalcItem() { InstrumentDetail = detail, MarginRate = productMargin, FeeRate = productFee, OrderNum = orderBookItem.OrderNum, Account = orderBookItem.Account, Instrument = orderBookItem.Instrument, OrderQty = orderBookItem.OrderQty, OrderPrice = orderBookItem.OrderPrice, TradeQty = orderBookItem.TradeQty, TradeAmount = orderBookItem.TradeAmount, TradePrice = orderBookItem.TradePrice, TradeFee = orderBookItem.TradeFee, OrderStatus = orderBookItem.OrderStatus, CancelQty = orderBookItem.CancelQty, OrderSide = orderBookItem.OrderSide, OffsetType = orderBookItem.OffsetType, Memo = orderBookItem.Memo, OrderTime = orderBookItem.OrderTime }; list.Add(calcItem); } return(list); }