public override async Task ExecuteAsync(object parameter) { try { Dictionary <DateTime, SecurityPriceStore> dbPrices = _priceService.GetSecurityPrices(_sysSecurityPricesVM.SelectedSecurity.Symbol, _sysSecurityPricesVM.SelectedSecurity.AssetClass.Name) .ToDictionary(g => g.Date); int secId = _sysSecurityPricesVM.SelectedSecurity.SecurityId; List <SecurityPriceStore> pricesToUpdate = new List <SecurityPriceStore>(); List <SecurityPriceStore> newPrices = new List <SecurityPriceStore>(); foreach (PriceContainer priceContainer in _sysSecurityPricesVM.dgSecurityPrices) { if (dbPrices.ContainsKey(priceContainer.Date)) { if (dbPrices[priceContainer.Date].ClosePrice != priceContainer.ClosePrice) { dbPrices[priceContainer.Date].ClosePrice = priceContainer.ClosePrice; dbPrices[priceContainer.Date].PriceSource = "Manual"; pricesToUpdate.Add(dbPrices[priceContainer.Date]); } } else { SecurityPriceStore newManualPrice = new SecurityPriceStore { Date = priceContainer.Date, ClosePrice = priceContainer.ClosePrice, PriceSource = "Manual", SecurityId = secId }; newPrices.Add(newManualPrice); } } await _priceService.AddManualPrices(newPrices); await _priceService.UpdateManualPrices(pricesToUpdate); MessageBox.Show($"{newPrices.Count} prices inserted.\n{pricesToUpdate.Count} prices updated.", "Information"); await _sysSecurityPricesVM.Load(); } catch (Exception e) { MessageBox.Show(e.Message); } }
public override async Task ExecuteAsync(object parameter) { try { if (_importVM.dgCSVPrices.Count != 0) { Dictionary <string, int> securityMap = _importService.SecurityMap(); Dictionary <string, List <SecurityPriceStore> > securityPrices = new Dictionary <string, List <SecurityPriceStore> >(); foreach (PriceImportDataCSV data in _importVM.dgCSVPrices) { if (securityMap.ContainsKey(data.SecuritySymbol)) { SecurityPriceStore price = new SecurityPriceStore { ClosePrice = data.ClosePrice, Date = data.Date, PriceSource = data.PriceSource, SecurityId = securityMap[data.SecuritySymbol] }; if (!securityPrices.ContainsKey(data.SecuritySymbol)) { securityPrices[data.SecuritySymbol] = new List <SecurityPriceStore> { price }; } else { securityPrices[data.SecuritySymbol].Add(price); } } } await _importService.AddImportedPrices(securityPrices); } } catch (Exception e) { MessageBox.Show(e.Message); } }
public async Task <int> AddDailyPrices(SecuritiesDIM security) { using (PortfolioAceDbContext context = _contextFactory.CreateDbContext()) { string avKey = context.AppSettings.Where(ap => ap.SettingName == "AlphaVantageAPI").First().SettingValue; AlphaVantageConnection avConn = _dataFactory.CreateAlphaVantageClient(avKey); IEnumerable <AVSecurityPriceData> allPrices = await avConn.GetPricesAsync(security); HashSet <DateTime> existingDates = context.SecurityPriceData.Where(spd => spd.Security.Symbol == security.Symbol).Select(spd => spd.Date).ToHashSet(); string assetClass = security.AssetClass.Name; int pricesSaved = 0; foreach (AVSecurityPriceData price in allPrices) { if (!existingDates.Contains(price.TimeStamp)) { // i should the indirect quote therefore i inverse the price here... if (assetClass == "FX") { price.Close = 1 / price.Close; } if (security.Currency.Symbol == "GBP" && assetClass != "FX") { price.Close /= 100; } SecurityPriceStore newPrice = new SecurityPriceStore { Date = price.TimeStamp, ClosePrice = price.Close, SecurityId = security.SecurityId, PriceSource = price.PriceSource }; context.SecurityPriceData.Add(newPrice); pricesSaved += 1; } } await context.SaveChangesAsync(); return(pricesSaved); } }