Пример #1
0
        public void SubscribeIncompleteOrder(String type, String code, string orderSysId, String orientation, int VolumeTotalOriginal, decimal price, int OrderRef, int orderStatus, int ComboOffsetFlag, string user)
        {
            RecordItem _record = new RecordItem();

            _record = this.GetOrAdd(OrderRef, _record);

            _record.OrderTime_Start     = DateTime.Now;
            _record.Code                = code;
            _record.Orientation         = orientation;
            _record.VolumeTotalOriginal = VolumeTotalOriginal;
            _record.VolumeTotal         = 0;
            _record.Price               = price;
            _record.AveragePrice        = 0;
            _record.VolumeTraded        = 0;
            _record.ErrMsg              = String.Empty;
            _record.OrderRef            = OrderRef;
            _record.OrderStatus         = orderStatus;
            _record.Trades              = new List <TradeItem>();
            _record.CombOffsetFlag      = ComboOffsetFlag;
            _record.Status              = TradeDealStatus.PREORDER;
            _record.CombOffsetFlag      = ComboOffsetFlag;
            _record.OrderSysID          = orderSysId;
            _record.User                = user;


            this.AddOrUpdate(OrderRef, _record, (key, oldValue) =>
                             oldValue = _record
                             );

            OrderViewItem order = new OrderViewItem(_record.OrderRef.ToString(), _record.OrderSysID, _record.Code, _record.Orientation, _record.CombOffsetFlag.ToString(), _record.VolumeTotalOriginal.ToString(), _record.VolumeTotal.ToString(), _record.Price.ToString(), _record.ErrMsg, _record.OrderTime_Start.ToString());

            TradeMonitor.Instance.updateOrderList(_record.User, order);
        }
Пример #2
0
        /// <summary>
        /// 更新委托信息
        /// </summary>
        /// <param name="volumeTraded"></param>
        /// <param name="OrderRef"></param>
        /// <param name="OrderSysID"></param>
        /// <param name="StatusMsg"></param>
        /// <param name="OrderStatus"></param>
        /// <param name="VolumeTotal"></param>
        /// <param name="ExchangeID">退货使用</param>
        public void UpdateOrder(int volumeTraded, int OrderRef, String OrderSysID, String StatusMsg, int OrderStatus, int VolumeTotal, String ExchangeID)
        {
            RecordItem _record = new RecordItem();

            _record = this.GetOrAdd(OrderRef, _record);

            _record.VolumeTraded = volumeTraded;
            _record.VolumeTotal  = VolumeTotal;
            _record.ErrMsg       = StatusMsg;
            _record.OrderStatus  = OrderStatus;
            _record.OrderSysID   = OrderSysID;
            _record.ExchangeID   = ExchangeID;
            _record.Status       = TradeDealStatus.ORDERING;
            if (_record.OrderSysID.Trim() == "0" && _record.OrderSysID != String.Empty)
            {
                QueryEntrustOrderStruct_M record = new QueryEntrustOrderStruct_M()
                {
                    Code         = _record.Code,
                    User         = _record.User,
                    OrderRef     = _record.OrderRef,
                    Direction    = Convert.ToInt32(_record.Orientation),
                    ExchangeID   = ExchangeID,
                    OrderPrice   = Convert.ToDouble(_record.Price),
                    OrderSysID   = _record.OrderSysID.Trim(),
                    SecurityType = Convert.ToSByte(_record.Type),
                    StrategyId   = _record.StrategyId,
                    OffsetFlag   = _record.CombOffsetFlag,
                    Amount       = _record.VolumeTotalOriginal
                };

                ThreadPool.QueueUserWorkItem(new WaitCallback(DBAccessLayer.CreateFutureERRecord), ((object)record));
            }

            //若交易已撤单 或者 全部成交则标记该委托完成
            if (OrderStatus == 53 || _record.VolumeTotalOriginal == _record.VolumeTraded)
            {
                _record.OrderTime_Completed = DateTime.Now;
                _record.Status = TradeDealStatus.ORDERCOMPLETED;
            }



            this.AddOrUpdate(OrderRef, _record, (key, oldValue) =>
                             oldValue = _record
                             );


            if (UserRequestMap.GetInstance().Count == 0)
            {
                return;
            }

            String USERNAME = string.Empty;

            try
            {
                USERNAME = UserRequestMap.GetInstance()[OrderRef];
            }
            catch (Exception ex)
            {
                DBAccessLayer.LogSysInfo("TradeAdditionalClass->UpdateOrder", ex.ToString());
            }
            OrderViewItem order = new OrderViewItem(_record.OrderRef.ToString(), _record.OrderSysID, _record.Code, _record.Orientation, _record.CombOffsetFlag.ToString(), _record.VolumeTotalOriginal.ToString(), _record.VolumeTotal.ToString(), _record.Price.ToString(), _record.ErrMsg, _record.OrderTime_Start.ToString());

            TradeMonitor.Instance.updateOrderList(USERNAME, order);

            if (_record.Status == TradeDealStatus.ORDERCOMPLETED)
            {
                CompletedTradeRecord.GetInstance().Update(_record.OrderRef, _record);
            }
        }