예제 #1
0
        public void CancelOrder(Order order)
        {
            _ordersAllReadyCanseled.Add(order);

            QuikSharp.DataStructures.Transaction.Order qOrder = new QuikSharp.DataStructures.Transaction.Order();

            qOrder.SecCode   = order.SecurityNameCode.Split('_')[0];
            qOrder.Account   = order.PortfolioNumber;
            qOrder.ClassCode = _securities.Find(sec => sec.Name == order.SecurityNameCode).NameClass;

            if (order.NumberMarket == "")
            {
                qOrder.OrderNum = 0;
            }
            else
            {
                qOrder.OrderNum = Convert.ToInt64(order.NumberMarket);
            }
            //qOrder.OrderNum = Convert.ToInt64(order.NumberMarket);

            lock (_serverLocker)
            {
                var res = QuikLua.Orders.KillOrder(qOrder).Result;
            }
        }
예제 #2
0
        public void SendOrder(Order order)
        {
            QuikSharp.DataStructures.Transaction.Order qOrder = new QuikSharp.DataStructures.Transaction.Order();

            qOrder.SecCode   = order.SecurityNameCode.Split('_')[0];
            qOrder.Account   = order.PortfolioNumber;
            qOrder.ClassCode = _securities.Find(sec => sec.Name == order.SecurityNameCode).NameClass;
            qOrder.Quantity  = Convert.ToInt32(order.Volume);
            qOrder.Operation = order.Side == Side.Buy ? Operation.Buy : Operation.Sell;
            qOrder.Price     = order.Price;
            qOrder.Comment   = order.NumberUser.ToString();

            lock (_serverLocker)
            {
                var res = QuikLua.Orders.CreateOrder(qOrder).Result;

                if (res > 0)
                {
                    order.NumberUser = Convert.ToInt32(res);

                    if (MyOrderEvent != null)
                    {
                        MyOrderEvent(order);
                    }
                }

                if (res < 0)
                {
                    order.State = OrderStateType.Fail;
                    if (MyOrderEvent != null)
                    {
                        MyOrderEvent(order);
                    }
                }
            }
        }
예제 #3
0
        private void EventsOnOnOrder(QuikSharp.DataStructures.Transaction.Order qOrder)
        {
            lock (orderLocker)
            {
                try
                {
                    if (qOrder.TransID == 0)
                    {
                        return;
                    }

                    Order order = new Order();
                    order.NumberUser       = Convert.ToInt32(qOrder.TransID); //Convert.qOrder.OrderNum;TransID
                    order.NumberMarket     = qOrder.OrderNum.ToString(new CultureInfo("ru-RU"));
                    order.TimeCallBack     = ServerTime;
                    order.SecurityNameCode = qOrder.SecCode + "_" + qOrder.ClassCode;
                    order.Price            = qOrder.Price;
                    order.Volume           = qOrder.Quantity;
                    order.VolumeExecute    = qOrder.Quantity - qOrder.Balance;
                    order.PortfolioNumber  = qOrder.Account;
                    order.TypeOrder        = qOrder.Flags.ToString().Contains("IsLimit")
                        ? OrderPriceType.Limit
                        : OrderPriceType.Market;
                    order.ServerType = ServerType.QuikLua;

                    if (qOrder.State == State.Active)
                    {
                        order.State        = OrderStateType.Activ;
                        order.TimeCallBack = new DateTime(qOrder.Datetime.year, qOrder.Datetime.month,
                                                          qOrder.Datetime.day,
                                                          qOrder.Datetime.hour, qOrder.Datetime.min, qOrder.Datetime.sec);
                    }
                    else if (qOrder.State == State.Completed)
                    {
                        order.State         = OrderStateType.Done;
                        order.VolumeExecute = qOrder.Quantity;
                        order.TimeDone      = order.TimeCallBack;
                    }
                    else if (qOrder.State == State.Canceled)
                    {
                        order.TimeCancel = new DateTime(qOrder.WithdrawDatetime.year, qOrder.WithdrawDatetime.month,
                                                        qOrder.WithdrawDatetime.day,
                                                        qOrder.WithdrawDatetime.hour, qOrder.WithdrawDatetime.min, qOrder.WithdrawDatetime.sec);
                        order.State         = OrderStateType.Cancel;
                        order.VolumeExecute = 0;
                    }
                    else if (qOrder.Balance != 0)
                    {
                        order.State         = OrderStateType.Patrial;
                        order.VolumeExecute = qOrder.Quantity - qOrder.Balance;
                    }

                    if (_ordersAllReadyCanseled.Find(o => o.NumberUser == qOrder.TransID) != null)
                    {
                        order.State      = OrderStateType.Cancel;
                        order.TimeCancel = order.TimeCallBack;
                    }

                    if (qOrder.Operation == Operation.Buy)
                    {
                        order.Side = Side.Buy;
                    }
                    else
                    {
                        order.Side = Side.Sell;
                    }

                    if (MyOrderEvent != null)
                    {
                        MyOrderEvent(order);
                    }
                }
                catch (Exception error)
                {
                    SendLogMessage(error.ToString(), LogMessageType.Error);
                }
            }
        }