[VBA] Drzewo dwumianowe, znaleźć optymalny moment wykonania

aGabi94
Użytkownik
Użytkownik
Posty: 230
Rejestracja: 5 mar 2014, o 18:52
Płeć: Kobieta
Lokalizacja: Kraków
Podziękował: 60 razy

[VBA] Drzewo dwumianowe, znaleźć optymalny moment wykonania

Post autor: aGabi94 »

Wyceniam opcję amerykańską w drzewie dwumianowym w VBA, za pomocą następującego kodu

Kod: Zaznacz cały

Sub opcja_amerykanska()
S0 = Cells(1, 2)
K = Cells(2, 2)
T = Cells(3, 2)
r = Cells(4, 2)
sigma = Cells(5, 2)
N = Cells(8, 2)
delta_t = T / N
Cells(9, 2) = delta_t
u = Exp(sigma * delta_t ^ 0.5)
Cells(10, 2) = u
d = 1 / u
Cells(11, 2) = d
p = (Exp(r * delta_t) - d) / (u - d)
Cells(12, 2) = p
Cells(13, 2) = 1 - p

For i = 0 To N
Cells(3, 4 + i) = i
Next i

Dim cena_akcji(1000, 1000) As Double

For i = 0 To N
    For j = 0 To i
    cena_akcji(i, j) = S0 * u ^ j * d ^ (i - j)
    Cells(4 + i - j, 4 + i) = cena_akcji(i, j)
    Next j
Next i

Dim cena_opcji(1000, 1000) As Double

For j = 0 To N
    cena_opcji(N, j) = put_payoff(cena_akcji(N, j), K)
    Cells(4 + N + 2 + N - j, 4 + N) = cena_opcji(N, j)
Next j
 
For i = N - 1 To 0 Step -1
    For j = 0 To i
        cena_opcji(i, j) = maks(Exp(-r * delta_t) * (p * cena_opcji(i + 1, j + 1) + (1 - p) * cena_opcji(i + 1, j)), K - cena_akcji(i, j))
        Cells(4 + N + 2 + i - j, 4 + i) = cena_opcji(i, j)
    Next j
Next i
End Sub
i chciałabym go przerobić tak, żeby otrzymać optymalny moment wykonania. Myślałam o pętli z warunkiem

Kod: Zaznacz cały

if(maks(Exp(-r * delta_t) * (p * cena_opcji(i + 1, j + 1) + (1 - p) * cena_opcji(i + 1, j)) > K - cena_akcji(i, j) ),
a potem wypisaniu tych chwil czasowych, ale nie wiem jak to zrobić. Proszę o pomoc.
Ostatnio zmieniony 7 kwie 2018, o 07:14 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
OShon
Użytkownik
Użytkownik
Posty: 65
Rejestracja: 4 mar 2014, o 00:32
Płeć: Mężczyzna
Lokalizacja: VBATools | Kraków | Poland | Europe | Earth | SolSystem | SomewareInSpace
Podziękował: 1 raz
Pomógł: 7 razy

[VBA] Drzewo dwumianowe, znaleźć optymalny moment wykonania

Post autor: OShon »

A gdzie deklaracja zmiennych? wpisz na początku modułu

Kod: Zaznacz cały

Option Explicit
Wszystkie to warianty?
Co robi funkcja put_payoff() labo maks()
Można by się domyślać że maks liczy liczbę maksymalną z czegoś tam
W kodzie odwołujesz się do danych zawartych w arkuszu, nie importujesz tych danych kodem, a więc Wypada zgadywać co masz w tej tablicy 1000 na 1000 a wcześniej w tek 2-giej kolumnie od 1 do 13?
Jakiś załącznik by się nadał. No chyba ze to pytanie czysto teoretyczne co do metody, tylko dla tych którzy temat znają i dzielić się nim nie zamierzają.
ODPOWIEDZ