Esempio n. 1
0
            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);
            }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        /// <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("未知");
            }
        }
Esempio n. 4
0
        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);
            }
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
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();
        }