예제 #1
0
파일: Trader.cs 프로젝트: jiangjihua/Trade
 private bool PlaceOrder(ThostFtdcInputOrderField order)
 {
     using (var helper = new OrderPlacer(this.frame))
     {
         return(helper.PlaceOrder(order));
     }
 }
예제 #2
0
        public void SubmitOrder(OptionOrder order)
        {
            var input = new ThostFtdcInputOrderField
            {
                BrokerID            = this._config.BrokerId,
                InvestorID          = this._config.Account,
                InstrumentID        = order.InstrumentID,
                OrderRef            = this._session.NextOrderRef().ToString(),
                UserID              = this._config.Account,
                OrderPriceType      = EnumOrderPriceTypeType.LimitPrice,
                Direction           = order.Side == OrderSide.Buy ? EnumDirectionType.Buy : EnumDirectionType.Sell,
                CombOffsetFlag_0    = order.OpenClose == OpenClose.Open ? EnumOffsetFlagType.Open : EnumOffsetFlagType.Close,
                CombHedgeFlag_0     = EnumHedgeFlagType.Speculation,
                LimitPrice          = Math.Round(order.Price, 4),
                VolumeTotalOriginal = order.Qty,
                TimeCondition       = EnumTimeConditionType.GFD,
                VolumeCondition     = EnumVolumeConditionType.AV,
                ContingentCondition = EnumContingentConditionType.Immediately,
                ForceCloseReason    = EnumForceCloseReasonType.NotForceClose,
                IsAutoSuspend       = 0,
            };
            var ret = this._trade.ReqOrderInsert(input, this._session.NextRequestID());

            if (ret != 0)
            {
                this.OnLog(string.Format("下单失败,返回{0}", ret));
            }
        }
예제 #3
0
 private void CtpTrader_OnErrRtnOrderInsert(ThostFtdcInputOrderField pInputOrder, ThostFtdcRspInfoField pRspInfo)
 {
     if (pRspInfo != null)
     {
         Console.WriteLine(pRspInfo.ErrorMsg);
     }
 }
예제 #4
0
파일: TraderAdapter.cs 프로젝트: damoye/QTS
        public void InsertOrder(InputOrder order)
        {
            LogCenter.Log("下单:" + order.ToString());
            var field = new ThostFtdcInputOrderField
            {
                BrokerID            = order.BrokerID,
                InvestorID          = order.InvestorID,
                Direction           = (EnumDirectionType)order.Direction,
                CombOffsetFlag_0    = (EnumOffsetFlagType)order.OffsetFlag,
                InstrumentID        = order.InstrumentID,
                LimitPrice          = order.Price,
                VolumeTotalOriginal = order.Volume,
                UserID = order.GroupID,

                CombHedgeFlag_0     = EnumHedgeFlagType.Speculation,
                ForceCloseReason    = EnumForceCloseReasonType.NotForceClose,
                ContingentCondition = EnumContingentConditionType.Immediately,
                TimeCondition       = EnumTimeConditionType.GFD,
                VolumeCondition     = EnumVolumeConditionType.AV,
                OrderPriceType      = EnumOrderPriceTypeType.LimitPrice,
                MinVolume           = 1,
                IsAutoSuspend       = 1,
            };
            int i = this.ReqOrderInsert(field, 0);

            if (i != 0)
            {
                LogCenter.Error("输入报单错误:" + CTPErrorHelper.GetError(i));
            }
        }
예제 #5
0
        /// <summary>
        /// 报单错误回报
        /// </summary>
        /// <param name="pInputOrder"></param>
        /// <param name="pRspInfo"></param>
        /// <param name="nRequestID"></param>
        /// <param name="bIsLast"></param>
        public void HandleErrRtnOrderInsert(ThostFtdcInputOrderField pInputOrder, ThostFtdcRspInfoField pRspInfo)
        {
            var order = new OrderData();

            order.gatewayName = this.Gateway.gatewayName;
            order.symbol      = pInputOrder.InstrumentID;
            order.vtSymbol    = pInputOrder.InstrumentID;
            order.exchange    = pInputOrder.ExchangeID;
            order.orderID     = pInputOrder.OrderRef;
            order.vtOrderID   = order.vtSymbol + '.' + order.orderID;
            order.direction   = (string)TradeConstantDicSetting.DirectionTypeDic[pInputOrder.Direction];
            order.offset      = (string)TradeConstantDicSetting.OffsetTypeDic[pInputOrder.CombOffsetFlag_0];
            order.status      = TradeCanstant.statusReject;
            order.price       = pInputOrder.LimitPrice;
            order.totalVolume = pInputOrder.VolumeTotalOriginal;

            ///推送委托信息
            this.Gateway.MainController.MainEvent._OnOrder.Invoke(order);

            ///错误推送
            var errorData = new ErrorData();

            errorData.gatewayName = this.Gateway.gatewayName;
            errorData.errorID     = Convert.ToString(pRspInfo.ErrorID);
            errorData.errorMsg    = pRspInfo.ErrorMsg;
            this.Gateway.MainController.MainEvent._OnError.Invoke(errorData);
        }
예제 #6
0
        void ReqOrderInsert()
        {
            ThostFtdcInputOrderField req = new ThostFtdcInputOrderField();

            ///经纪公司代码
            req.BrokerID = BROKER_ID;
            ///投资者代码
            req.InvestorID = INVESTOR_ID;
            ///合约代码
            req.InstrumentID = INSTRUMENT_ID;
            ///报单引用
            req.OrderRef = ORDER_REF;


            ///用户代码
            //	TThostFtdcUserIDType	UserID;
            ///报单价格条件: 限价
            req.OrderPriceType = CTP.EnumOrderPriceTypeType.LimitPrice;
            ///买卖方向:
            req.Direction = DIRECTION;
            ///组合开平标志: 开仓
            req.CombOffsetFlag_0 = CTP.EnumOffsetFlagType.Open;


            ///组合投机套保标志
            req.CombHedgeFlag_0 = CTP.EnumHedgeFlagType.Speculation;
            ///价格
            req.LimitPrice = LIMIT_PRICE;
            ///数量: 1
            req.VolumeTotalOriginal = 1;
            ///有效期类型: 当日有效
            req.TimeCondition = CTP.EnumTimeConditionType.GFD;
            ///GTD日期
            //	TThostFtdcDateType	GTDDate;
            ///成交量类型: 任何数量
            req.VolumeCondition = CTP.EnumVolumeConditionType.AV;
            ///最小成交量: 1
            req.MinVolume = 1;
            ///触发条件: 立即
            req.ContingentCondition = CTP.EnumContingentConditionType.Immediately;
            ///止损价
            //	TThostFtdcPriceType	StopPrice;
            ///强平原因: 非强平
            req.ForceCloseReason = CTP.EnumForceCloseReasonType.NotForceClose;
            ///自动挂起标志: 否
            req.IsAutoSuspend = 0;
            ///业务单元
            //	TThostFtdcBusinessUnitType	BusinessUnit;
            ///请求编号
            //	TThostFtdcRequestIDType	RequestID;
            ///用户强评标志: 否
            req.UserForceClose = 0;


            int iResult = api.ReqOrderInsert(req, ++iRequestID);

            Console.WriteLine("--->>> 报单录入请求: " + ((iResult == 0) ? "成功" : "失败"));
        }
예제 #7
0
        private void CtpTrader_OnRspOrderInsert(ThostFtdcInputOrderField pInputOrder, ThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
        {
            if (pRspInfo != null)
            {
                Console.WriteLine(pRspInfo.ErrorMsg);
            }

            isSuccess = false;
            autoResetEventOrderCompleted.Set();
        }
예제 #8
0
 public static string ToString2(this ThostFtdcInputOrderField field)
 {
     return(string.Format("OrderRef:{0},{1},{2} {3} {4} {5} {6}",
                          field.OrderRef,
                          field.UserID,
                          field.CombOffsetFlag_0,
                          field.Direction,
                          field.VolumeTotalOriginal,
                          field.InstrumentID,
                          field.LimitPrice
                          ));
 }
예제 #9
0
        /// <summary>
        /// 发单!
        /// </summary>
        /// <param name="order"></param>
        public void SendOrder(OrderReq order)
        {
            ThostFtdcInputOrderField req = new ThostFtdcInputOrderField();

            ///经纪公司代码
            req.BrokerID = this.BrokerID;
            ///投资者代码
            req.InvestorID = this.UserID;
            ///合约代码
            req.InstrumentID = order.symbol;
            ///报单本地委托号,待处理
            //req.OrderRef = ORDER_REF;
            ///用户代码
            //	TThostFtdcUserIDType	UserID;
            ///报单价格条件: 限价
            req.OrderPriceType = CTP.EnumOrderPriceTypeType.LimitPrice;
            ///买卖方向:
            req.Direction = (EnumDirectionType)order.direction;
            ///组合开平标志: 开仓
            req.CombOffsetFlag_0 = CTP.EnumOffsetFlagType.Open;
            ///组合投机套保标志
            req.CombHedgeFlag_0 = CTP.EnumHedgeFlagType.Speculation;
            ///价格
            req.LimitPrice = order.price;
            ///数量: 1
            req.VolumeTotalOriginal = order.volume;
            ///有效期类型: 当日有效
            req.TimeCondition = CTP.EnumTimeConditionType.GFD;
            ///GTD日期
            //	TThostFtdcDateType	GTDDate;
            ///成交量类型: 任何数量
            req.VolumeCondition = CTP.EnumVolumeConditionType.AV;
            ///最小成交量: 1
            req.MinVolume = 1;
            ///触发条件: 立即
            req.ContingentCondition = CTP.EnumContingentConditionType.Immediately;
            ///止损价
            //	TThostFtdcPriceType	StopPrice;
            ///强平原因: 非强平
            req.ForceCloseReason = CTP.EnumForceCloseReasonType.NotForceClose;
            ///自动挂起标志: 否
            req.IsAutoSuspend = 0;
            ///业务单元
            //	TThostFtdcBusinessUnitType	BusinessUnit;
            ///请求编号
            //	TThostFtdcRequestIDType	RequestID;
            ///用户强评标志: 否
            req.UserForceClose = 0;

            int iResult = this.ReqOrderInsert(req, ++this.reqID);

            Console.WriteLine("--->>> 报单请求: " + ((iResult == 0) ? "成功" : "失败"));
        }
예제 #10
0
파일: Trader.cs 프로젝트: jiangjihua/Trade
        private bool BuyToCover(double price, int timeout)
        {
            ThostFtdcInputOrderField order = frame.CreateOrder();

            order.CombOffsetFlag_0    = EnumOffsetFlagType.CloseToday;
            order.Direction           = EnumDirectionType.Buy;
            order.InstrumentID        = instrumentID;
            order.VolumeTotalOriginal = Volume;
            order.LimitPrice          = price;
            order.StopPrice           = price;
            order.ContingentCondition = EnumContingentConditionType.Immediately;
            //order.VolumeCondition = EnumVolumeConditionType.CV;

            return(PlaceOrder(order, timeout));
        }
예제 #11
0
파일: Trader.cs 프로젝트: jiangjihua/Trade
        private bool SellImmediately()
        {
            ThostFtdcInputOrderField order = frame.CreateOrder();

            order.CombOffsetFlag_0    = EnumOffsetFlagType.CloseToday;
            order.Direction           = EnumDirectionType.Sell;
            order.InstrumentID        = instrumentID;
            order.VolumeTotalOriginal = Volume;
            order.LimitPrice          = lastQuote.LowerLimitPrice;
            order.StopPrice           = lastQuote.LowerLimitPrice;
            order.ContingentCondition = EnumContingentConditionType.Immediately;
            //order.VolumeCondition = EnumVolumeConditionType.CV;

            return(PlaceOrder(order));
        }
예제 #12
0
        public bool PlaceOrder(ThostFtdcInputOrderField order)
        {
            isSuccess = false;

            autoResetEventOrderCompleted = new AutoResetEvent(false);
            frame.CtpTrader.OnRtnOrder  += CtpTrader_OnRtnOrder;

            Console.WriteLine("Send order.({0})", order.ToString2());
            frame.CtpTrader.ReqOrderInsert(order);

            autoResetEventOrderCompleted.WaitOne();
            frame.CtpTrader.OnRtnOrder -= CtpTrader_OnRtnOrder;

            return(isSuccess);
        }
예제 #13
0
파일: Trader.cs 프로젝트: jiangjihua/Trade
        private bool SellShort(double targetPrice)
        {
            ThostFtdcInputOrderField order = frame.CreateOrder();

            order.CombOffsetFlag_0    = EnumOffsetFlagType.Open;
            order.Direction           = EnumDirectionType.Sell;
            order.InstrumentID        = instrumentID;
            order.VolumeTotalOriginal = Volume;
            order.LimitPrice          = targetPrice;
            order.StopPrice           = targetPrice;
            order.ContingentCondition = EnumContingentConditionType.Immediately;
            //order.VolumeCondition = EnumVolumeConditionType.CV;

            return(PlaceOrder(order));
        }
예제 #14
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);
        }
예제 #15
0
        public ThostFtdcInputOrderField CreateOrder()
        {
            var orderField = new ThostFtdcInputOrderField()
            {
                BrokerID         = AccountInfo.BrokerID,
                InvestorID       = AccountInfo.InvestorID,
                CombHedgeFlag_0  = EnumHedgeFlagType.Speculation,
                OrderPriceType   = EnumOrderPriceTypeType.LimitPrice,
                IsAutoSuspend    = 0,
                IsSwapOrder      = 0,
                MinVolume        = 1,
                TimeCondition    = EnumTimeConditionType.GFD,
                VolumeCondition  = EnumVolumeConditionType.AV,
                UserForceClose   = 0,
                OrderRef         = (++orderRef).ToString(),
                ForceCloseReason = EnumForceCloseReasonType.NotForceClose,
            };

            return(orderField);
        }
예제 #16
0
        /// <summary>
        /// 下单、超时撤单
        /// </summary>
        /// <param name="order"></param>
        /// <param name="timeout"></param>
        /// <returns></returns>
        public bool PlaceOrder(ThostFtdcInputOrderField order, int timeout)
        {
            isSuccess = true;

            autoResetEventOrderCompleted = new AutoResetEvent(false);
            frame.CtpTrader.OnRtnOrder  += CtpTrader_OnRtnOrder;

            Console.WriteLine("Send order. ({0})", order.ToString2());
            frame.CtpTrader.ReqOrderInsert(order);

            var isTimeout = !autoResetEventOrderCompleted.WaitOne(timeout);

            if (isTimeout)
            {
                isSuccess = false;
                frame.CtpTrader.OnRspOrderAction += CtpTrader_OnRspOrderAction;
                var cancelOrder = new ThostFtdcInputOrderActionField()
                {
                    ActionFlag   = EnumActionFlagType.Delete,
                    BrokerID     = orderOnWay.BrokerID,
                    InvestorID   = orderOnWay.InvestorID,
                    InstrumentID = orderOnWay.InstrumentID,
                    FrontID      = orderOnWay.FrontID,
                    SessionID    = orderOnWay.SessionID,
                    OrderSysID   = orderOnWay.OrderSysID,
                    OrderRef     = orderOnWay.OrderRef,
                    ExchangeID   = orderOnWay.ExchangeID,
                };
                Console.WriteLine("撤单。({0})", cancelOrder.ToString2());
                frame.CtpTrader.ReqOrderAction(cancelOrder);

                autoResetEventOrderCompleted.WaitOne();
            }

            frame.CtpTrader.OnRtnOrder -= CtpTrader_OnRtnOrder;

            return(isSuccess);
        }
예제 #17
0
 /// <summary>
 /// 交易所发回的报单错误
 /// </summary>
 /// <param name="pInputOrder"></param>
 /// <param name="pRspInfo"></param>
 private void TraderAdapter_OnErrRtnOrderInsert(ThostFtdcInputOrderField pInputOrder,
                                                ThostFtdcRspInfoField pRspInfo)
 {
 }
예제 #18
0
 private void OnRspOrderInsert(ThostFtdcInputOrderField pInputOrder, ThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
 {
     __DEBUGPF__();
     IsErrorRspInfo(pRspInfo);
 }
예제 #19
0
 private void OnErrRtnOrderInsert(ThostFtdcInputOrderField pInputOrder, ThostFtdcRspInfoField pRspInfo)
 {
     __DEBUGPF__();
     IsErrorRspInfo(pRspInfo);
 }
예제 #20
0
        /// <summary>
        /// 保单录入请求
        /// </summary>
        void ReqOrderInsert()
        {
            ThostFtdcInputOrderField req = new ThostFtdcInputOrderField();
            //经纪公司代码
            req.BrokerID = BROKER_ID;
            //投资者代码
            req.InvestorID = INVESTOR_ID;
            //合约代码
            req.InstrumentID = INSTRUMENT_ID;
            //报单引用
            req.OrderRef = ORDER_REF;
            //报单价格条件: 限价
            req.OrderPriceType = KSFT.EnumOrderPriceTypeType.LimitPrice;
            //买卖方向:
            req.Direction = DIRECTION;
            //组合开平标志: 开仓
            req.CombOffsetFlag_0 = KSFT.EnumOffsetFlagType.Open;
            //组合投机套保标志
            req.CombHedgeFlag_0 = KSFT.EnumHedgeFlagType.Speculation;
            //价格
            req.LimitPrice = LIMIT_PRICE;
            //数量: 1
            req.VolumeTotalOriginal = 1;
            //有效期类型: 当日有效
            req.TimeCondition = KSFT.EnumTimeConditionType.GFD;
            //成交量类型: 任何数量
            req.VolumeCondition = KSFT.EnumVolumeConditionType.AV;
               //最小成交量: 1
            req.MinVolume = 1;
            //触发条件: 立即
            req.ContingentCondition = KSFT.EnumContingentConditionType.Immediately;
            //强平原因: 非强平
            req.ForceCloseReason = KSFT.EnumForceCloseReasonType.NotForceClose;
            //自动挂起标志: 否
            req.IsAutoSuspend = 0;
            //请求编号
            req.RequestID = iRequestID;
            //用户强评标志: 否
            req.UserForceClose = 0;

            int iResult = api.ReqOrderInsert(req, ++iRequestID);
            Console.WriteLine("--->>> 报单录入请求: " + ((iResult == 0) ? "成功" : "失败"));
        }
예제 #21
0
        /// <summary>
        /// 下单
        /// </summary>
        /// <param name="sender">单子来源 Quote/Arbitrage</param>
        /// <param name="instrumentID">合约ID</param>
        /// <param name="directionType">买卖方向 Buy/Sell</param>
        /// <param name="offsetFlagType">开平标记 Open/CloseToday</param>
        /// <param name="lots">数量</param>
        /// <param name="price">价格</param>
        /// <returns>报单引用OrderRef</returns>
        public string PlaceOrder(object sender, string instrumentID, EnumDirectionType directionType, EnumOffsetFlagType offsetFlagType, int lots, double price)
        {
            ThostFtdcInputOrderField req = new ThostFtdcInputOrderField();
            ///经纪公司代码
            req.BrokerID = trader.BrokerID;
            ///投资者代码
            req.InvestorID = trader.InvestorID;
            ///合约代码
            req.InstrumentID = instrumentID;
            ///报单价格条件: 限价
            req.OrderPriceType = CTP.EnumOrderPriceTypeType.LimitPrice;
            ///买卖方向:
            req.Direction = directionType;
            ///组合开平标志: 开仓
            req.CombOffsetFlag_0 = offsetFlagType;
            ///组合投机套保标志
            req.CombHedgeFlag_0 = CTP.EnumHedgeFlagType.Speculation;
            ///价格
            req.LimitPrice = price;
            ///数量: 1
            req.VolumeTotalOriginal = lots;
            ///有效期类型: 当日有效
            req.TimeCondition = CTP.EnumTimeConditionType.GFD;
            ///成交量类型: 任何数量
            req.VolumeCondition = CTP.EnumVolumeConditionType.AV;
            ///最小成交量: 1
            req.MinVolume = 1;
            ///触发条件: 立即
            req.ContingentCondition = CTP.EnumContingentConditionType.Immediately;
            ///强平原因: 非强平
            req.ForceCloseReason = CTP.EnumForceCloseReasonType.NotForceClose;
            ///自动挂起标志: 否
            req.IsAutoSuspend = 0;
            ///用户强评标志: 否
            req.UserForceClose = 0;
            OrderRef++;
            req.OrderRef = OrderRef.ToString();
            int iResult = trader.ReqOrderInsert(req, ++RequestID);

            //OrderRef2ArbitrageStategyMap.Add(req.OrderRef, (Arbitrage)sender);

            return req.OrderRef;
        }
예제 #22
0
        /// <summary>
        /// 保单录入应答
        /// </summary>
        /// <param name="pInputOrder"></param>
        /// <param name="pRspInfo"></param>
        /// <param name="nRequestID"></param>
        /// <param name="bIsLast"></param>
        void OnRspOrderInsert(ThostFtdcInputOrderField pInputOrder, ThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
        {
            DebugPrintFunc(new StackTrace());

            if (bIsLast && !IsErrorRspInfo(pRspInfo))
            {
                //合约保证金率查询请求
                ReqQryInstrumentMarginRate();
            }
        }
예제 #23
0
 /// <summary>
 /// 保单录入错误回报
 /// </summary>
 /// <param name="pInputOrder"></param>
 /// <param name="pRspInfo"></param>
 void OnErrRtnOrderInsert(ThostFtdcInputOrderField pInputOrder, ThostFtdcRspInfoField pRspInfo)
 {
     DebugPrintFunc(new StackTrace());
     IsErrorRspInfo(pRspInfo);
 }
예제 #24
0
        /// <summary>
        /// 报单录入请求响应
        /// </summary>
        /// <param name="pInputOrder"></param>
        /// <param name="pRspInfo"></param>
        /// <param name="nRequestID"></param>
        /// <param name="bIsLast"></param>
        private void OnRspOrderInsert(ThostFtdcInputOrderField pInputOrder, ThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
        {
            //交易系统已接收报单
            IsErrorRspInfo(pRspInfo);
            {

            }
        }
예제 #25
0
        /// <summary>
        /// 交易接口->发单操作
        /// </summary>
        /// <param name="pInputOrder"></param>
        /// <param name="bShow"></param>
        public void TDReqOrderInsert(ThostFtdcInputOrderField pInputOrder, bool bShow = false)
        {
            pInputOrder.BrokerID = this.sBrokerID;
            pInputOrder.InvestorID = this.sUserID;
            pInputOrder.BusinessUnit = null;
            if (pInputOrder.OrderRef == null)
            {
                pInputOrder.OrderRef = (iOrderRefID++).ToString();
            }
            if (pInputOrder.MinVolume < 1) pInputOrder.MinVolume = 1;

            int k = CtpTDApi.ReqOrderInsert(pInputOrder, ++nRequestID);
            if ((k == -3 || k == -2) && bShow)
            {
                MessageBox.Show("大佬,你点的我好疼啊,小女子不堪重负啊,你等等在玩我吧~");
            }
            else if (k != 0 && bShow)
            {
                MessageBox.Show("大佬,我脑袋秀逗了,你帮我看看是否我已经登录?");
            }
        }
예제 #26
0
 void OnRspOrderInsert(ThostFtdcInputOrderField pInputOrder, ThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
 {
     DebugPrintFunc(new StackTrace());
     IsErrorRspInfo(pRspInfo);
 }
예제 #27
0
파일: TraderAdapter.cs 프로젝트: damoye/QTS
 public override void OnRspOrderInsert(ThostFtdcInputOrderField pInputOrder, ThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
 {
     LogCenter.Error("报单录入请求响应:{0} {1}", pRspInfo.ErrorMsg, pRspInfo.ErrorID);
 }
예제 #28
0
파일: TraderAdapter.cs 프로젝트: botvs/QTS
 public override void OnRspOrderInsert(ThostFtdcInputOrderField pInputOrder, ThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
 {
     LogCenter.Error("报单录入请求响应:{0} {1}", pRspInfo.ErrorMsg, pRspInfo.ErrorID);
 }
예제 #29
0
        /// <summary>
        /// 发单按钮点击事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Button_OrderInput_Click(object sender, EventArgs e)
        {
            if (TextBox_Trader_InstrumentName.Text == "")
            {
                MessageBox.Show("请输入合约名称!", "错误!");
                return;
            }
            ThostFtdcInputOrderField sInputOrder = new ThostFtdcInputOrderField();
            sInputOrder.InstrumentID = TextBox_Trader_InstrumentName.Text;
            iOrderRefID = iOrderRefID + 1;
            sInputOrder.BrokerID = sBrokerID;
            sInputOrder.InvestorID = sUserID;
            sInputOrder.OrderRef = (iOrderRefID).ToString();
            sInputOrder.BusinessUnit = null;
            sInputOrder.RequestID = nRequestID++;

            sInputOrder.UserForceClose = 0;
            sInputOrder.ForceCloseReason = EnumForceCloseReasonType.NotForceClose;
            sInputOrder.IsAutoSuspend = 0;

            #region 报单价格及价格条件
            if (radioButton_AnyPrice.Checked)
            {
                sInputOrder.OrderPriceType = EnumOrderPriceTypeType.AnyPrice;
                sInputOrder.LimitPrice = 0;
            }
            else if (radioButton_LimitePrice.Checked || this.textBox_OrderPrice.Text.ToString() != "")
            {
                sInputOrder.OrderPriceType = EnumOrderPriceTypeType.LimitPrice;
                try
                {
                    sInputOrder.LimitPrice = double.Parse(this.textBox_OrderPrice.Text.ToString());
                }
                catch (Exception ec)
                {
                    MessageBox.Show("限价单价格输入错误!\n\n错误信息:\n" + ec.Message, "错误!");
                    return;
                }
            }
            #endregion
            #region 开平按钮
            if (radioButton_Open.Checked)
            {
                sInputOrder.CombOffsetFlag = EnumOffsetFlagType.Open;
            }
            else if (radioButton_CloseALL.Checked)
            {
                sInputOrder.CombOffsetFlag = EnumOffsetFlagType.Close;
            }
            else if (radioButton_CloseToday.Checked)
            {
                sInputOrder.CombOffsetFlag = EnumOffsetFlagType.CloseToday;
            }
            else if (radioButton_CloseYestoday.Checked)
            {
                sInputOrder.CombOffsetFlag = EnumOffsetFlagType.CloseYesterday;
            }
            #endregion 开平按钮
            #region 买卖按钮
            if (radioButton_Buy.Checked)
            {
                sInputOrder.Direction = EnumDirectionType.Buy;
            }
            else if (radioButton_Sell.Checked)
            {
                sInputOrder.Direction = EnumDirectionType.Sell;
            }
            #endregion
            #region 投机套保按钮
            if (this.radioButton_HedgeFlagSpeculation.Checked)
            {
                sInputOrder.CombHedgeFlag = EnumHedgeFlagType.Speculation;
            }
            else if (this.radioButton_HedgeFlagArbitrage.Checked)
            {
                sInputOrder.CombHedgeFlag = EnumHedgeFlagType.Arbitrage;
            }
            else if (this.radioButton_HedgeFlagArbitrage.Checked)
            {
                sInputOrder.CombHedgeFlag = EnumHedgeFlagType.Hedge;
            }

            #endregion 投机套保按钮
            #region 成交量类型
            switch (this.comboBox_VolumeCondition.Text)
            {
                case "任意数量":
                    sInputOrder.VolumeCondition = EnumVolumeConditionType.AV;
                    break;
                case "最小数量":
                    sInputOrder.VolumeCondition = EnumVolumeConditionType.MV;
                    break;
                case "全部数量":
                    sInputOrder.VolumeCondition = EnumVolumeConditionType.CV;
                    break;
                default:
                    sInputOrder.VolumeCondition = EnumVolumeConditionType.AV;
                    break;

            }
            #endregion
            #region 触发条件
            switch (this.comboBox_ContingentCondition.Text)
            {
                case "立即":
                    sInputOrder.ContingentCondition = EnumContingentConditionType.Immediately;
                    break;
                case "止损":
                    sInputOrder.ContingentCondition = EnumContingentConditionType.Touch;
                    break;
                case "止赢":
                    sInputOrder.ContingentCondition = EnumContingentConditionType.TouchProfit;
                    break;
                case "预埋单":
                    sInputOrder.ContingentCondition = EnumContingentConditionType.ParkedOrder;
                    break;
                case "最新价大于条件价":
                    sInputOrder.ContingentCondition = EnumContingentConditionType.LastPriceGreaterThanStopPrice;
                    break;
                case "最新价大于等于条件价":
                    sInputOrder.ContingentCondition = EnumContingentConditionType.LastPriceGreaterEqualStopPrice;
                    break;
                case "最新价小于条件价":
                    sInputOrder.ContingentCondition = EnumContingentConditionType.LastPriceLesserThanStopPrice;
                    break;
                case "最新价小于等于条件价":
                    sInputOrder.ContingentCondition = EnumContingentConditionType.LastPriceLesserEqualStopPrice;
                    break;
                case "卖一价大于条件价":
                    sInputOrder.ContingentCondition = EnumContingentConditionType.AskPriceGreaterThanStopPrice;
                    break;
                case "卖一价大于等于条件价":
                    sInputOrder.ContingentCondition = EnumContingentConditionType.AskPriceGreaterEqualStopPrice;
                    break;
                case "卖一价小于条件价":
                    sInputOrder.ContingentCondition = EnumContingentConditionType.AskPriceLesserThanStopPrice;
                    break;
                case "卖一价小于等于条件价":
                    sInputOrder.ContingentCondition = EnumContingentConditionType.AskPriceLesserEqualStopPrice;
                    break;
                case "买一价大于条件价":
                    sInputOrder.ContingentCondition = EnumContingentConditionType.BidPriceGreaterThanStopPrice;
                    break;
                case "买一价大于等于条件价":
                    sInputOrder.ContingentCondition = EnumContingentConditionType.BidPriceGreaterEqualStopPrice;
                    break;
                case "买一价小于条件价":
                    sInputOrder.ContingentCondition = EnumContingentConditionType.BidPriceLesserThanStopPrice;
                    break;
                case "买一价小于等于条件价":
                    sInputOrder.ContingentCondition = EnumContingentConditionType.BidPriceLesserEqualStopPrice;
                    break;
                default:
                    sInputOrder.ContingentCondition = EnumContingentConditionType.Immediately;
                    break;
            }
            #endregion
            #region 有效期限
            switch (this.comboBox_TimeCondition.Text)
            {
                case "立即完成":
                    sInputOrder.TimeCondition = EnumTimeConditionType.IOC;
                    break;
                case "本节有效":
                    sInputOrder.TimeCondition = EnumTimeConditionType.GFS;
                    break;
                case "当日有效":
                    sInputOrder.TimeCondition = EnumTimeConditionType.GFD;
                    break;
                case "指定日期前有效":
                    sInputOrder.TimeCondition = EnumTimeConditionType.GTD;
                    break;
                case "撤销前有效":
                    sInputOrder.TimeCondition = EnumTimeConditionType.GTC;
                    break;
                case "集合竞价有效":
                    sInputOrder.TimeCondition = EnumTimeConditionType.GFA;
                    break;
                default:
                    sInputOrder.TimeCondition = EnumTimeConditionType.IOC;
                    break;
            }
            #endregion
            #region 报单数量
            sInputOrder.VolumeTotalOriginal = (int)numericUpDown_OrderNumber.Value;
            sInputOrder.MinVolume = (int)numericUpDown_MinVolume.Value;
            #endregion 报单数量
            this.TDReqOrderInsert(sInputOrder, true);
            if (checkBox_ResetAfterSend.Checked)
                this.RestSendOrderFiled();
        }
예제 #30
0
 private void PolicySampleRUN(object s)
 {
     MainForm cMainForm = (MainForm)s;
     ThostFtdcInputOrderField sInputOrder = new ThostFtdcInputOrderField();
     ThostFtdcDepthMarketDataField pDepthMarketData = new ThostFtdcDepthMarketDataField();
     QueueSendData Data = new QueueSendData();
     while (Queue_PolicySample.bUse)
     {
         if (Queue_PolicySample.DataQ.Count == 0)
         {
             Queue_PolicySample.Are.WaitOne();
             Queue_PolicySample.Are.Reset();
         }
         else
         {
             Data = Queue_PolicySample.DataQ.Dequeue();
             #region 这里写策略
             switch (Data.QueueType)
             {
                 case EnumQueueType.DepthMarketData:
                     Queue_PolicySample.m_lReceiveNum++;
                     pDepthMarketData = (ThostFtdcDepthMarketDataField)Data.QueueData;
                     if (pDepthMarketData.InstrumentID == "IF1309")
                     {
                         Queue_PolicySample.m_lRunNum++;
                         Queue_PolicySample.add_log("插入报单!触发单:" + pDepthMarketData.InstrumentID + " \n时间:" + pDepthMarketData.UpdateTime);
                         // cMainForm.TDReqOrderInsert(sInputOrder);
                     }
                     else
                     {
                         Queue_PolicySample.m_lDropNum++;
                     }
                     break;
                 case EnumQueueType.OnRtnOrder:
                     break;
                 case EnumQueueType.StopSign0:
                     Queue_PolicySample.bUse = false;
                     return;
                 default:
                     break;
             }
             #endregion
         }
     }
     Queue_PolicySample.bUse = false;
 }
예제 #31
0
파일: TraderAdapter.cs 프로젝트: botvs/QTS
 public override void OnRspOrderInsert(ThostFtdcInputOrderField pInputOrder, ThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
 {
     throw new NotImplementedException();
 }
예제 #32
0
 private void TraderAdapter_OnRspOrderInsert(ThostFtdcInputOrderField pInputOrder, ThostFtdcRspInfoField pRspInfo,
                                             int nRequestId, bool bIsLast)
 {
 }
예제 #33
0
 ///报单录入请求响应
 public void OnRspOrderInsert(ThostFtdcInputOrderField pInputOrder, ThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
 {
     if (!IsErrorRspInfo(pRspInfo))
     {
     }
 }
예제 #34
0
 /// <summary>
 /// 报单录入错误回报
 /// </summary>
 /// <param name="pInputOrder"></param>
 /// <param name="pRspInfo"></param>
 void OnErrRtnOrderInsert(ThostFtdcInputOrderField pInputOrder, ThostFtdcRspInfoField pRspInfo)
 {
 }
예제 #35
0
파일: TraderAdapter.cs 프로젝트: botvs/QTS
        public void InsertOrder(InputOrder order)
        {
            LogCenter.Log("下单:" + order.ToString());
            var field = new ThostFtdcInputOrderField
            {
                BrokerID = order.BrokerID,
                InvestorID = order.InvestorID,
                Direction = (EnumDirectionType)order.Direction,
                CombOffsetFlag_0 = (EnumOffsetFlagType)order.OffsetFlag,
                InstrumentID = order.InstrumentID,
                LimitPrice = order.Price,
                VolumeTotalOriginal = order.Volume,
                UserID = order.GroupID,

                CombHedgeFlag_0 = EnumHedgeFlagType.Speculation,
                ForceCloseReason = EnumForceCloseReasonType.NotForceClose,
                ContingentCondition = EnumContingentConditionType.Immediately,
                TimeCondition = EnumTimeConditionType.GFD,
                VolumeCondition = EnumVolumeConditionType.AV,
                OrderPriceType = EnumOrderPriceTypeType.LimitPrice,
                MinVolume = 1,
                IsAutoSuspend = 1,
            };
            int i = this.ReqOrderInsert(field, 0);
            if (i != 0)
            {
                LogCenter.Error("输入报单错误:" + CTPErrorHelper.GetError(i));
            }
        }
예제 #36
0
 ///报单录入错误回报
 public void OnErrRtnOrderInsert(ThostFtdcInputOrderField pInputOrder, ThostFtdcRspInfoField pRspInfo)
 {
     if (!IsErrorRspInfo(pRspInfo))
     {
     }
 }
예제 #37
0
 public static extern int TdReqOrderInsert(IntPtr pApi, ThostFtdcInputOrderField pInputOrder, int nRequestID);
예제 #38
0
 /// <summary>
 /// ""发单错误(柜台)"""
 /// </summary>
 /// <param name="pInputOrder"></param>
 /// <param name="pRspInfo"></param>
 /// <param name="nRequestID"></param>
 /// <param name="bIsLast"></param>
 public void HandleOnRspOrderInsert(ThostFtdcInputOrderField pInputOrder, ThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
 {
     Console.WriteLine("发单错误(柜台)");
 }
예제 #39
0
 /// <summary>
 ///报单录入请求
 /// </summary>
 public int ReqOrderInsert(ThostFtdcInputOrderField pInputOrder, int nRequestID)
 {
     return(Interop.TdReqOrderInsert(Handle, pInputOrder, nRequestID));
 }
예제 #40
0
파일: TraderAdapter.cs 프로젝트: damoye/QTS
 public override void OnRspOrderInsert(ThostFtdcInputOrderField pInputOrder, ThostFtdcRspInfoField pRspInfo, int nRequestID, bool bIsLast)
 {
     throw new NotImplementedException();
 }