Пример #1
0
 public void OnMultiLegOrderUpdate(PTEntity.MultiLegOrder multiLegOrder)
 {
     if (OnMultiLegOrderUpdated != null)
     {
         OnMultiLegOrderUpdated(multiLegOrder);
     }
 }
Пример #2
0
        void _client_OnMultiLegOrderUpdated(PTEntity.MultiLegOrder obj)
        {
            string info = string.Format("mlOrder: {0}\t{1}\t{2}", obj.OrderId, obj.PortfolioId, obj.Quantity);

            EventAggregator.GetEvent <MultiLegOrderUpdatedEvent>().Publish(
                new MultiLegOrderUpdateArgs {
                AccountId = Id, MultiLegOrder = obj
            });
        }
Пример #3
0
        public MultiLegOrderVM Update(string accountId, PTEntity.MultiLegOrder mlOrder)
        {
            lock (_syncObj)
            {
                string          ordId     = mlOrder.OrderId;
                MultiLegOrderVM mlOrderVm = null;
                mlOrderVm = GetMlOrderVm(accountId, ordId);
                if (mlOrderVm != null)
                {
                    mlOrderVm.From(mlOrder);

                    if (mlOrderVm.IsAllFinished)
                    {
                        if (mlOrderVm.IsPortfolio)
                        {
                            if (!mlOrderVm.IsOpenOrder)
                            {
                                if (!string.IsNullOrEmpty(mlOrder.OpenOrderId))
                                {
                                    var openOrderVm = GetMlOrderVm(accountId, mlOrder.OpenOrderId);
                                    if (openOrderVm != null)
                                    {
                                        mlOrderVm.CalcProfit(openOrderVm);
                                    }
                                }
                            }
                        }
                    }

                    return(null);
                }
                else
                {
                    string accountPortfKey = BuildAcctPortfKey(accountId, mlOrder.PortfolioId);
                    if (_accountPortfolioOrderCount.ContainsKey(accountPortfKey))
                    {
                        _accountPortfolioOrderCount[accountPortfKey] += 1;
                    }
                    else
                    {
                        _accountPortfolioOrderCount.Add(accountPortfKey, 1);
                    }

                    mlOrderVm = new MultiLegOrderVM(accountId);
                    mlOrderVm.From(mlOrder);
                    this.Add(mlOrderVm);
                    return(mlOrderVm);
                }
            }
        }
Пример #4
0
        public void From(PTEntity.MultiLegOrder mlOrder)
        {
            LastOrder = mlOrder;

            OrderId     = mlOrder.OrderId;
            OpenOrderId = mlOrder.OpenOrderId;
            Reason      = GetReasonDisplayText(mlOrder.Reason);
            PortfolioId = mlOrder.PortfolioId;
            Quantity    = mlOrder.Quantity;

            IsPortfolio = mlOrder.Offset < PTEntity.MlOrderOffset.ML_OF_OTHER;

            bool allFinished = false;

            for (int i = 0; i < mlOrder.Legs.Length; ++i)
            {
                if (_orders.Count == i)
                {
                    _orders.Add(new OrderVM());
                }

                var legOrder = mlOrder.Legs[i];
                _orders[i].From(legOrder, true);
                allFinished = _orders[i].IsFinished;
            }

            IsAllFinished = allFinished;

            IsCanceled = ("高频" == Reason ? CheckMlOrderCanceled(_orders) : string.Empty);
            if (IsPortfolio)
            {
                IsOpenOrder = mlOrder.Offset == PTEntity.MlOrderOffset.ML_OF_OPEN;
            }
            else
            {
                IsOpenOrder = !IsAllFinished; // For non-portoflio, display
            }
            if (!string.IsNullOrEmpty(mlOrder.StatusMsg))
            {
                EventLogger.Write("组合下单({0}) - {1}", mlOrder.OrderId, mlOrder.StatusMsg);
            }
        }