Raport i dokumentacja do projektu Wycena opcji azjatyckich metodą PDE Autor: Agnieszka Ulikowska
1. EOREYCZNY OPIS ZAGADNIENIA Wypłata z opcji azjatyckiej zależy od ceny instrumentu podstawowego w ustalonych momentach czasu. W ramach projektu rozpatrzone zostały następujące opcje azjatyckie o wypłatach: Opcja floating strike call X =max S S, Opcja floating strike put X =max S S, Opcja fixed strike call X =max S K, Opcja fixed strike put X =max K S, gdzie S = 1 S u du Cena V =V t, S t, A t opcji azjatyckiej zależy od trzech zmiennych. t - czas S t - proces cen akcji dany wzorem S t =S exp r 1 t W t t A t - całka z funkcji procesu S t, A t = f S u,u du Dla opcji azjatyckich fixed / floating strike f S t,t =S t, t A t = S u du. Wiedząc, że da t = f S t,t dt i korzystając ze wzoru Ito zastosowanego do funkcji V =V t, S t, A t otrzymujemy równanie różniczkowe dv t = dv dt dv S ds 1 S d V dv f S,t ds da dt S dv ds dw t Używając argumentów takich jak w przypadku równania Blacka-Scholesa dla europejskich opcji waniliowych dowodzimy, że dv dt dv rs ds 1 S d V dv f S, t rv = ds da Obecność składnika f S,t dv uniemożliwia transformację do równania dyfuzji. Rozwiązanie da powyższego równania różniczkowego zdefiniowane jest na 3-wymiarowej przestrzeni S, A, t, co prowadzi do znacznych kosztów przy numerycznym rozwiązywaniu. W konkretnych przypadkach można jednak zredukować wymiar równania (do równania dwuwymiarowego) przez odpowiednią zamianę zmiennych taka zamiana zmiennych jest możliwa przy wycenie opcji floating / fixed strike.
*OPCJA AZJAYCKA FLOAING SRIKE CALL Wypłata z opcji floating strike call wynosi X =max S S, =S max 1 1 S S u du. Definiujemy nową zmienną R t = 1 t S S u du. t Wypłatę można wtedy zapisać jako S max 1 1 R, =S function R,. Jest to motywacja do szukania rozwiązania V =V t, S t, A t w postaci S t H R t,t, gdzie H R,t jest pewną nieznaną funkcją. Po przekształceniach otrzymujemy następujące równanie różniczkowe z warunkami terminowobrzegowymi (pełne wyprowadzenie dostępne w ools for Computational Finance, Seydel rozdział 6): dh dt 1 R d H dh 1 rr dr dr = H = dla R dh dt dh =dla R= dr H R, =max 1 R, Rozwiązując to równanie numerycznie otrzymujemy wartości funkcji mamy obliczoną także cenę opcji. H R,t - w rzeczywistości *OPCJA AZJAYCKA FIXED SRIKE CALL Wypłata z opcji azjatyckiej fixed strike call wynosi: K 1 X =max S K, = min K S, =S min S S u du, Jak poprzednio, definiujemy nową zmienną K 1 S u du. Y t = S t t Wypłatę można zapisać jako X =S min Y, =S function Y,. Jest to motywacja do szukania rozwiązania V =V t, S t, A t w postaci S t H Y t,t dla pewnej funkcji H. Można pokazać (szczegóły w artykule B.Alziary et al. / Journal of Banking & Finance 1 (1997) 613-64), że H jest rozwiązaniem równania różniczkowego:
dh dt 1 Y d H dy 1 dh ry dy = H Y, = min Y,.. NUMERYCZNE ROZWIĄZANIE Do rozwiązania równań użyłam schematów: schemat Laxa Wendroffa schemat VD Przy wyborze schematów numerycznych do rozwiązywania powyższych równań, należy zwrócić szczególną uwagę na sposób przybliżenia pierwszej pochodnej zmiennej przestrzennej. Jako modelowe równanie przyjmijmy du du a x dt dx =b x d u dx Stosując standardowy schemat drugiego rzędu FCS (Forward ime Centered Scheme), tzn. przybliżając pierwszą pochodną za pomocą różnic centralnych możemy narazić się na problemy ze stabilnością i oscylacje numerycznego rozwiązania, w szczególności przy niewielkiej wartości współczynnika b x. Przy zerowym współczynniku dyfuzji w ogóle nie należy stosować powyższego schematu. Przyczyną są warunki gwarantujące stabilność nakładające ograniczenia na wielkość kroku czasowego i przestrzennego:.5, a x b, gdzie = b t x. Przy wyborze = 1, ograniczenie na krok siatki przestrzennej przybiera formę x b a. Uwaga: Ze względu na istotność problemu przybliżania pierwszej pochodnej zmiennej przestrzennej, przy analizie schematów rozważane będą równania postaci: (.1 ) du dt d dx f x =. Druga pochodna zmiennej przestrzennej przybliżana jest w programie w sposób standardowy. Oznaczenia: u j,v oznacza numeryczne rozwiązanie w punkcie j,v. Jest to aproksymacja rzeczywistego rozwiązania u x j,t v.
*SCHEMA LAXA WENDROFF'A Schemat Laxa-Wendroff'a oparty jest na wzorze aylora i postaci równania.1. u j,v 1 =u j,v t du j, v dt O t =u j,v t df u j, v O t dt Wykorzystuje także wartości obliczane w punktach nie będących węzłami siatki czasowoprzestrzennej, tzn. w punktach j± 1, v± 1. Formalnie, schemat można zapisać jako: u = 1 j 1, v 1 u j, v u j 1, v t x f u j 1,v f u j,v w = 1 u u t j 1, v j,v x f u f u j, v j 1, v j 1,v 1 u j,v 1 =u j,v t x f u f u j 1,v 1 j 1, v 1 *MEODY VD Idea metod VD: schemat numeryczny musi gwarantować, że całkowita wariacja rozwiązania nie będzie zwiększać się w miarę upływu czasu. Numeryczne rozwiązanie musi zatem spełniać poniższy warunek: V u n 1 V u n, gdziev u n = j u j 1,v u j,v Metoda zaimplementowana w projekcie oparta jest na odpowiednim połączeniu schematów pierwszego i drugiego rzędu. Wyjściowe równanie.1 przedstawiamy jako: du i dt f 1 f 1 i i x =, gdzie f i 1 L = f 1 i i 1 f i 1 H L f 1 i ( f i 1 zdefiniowane jest analogicznie, z odpowiednio przesuniętym indeksem powyżej składniki f i± 1 to tzw. numerical fluxes, które powstają poprzez odpowiednie i ). Występujące połączenie flux'ów niższego i wyższego rzędu. Dla ustalenia uwagi przyjmijmy, że równanie ma du du postać a =, gdzie a. dt dx Najczęściej przyjmuje się, że: f L i 1 =au i oraz f H 1=a u u i 1 i i. Po podstawieniu otrzymujemy:
f i =au 1 i a u i 1 i 1 u i. Funkcja (flux limiter) powinna przyjmować wartości bliskie, gdy numeryczne rozwiązanie wykazuje duże skoki gradientu (wtedy schemat jest pierwszego rzędu) i wartości bliskie 1 w przeciwnym przypadku (wtedy schemat jest drugiego rzędu). W przypadku a można zdefiniować zależność 1= r i, gdzie r i = u u i i 1. Współczynnik ten jest ujemny w i u i 1 u i pobliżu lokalnych ekstremów, stosunkowo niewielki dla gładkich danych i zwiększa się, gdy numeryczne rozwiązanie wykazuje znaczne i gwałtowne zmiany wartości. Można stosować różne limitery, w programie zostały zaimplementowane cztery rodzaje: MinMod : a,b =S a,b min a, b Van Leer : a,b =S a,b ab a b MC : a,b =S a,b min.5 a b, a, b Superbee: a,b =S a,b max min a, b,min b, a, gdzie S a, b = 1 sign a sign b, 1, r = r. Zalety metody: 1. zapobiega powstawaniu oscylacji numerycznego rozwiązania. łączy w sobie zalety schematów pierwszego i drugiego rzędu 3. prosta idea
3.WYNIKI *WYCENA OPCJI FIXED SRIKE CALL ----------------------------------------------------------------------------------------------------------------------------------------- cena spot S: Monte Carlo PDE metoda VD PDE Lax_Wendorff 85,71,7,59 9 5,19 5,1 4,88 95 8,55 8,9 8,7 1 1,6 1,7 11,91 15 17,7 16,81 16,6 11 1,78 1,63,88 115 6,59 6,5 5,59 1 31,45 31,41 3,33 Parametry: K =9 r=.5 =. =1 cena opcji fixed strike call 35 3 5 15 1 5 7 75 8 85 9 95 1 15 11 115 1 wycena MC wycena pde ----------------------------------------------------------------------------------------------------------------------------------------- cena spot S: Monte Carlo PDE metoda VD PDE Lax_Wendorff 85 8,44 8,44 8,13 9 11,8 11,5 1,65 95 14,9 14,4 13,54 1 17,43 17,37 16,78 15 1,6 1,,31 11 4,93 4,84 4,3 115 9, 8,98 8,5 1 33,9 33, 3,19 Parametry: K =9 r=.5 =.5 =1
cena opcji fixed strike call 35 3 5 15 1 5 7 75 8 85 9 95 1 15 11 115 1 wycena MC pde ----------------------------------------------------------------------------------------------------------------------------------------- *WYCENA OPCJI FIXED SRIKE PU ----------------------------------------------------------------------------------------------------------------------------------------- Parametry: K =9 r=.5 =. =1 PDE PDE cena S Monte Carlo metoda VD Lax_Wendorff 7, 17,43 17,5 17,47 75, 1,85 13, 1,91 8, 8,75 8,91 8,8 85, 5,41 5,47 5,6 9, 3,1,91,69 18 16 14 1 1 8 6 4 fixed strike put 7 75 8 85 9 95 1 15 11 115 1 wycena MC wycena pde -----------------------------------------------------------------------------------------------------------------------------------------
cena S Monte Carlo PDE metoda VD PDE Lax_Wendorff 7,1,5,14 75 16,79 16,9 16,64 8 13,76 13,8 13,54 85 11,14 11,1 1,7 9 8,91 8,84 8,45 Parametry: K =9 r=.5 =.5 =1 5 fixed strike put 15 1 5 7 75 8 85 9 95 1 15 11 115 1 wycena MC wycena PDE 4.LIERAURA * "High-resolution FEM-VD schemes base on a fully multidimensional flux limiter", D.Kuzmin & S.urek, Institute of Applied Mathematics, University of Dortmund, rozdzial : One dimensional VD schemes. * "Comparison of sinite difference methoda for the numerical simulation of reacting flow", K. Alhumaizi, Computers & Chemical engineering 8 (4), 1579 1769 * ools for computational finance, R.U. Seydel 5.DOKUMENACJA DANE W PLIKU wejściowym: Dane w pliku powinny mieć następującą kolejność: -> rodzaj opcji -> rodzaj schematu -> stopa % -> zmienność -> cena spot -> strike -> liczba punktów siatki przestrzennej -> liczba punktów siatki czasowej -> _min =
-> termin zapadalności -> R_min = -> maksymalna wartość siatki przestrzennej. Jeśli, to zostaną ustawione wartości domyślne. -> wielkość epsilona (przy liczeni pochodnych) OZNACZENIA i DOSEPNE FUNKCJE: M - ilosc wezlow siatki przestrzennej N - ilosc wezlow siatki czasowej siatka_r - siatka przestrzenna siatka_r - siatka przerstrzenna pomocnicza siatka_t - siatka czasowa delta_r - odstep miedzy punktami siatki przestrzennej delta_t - odstep miedzy punktami siatki czasowej wsp_delta - wspolczynnik pomocniczy. wsp_delta = delta_t / delta_x wsp_delta - wspolczynnik pomocniczy. wsp_delta = delta_t / delta_x^ wsp_a - wspolczynnik rownania rozniczkowego wsp_a_halfstep - wspolczynnik rownania rozniczkowego wsp_b - wspolczynnik rownania rozniczkowego wsp_v - wspolczynnik rownania rozniczkowego gamma - wspolczynnik pomocniczy. gamma = wsp_a * wsp_delta lambda - wspolczynnik pomocniczy. lambda = wsp_b * wsp_delta beta - wspolczynnik pomocniczy. beta = delta_r * (wsp_a./wsp_b) Boundary_ - warunek koncowy lo_bc_ - warunek brzegowy hi_bc_r - warunek brzegowy Option - rodzaj opcji R_min - minimalna wartosc w siatce przestrzennej R_max - maksymalna wartosc w siatce przestrzennej _min - minimalna wartosc w siatce czasowej. _min = _max - maksymalna wartosc w siatce czasowej r - stopa procentowa sigma - zmiennosc S - cena spot K - strike scheme - rodzaj schematu function [y] = SynchSigns(a) #funkcja sprawdza czy liczby/wspolrzedne wektorow sa jednakowych znakow. Jesli jednakowych znakow i dodatnie zwraca 1, jesli jednakowych znakow i ujemne zwraca -1, w przeciwnym przypadku. #na wejsciu: macierz wymiaru M na. W kolumnach porownywane liczby/wektory #przykladowe wywolanie: > a = [,-1;,1]; > SynchSigns(a); function [y] = MinMod(a) #rodzaj LIMIERA #na wejsciu: macierz wymiaru M na. W kolumnach liczby/wektory #przykladowe wywolanie: > a = [,-1;,1]; > MinMod(a); function [y] = MC(a) #rodzaj LIMIERA #na wejsciu: macierz wymiaru M na. W kolumnach liczby/wektory #przykladowe wywolanie: > a = [,-1;,1]; > MC(a); function [y] = VanLeer(a) #rodzaj LIMIERA
#na wejsciu: macierz wymiaru M na. W kolumnach liczby/wektory #przykladowe wywolanie: > a = [,-1;,1]; > VanLeer(a); function [y] = superbee(a) #rodzaj LIMIERA #na wejsciu: macierz wymiaru M na. W kolumnach liczby/wektory #przykladowe wywolanie: > a = [,-1;,1]; superbee(a); function [R_max] = SetMaximalGridPoint(S, K, _max, Option) #wstawia odpowiednia siatke przestrzenna w zaleznosci od rodzaju opcji function [Boundary_, lo_bc_, hi_bc_r] = SetBoundaryConditions(M, N, r, K, _max, siatka_t, siatka_r, Option) #ustawia warunki poczatkowo-brzegowe w zaleznosci o rodzaju opcji function [wsp_a, wsp_a_halfstep, wsp_b, wsp_v, gamma, lambda, beta] = Coefficients(r, sigma, _max, siatka_r, siatka_r, wsp_delta, Option) #oblicza wspolczynniki rownania rozniczkowego *** function [V] = LaxWendroff(M, N, delta_t, wsp_a, wsp_a_halfstep, wsp_b, wsp_v, wsp_delta, lambda, Boundary_, hi_bc_r, lo_bc_, Option) #implementacja schematu Laxa-Wendroffa #opis schematu w dokumencie Ulikowska_opis_problemu_i_algorytmow.txt *** function [V] = Upwind(M, N, delta_t, wsp_a, wsp_v, wsp_delta, gamma, lambda, Boundary_, hi_bc_r, lo_bc_, Option) #implementacja schematu Upwind. Uproszczona wersja funkcji HighResolution [gdy theta jest rowne zero] #opis schematu w dokumencie Ulikowska_opis_problemu_i_algorytmow.txt *** function [V] = HighResolution(M, N, delta_t, wsp_a, wsp_v, wsp_delta, gamma, lambda, Boundary_, hi_bc_r, lo_bc_, scheme, Option) #implemetacja metod HighResolution #zmienna IsPositive: okresla znak wspolczynnika przy pochodnej przestrzennej #zmienna slope: okresla stosunek gradientow w trzech kolejnych punktach siatki przestrzennej. slope = [w(j,v) - w(j-1,t)]/[w(j+1,t) - w(j,t)] #zmienna slope_final_ones: zmienna pomocnicza #zmienna theta_r: w zaleznosci od stosunku gradientow zmienna przyjmuje wartosci: # -> bliskie w okolicach znacznego stosunku gradientow [gdy theta = schemat upwind] # -> bliskie 1 gdy numeryczne rozwiazanie jest dostatecznie gladkie [gdy theta = 1 schemat roznic centralnych] #theta zalezy takze od wyboru LIMIERA #zmienna FLUX: "numerical flux" #opis schematu w dokumencie Ulikowska_opis_problemu_i_algorytmow.txt *** function [floating_put] = FloatingPutPrice(floating_call, S, _max, r) #oblicza cene opcji floating strike PU jesli znana jest cena opcji call (floating_call) function [fixed_put] = FixedPutPrice(fixed_call, S, _max, r, K) #oblicza cene opcji fixed strike PU jesli znana jest cena opcji call
(fixed_call) *** function [price] = OptionPrice(S, K, V, R_min, R_max,, _max, r, K, Option) #oblicza wartosc opcji na podstawie macierzy V(j, t) #wartosci V(j, _max) znajduja sie w ostaniej kolumnie #jesli wartosc opcji ma byc obliczona dla t < _max, to nalezy uzyc parametru. Moment wyceny, _max i powiazane sa rownaniem: t = _max - delta_t* *** function [price] = StartCalculatingOptionPrice(Option, scheme, r, sigma, S, K, M, N, _min, _max, R_min, R_max, h) #nadzowruje dzialanie innych funkcji: funkcja "porzadkowa" ktora wywoluje kolejno podrzedne funkcje