/// <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); }
/// <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); }
/// <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); }
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); }
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); }
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); } }
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); } }
public void PartTrade(USeOrderNum orderNum) { PartTrade(orderNum, 0); }
public void AllTrade(USeOrderNum orderNum) { AllTrade(orderNum, 0); }
/// <summary> /// 委托单是否属于该任务。 /// </summary> /// <param name="orderNum"></param> /// <returns></returns> public bool ContainsOrderBook(USeOrderNum orderNum) { return(m_orderBookList.Exists(o => o.OrderNum.Equals(orderNum))); }
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(); }
/// <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)); }