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);
            }
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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);
            }
        }