Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <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);
        }