Exemplo n.º 1
0
        private void InsertToCTP(Order order)
        {
            if (order.CloseOrders.Count == 0)
            {
                OnRspQryOrder(this, new OrderEventArgs(() => Add(order)));

                int orderRef = tradeApi.OrderInsert(order.InstrumentId, order.OffsetFlag, order.Direction, order.Price,
                    order.Volume);

                order.RemainVolume = order.Volume;

                order.OrderRef = orderRef.ToString();

                order.FrontID = tradeApi.FrontID;

                order.SessionID = tradeApi.SessionID;

                order.StatusType = EnumOrderStatus.开仓中;
            }
            else
            {
                foreach (var closeOrder in order.GetClosingOrders())
                {

                    var orderRef = tradeApi.OrderInsert(closeOrder.InstrumentId, closeOrder.OffsetFlag,
                        closeOrder.Direction,
                        closeOrder.Price,
                        closeOrder.Volume);

                    closeOrder.OrderRef = orderRef.ToString();

                    closeOrder.FrontID = tradeApi.FrontID;

                    closeOrder.SessionID = tradeApi.SessionID;

                    closeOrder.StatusType = EnumOrderStatus.平仓中;
                }

                //order.StatusType = EnumOrderStatus.平仓中;
            }
        }
Exemplo n.º 2
0
        private void InsertToMock(Order order)
        {
            if (order.CloseOrders.Count == 0)
            {
                OnRspQryOrder(this, new OrderEventArgs(() => Add(order)));

                order.RemainVolume = order.Volume;

                order.OrderRef = tradeApi.MaxOrderRef++.ToString();

                order.FrontID = tradeApi.FrontID;

                order.SessionID = tradeApi.SessionID;

                order.TradePrice = order.Price;

                order.TradeDate = tradeApi.TradingDay;

                order.TradeTime = DateTime.Now.ToString("HH:mm:ss");

                order.StatusType = EnumOrderStatus.已开仓;
            }
            else
            {

                foreach (var closeOrder in order.GetClosingOrders())
                {
                    closeOrder.OrderRef = tradeApi.MaxOrderRef++.ToString();

                    closeOrder.FrontID = tradeApi.FrontID;

                    closeOrder.SessionID = tradeApi.SessionID;

                    closeOrder.StatusType = EnumOrderStatus.平仓中;
                    closeOrder.OrderSysID = tradeApi.MaxOrderRef++.ToString();

                    var tradeField = new CThostFtdcTradeField();

                    tradeField.TradeID = tradeApi.MaxOrderRef++.ToString();

                    tradeField.OrderSysID = closeOrder.OrderSysID;

                    tradeField.Price = closeOrder.Price;

                    tradeField.TradeDate = tradeApi.TradingDay;

                    tradeField.TradeTime = DateTime.Now.ToString("HH:mm:ss");

                    var o = UpdateTradeID(tradeField);

                    if (o == null || o.StatusType != EnumOrderStatus.已平仓) continue;

                    OnRspQryOrder(this, new OrderEventArgs(() => HandleOrderClose(o)));
                    if (!HasMoney) HasMoney = true;
                }
            }
        }
Exemplo n.º 3
0
        public void CancelOrder(Order order)
        {
            if (order == null) return;

            sw.EnterWriteLock();

            if (order.CloseOrders.Count == 0)
            {
                tradeApi.CancelOrder(order.OrderRef, order.FrontID, order.SessionID, order.InstrumentId);

                OnRspQryOrder(this, new OrderEventArgs(() => orders.Remove(order)));

                OrderRepository.Delete(order);
            }
            else
            {
                foreach (var item in order.GetClosingOrders())
                {
                    tradeApi.CancelOrder(item.OrderRef, item.FrontID, item.SessionID, item.InstrumentId);
                    item.CloseOrders.Remove(item);
                }

                order.StatusType = EnumOrderStatus.已开仓;
                OrderRepository.Update(order);
            }

            sw.ExitWriteLock();
        }