Мой код Matlab правильно реализует данный алгоритм? - PullRequest
0 голосов
/ 31 марта 2011

Я получаю некоторые неправильные результаты, и я не могу найти какую-либо ошибку в своем коде, поэтому я подумал, может ли кто-нибудь из вас выяснить, правильно ли я реализую этот алгоритм Binomial-Lattice или нет , Вот что я получаю в качестве результатов и чего я ожидаю в качестве своих результатов:

Фактические результаты: Я начинаю с [S0,K,sigma,r,T,nColumn]=[1.5295e+009,6e+008,0.0023,0.12,20,15] и получаю p=32.5955, price=-6.0e+18 и BLOV_lattice, как показано на рисунке 1.

Ожидаемые результаты:

  1. p - это вероятность, поэтому она не должна быть больше 1. Даже если я увеличу nColumn до 1000, все равно p будет больше 1 в приведенных выше фактических результатах.
  2. price должно получиться таким же, как S0, число, с которого я начинаю в первом столбце, после обратной индукции, т.е. должна быть обратная совместимость.

Рисунок 1: BLOV_lattice enter image description here

Мой код Matlab:

function [price,BLOV_lattice]=BLOV_general(S0,K,sigma,r,T,nColumn)

% BLOV stands for Binomial Lattice Option Valuation

%% Constant parameters
del_T=T./nColumn; % where n is the number of columns in binomial lattice
u=exp(sigma.*sqrt(del_T));
d=1./u;
p=(exp(r.*del_T)-d)./(u-d);
a=exp(-r.*del_T);

%% Initializing the lattice
Stree=zeros(nColumn+1,nColumn+1);
BLOV_lattice=zeros(nColumn+1,nColumn+1);

%% Developing the lattice

%# Forward induction

for i=0:nColumn
    for j=0:i
        Stree(j+1,i+1)=S0.*(u.^j)*(d.^(i-j));
    end
end
for i=0:nColumn
    BLOV_lattice(i+1,nColumn+1)=max(Stree(i+1,nColumn+1)-K,0);
end

%# Backward induction

for i=nColumn:-1:1
    for j=0:i-1
        BLOV_lattice(j+1,i)=a.*(((1-p).*BLOV_lattice(j+1,i+1))+(p.*BLOV_lattice(j+2,i+1)));
    end
end
price=BLOV_lattice(1,1);

%% Converting the lattice of upper traingular matrix to a tree format

N = size(BLOV_lattice,1);  %# The size of the rows and columns in BLOV_lattice
BLOV_lattice = full(spdiags(spdiags(BLOV_lattice),(1-N):2:(N-1),zeros(2*N-1,N)));

Рекомендации:

  • Кокс, Джон С., Стивен А. Росс и Марк Рубинштейн. 1979. «Ценообразование опционов: упрощенный подход». Журнал финансовой экономики 7: 229-263.

  • E. Георгиадис, "У цены биномиальных опционов нет закрытого решения". Алгоритмические финансы Предстоящие (2011).

  • Ричард Дж. Рендлман-младший и Брит Дж. Барттер. 1979. "Двухстороннее опционное ценообразование". Журнал финансов 24: 1093-1110. DOI: 10,2307 / 2327237

1 Ответ

1 голос
/ 31 марта 2011

Насколько я вижу, ваша формулировка p как p=(exp(r.*del_T)-d)./(u-d) не определена (ясно как таковая) нигде в ваших ссылках.

Из вашего кода не так просто определить, какие варианты вы пытаетесь оценить.

Самое близкое, что я могу получить - это интерпретировать, что p (в вашем случае) просто сводится к p= (1- d)/ (u- d), что с вашими параметрами будет 0.49934.(По крайней мере, разумное значение следует интерпретировать как вероятность!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...