Esempio n. 1
0
        public String NewDeal(Merchant merch1, Merchant merch2)
        {
            Deals.Add(new Deal(merch1, merch2, merch1.Strategy(merch2), merch2.Strategy(merch1)));
            String result = Deals.Last().MakeDeal();

            return(merch1.Name + ": +" + result[0] + "\t" + merch2.Name + ": +" + result[1]);
        }
        private void SaveDeal(int id)
        {
            if (!WinApiMessageBox.ConfirmAction("Сохранить изменения?"))
            {
                return;
            }
            if (SelectedDeal.Appartment.Id == 0 || SelectedDeal.Client.Id == 0)
            {
                return;
            }

            if (id == 0)
            {
                Deals.Add(SelectedDeal);
                _context.Deals.Add(SelectedDeal.Deal);
            }

            _context.SaveChanges();
            OnPropertyChanged("Deals");

            SelectedDealVisibility = DropDealVisibility = Visibility.Collapsed;
            ToolBarVisibility      = Visibility.Visible;
        }
Esempio n. 3
0
        public Transaction SetDeal(Transaction deal)
        {
            Transaction result = null;

            decimal totalPrice = Quantity * Price;
            decimal done       = Deals.Select(it => it.Quantity * it.Price).Sum();
            decimal left       = totalPrice - done;
            decimal required   = deal.Quantity * deal.Price;

            if (left >= required)
            {
                deal.MainTransactionId = TransactionId;
                deal.SetTransactionComplete();

                Deals.Add(deal);
            }
            else
            {
                int leftQuantity = Quantity - Deals.Sum(it => it.Quantity);

                Transaction part = new Transaction(TransactionId,
                                                   deal.Initials,
                                                   deal.Type,
                                                   deal.Price,
                                                   true,
                                                   leftQuantity);
                Deals.Add(part);

                result = new Transaction(deal.Initials,
                                         deal.Type,
                                         deal.Price,
                                         (deal.Quantity - leftQuantity));
            }

            CheckCompletion();
            return(result);
        }
 int ICollectionModifier <Deal> .Add(Deal entity) => Deals.Add(entity).Id;
Esempio n. 5
0
        public bool Parse(string log)
        {
            var lines = new List <string>();

            using (StringReader reader = new StringReader(log))
            {
                string rline;
                while ((rline = reader.ReadLine()) != null)
                {
                    // Do something with the line
                    lines.Add(rline);
                }
            }

            if (lines.Count < 1)
            {
                return(false);
            }

            var line = lines[0];

            if (line != "[begin]")
            {
                return(false);
            }

            var dealLines = lines.Select(x => x).Where(x => x.StartsWith("[deal]") || x.StartsWith("\t(flower)"))
                            .ToArray();

            // [deal](A)(hand):1万,2万,3万,1筒,2筒,3筒,8筒,8筒,8筒,1条,2条,3条,7条,
            //  (flower):
            if (dealLines.Length % 2 != 0)
            {
                return(false);
            }

            string          pattern;
            Regex           rgx;
            MatchCollection matches;
            Match           match;

            for (var j = 0; j < dealLines.Length - 1; j += 2)
            {
                var xhand   = dealLines[j];
                var xflower = dealLines[j + 1];

                pattern = @"^\[.+\]\((?<name>.+)\)\(.+\):(?<tiles>.+)$";
                rgx     = new Regex(pattern, RegexOptions.IgnoreCase);
                matches = rgx.Matches(xhand);
                if (matches.Count != 1)
                {
                    return(false);
                }
                match = matches[0];
                var name  = match.Groups["name"].Value;
                var tiles = match.Groups["tiles"].Value;

                if (string.IsNullOrWhiteSpace(name) ||
                    string.IsNullOrWhiteSpace(tiles))
                {
                    return(false);
                }

                pattern = @"^\s*\(.+\):(?<flowers>.*)$";
                rgx     = new Regex(pattern, RegexOptions.IgnoreCase);
                matches = rgx.Matches(xflower);
                if (matches.Count != 1)
                {
                    return(false);
                }
                match = matches[0];
                var flowers = match.Groups["flowers"].Value;
                if (string.IsNullOrWhiteSpace(flowers))
                {
                    flowers = "";
                }

                var deal = new Deal()
                {
                    Name = name, HandTiles = tiles, FlowerTiles = flowers
                };

                Deals.Add(deal);
            }

            var drawLines = lines.Select(x => x).Where(x => x.StartsWith("[draw]"));

            foreach (var drawLine in drawLines)
            {
                //[draw](A):南
                pattern = @".+:(?<tname>.*)$";
                rgx     = new Regex(pattern, RegexOptions.IgnoreCase);
                matches = rgx.Matches(drawLine);
                if (matches.Count != 1)
                {
                    return(false);
                }

                match = matches[0];
                var tileName = match.Groups["tname"].Value;
                Draws.Add(tileName);
            }

            ActionLines.AddRange(lines.Select(x => x).Where(IsActionLine));

            var banker = lines.Find(x => x.StartsWith("[bank]"));
            var wind   = lines.Find(x => x.StartsWith("[wind]"));

            if (!string.IsNullOrWhiteSpace(banker))
            {
                var begin = banker.IndexOf(":", StringComparison.Ordinal);
                var bname = banker.Substring(begin + 1);
                Banker = bname;
            }
            if (!string.IsNullOrWhiteSpace(wind))
            {
                var begin = wind.IndexOf(":", StringComparison.Ordinal);
                var bname = wind.Substring(begin + 1);
                Wind = bname;
            }

            Deals.Sort((x, y) => x.Name[0] - y.Name[0]);
            var i = 0;

            for (; i < Deals.Count; ++i)
            {
                if (Deals[i].HandTileCount == 14)
                {
                    break;
                }
            }
            var newList = new List <Deal>();
            var length  = Deals.Count;

            for (var k = 0; k < length; ++k)
            {
                newList.Add(Deals[(i + k) % length]);
            }
            Deals.Clear();
            Deals.AddRange(newList);
            return(true);
        }
Esempio n. 6
0
 public int Add(Deal entity) => Deals.Add(entity).Id;
Esempio n. 7
0
 public void Add(Deal deal) => Deals.Add(deal);
Esempio n. 8
0
        public void OnItemAdded(Trade item)
        {
            if (Portfolio != item.Portfolio)
            {
                return;
            }
            if (Symbol != item.Symbol)
            {
                return;
            }
            //разобрать трейд по модулю лота, т.е. на максимальнео количество частей
            //определить направление трейда
            //проверить очередь противоположного направления, на наличие соответсвующего открывающего трейда
            //если есть соответсвующий открывающий трейд, извлекаем
            //определяем направление закрытой позиции
            //определяем результат закрытой позиции
            //если нет соответствия, помещаем в очередь своего направления

            //определить направление трейда
            int count = (int)System.Math.Abs(item.Amount);

            if (item.Action == TradeAction.Buy)
            {
                //разобрать трейд по модулю лота, т.е. на максимальнео количество частей
                for (int i = 0; i < count; i++)
                {
                    Trade tradeBuy = new Trade(item);
                    tradeBuy.Amount = 1;
                    //проверить очередь противоположного направления, на наличие соответсвующего открывающего трейда
                    if (SellTrades.Any())
                    {
                        //если есть соответсвующий открывающий трейд, извлекаем
                        Trade tradeSell_1 = SellTrades.Dequeue();
                        //определяем направление закрытой позиции
                        //определяем результат закрытой позиции
                        Deal deal = new Deal(TradeAction.Sell, tradeBuy, tradeSell_1);
                        SetCumulativePnL(deal);
                        Deals.Add(deal);
                    }
                    else
                    {
                        //если нет соответствия, помещаем в очередь своего направления
                        BuyTrades.Enqueue(tradeBuy);
                    }
                }
            }
            else
            if (item.Action == TradeAction.Sell)
            {
                for (int i = 0; i < count; i++)
                {
                    Trade tradeSell = new Trade(item);
                    tradeSell.Amount = -1;
                    if (BuyTrades.Any())
                    {
                        Trade tradeBuy_1 = BuyTrades.Dequeue();
                        Deal  deal       = new Deal(TradeAction.Buy, tradeBuy_1, tradeSell);
                        SetCumulativePnL(deal);
                        Deals.Add(deal);
                    }
                    else
                    {
                        SellTrades.Enqueue(tradeSell);
                    }
                }
            }
        }
Esempio n. 9
0
 public void Add(Deal entity) => Deals.Add(entity);