Esempio n. 1
0
        private int close(string pInstrument, DirectionType pPosiDire, int pCloseLots, MarketData pTick, bool pForce, double pPrice, int pCustom)
        {
            PositionField pf;

            if (!DicPositionField.TryGetValue($"{pInstrument}_{pPosiDire}", out pf))
            {
                return(pCloseLots);
            }

            var dire     = pPosiDire == DirectionType.Buy ? DirectionType.Sell : DirectionType.Buy;
            var price    = !double.IsNaN(pPrice) ? pPrice : (dire == DirectionType.Buy ? (pForce ? pTick.UpperLimitPrice : pTick.AskPrice) : (pForce ? pTick.LowerLimitPrice : pTick.BidPrice)); //板价发单
            var volClose = Math.Min(pCloseLots, pf.Position);                                                                                                                                    //可平量
            var rtn      = pCloseLots - volClose;

            if (DicInstrumentField[pInstrument].ExchangeID == Exchange.SHFE && pf.TdPosition > 0)
            {
                var tdClose = Math.Min(pf.TdPosition, volClose);
                ReqOrderInsert(pInstrument, dire, OffsetType.CloseToday, price, tdClose, pCustom: pCustom);
                volClose -= tdClose;
            }
            if (volClose > 0)
            {
                ReqOrderInsert(pInstrument, dire, OffsetType.Close, price, volClose, pCustom: pCustom);
            }
            return(rtn);
        }
Esempio n. 2
0
 /// <summary>
 /// 平仓
 /// </summary>
 /// <param name="pInstrument">合约</param>
 /// <param name="pPosiDire">平多/空仓</param>
 /// <param name="pCloseLots">要平的手数</param>
 /// <param name="pTick">合约的行情</param>
 /// <param name="pForce">是否强平(强平用板价发单,否则发对价单)</param>
 /// <param name="pPrice">指定发单价(默认为Nan)</param>
 /// <returns>少平的手数</returns>
 private int ClosePosi(string pInstrument, DirectionType pPosiDire, int pCloseLots, MarketData pTick, bool pForce)
 {
     return(close(pInstrument, pPosiDire, pCloseLots, pTick, pForce, double.NaN, _custom++));
 }