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; }
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;
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); }
public int Add(Deal entity) => Deals.Add(entity).Id;
public void Add(Deal deal) => Deals.Add(deal);
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); } } } }
public void Add(Deal entity) => Deals.Add(entity);