Programmi per il calcolo deterministico del prezzo di opzioni call e put



Documenti analoghi
Note su quicksort per ASD (DRAFT)

La selezione binaria

studi e analisi finanziarie LA PUT-CALL PARITY

SOLUZIONE ESERCIZIO 1

Opzioni Barriera. Marco Evangelista Donatella Straccamore

Il modello binomiale ad un periodo

23 Giugno 2003 Teoria Matematica del Portafoglio Finanziario e Modelli Matematici per i Mercati Finanziari ESERCIZIO 1

Volatilità implicita. P(t) = S(t)Φ(d 1 ) e r(t t) K Φ(d 2 ) con. d 1 = d 2 + σ T t. d 2 =

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Opzioni americane. Opzioni americane

Valore equo di un derivato. Contingent claim

Metodi Stocastici per la Finanza

call europea viene esercitata, consentendo un guadagno pari a

Metodi e Modelli Matematici di Probabilità per la Gestione

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

Commento al programma per il calcolo del. prezzo di un opzione e della relativa copertura

Metodi Stocastici per la Finanza

La pista del mio studio Riflettiamo sulla pista. Guida per l insegnante

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI

Introduzione al MATLAB c Parte 2

OPZIONI, DURATION E INTEREST RATE SWAP (IRS)

Ricerche, ordinamenti e fusioni. 5.1 Introduzione. 5.2 Ricerca completa

Analisi sensitività. Strumenti per il supporto alle decisioni nel processo di Valutazione d azienda

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Breve riepilogo della puntata precedente:

ESERCIZI DI MATEMATICA FINANZIARIA DIPARTIMENTO DI ECONOMIA E MANAGEMENT UNIFE A.A. 2015/ Esercizi 4

2. Leggi finanziarie di capitalizzazione

Esempi di algoritmi. Lezione III

Concetto di Funzione e Procedura METODI in Java

LEZIONE 5: CALCOLO COMBINATORIO

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

Linguaggio C - Funzioni

Record in C: il costruttore struct.

HARDWARE INTERNET NETWORKING LIQUIDAZIONI IVA

Studente: SANTORO MC. Matricola : 528

L analisi dei dati. Capitolo Il foglio elettronico

Scheduling della CPU. Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux

Un po di statistica. Christian Ferrari. Laboratorio di Matematica

Introduzione alberi binomiali

Teoria delle code. Sistemi stazionari: M/M/1 M/M/1/K M/M/S

2) Calcolare il prezzo ad oggi di una Put europea con un albero a 3 periodi.

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Il modello media-varianza con N titoli rischiosi. Una derivazione formale. Enrico Saltari

Greche. Fondamenti dei Mercati di Futures e Opzioni, 5 a Edizione, Copyright John C. Hull

ESERCIZI DI PROGRAMMAZIONE C/C++ per le classi terza

Statistica e biometria. D. Bertacchi. Variabili aleatorie. V.a. discrete e continue. La densità di una v.a. discreta. Esempi.

ESERCIZI DI MATEMATICA FINANZIARIA DIPARTIMENTO DI ECONOMIA E MANAGEMENT UNIFE A.A. 2015/ Esercizi: lezione 24/11/2015

MODELLO DI BLACK SCHOLES

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it

Microeconomia per la Finanza - Esercitazione 3 Bayesian updating

Gestione Risorse Umane Web

Funzioni in C. Violetta Lonati

Equazione della Circonferenza - Grafico di una Circonferenza - Intersezione tra Circonferenza e Retta

GARA UNICA. Impostiamo il punteggio minimo (Target Low) e il punteggio massimo (Target High). Il Valore è espresso in PUNTI.

Capitolo 26: Il mercato del lavoro

Manuale delle Corporate action

Bontà dei dati in ingresso

Capitolo 13: L offerta dell impresa e il surplus del produttore

Prof. Giuseppe Chiumeo. Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto tre strutture di base:

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

RETI DI TELECOMUNICAZIONE

Dato il Mercato, è possibile individuare il valore e la duration del portafoglio:

Processo di risoluzione di un problema ingegneristico. Processo di risoluzione di un problema ingegneristico

Raggruppamenti Conti Movimenti

Il database management system Access

Applicazioni lineari

Volumi e Prezzi Ftse-Mib

Traccia di soluzione dell esercizio del 25/1/2005

COSTER. Import/Export su SWC701. SwcImportExport

Fasi di creazione di un programma

Modelli probabilistici per la finanza

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2011

Epoca k Rata Rk Capitale Ck interessi Ik residuo Dk Ek 0 S 0 1 C1 Ik=i*S Dk=S-C1. n 0 S

Inizializzazione, Assegnamento e Distruzione di Classi

Caratteri e stringhe Esercizi risolti

La struttura dati ad albero binario

PROBABILITÀ - SCHEDA N. 2 LE VARIABILI ALEATORIE

Il sistema monetario

Esercizi Capitolo 6 - Alberi binari di ricerca

Le equazioni. Diapositive riassemblate e rielaborate da prof. Antonio Manca da materiali offerti dalla rete.

Esercizio 6 Realizzare una classe astratta per le Figure piane e due sottoclassi, la sottoclasse Quadrato e la sottoclasse Rettangolo.

Introduzione alle opzioni

COMPITO DI MATEMATICA FINANZIARIA 8 Febbraio Come cambia il REA atteso se l'obbligazione sarà ancora in vita dopo le prime tre estrazioni?

Esercitazione 3. Corso di Fondamenti di Informatica

Teoria dei Giochi. Anna Torre

Modelli matematici per la valutazione dei derivati: dalla formula CRR alla formula di Black-Scholes

Realizzazione di una classe con un associazione

Anno 4 Grafico di funzione

La scala musicale e le alterazioni

Introduzione al linguaggio C Gli array

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Macroeconomia, Esercitazione 2. 1 Esercizi. 1.1 Moneta/ Moneta/ Moneta/3. A cura di Giuseppe Gori (giuseppe.gori@unibo.

Algebra di Boole. Le operazioni, nell algebra booleana sono basate su questi tre operatori: AND ( ), OR ( + ),NOT ( )

Note sulle Opzioni Americane

Fondamenti di Informatica L-A

f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da

VI Esercitazione di Matematica Finanziaria

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

ESERCITAZIONE MATEMATICA FINANZIARIA OPZIONI. Matematica finanziaria Dott. Andrea Erdas Anno Accademico 2011/2012

Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE

Transcript:

Programmi per il calcolo deterministico del prezzo di opzioni call e put Mariapaola Blancato e Federica Galdelli Introduzione Ogetto di questa tesina è l implementazione del modello di Cox, Ross e Rubinstein per il calcolo del prezzo di opzioni finanziarie call e put. Il modello è costruito per un mercato finanziario in cui sono presenti solamente 2 titoli: il titolo non rischioso avente prezzo S 0 n = (1 + r) n (r è il tasso di interesse), e il titolo rischioso con prezzo S n. Inoltre si suppone che fra due istanti consecutivi (n e n+1) la variazione percentuale del prezzo S n, che all istante iniziale ha il valore assegnato S 0, possa assumere solamente due valori a e b con 1 < a < b. Per operare in un mercato completo e privo di arbitraggio si deve imporre, come è stato dimostrato, che valga la seguente relazione: a < r < b. Formula in avanti In questo primo programma formuladelta abbiamo implementato la seguente formula: C n = (1 + r) N n (N n) j=0 p j (1 p) N n j F ( x (1 + a) j (1 + b) N n j) ( N n j ) (1) la quale ci fornisce il prezzo dell opzione al tempo n, con p = b r b a (l unica misura di martingala). La funzione F (x) è la funzione payoff che, per un prezzo di esercizio k, assume i seguenti valori F (x) = (k x) +, per una opzione put; 1

F (x) = (x k) +, per una opzione call. Nel programma è stata anche calcolata la funzione delta, (n, x) = c (n, x (1 + b)) c (n, x (1 + a)) x (b a) (2) La delta fornisce una misura di copertura per l opzione considerata, indica, cioè, la sensitività del prezzo rispetto alla variazione del titolo sottostante. Analizziamo il programma dettagliatamente. E stata costruita una funzione int per il calcolo del coefficiente binomiale tramite la formula ricorsiva ( ) ( ) n n n k + 1 = (3) k k 1 k int fatt (int n, int k) int x=1; for(int i=1; i<=k; i++) x=x*(n-i+1)/i; return x; Un altra funzione serve a calcolare il payoff di un opzione call: float payoffc (float S, float k) float p=0; if (S>=k) p=s-k; return p; Ed infine un altra funzione prezzoc che serve a calcolare il prezzo di un opzione call: float prezzoc (float x, float a, float b, float p, float k, float r, int N, int n) 2

float c=0; for(int j=0; j<=(n-n); j++) c=c+(fatt(n-n,j)*payoffc(x*pow(1+a,j)*pow(1+b,n-n-j),k) *pow(p,j)*pow(1-p,n-n-j)); c=c*pow(1+r,n-n); return c; Inizia,quindi il corpo principale del programma, vengono dichiarate le variabili che saranno utilizzate: main() float a,b,p,r,s,k,r,sigma,t; int N,j,jj,i,m; Si richiede di inserire l intero N che rappresenta il numero di sottointervalli in cui dividiamo il tempo. printf("inserisci il numero (intero) N\n"); scanf("%d", &N); Vengono costruiti tre vetttori di lunghezza N aventi tutti gli elementi uguali a zero e nei quali verranno in seguito inseriti, rispettivamente, i valori dei prezzi (pr), i valori della delta (d), ed i valori della delta relativi al titolo non rischioso (dzero) ad ogni tempo (0 n N): float* pr= new float[n]; pr[i]=0; float* d= new float[n]; d[i]=0; float* dzero= new float[n]; dzero[i]=0; 3

Viene quindi richiesto di inserire, in input i valori dei parametri del mercato: printf("inserisci i parametri. In ordine:\nr, Sigma,T,S,K\n"); scanf("%f", &R); scanf("%f", &sigma); scanf("%f", &T); scanf("%f", &S); scanf("%f", &K); Si ricavano gli altri parametri: il tasso di intersse r = R N ; il valore del salto in basso e quello del salto in alto, rispettivamaente, T a = 1 + (1 + r) exp σ N, T b = (1 + r) exp σ N 1 ed infine la probabiltità del salto in basso p = b r b a : r=r/n; /*Tasso d interesse*/ a=-1+((1+r)*exp((0-sigma)*sqrt(t/n))); b=((1+r)*exp((sigma)*sqrt(t/n)))-1; p=(b-r)/(b-a); /*Probabilità del salto in basso: da x a x(1+a)*/ Siama adesso in grado di calcolare i parametri richiesti ad ogni tempo: /*Calcolo prezzo, delta e delta del titolo non rischioso al tempo n, li stampo e passo al loro calcolo al tempo n+1*/ pr[0]=prezzoc(s,a,b,p,k,r,n,0); printf("\nprezzi al tempo 0\n"); printf("%f", pr[0]); for (i=1; i<=n; i++) for (j=0; j<=i; j++) pr[j]=prezzoc(s*pow(1+b,i-j)*pow(1+a,j),a,b,p,k,r,n,i); for (jj=0; jj<=i-1; jj++) d[jj]=(pr[jj]-pr[jj+1])/((b-a)*s*pow(1+b,i-jj-1)*pow(1+a,jj)); 4

dzero[jj]= (pr[jj]-pr[jj+1])/(pow(1+r,i)); printf("\ndelta al tempo %d:\n", i); printf("%f ", d[j]); printf("\ndeltazero al tempo %d:\n", i); printf("%f ", dzero[j]); printf("\nprezzi al tempo %d:\n", i); for (j=0; j<=i; j++) printf("%f ", pr[j]); 5

Formula ricorsiva Nell altro programma è stata implementata la seguente formula di ricorrenza per il calcolo del prezzo di un opzione c(n, x) = 1 ((1 p)c(n + 1, x(1 + b)) + pc(n + 1, x(1 + a))) (4) 1 + r Vengono utilizzati gli stessi parametri del programma precedente ed in modo analogo sono stati ricavati i valori di a,b, p. Analoghe sono anche le funzioni costruite per il calcolo del coefficiente binomiale, del payoff e del prezzo che verranno utilizzati per calcolo del vettore dei prezzo al tempo finale N pr[i]=payoffc(s*pow(1+b,n-i)*pow(1+a,i),k); printf("\nvettore dei prezzi al tempo %d:\n", N); printf("%f ", pr[i]); Si calcola quindi il vettore dei prezzi: /*Calcolo il vettore dei prezzi ad ogni N>n>=0 con la formula ricorsiva. Lo stampo e lo aggiorno al tempo n-1*/ for (i=n-1; i>=1; i--) for (m=0; m<=i-1; m++) d[m]=(pr[m]-pr[m+1])/((b-a)*s*pow(1+b,i-m-1)*pow(1+a,m)); dzero[m]=(pr[m]-pr[m+1])/(pow(1+r,i)); /*(pr[m]-d[m]*s*pow(1+b,i-m)*pow(1+a,m))/pow(1+r,i);*/ printf("\ndelta al tempo %d:\n", i); printf("%f ", d[j]); printf("\ndeltazero al tempo %d:\n", i); printf("%f ", dzero[j]); printf("\nvettore dei prezzi al tempo %d:\n", i); for (j=0; j<=i; j++) pr[j]=(pr[j]*(1-p)+pr[j+1]*p)/(1+r); 6

printf("%f ", pr[j]); d[0]=(pr[0]-pr[1])/((b-a)*s); dzero[0]=(pr[0]-pr[1]); printf("\ndelta al tempo %d:\n", 0); printf("%f", d[0]); printf("\ndeltazero al tempo %d:\n", 0); printf("%f", dzero[0]); printf("\nvettore dei prezzi al tempo 0:\n"); pr[0]=(pr[0]*(1-p)+pr[1]*p)/(1+r); printf("%f ", pr[0]); printf("\n"); delete[]pr; scanf("%d", &i); system("pause"); return 0; 7