public async Task <double> CalculateNetworth(PortfolioDetails portfolioDetails)
        {
            HttpClient httpClient = _httpClientFactory.CreateClient();

            httpClient.BaseAddress = new Uri("http://localhost:44357");

            double totalFundNav = 0;

            foreach (var fundDetails in portfolioDetails.MutualFundList)
            {
                //http://52.152.90.186/
                //HttpResponseMessage mutualFundResponse = httpClient.GetAsync("https://localhost:44325/api/mutualFund/" + fundDetails.MutualFundName).Result;
                HttpResponseMessage mutualFundResponse = httpClient.GetAsync("http://52.152.90.186/api/mutualFund/" + fundDetails.MutualFundName).Result;
                double fundNav = await mutualFundResponse.Content.ReadAsAsync <double>();

                totalFundNav += fundNav * fundDetails.MutualFundUnits;
            }

            double totalStock = 0;

            foreach (var stockDetails in portfolioDetails.StockList)
            {
                //http://13.85.189.110/
                //HttpResponseMessage stockResponse = httpClient.GetAsync("https://localhost:44377/api/DailySharePrice/" + stockDetails.StockName).Result;
                HttpResponseMessage stockResponse = httpClient.GetAsync("http://13.85.189.110/api/DailySharePrice/" + stockDetails.StockName).Result;
                double currentStockPrice          = await stockResponse.Content.ReadAsAsync <double>();

                totalStock += currentStockPrice * stockDetails.StockCount;
            }

            return(totalFundNav + totalStock);
        }
예제 #2
0
        public ActionResult <AssetSaleResponse> SellAssets([FromBody] PortfolioDetails portfolioDetails)
        {
            if (portfolioDetails == null)
            {
                return(this.BadRequest("Empty Input"));
            }

            AssetSaleResponse assetSaleResponse = new AssetSaleResponse
            {
                Networth   = _PortfolioService.CalculateNetworth(portfolioDetails).Result,
                SaleStatus = true
            };

            return(assetSaleResponse);
        }
예제 #3
0
        public ActionResult <double> CalculateNetworth(int portfolioId)
        {
            if (portfolioId < 0)
            {
                return(this.BadRequest("Incorect ID"));
            }

            PortfolioDetails portfolioDetails = _PortfolioService.GetPortfolio(portfolioId);

            if (portfolioDetails == null)
            {
                return(this.BadRequest("Empty Portfolio"));
            }

            double result = _PortfolioService.CalculateNetworth(portfolioDetails).Result;

            return(result);
        }
예제 #4
0
        private void fillPortDetails <T>(int iPortID, bool isBacktPort) where T : Entities.dbo.PortfolioBase
        { // Loads portfolio data from DB
            try
            {
                double dSecValue = 0;
                double dCash     = 0;
                List <Entities.Sp.SecurityData> securities = new List <Entities.Sp.SecurityData>();

                repository.Execute(session =>
                {
                    var portfolio    = session.Get <T>(iPortID);
                    m_objPortDetails = AutoMapper.Mapper.Map <PortfolioDetails>(portfolio);

                    if (portfolio.dInitRisk.HasValue)
                    {
                        m_objPortDetails.PreferedRisk = riskGrid.getPortRiskItem((double)portfolio.dInitRisk);
                    }
                    if (portfolio.dCurrRisk.HasValue)
                    {
                        m_objPortDetails.CurrentStDev = Convert.ToDouble(portfolio.dCurrRisk);
                    }
                    else
                    {
                        m_objPortDetails.CurrentStDev = m_objPortDetails.PreferedRisk.UpperBound;
                    }
                    m_objPortDetails.CalcCurrency = portfolio.CalcCurrency;

                    GetPortfolioSectorDist();

                    Dictionary <string, Tuple <object, NHibernate.Type.IType> > param = new Dictionary <string, Tuple <object, NHibernate.Type.IType> >();
                    param.Add("Id", new Tuple <object, NHibernate.Type.IType>(m_objPortDetails.ID, NHibernate.NHibernateUtil.Int32));

                    if (isBacktPort)
                    {
                        securities = repository.ExecuteSp <Entities.Sp.SecurityData>("dataGetBacktestingPortfolioSecurities", param).ToList();
                    }
                    else
                    {
                        securities = repository.ExecuteSp <Entities.Sp.SecurityData>("dataGetPortfolioSecurities", param).ToList();
                    }

                    DateTime calcDate = DateTime.Today.AddDays(-1); //LR: If using below calculations for BTesting, it should be another date here
                    var m_AdjCoeff    = (portfolio.CalcCurrency == "9999") ? 100.0 : 1;
                    m_objPortfolioClasses.PriceHandler = new cPricesHandler(this, Resolver.Resolve <IRepository>());
                    m_objPortDetails.SecurityData      = AutoMapper.Mapper.Map <List <SecurityData> >(securities);


                    //m_objPortDetails.DateCreated
                    if (!isBacktPort)
                    {
                        foreach (var sec in m_objPortDetails.SecurityData)
                        {
                            if (sec.idSecurityType != 106)
                            {
                                // TODO: replace this function with something else -
                                //var price = m_objPortfolioClasses.PriceHandler.GetPrice(sec.idSecurity, portfolio.CalcCurrency, calcDate);
                                //var dPrice = (price != null && price.RateVal.HasValue ? price.RateVal.Value : 0);

                                double dCreateDateValue  = sec.portSecWeight * m_objPortDetails.Equity;
                                double dCurrentDateValue = sec.portSecWeight * m_objPortDetails.CurrEquity;
                                sec.SecValue             = dCurrentDateValue;                                  // Calculates value based on weight
                                sec.flQuantity           = (sec.SecValue * m_AdjCoeff) / sec.flYesterdayPrice; // Updates quantity
                                dSecValue    = Math.Floor(sec.flQuantity) * sec.flYesterdayPrice / m_AdjCoeff;
                                dCash       += (sec.flQuantity - Math.Floor(sec.flQuantity)) * sec.flYesterdayPrice / m_AdjCoeff;
                                dCash       += dSecValue - Math.Floor(dSecValue); //cents/agorot
                                sec.SecValue = Math.Floor(dSecValue);
                                //sec.Profit = dCurrentDateValue / dCreateDateValue - 1;
                                sec.Profit = sec.flYesterdayPrice / sec.flCreationPrice - 1; // flCreationPrice is price on (dtCreated - 1)
                            }
                        }
                        m_objPortDetails.Cash = dCash;
                    }
                });

                m_colOpenedSecurities = securities;  // Looks like it is only used for Backtesting
            } catch (Exception ex) {
                m_objErrorHandler.LogInfo(ex);
            }
        }//loadNewPortfolio