示例#1
0
        private void RaiseNewMyTrade(MyTrade trade)
        {
            this.AddInfoLog("New own trade: {0}", trade);

            NewMyTrade?.Invoke(trade);
            NewMyTrades?.Invoke(new[] { trade });
        }
示例#2
0
        private void RaiseNewMyTrade(MyTrade trade)
        {
            NewMyTrade.SafeInvoke(trade);

            var multiEvt = NewMyTrades;

            if (multiEvt == null)
            {
                return;
            }

            multiEvt.SafeInvoke(new[] { trade });
        }
示例#3
0
 internal void OnAddMyTrade(string portfolio, string securityId, string orderId, double price, double amount, DateTime time, string tradeNo)
 {
     NewMyTrade.SafeInvoke(portfolio, securityId, orderId.To <long>(), price.ToDecimal(), amount.Abs().ToDecimal(), time, tradeNo.To <long>());
 }
 private void RaiseNewMyTrade(MyTrade trade)
 {
     NewMyTrade?.Invoke(trade);
     NewMyTrades?.Invoke(new[] { trade });
 }
示例#5
0
        public Order Create(string data)
        {
            var jt = JToken.Parse(data);

            var stateQuery = GetValueByKey <string>(StatusPath, jt);

            var channelData = GetValueByKey <string>(NamePath, jt).Split('_');

            var channel = channelData[1];

            var numberUser = GetValueByKey <int>(NumberPath, jt);

            var order = _myOrders.Find(o => o.NumberUser == numberUser);

            if (order == null)
            {
                return(null);
            }

            var innerData = jt.SelectToken(DataPath);

            if (channel == "order")
            {
                if (stateQuery == "True")
                {
                    order.State        = OrderStateType.Activ;
                    order.NumberMarket = innerData["entrustId"].Value <string>();
                    NewTrackedOrder?.Invoke(order);
                }
                else
                {
                    order.State = OrderStateType.Fail;
                }
            }
            else if (channel == "getorder")
            {
                var state = innerData["status"].Value <string>();
                var time  = TimeManager.GetDateTimeFromTimeStamp(innerData["trade_date"].Value <long>());

                if (state == "3")
                {
                    order.State      = OrderStateType.Activ;
                    order.TimeCreate = time;
                }
                if (state == "0")
                {
                    order.State = OrderStateType.Patrial;
                }
                else if (state == "1")
                {
                    order.State = OrderStateType.Cancel;
                    DeleteOrder(order);
                }
                else if (state == "2")
                {
                    order.State = OrderStateType.Done;
                    DeleteOrder(order);
                }

                var tradeVolume   = innerData["trade_amount"].Value <decimal>();
                var volumeExecute = order.VolumeExecute;

                if (tradeVolume > volumeExecute)
                {
                    NewMyTrade?.Invoke(CreateMyTrade(innerData, order, tradeVolume - volumeExecute));
                }
            }

            return(order);
        }
示例#6
0
 private void NewMyTradeHandler(MyTrade trade)
 {
     AddGuiAction(() => NewMyTrade.SafeInvoke(trade));
 }
示例#7
0
        public Order Create(string data)
        {
            var jt = JToken.Parse(data)["params"];

            var stateQuery = jt[0].Value <int>();

            var channelData = jt[1];

            var order = new Order();

            order.NumberUser       = Convert.ToInt32(channelData["text"].Value <string>().Split('-')[1]);
            order.NumberMarket     = channelData["id"].Value <string>();
            order.SecurityNameCode = channelData["market"].Value <string>();
            order.Price            = channelData["price"].Value <decimal>();
            order.Volume           = channelData["amount"].Value <decimal>();
            order.Side             = channelData["type"].Value <int>() == 2 ? Side.Buy : Side.Sell;
            order.TypeOrder        = OrderPriceType.Limit;
            order.TimeCreate       = TimeManager.GetDateTimeFromTimeStampSeconds(channelData["ctime"].Value <long>());
            order.PortfolioNumber  = _portfolioNumber;

            var filledAmount = channelData["filledAmount"].Value <decimal>();

            if (filledAmount != 0)
            {
                if (!_myOrderVolumes.ContainsKey(order.NumberMarket))
                {
                    if (filledAmount != order.Volume)
                    {
                        _myOrderVolumes.Add(order.NumberMarket, filledAmount);
                    }

                    NewMyTrade?.Invoke(CreateMyTrade(channelData, order, filledAmount));
                }
                else
                {
                    var needVolume = _myOrderVolumes[order.NumberMarket];
                    if (filledAmount > needVolume)
                    {
                        var currentTradeVolume = filledAmount - needVolume;
                        _myOrderVolumes[order.NumberMarket] += currentTradeVolume;
                        NewMyTrade?.Invoke(CreateMyTrade(channelData, order, currentTradeVolume));
                    }
                }
            }

            if (stateQuery == 1)
            {
                order.State = OrderStateType.Activ;
            }

            if (stateQuery == 3 && filledAmount == order.Volume)
            {
                order.State = OrderStateType.Done;
                _myOrderVolumes.Remove(order.NumberMarket);
            }
            if (stateQuery == 3 && filledAmount == 0)
            {
                order.State = OrderStateType.Cancel;
            }

            return(order);
        }