Exemple #1
0
        private void BuildTrajectory(ConventionDate today, ConventionDate maturity)
        {
            double         dt = GetDt();
            double         spotValue;
            bool           afterMaturity = false;
            ConventionDate currentDate   = today.GetNextDate();
            ConventionDate previousDate  = today;

            while (!afterMaturity)
            {
                if (currentDate.Equals(maturity))
                {
                    afterMaturity = true;
                }
                spotValue = spots[previousDate] * Math.Exp((drift - Math.Pow(vol, 2) / 2) * dt + vol * Math.Sqrt(dt) * Normal.Sample(random, 0.0, 1.0));
                spots.Add(currentDate, spotValue);
                previousDate = currentDate;
                currentDate  = currentDate.GetNextDate();
            }
        }
Exemple #2
0
        public double GetPrice(Action action)
        {
            double         perf;
            double         perfFactor   = 1;
            double         price        = 0;
            int            year         = 1;
            ConventionDate previousDate = new ConventionDate();
            ConventionDate currentDate  = GetNextCouponDate(previousDate);
            int            nbDays       = previousDate.NumberDays(currentDate);
            double         factor       = (double)nbDays / (double)previousDate.GetDaysPerYear();

            price += factor * faceValue * annualRate / Math.Pow((1 + marketRate), factor);
            while (!currentDate.Equals(maturity))
            {
                if (action != null)
                {
                    perf = action.GetPerf(currentDate, previousDate);
                    if (perf > 0.2)
                    {
                        perfFactor = 1;
                    }
                    else if (perf > 0.1)
                    {
                        perfFactor = 0.7;
                    }
                    else
                    {
                        perfFactor = 0.5;
                    }
                }
                price       += perfFactor * faceValue * annualRate / Math.Pow(1 + marketRate, factor + (year / frequency)) / (double)frequency;
                year        += 1;
                previousDate = currentDate;
                currentDate  = GetNextCouponDate(currentDate);
            }

            /*for (int year = 1; year < frequency * YearsTillMaturity(); year++)
             * {
             *  if (action != null)
             *  {
             *      perf = action.GetPerf(year);
             *  }
             *  price += perf * faceValue * annualRate / Math.Pow((1 + marketRate), factor + (year / frequency)) / (double)frequency;
             * }*/
            if (action != null)
            {
                perf = action.GetPerf(previousDate, maturity);
                if (perf > 0.2)
                {
                    perfFactor = 1;
                }
                else if (perf > 0.1)
                {
                    perfFactor = 0.7;
                }
                else
                {
                    perfFactor = 0.5;
                }
            }
            price += perfFactor * faceValue * (1 + annualRate) / Math.Pow((1 + marketRate), factor + YearsTillMaturity());
            return(price);
        }