Пример #1
0
        /*
         * --------------------------------------------------------------
         * 报单/撤单,委托回报/成交回报
         * --------------------------------------------------------------
         */
        public bool OrderInsert(CustomOrder order, out string errMsg)
        {
            if (!CheckOrder(order, out errMsg))
            {
                return(false);
            }

            // 构造下单参数
            ThostFtdcInputOrderField inOrder = new ThostFtdcInputOrderField();

            inOrder.BrokerID   = BROKER_ID;
            inOrder.InvestorID = INVESTOR_ID;

            inOrder.OrderPriceType = EnumOrderPriceTypeType.LimitPrice;

            inOrder.InstrumentID        = order.InstrumentID;
            inOrder.OrderRef            = iOrderRef.ToString();
            inOrder.LimitPrice          = order.Price;
            inOrder.Direction           = (order.Direction == BS_CODE.Buy) ? EnumDirectionType.Buy : EnumDirectionType.Sell;
            inOrder.CombOffsetFlag_0    = (order.OffsetFlag == OC_CODE.Open) ? EnumOffsetFlagType.Open : EnumOffsetFlagType.Close;
            inOrder.VolumeTotalOriginal = order.Volume;

            inOrder.VolumeCondition     = EnumVolumeConditionType.AV;
            inOrder.MinVolume           = 0; // ??
            inOrder.ContingentCondition = EnumContingentConditionType.Immediately;
            inOrder.CombHedgeFlag_0     = HedgeFlagType;
            inOrder.TimeCondition       = EnumTimeConditionType.GFD;
            inOrder.ForceCloseReason    = EnumForceCloseReasonType.NotForceClose;
            inOrder.IsAutoSuspend       = 0;
            inOrder.UserForceClose      = 0;

            // 更新
            order.OrderNo = iOrderRef;
            iOrderRef++;

            // 下单
            var ret = trader.ReqOrderInsert(inOrder, iRequestID++);

            errMsg = (ret == 0) ? "-" : "CTP报单录入失败,返回值:" + ret;

            return(ret == 0);
        }