예제 #1
0
 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);
     }
 }
예제 #2
0
파일: NpvCalculator.cs 프로젝트: 1nd1go/npv
        /// <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;
        }
예제 #3
0
 public Task<ObservableCollection<DateTime>> GetDates(RolloverType period)
 {
     var th = new TaskHelper<NpvDateServiceClient, ObservableCollection<DateTime>>(new NpvDateServiceClient());
     return th.GetTask<ObservableCollection<DateTime>>(new object[]{period});
 }
예제 #4
0
 /// <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;
 }
예제 #5
0
 public IEnumerable<DateTime> GetDates(RolloverType period)
 {
     return _dateRollCalculator.GetDates(period);
 }
예제 #6
0
 /// <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));
     }
 }
예제 #7
0
파일: NpvCalculator.cs 프로젝트: 1nd1go/npv
        /// <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;
        }