1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static double BinomialTree(double S0, double K, double r, double Vol, double T, int nbrPeriods)
{
double Price = 0.0;
double dt = T / nbrPeriods;
double u = Math.Exp(Vol * dt);
double d = 1 / u;
double P = (Math.Exp(r * dt) - d) / (u - d);
List<double> nodeVec = new List<double>();
List<double> TempVec = new List<double>();
for (int i = 0; i <= nbrPeriods; i++)
{
double S = S0 * Math.Pow(u, i) * Math.Pow(d, nbrPeriods - i);
double tempPayOff = Math.Max(S - K, 0);
nodeVec.Add(tempPayOff);
}
for (int i = nbrPeriods; i >= 1; i--)
{
for (int j = 0; j < i; j++)
{
double node = Math.Exp(-r * dt) * (P * nodeVec[j] + (1 - P) * nodeVec[j + 1]);
TempVec.Add(node);
}
nodeVec.Clear();
nodeVec = TempVec;
TempVec.Clear();
}
Price = nodeVec[0];
return Price;
}
static void Main(string[] args)
{
double r = BinomialTree(100, 80, 0.03, 0.3, 1, 1);
Console.WriteLine(r);
}
}
} |
Partager