public List <USeTradeBook> GetTradeBookList() { //查找orderlist里面状态为全部成交的Order返回 List <USeTradeBook> trade_book_list = new List <USeTradeBook>(); foreach (USeOrderBook order_book in m_order_list) { USeOrderStatus order_status = order_book.OrderStatus; if (order_status == USeOrderStatus.AllTraded) { USeTradeBook tradeBook = new USeTradeBook(); tradeBook.TradeNum = order_book.OrderNum.ToString(); tradeBook.Instrument = order_book.Instrument; tradeBook.OrderNum = order_book.OrderNum; tradeBook.OrderSide = order_book.OrderSide; tradeBook.OffsetType = order_book.OffsetType; tradeBook.Price = order_book.OrderPrice; tradeBook.Qty = order_book.OrderQty; tradeBook.Amount = 0; tradeBook.Fee = 0; tradeBook.TradeTime = DateTime.Now; tradeBook.Account = order_book.Account; trade_book_list.Add(tradeBook); } } return(trade_book_list); }
private bool Filter(USeOrderStatus orderStatus) { if (this.rbnOrderState_All.Checked) { return(true); } else if (this.rbnOrderState_UnTrade.Checked) { #region if (orderStatus == USeOrderStatus.NoTraded || orderStatus == USeOrderStatus.PartTraded) { return(true); } else { return(false); } #endregion } else if (this.rbnOrderState_Traded.Checked) { if (orderStatus == USeOrderStatus.AllTraded || orderStatus == USeOrderStatus.PartCanceled) { return(true); } else { return(false); } } else if (this.rbnOrderState_CancelAndError.Checked) { if (orderStatus == USeOrderStatus.BlankOrder || orderStatus == USeOrderStatus.PartCanceled || orderStatus == USeOrderStatus.AllCanceled) { return(true); } else { return(false); } } return(false); }
/// <summary> /// 委托单状态描述。 /// </summary> /// <param name="orderStatus">委托状态。</param> /// <returns>描述字符串。</returns> public static string ToDescription(this USeOrderStatus orderStatus) { switch (orderStatus) { case USeOrderStatus.NoTraded: return("未成交"); case USeOrderStatus.PartCanceled: return("部撤"); case USeOrderStatus.AllCanceled: return("已撤"); case USeOrderStatus.PartTraded: return("部成"); case USeOrderStatus.AllTraded: return("已成"); case USeOrderStatus.BlankOrder: return("废单"); default: return("未知"); } }
private void gridOrderBook_CellValueChanged(object sender, DataGridViewCellEventArgs e) { try { int index = -1; foreach (DataRow row in m_dataTable.Rows) { index++; USeOrderStatus orderState = (USeOrderStatus)row["SelectedOrderStatus"]; int orderQty = Convert.ToInt32(row["OrderQty"]); decimal OrderPrice = Convert.ToDecimal(row["OrderPrice"]); int tradeQty = Convert.ToInt32(row["TradeQty"]); decimal tradePrice = Convert.ToDecimal(row["TradePrice"]); decimal tradeFee = Convert.ToDecimal(row["TradeFee"]); string errorMessage = string.Empty; bool matchResult = IsMatchRule(row, out errorMessage); row["Memo"] = errorMessage; if (matchResult != Convert.ToBoolean(row["DoneFlag"])) { Debug.WriteLine("MatchResultChange:" + matchResult + "@" + index); row["DoneFlag"] = matchResult; if (matchResult) { row["IsDone"] = global::USeFuturesSpirit.Properties.Resources.green1; } else { row["IsDone"] = global::USeFuturesSpirit.Properties.Resources.red1; } } } UpdateErrorOrderCount(); } catch (Exception ex) { Debug.WriteLine(ex.Message); } }
private bool IsMatchRule(DataRow row, out string errorMessage) { errorMessage = string.Empty; USeOrderStatus orderState = (USeOrderStatus)row["SelectedOrderStatus"]; int orderQty = Convert.ToInt32(row["OrderQty"]); decimal OrderPrice = Convert.ToDecimal(row["OrderPrice"]); int tradeQty = Convert.ToInt32(row["TradeQty"]); decimal tradePrice = Convert.ToDecimal(row["TradePrice"]); decimal tradeFee = Convert.ToDecimal(row["TradeFee"]); if (orderState == USeOrderStatus.Unknown) { errorMessage = "请选择委托单处理状态"; return(false); } if (orderState == USeOrderStatus.AllTraded) { if (orderQty != tradeQty) { errorMessage = "全部成交状态,成交量应等于委托量"; return(false); } if (tradePrice <= 0) { errorMessage = "全部成交状态,成交价格不应该为空"; return(false); } if (orderQty == tradeQty && tradePrice > 0) { errorMessage = "处理完毕"; return(true); } } else if (orderState == USeOrderStatus.PartCanceled) { if (tradeQty >= orderQty || tradeQty <= 0) { errorMessage = "部分撤单状态,成交量应该大于0小于委托量"; return(false); } if (tradePrice <= 0) { errorMessage = "部分撤单状态,成交价格不应该为空"; return(false); } if (tradeQty < orderQty && tradeQty > 0 && tradePrice > 0) { errorMessage = "处理完毕"; return(true); } } else if (orderState == USeOrderStatus.AllCanceled) { if (tradeQty != 0) { errorMessage = "全部撤单状态,成交量应该等于0"; return(false); } if (tradePrice > 0) { errorMessage = "全部撤单状态,成交价格应该为0"; return(false); } if (tradeQty == 0 && tradePrice == 0) { errorMessage = "处理完毕"; return(true); } } else { System.Diagnostics.Debug.WriteLine(orderState); return(false); } return(true); }
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(); }