示例#1
0
        /// <summary>
        /// 委托单是否属于该任务。
        /// </summary>
        /// <param name="orderNum"></param>
        /// <returns></returns>
        public bool ContainsOrderBook(USeOrderNum orderNum)
        {
            foreach (ArbitrageTask task in m_taskList)
            {
                if (task.ContainsOrderBook(orderNum))
                {
                    return(true);
                }
            }

            return(false);
        }
示例#2
0
        /// <summary>
        /// 委托单是否属于该任务。
        /// </summary>
        /// <param name="orderNum">委托单号。</param>
        /// <returns></returns>
        public bool ContainsOrderBook(USeOrderNum orderNum)
        {
            if (m_firstSubTask.ContainsOrderBook(orderNum))
            {
                return(true);
            }
            if (m_secondSubTask.ContainsOrderBook(orderNum))
            {
                return(true);
            }

            return(false);
        }
示例#3
0
        /// <summary>
        /// 查询指定委托单号的委托回报。
        /// </summary>
        /// <param name="orderNum"></param>
        /// <returns></returns>
        public override USeOrderBook QueryOrderBook(USeOrderNum orderNum)
        {
            USeOrderBook order_book = new USeOrderBook();

            order_book = (from p in m_dataBuffer.OrderBookList
                          where p.OrderNum == orderNum
                          select p).FirstOrDefault();
            if (order_book == null)
            {
                return(null);
            }

            return(order_book);
        }
示例#4
0
        public void CanceledOrder(USeOrderNum orderNum)
        {
            USeOrderBook order_book = (from p in m_dataBuffer.OrderBookList
                                       where p.OrderNum.Equals(orderNum)
                                       select p).FirstOrDefault();

            if (order_book == null)
            {
                return;
            }

            string error = string.Empty;

            CancelOrder(order_book.OrderNum, null, out error);
        }
示例#5
0
        public bool CanceledOrderActionReturn(USeOrderNum orderNum, bool isCancelSucceed)
        {
            if (isCancelSucceed == false)
            {
                return(false);
            }

            string error = "errorInfo";

            //Orderlist中找到OrderNum对应的单子删除
            if (orderNum == null)
            {
                return(false);
            }
            if (m_dataBuffer.OrderBookList.Count <= 0)
            {
                return(false);
            }
            USeOrderBook order_book = (from p in m_dataBuffer.OrderBookList
                                       where p.OrderNum.Equals(orderNum)
                                       select p).FirstOrDefault();

            if (order_book == null)
            {
                return(false);
            }

            if (order_book.TradeQty == order_book.OrderQty)
            {
                return(false);
            }

            if (order_book.TradeQty == 0)
            {
                order_book.OrderStatus = USeOrderStatus.AllCanceled;
                order_book.CancelQty   = order_book.OrderQty;
            }
            else
            {
                System.Diagnostics.Debug.Assert(order_book.TradeQty > 0);
                order_book.OrderStatus = USeOrderStatus.PartCanceled;
                order_book.CancelQty   = order_book.OrderQty - order_book.TradeQty;
            }

            m_pushOrderBookList.Enqueue(order_book.Clone());

            return(true);
        }
示例#6
0
        public void AllTrade(USeOrderNum orderNum, int slipPoint)
        {
            USeOrderBook orderBook = (from p in m_dataBuffer.OrderBookList
                                      where p.OrderNum.Equals(orderNum)
                                      select p).FirstOrDefault();

            if (orderBook == null)
            {
                return;
            }

            USeInstrumentDetail instrumentDetail = QueryInstrumentDetail(orderBook.Instrument);

            int     tradeQty   = (orderBook.OrderQty - orderBook.TradeQty);
            decimal tradePrice = 0;

            if (orderBook.OrderSide == USeOrderSide.Buy)
            {
                tradePrice = orderBook.OrderPrice - instrumentDetail.PriceTick * slipPoint;
            }
            else if (orderBook.OrderSide == USeOrderSide.Sell)
            {
                tradePrice = orderBook.OrderPrice + instrumentDetail.PriceTick * slipPoint;
            }
            int volumeMultiple    = instrumentDetail.VolumeMultiple;
            int orderBookTradeQty = orderBook.TradeQty + tradeQty;

            orderBook.TradeQty    = orderBookTradeQty;
            orderBook.TradeAmount = tradePrice * orderBookTradeQty * volumeMultiple;
            orderBook.TradePrice  = tradePrice;
            orderBook.TradeFee    = 5 * orderBookTradeQty;
            orderBook.CancelQty   = 0;
            orderBook.Memo        = orderBook.Memo;
            orderBook.OrderTime   = DateTime.Now;
            orderBook.OrderStatus = USeOrderStatus.AllTraded;

            USeTradeBook tradeBook = CreateTradeBook(orderBook, tradeQty, tradePrice, tradeQty * tradePrice * volumeMultiple, 5 * tradeQty);

            USePosition positionBook = CreatePositionBook(tradeBook);

            m_pushTradeBookList.Enqueue(tradeBook);

            m_pushOrderBookList.Enqueue(orderBook.Clone());
            //推送持仓信息
            m_pushPositionList.Enqueue(positionBook.Clone());
        }
        /// <summary>
        /// 根据下单指令下单。
        /// </summary>
        /// <param name="command">下单指令。</param>
        private bool PlaceOrderForOrderCommand(OrderCommand command)
        {
            string      errorMessage = string.Empty;
            USeOrderNum orderNum     = m_orderDriver.PlaceOrder(command.Instrument, command.OrderQty, command.OrderPrice, command.OffsetType, command.OrderSide, out errorMessage);

            command.OrderNum = orderNum;
            if (orderNum == null)
            {
                Debug.Assert(string.IsNullOrEmpty(errorMessage) == false);
                command.OrderErrorMessage = errorMessage;

                return(false); // 下单失败
            }
            else
            {
                return(true);
            }
        }
示例#8
0
        public static void TestOrderNum()
        {
            CtpOrderNum num1 = new CtpOrderNum(1, 2, "3", "4", "5");
            CtpOrderNum num2 = new CtpOrderNum(1, 2, "3", "4", "5");

            USeOrderNum num3 = num1;
            USeOrderNum num4 = num2;

            bool result = false;

            result = (num1 == num2);
            Console.WriteLine("(num1 == num2) " + result.ToString());
            result = num1.Equals(num2);
            Console.WriteLine("(num1.Equals(num2)) " + result.ToString());
            result = (num3 == num4);
            Console.WriteLine("(num3 == num4) " + result.ToString());
            result = num3.Equals(num4);
            Console.WriteLine("num3.Equals(num4) " + result.ToString());
            Console.WriteLine();
        }
        /// <summary>
        /// 创建空的委托回报。
        /// </summary>
        /// <param name="orderNum">委托单号。</param>
        /// <param name="instrument">合约。</param>
        /// <param name="orderQty">委托量。</param>
        /// <param name="orderPrice">委托价格。</param>
        /// <param name="offsetType">开平方向。</param>
        /// <param name="orderSide">买卖方向。</param>
        /// <returns></returns>
        private USeOrderBook CreateOrignalUSeOrderBook(USeOrderNum orderNum, USeInstrument instrument, int orderQty, decimal orderPrice, USeOffsetType offsetType, USeOrderSide orderSide)
        {
            USeOrderBook orderBook = new USeOrderBook();

            orderBook.OrderNum    = orderNum;
            orderBook.Account     = string.Empty;
            orderBook.Instrument  = instrument;
            orderBook.OrderQty    = orderQty;
            orderBook.OrderPrice  = orderPrice;
            orderBook.TradeQty    = 0;
            orderBook.TradeAmount = 0m;
            orderBook.TradePrice  = 0m;
            orderBook.TradeFee    = 0m;
            orderBook.OrderStatus = USeOrderStatus.Unknown;
            orderBook.CancelQty   = 0;
            orderBook.OrderSide   = orderSide;
            orderBook.OffsetType  = offsetType;
            orderBook.Memo        = string.Empty;
            orderBook.OrderTime   = DateTime.Now;

            return(orderBook);
        }
        private void buttonOrder_Click(object sender, EventArgs e)
        {
            if (this.comboBoxInstrument.Text == string.Empty)
            {
                USeFuturesSpiritUtility.ShowWarningMessageBox(this, "合约项为空,请选入合约信息");
                return;
            }

            if (this.numericUpDownPrice.Value <= 0)
            {
                USeFuturesSpiritUtility.ShowWarningMessageBox(this, "价格为不能为0或负数");
                return;
            }

            if (this.numericUpDownVolume.Value <= 0)
            {
                USeFuturesSpiritUtility.ShowWarningMessageBox(this, "数量不能为0或负数");
                return;
            }

            decimal orderPrice = 0m;

            if (m_freshOrderPrice)
            {
                orderPrice = GetMarketOrderPrice();
            }
            else
            {
                orderPrice = this.numericUpDownPrice.Value;
            }

            string      error_info = string.Empty;
            USeOrderNum orderNum   = USeManager.Instance.OrderDriver.PlaceOrder(m_selectedInstrument, (int)this.numericUpDownVolume.Value, GetMarketOrderPrice(), GetChoiceOffsetType(), GetChoiceDirection(), out error_info);

            if (orderNum == null)
            {
                USeFuturesSpiritUtility.ShowWarningMessageBox(this, error_info);
            }
        }
        /// <summary>
        /// 撤单。
        /// </summary>
        /// <param name="orderNum">委托单号。</param>
        /// <param name="product">委托产品。</param>
        /// <param name="error">[out]撤单失败错误信息。</param>
        /// <returns>撤单是否成功。</returns>
        public override bool CancelOrder(USeOrderNum orderNum, USeInstrument product, out string error)
        {
            CtpOrderNum ctpOrderNum = orderNum as CtpOrderNum;

            if (ctpOrderNum == null)
            {
                throw new ArgumentException("Invalid orderNum type", "orderNum");
            }

            error = string.Empty;

            int requestID = m_requetSeqIDCreator.Next();

            try
            {
                InputOrderActionField requestField = new InputOrderActionField();
                requestField.ActionFlag   = ActionFlagType.Delete;
                requestField.BrokerID     = m_brokerID;
                requestField.InvestorID   = m_investorID;
                requestField.InstrumentID = product.InstrumentCode;
                requestField.FrontID      = ctpOrderNum.FrontID;
                requestField.SessionID    = ctpOrderNum.SessionID;
                requestField.OrderRef     = ctpOrderNum.OrderRef;
                requestField.ExchangeID   = ctpOrderNum.ExchangeID;
                requestField.OrderSysID   = ctpOrderNum.OrderSysID;

                m_ctpUser.ReqOrderAction(ref requestField, requestID);

                return(true);
            }
            catch (Exception ex)
            {
                m_logger.WriteError(string.Format("{0} cancelorder[OrderNum:{1}] failed,Error:{2}.",
                                                  ToString(), orderNum, ex.Message));
                error = ex.Message;
                return(false);
            }
        }
示例#12
0
 public void PartTrade(USeOrderNum orderNum)
 {
     PartTrade(orderNum, 0);
 }
示例#13
0
 public void AllTrade(USeOrderNum orderNum)
 {
     AllTrade(orderNum, 0);
 }
示例#14
0
 /// <summary>
 /// 委托单是否属于该任务。
 /// </summary>
 /// <param name="orderNum"></param>
 /// <returns></returns>
 public bool ContainsOrderBook(USeOrderNum orderNum)
 {
     return(m_orderBookList.Exists(o => o.OrderNum.Equals(orderNum)));
 }
示例#15
0
        private void btnOK_Click(object sender, EventArgs e)
        {
            List <ErrorUSeOrderBook> result = new List <ErrorUSeOrderBook>();

            try
            {
                //如果存在未被处理的委托单,提示处理
                foreach (DataRow row in m_dataTable.Rows)
                {
                    string errorMessage = string.Empty;
                    if (IsMatchRule(row, out errorMessage) == false)
                    {
                        USeFuturesSpiritUtility.ShowErrrorMessageBox(this, "请处理异常委托单");
                        return;
                    }
                }

                USeOrderDriver orderDriver = USeManager.Instance.OrderDriver;
                Debug.Assert(orderDriver != null);

                //根据界面生成结果保存到Result
                foreach (DataRow row in m_dataTable.Rows)
                {
                    USeInstrument instrument = row["Instrument"] as USeInstrument;
                    Debug.Assert(instrument != null);

                    USeInstrumentDetail instrumentDetail = orderDriver.QueryInstrumentDetail(instrument);
                    //[yangming]合约过期后可能查不到了,此处可以考虑用品种信息获取合约乘数
                    Debug.Assert(instrumentDetail != null);
                    int orderQty  = Convert.ToInt32(row["OrderQty"]);
                    int tradeQty  = Convert.ToInt32(row["TradeQty"]);
                    int cancelQty = orderQty - tradeQty;
                    Debug.Assert(cancelQty >= 0);

                    decimal tradePrice  = Convert.ToDecimal(row["TradePrice"]);
                    decimal tradeFee    = Convert.ToDecimal(row["TradeFee"]);
                    decimal tradeAmount = tradePrice * tradeQty * instrumentDetail.VolumeMultiple;

                    USeOrderStatus selectedOrderStatus = (USeOrderStatus)row["SelectedOrderStatus"];
                    USeOrderStatus status = USeOrderStatus.Unknown;
                    if (selectedOrderStatus == USeOrderStatus.AllTraded)
                    {
                        status = USeOrderStatus.AllTraded;
                    }
                    else if (selectedOrderStatus == USeOrderStatus.AllCanceled)
                    {
                        if (cancelQty == orderQty)
                        {
                            status = USeOrderStatus.AllCanceled;
                        }
                        else
                        {
                            status = USeOrderStatus.PartCanceled;
                        }
                    }

                    USeOrderNum       orderNum      = row["OrderNum"] as USeOrderNum;
                    ErrorUSeOrderBook erroOrderBook = row["ErrorUSeOrderBook"] as ErrorUSeOrderBook;
                    erroOrderBook.OrderBook.OrderStatus = status;
                    erroOrderBook.OrderBook.CancelQty   = cancelQty;
                    erroOrderBook.OrderBook.TradeQty    = tradeQty;
                    erroOrderBook.OrderBook.TradePrice  = tradePrice;
                    erroOrderBook.OrderBook.TradeAmount = tradeAmount;
                    erroOrderBook.OrderBook.TradeFee    = tradeFee;

                    result.Add(erroOrderBook);
                }

                this.Result = result;
            }
            catch (Exception ex)
            {
                USeFuturesSpiritUtility.ShowWarningMessageBox(this, ex.Message);
                return;
            }

            this.DialogResult = DialogResult.Yes;
            this.Close();
        }
示例#16
0
        /// <summary>
        /// 撤单。
        /// </summary>
        /// <param name="orderNum">委托单号。</param>
        /// <param name="product">委托产品。</param>
        /// <param name="error">[out]撤单失败错误信息。</param>
        /// <returns>撤单是否成功。</returns>
        public override bool CancelOrder(USeOrderNum orderNum, USeInstrument product, out string error)
        {
            error = string.Empty;
            //m_cancelOrderQueue.Enqueue(orderNum as TestOrderNum);

            if (this.OnClientCancelOrder != null)
            {
                this.OnClientCancelOrder(orderNum as TestOrderNum);
            }
            return(true);
            ////Orderlist中找到OrderNum对应的单子删除
            //error = "Error_info";
            //if (orderNum == null) return false;
            //if (m_dataBuffer.OrderBookList.Count <= 0) return false;
            //USeOrderBook order_book = (from p in m_dataBuffer.OrderBookList
            //                           where p.OrderNum.Equals(orderNum)
            //                           select p).FirstOrDefault();
            //if (order_book == null) return false;

            //if (order_book.TradeQty == order_book.OrderQty)
            //{
            //    return false;
            //}

            //if (order_book.TradeQty == 0)
            //{
            //    order_book.OrderStatus = USeOrderStatus.AllCanceled;
            //    order_book.CancelQty = order_book.OrderQty;
            //}
            //else
            //{
            //    System.Diagnostics.Debug.Assert(order_book.TradeQty > 0);
            //    order_book.OrderStatus = USeOrderStatus.PartCanceled;
            //    order_book.CancelQty = order_book.OrderQty - order_book.TradeQty;
            //}

            //m_pushOrderBookList.Enqueue(order_book.Clone());

            //return true;
            //CtpOrderNum ctpOrderNum = orderNum as CtpOrderNum;
            //if (ctpOrderNum == null)
            //{
            //    throw new ArgumentException("Invalid orderNum type", "orderNum");
            //}

            //error = string.Empty;

            //int requestID = m_requetSeqIDCreator.Next();
            //try
            //{
            //    InputOrderActionField requestField = new InputOrderActionField();
            //    requestField.ActionFlag = ActionFlagType.Delete;
            //    requestField.BrokerID = m_brokerID;
            //    requestField.InvestorID = m_investorID;
            //    requestField.InstrumentID = product.InstrumentCode;
            //    requestField.FrontID = ctpOrderNum.FrontID;
            //    requestField.SessionID = ctpOrderNum.SessionID;
            //    requestField.OrderRef = ctpOrderNum.OrderRef;
            //    requestField.ExchangeID = ctpOrderNum.ExchangeID;
            //    requestField.OrderSysID = ctpOrderNum.OrderSysID;

            //    m_ctpUser.ReqOrderAction(ref requestField, requestID);

            //    return true;
            //}
            //catch (Exception ex)
            //{
            //    m_logger.WriteError(string.Format("{0} cancelorder[OrderNum:{1}] failed,Error:{2}.",
            //         ToString(), orderNum, ex.Message));
            //    error = ex.Message;
            //    return false;
            //}
        }
 /// <summary>
 /// 查询指定委托单号的委托回报。
 /// </summary>
 /// <param name="orderNum"></param>
 /// <returns></returns>
 public override USeOrderBook QueryOrderBook(USeOrderNum orderNum)
 {
     return(m_dataBuffer.GetCheckedOrderBook(orderNum));
 }