tree — Проверка состояния на каждом биномиальном пути Переполнение стека

Я новичок в C ++. Я пытаюсь создать вероятность ранних упражнений для американских опционов, используя модель биномиального дерева. Я создал дерево следующим образом:

    //American Option Price Calculation Using Binomial Tree Model

#include <vector>
#include <cmath>
#include <iostream>
#include <fstream>
#include <iomanip>
#include <algorithm>

using namespace std;

// Binomial Tree American
double binomialTreeAmerican(double S0, double maturity, double sigma,
double interestRate, double strike, int n, double delta)
{
// create storage for tree
vector<vector<double>> stockTree(n + 1, vector<double>(n + 1));

// local variables
double u, d, dt, q;

// calculate these values
dt = maturity / n;
u = exp(sigma*sqrt(dt));
d = exp(-sigma*sqrt(dt));
q = (exp((interestRate - delta)*dt) - d) / (u - d);

for (int i = 0; i<stockTree.size(); i++)
{
for (int j = 0; j<stockTree[i].size(); j++)
{
stockTree[i][j] = S0*pow(u, j)*pow(d, i - j);
//cout <<i<<"   ,   "<<j<<"   ,   "<< stockTree[i][j] << endl;
}
}

// option tree
vector<vector<double>> optionTree(n + 1, vector<double>(n + 1));
// put in the payoff at time t=T, or i=n
for (int j = 0; j <= n; j++)
{
optionTree[n][j] = max(stockTree[n][j]-strike,0.);
//cout <<endl<< optionTree[n][j] << endl;
}
// now step backwards through tree and
// calculate the discounted expected value at each node
for (int i = n - 1; i >= 0; i--)
{
for (int j = 0; j <= i; j++)
{
// option value at each node
// option value at each node
optionTree[i][j] = exp(-interestRate*dt)*
(q*optionTree[i + 1][j + 1] + (1 - q)*optionTree[i + 1][j]);
//cout << i << " , " << j << "    " << optionTree[i][j] <<"     "<<stockTree[i][j]-strike<< endl;
// condition for highest value at each node
optionTree[i][j] = max(optionTree[i][j], stockTree[i][j]-strike);
}
}
return optionTree[0][0];
}
//Main Function
int main()
{
//Binomial American Option
double N = 1000.;
cout << setprecision(10);
cout << N << "," << binomialTreeAmerican(135.61, 0.4, 0.17, 0.07, 112., N, 0.07) << "," << endl;
}

Теперь я хочу проверить, есть ли ранние упражнения на каждом биноминальном пути или нет.

    optionTree[i][j] = max(optionTree[i][j], stockTree[i][j]-strike);

Это условие для проверки ранних упражнений на каждом узле. Если значение равно stockTree [i] [j] -strike, тогда есть раннее упражнение. Мне нужно отделить те пути, для которых хотя бы один узел имеет значение stockTree [i] [j] -strike, и разделить их на общее количество путей в дереве.
Мне нужно проверить, сколько числа биномиальных путей происходит в начале упражнения, и разделить это число на общее количество путей в модели. Вот где я застрял. Может кто-нибудь, пожалуйста, помогите? Это будет высоко ценится.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]