public IEnumerable<DateTime> GetDates(RolloverType period) { var startDate = new DateTime(DateTime.Now.Year, 1, 1); switch(period) { case RolloverType.Annual: //return Enumerable.Range(DateTime.Now.Year, 10).Select(x => new DateTime(x, 1, 1)); return GetDates(new DateTime(DateTime.Now.Year + 12, 1, 1), 12); // 12 years case RolloverType.Quarter: return GetDates(new DateTime(DateTime.Now.Year + 3, 1, 1), 3); // 12 quarters case RolloverType.Month: return GetDates(new DateTime(DateTime.Now.Year + 1, 1, 1), 1); // 12 months default: return GetDates(new DateTime(DateTime.Now.Year + 12, 1, 1), 12); } }
/// <summary> /// Calculates the NPV for a series of cashflows /// </summary> /// <param name="npvData"></param> /// <param name="rate"></param> /// <param name="rolloverType"></param> /// <param name="useXnpvFormula">When true the return value is calculated based on the Excel XNPV formula, when false simply uses the standard NPV formula</param> /// <returns></returns> public double CalculateNpv(double initialInvestment, IList<Cashflow> npvData, double rate, RolloverType rolloverType, bool useXnpvFormula) { Guard.IsInRange(rate, "rate", 0, 100); double npv = 0; if (useXnpvFormula) { var firstDate = npvData.First().Period; for (int i = 0; i < npvData.Count(); i++) { double exponent; exponent = i == 0 ? 0 : GetNpvExponent(firstDate, npvData[i].Period); npv += CalculatePresentValue(npvData[i].Amount, rate / 100, exponent, rolloverType); } } else { // Change the rate if it's monthly or quarterly. http://www.vertex42.com/ExcelArticles/discount-factors.html switch (rolloverType) { case RolloverType.Month: rate = rate / 12; break; case RolloverType.Quarter: rate = rate / 4; break; default: break; } for (int i = 0; i < npvData.Count(); i++) { npv += CalculatePresentValue(npvData[i].Amount, rate / 100, i + 1, rolloverType); } } // Subtract initial investment. Example 2: http://office.microsoft.com/en-au/excel-help/npv-HP005209199.aspx return npv - initialInvestment; }
public Task<ObservableCollection<DateTime>> GetDates(RolloverType period) { var th = new TaskHelper<NpvDateServiceClient, ObservableCollection<DateTime>>(new NpvDateServiceClient()); return th.GetTask<ObservableCollection<DateTime>>(new object[]{period}); }
/// <summary> /// The event args for traceManager event /// </summary> /// <param name="pLogFileName">The log file name</param> /// <param name="pLogFileIndex">The log file index (if mutliple)</param> /// <param name="pLogLevel">The log level the trace manager is on</param> /// <param name="pEventDateTime">The event date time</param> /// <param name="pRolloverType">The type of rollover that occured</param> public TraceManagerEventArgs(string pLogFileName, int pLogFileIndex, int pLogLevel, DateTime pEventDateTime, RolloverType pRolloverType) { LogFileName = pLogFileName; LogFileIndex = pLogFileIndex; LogLevel = LogLevel; EventDateTime = pEventDateTime; Rollover = pRolloverType; }
public IEnumerable<DateTime> GetDates(RolloverType period) { return _dateRollCalculator.GetDates(period); }
/// <summary> /// Raises log file rollover event /// </summary> /// <param name="pType">The type of rollover that took place</param> protected virtual void OnLogFileRolledOver(RolloverType pType) { if (LogFileRolledOver != null) { LogFileRolledOver(this, new TraceManagerEventArgs(recentLogFileName, logFileIndex, traceLevel, DateTime.Now, pType)); } }
/// <summary> /// Calculate the Present value of a cashflow /// </summary> public double CalculatePresentValue(double cashflow, double rate, double exponent, RolloverType rolloverType = RolloverType.Annual) { Guard.IsInRange(rate, "rate", 0, 100); Guard.GreaterThan(exponent, "power", -1); var pv = cashflow / Math.Pow(1 + rate, exponent); return pv; }