/// <summary> /// 检查套利单是否有异常委托。 /// </summary> /// <remarks> /// 1.非今日的历史委托回报未结束,无法更新,列入异常套利单 /// </remarks> private ErrorArbitrageOrder CheckErrorArbitrageOrder(USeArbitrageOrder arbitrageOrder) { ErrorArbitrageOrder errorArbitrageOrder = new ErrorArbitrageOrder(); errorArbitrageOrder.ArbitrageOrder = arbitrageOrder; List <ErrorUSeOrderBook> errorBookList = new List <ErrorUSeOrderBook>(); if (arbitrageOrder.HasUnFinishOrderBook == false) { return(errorArbitrageOrder); } List <USeOrderBook> unFinishOrderBookList = arbitrageOrder.GetAllUnfinishOrderBooks(); Debug.Assert(unFinishOrderBookList != null && unFinishOrderBookList.Count > 0); foreach (USeOrderBook orderBook in unFinishOrderBookList) { USeOrderBook newOrderBook = m_orderDriver.QueryOrderBook(orderBook.OrderNum); if (newOrderBook != null) { OrderBookUpdateResult updateResult = arbitrageOrder.UpdateOrderBook(newOrderBook); updateResult.Task.UpdateTaskState(); arbitrageOrder.UpdataArbitrageOrderState(); errorArbitrageOrder.HasChanged = true; } else { ErrorUSeOrderBook errorOrderBook = new ErrorUSeOrderBook() { TradeIdentify = arbitrageOrder.TraderIdentify, Alias = arbitrageOrder.Alias, OrderBook = orderBook.Clone() }; errorBookList.Add(errorOrderBook); } } errorArbitrageOrder.ErrorOrderBooks = errorBookList; return(errorArbitrageOrder); }
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(); }