guida in italiano
Transcript
guida in italiano
LA PIATTAFORMA FAIRMAT ® PER LA MODELLAZIONE DEI CONTRATTI DERIVATI: DESCRIZIONE E GUIDA D'USO PER L'UTENTE A cura di MIRKO DI LEO con la collaborazione del team di Fairmat (La presente guida è valida per la versione Academic ma tratta alcuni aspetti condivisi con Professional di Fairmat) INDICE INTRODUZIONE - Fairmat Srl - La piattaforma software di Fairmat - Struttura del Manuale PARTE I – GUIDA UTENTE Capitolo 1 – Installazione e avvio - Come scaricare l'applicativo di Fairmat - La schermata iniziale e le modalità d'uso - Il Menù File - Il Menù Edit - Il Menù Analysis - Il Menù Settings - Il Menù Tools - Il Menù Help Capitolo 2 – Il linguaggio algebrico di Fairmat - Assets' Set Functions - Date and Time Functions - Financial Functions - Functions on Vectors and Matrices - Vector Functions; - Related Functions; - Alcuni esempi sull'utilizzo delle Vector Functions; - Matrix Functions; - Interest Rate Functions - Interest Rate Conversion Functions; - Deterministic Interest Rate Functions; - Stochastic Interest Rate Functions; - Interval Functions - Selection Functions - Standard Functions - La funzione IIF e la funzione SIIF; - Other Functions - Derivatives; - Option Map Block Related Functions; Capitolo 3 - Il Work Space di Fairmat - L'ambiente Parameters and Functions - Parameters: Scalar; - Parameters: Vectors and Matrices; - Parameters: Date Sequences; - Functions: Analytic Functions; - Functions: Interpolated Functions; - Functions: Recurrence Functions; - Transformations: un'introduzione; - Day count conventions: uno sguardo generale; - Day count conventions: Date metrics counter; - Day count conventions: Date metrics conventions; - Transformations: Date Vector Adjustment; - Transformations: Date Vector Differences Calculator; - Transformations: Zero Rate Curve Calculator; - L'ambiente Stochastic Processes - Un esempio di inserimento di un processo stocastico: Geometric Brownian Motion (GBM); - Il Tab Data Source; - L'ambiente Discounting - Il sistema Global (Project) Discounting; - Il sistema Option Dependent Discounting; - L'ambiente Discounting e le funzioni ricorrenti; - L'ambiente Option Map - Come inserire e comporre le Standard Options o le Strip of Options; - Le Standard Options; - Le Strip of Options; - Gli Operators dell'ambiente Option Map: come inserirli ed utilizzarli; - Il Functional Operator; - Il Decisional Operator; - L'AND Operator; - L'OR Operator; - I branches; - L'ambiente Manage Scenarios - Il Tab Info - La Toolbar - Lo Status Panel e i suoi tab - Il tab Valuations; - Il tab Errors; - Il tab Parameters; - Il tab Log; - Il tab Fairmat Console; - Le funzionalità di aiuto editing - La funzionalità di auto-complete; - Il Renaming; Capitolo 4 - Le analisi e gli output - I tipi di analisi effettuabili - Valuation - Risk Analysis - Sensitivity Analysis - Impact Analysis - Scenario Analysis - Greek Analysis - Le greche dei contratti derivati sui tassi di interesse Capitolo 5 - La modellazione dei contratti finanziari - Geometric Brownian Motion (GBM) - Utilizzo del GBM in Fairmat; - Calibrazione del GBM: opzioni di stima; - Calibrazione del GBM: simulazione del tasso di cambio; - Mean Reverting Process - Utilizzo del Mean Reverting Process in Fairmat; - Log-Mean Reverting Process - Itô Process - Log-Itô Process - Poisson Jump Process - Un esempio: GBM con Poisson Jump Process; - La calibrazione dei modelli - Il file XML Interest Rate Market Data; - Il file XML Call Price Market Data; - La modellazione del rischio di credito - La variabile casuale “time to default”; - CDS (Credit Default Swap); - CVA (Credit Value Adjustment); PARTE II – ESEMPI E APPLICAZIONI - Tutorial I - Vanilla Interest Rate Swap - Tutorial II - Fixed-Float Currency - Tutorial III - Accrual Swap - Tutorial IV - Path Dependence - Tutorial V - Swap with Asian Option - Tutorial VI - Reload3 Bond - Tutorial VII - Convertendo BPM 2009/2013 – 6.75% with Warrant INTRODUZIONE INTRODUZIONE Fairmat Srl Fairmat Srl è la società che sviluppa e commercializza la piattaforma di pricing Fairmat®. Fairmat Srl è una società specializzata nell'erogazione di servizi, software e consulenza su temi legati alla valutazione e al controllo del rischio di prodotti e portafogli di investimenti finanziari. La società è impegnata in vari ambiti fra i quali in particolare: • • • Servizi di valutazione indipendente: Fairmat Srl fornisce servizi di pricing e repricing di contratti o portafogli di strumenti strutturati OTC (Over The Counter) per diverse tipologie di contratti finanziari derivati, tra i quali contratti indicizzati ai tassi di interesse, al mercato azionario, all'inflazione, i contratti legati al credito e gli strumenti basati sulle materie prime; Integrazione e soluzione software: Fairmat Srl fornisce prodotti software e soluzioni personalizzate per il pricing e il risk management; Formazione: Fairmat Srl offre formazione sull'analisi e la valutazione di strumenti finanziari. La piattaforma software Fairmat Fairmat è uno strumento di modellazione dei prodotti finanziari che permette di modellare qualsiasi strumento finanziario ed eseguire, anche interattivamente, valutazioni di tipo quantitativo (come ad esempio il calcolo del fair value di uno strumento finanziario) senza il bisogno di codificare routines di pricing. Fairmat è disponibile in diverse versioni: 1) Fairmat Academic: soluzione gratuita ed orientata al mondo universitario; 2) Fairmat Professional: strumento desktop indicato per la prototipizzazione e la valutazione e l'analisi puntuale di strumenti finanziari derivati; 3) Fairmat Server: soluzione enterprise (web-based) progettata per le esigenze dei dipartimenti quantitativi di banche ed assicurazioni. Mentre l'obiettivo di Fairmat Academic e Fairmat Professional consiste nel fornire uno strumento di prototipizzazione o validazione di modelli di pricing, Fairmat Server ha l'obiettivo di semplificare il monitoraggio (giornaliero) di portafogli di strumenti derivati; 4) Fairmat Cloud: piattaforma semplificata che consente di prezzare ed analizzare prodotti strutturati, certificati, e derivati su tasso, cambi e azionario semplicemente e rapidamente, con sole tre azioni: ricerca, personalizzazione e valutazione. il tutto direttamente dal tuo browser, senza pagare licenze annuali ma solamente per le valutazioni richieste. I prodotti Fairmat sono estendibili sia per quanto riguarda i modelli teorici o le anlitiche: citiamo come esempio le seguenti applicazioni: • Generazione della reportistica inerente agli scenari probabilistici: Il plug-in Informativa CONSOB consente agli intermediari di adempiere ai requisiti previsti dalla Comunicazione CONSOB DIN/DSE/9025454 del Marzo 2009 implementando quanto già previsto nel Quaderno di Finanza numero 63. La soluzione è attualmente utilizzata da tre delle più grandi compagnie finanziario-assicurative presenti in Italia; La CONSOB è, in particolare, la Commissione Nazionale per le Società e la Borsa ed è I INTRODUZIONE l'Ente che si occupa della supervisione dei mercati finanziari e della Borsa Valori italiana per quanto riguarda in particolare la trasparenza informativa da parte delle società quotate emittenti di strumenti finanziari; • Generazione di report per l'hedge accounting: il plug-in IAS 39 Hedge Accounting permette di calcolare le metriche necessarie alla rendicontazione a fini di bilancio per strumenti finanziari secondo quanto specificato dalla direttiva IAS 39; Quindi, utilizzando le piattaforme software di Fairmat è possibile assolvere a diverse normative assai importanti in tema di intermediari finanziari e mercati finanziari fra le quali si possono menzionare in particolare le seguenti: • • • • la Comunicazione CONSOB in tema di OICR (Organismi di Investimento Collettivo del Risparmio) DIN/DSE/9025454; il Regolamento emanato dall'Unione Europea n° 648 del 2012 sulla disciplina dei contratti derivati OTC (Over the Counter) EU 648/2012 (EMIR); la Direttiva IAS-39/IFSR 13; la Direttiva per i fondi di investimenti alternativi AIFMD 2011/61/EU; Con la piattaforma software Fairmat è possibile codificare e modellare in linea teorica ogni payoff e tipologia di prodotto finanziario. In Fairmat Professional è poi contenuta una serie di templates per poter essere operativi in poco tempo su prodotti derivati come gli Swaps (i cui templates più importanti contenuti in Fairmat sono i seguenti: Fixed vs Float, Float vs Float, Fixed vs Float plus Collar), le Interest Rate Options (i cui templates più importanti contenuti in Fairmat sono i seguenti: Cap, Floor, Digital/Binary, Float plus Collar, Swapation), le Barrier Options (i cui templates più importanti e di utilizzo comune sono i seguenti: Cap/Floor Knock In – Up and Down –, Cap/Floor Knock Out – Up and Down –, Cap/Floor CMS Spread). Con la piattaforma software di Fairmat è, infine, possibile accedere ai dati mercato attraverso il servizio Data-Link, un sistema di fornitura di dati di mercato sufficiente per il pricing di strumenti legati all'evoluzione dei tassi dei mercati europeo e statunitense. Fairmat Professional è inoltre integrato con il software Bloomberg Professional. II INTRODUZIONE Struttura del Manuale Questo Manuale ha lo scopo di essere un'efficace e, al tempo stesso, completa guida all'utilizzo della piattaforma per la modellazione dei contratti finanziari derivati e il loro pricing. Il presente Manuale si compone di due parti distinte: 1) La Prima Parte relativa alla Guida Utente software e quindi di taglio più teorico. Questa Parte ha, quindi, l'obiettivo di fornire per l'utente una guida completa del software e si suddivide in cinque capitoli. Più nello specifico: – Nel Capitolo 1, dopo aver illustrato step by step, come procedere con il download, l'installazione e l'avvio del software, vedremo nel dettaglio i Menù Principali dello stesso; – Nel Capitolo 2, dopo aver illustrato brevemente il linguaggio algebrico che è alla base del software, vedremo nel dettaglio tutte le tipologie funzioni disponibili ed utilizzabili appunto in Fairmat; – Nel Capitolo 3 vedremo ed impareremo ad utilizzare il Work Space di Fairmat, e quindi tutti gli ambienti di lavoro disponibili ed utilizzabili dall'utente (quali l'ambiente Parameters & Functions, l'ambiente Stochastic Process, l'ambiente Discounting, l'ambiente Option Map e l'ambiente Manage Scenario), gli oggetti utilizzabili in Fairmat utili ai fini della modellazione dei contratti finanziari, il Tab Info, la Barra degli Strumenti e le Funzionalità di Aiuto-Editing; – Nel Capitolo 4 vederemo i tipi di analisi che si possono condurre attraverso Fairmat sugli strumenti finanziari in generale, e sui contratti derivati in particolare; – Nel Capilto 5, infine, discuteremo dettagliatamente del problema della modellazione dei contratti finanziari (attraverso l'illustrazione dei principali modelli stocastici utilizzabili in Fairmat, appunto, per la modellazione delle diverse variabili di natura economica), del problema della calibrazione dei modelli applicabili (attraverso l'esemplificazione dei principali file in versione XML utilizzabili dall'utente) e del problema della modellazione del rischio di credito (attraverso l'illustrazione della variabile casuale time to default, del più importante tipo di contratto derivato relativo al rischio di credito, ovvero il CDS – Credit Default Swap – e della metodologia di valutazione del rischio di credito di controparte, ovvero il CVA – Credit Value Adjustment); 2) La Seconda Parte contente una serie di esempi di modellazione dei principali contratti derivati e di case studies che ci saranno utili al fine di acquisire maggior dimestichezza e maggior praticità nell'utilizzo dell'applicativo; III INTRODUZIONE IV PARTE I GUIDA UTENTE • CAPITOLO 1 INSTALLAZIONE E AVVIO • CAPITOLO 2 IL LINGUAGGIO ALGEBRICO DI FAIRMAT • CAPITOLO 3 IL WORK SPACE DI FAIRMAT • CAPITOLO 4 LE ANALISI E GLI OUTPUT • CAPITOLO 5 LA MODELLAZIONE DEI CONTRATTI FINANZIARI CAPITOLO 1 INSTALLAZIONE E AVVIO CAPITOLO 1 – INSTALLAZIONE E AVVIO Come scaricare l'applicativo di Fairmat Prima di poter utilizzare il software Desktop di Fairmat dobbiamo innanzitutto collegarci al sito di Fairmat www.fairmat.com, iscriverci ad esso e procedere con il download del software per la sua installazione sul pc. All'apertura del sito www.fairmat.com apparirà l'home page dello stesso (figura 1.1). Per poter scaricare il software Fairmat dobbiamo iscriverci al sito www.fairmat.com, ovvero fare una sign up allo stesso. Per cui una volta giunti all'homepage di fairmat.com dobbiamo cliccare su SIGN UP (figura 1.2). Una volta cliccato sulla voce SIGN UP dell'home page (il cui url diretto è il seguente: www.fairmat.com/signup) apparirà una pagina web riportante un form (figura 1.3) da compilare per l'iscrizione al sito di Fairmat con i propri dati personali e l'indicazione del proprio indirizzo di posta elettronica. Per la corretta compilazione del form è necessario, infine, anche (e soprattutto) accettare le clausole inerenti le condizioni d'uso degli applicativi Fairmat ed inerenti la privacy (ovvero il trattamento dei dati personali). Una volta compilato il form per la Sign Up e una volta cliccato sulla casella SIGN UP, situata in basso a sinistra della pagina web contenente il form, pochi secondi dopo arriverà al proprio indirizzo di posta elettronica indicato nel form, una risposta automatica con la quale ci verrà richiesto di cliccare su un link specifico (figura 1.4) per poter procedere con l'attivazione dell'account. Una volta attivato l'account Fairmat, tramite verifica dell'account stesso, pochi secondi dopo arriverà al proprio indirizzo di posta elettronica (sempre quello riportato nel form per la Sign Up al sito Fairmat) una seconda email con la quale ci verrà comunicata la conferma dell'avvenuta iscrizione (figura 1.5). In quest' ultima email verranno riepilogati i dettagli dell'account Fairmat appena creato (ossia Username e Password). 1 CAPITOLO 1 – INSTALLAZIONE E AVVIO (Figura 1.1: Home Page www.fairmat.com) 2 CAPITOLO 1 – INSTALLAZIONE E AVVIO (Figura 1.2: Sign Up al sito www.fairmat.com) (Figura 1.3: Form per la Sign Up al sito www.fairmat.com) 3 CAPITOLO 1 – INSTALLAZIONE E AVVIO (Figura 1.4: Email per l'attivazione dell'account Fairmat) (Figura 1.5: Conferma dell'avvenuta Sign Up al sito www.fairmat.com) 4 CAPITOLO 1 – INSTALLAZIONE E AVVIO Creato l'account possiamo ora procedere con il download del software Desktop di Fairmat. Per far ciò dobbiamo tornare all'home page del sito www.fairmat.com, effettuare il Log In al sito web utilizzando le credenziali dell'account appena creato e cliccare su Download, qualora volessimo scaricare la versione gratuita del software (Fairmat Academic), oppure su Buy o Get Trial qualora volessimo invece scaricare la versione a pagamento del software (Fairmat Professional). (Figura 1.6: Download del software desktop dall'home page di www.fairmat.com) Arrivati alla sezione DOWNLOAD dovremo poi scegliere la versione adatta al nostro sistema operativo. Per la maggior parte degli utenti l'opzione di default (ovvero Windows) è quella corretta. (Figura 1.7: Download del software desktop - scelta del sistema operativo in uso) 5 CAPITOLO 1 – INSTALLAZIONE E AVVIO Una volta effettuata la scelta relativa al sistema operativo, cliccare sulla casella SUBMIT. A questo punto dovremo attendere qualche minuto per consentire il download dell'applicativo fairmat.exe; all'apertura, in genere automatica, di questo applicativo (il cui nome del file è verosimilmente tipo questo: fairmat-academic-1.6.1-r000.exe) apparirà sul desktop una finestra di dialogo, come quella riportata nella figura 1.8. Cliccando su Esegui partirà il set up dell'applicativo; una vota seguite tutte le indicazioni successive (fra le quali, in particolare, la richiesta di accettazione delle condizioni d'utilizzo, la scelta relativa alla cartella di destinazione dell'installazione del programma e la scelta se attivare o meno un'icona sul desktop relativa al programma stesso) ed una volta cliccato su Install partirà poi l'installazione vera e propria del software. Contemporaneamente al momento del set up dell'applicativo ci arriverà un'email (figura 1.9) con allegato il codice della licenza concessa da Fairmat, che dovremo scaricare in quanto richiesto al momento del completamento del download del programma per attivare definitivamente lo stesso sul nostro PC. A questo punto vedremo apparire l'icona del software Fairmat sul desktop del nostro PC e potremo iniziare ad utilizzare il software stesso. (Figura 1.8: Download del software – Finestra di dialogo per l'avvio applicativo fairmat.exe) (Figura 1.9: Licenza per l'utilizzo del software) 6 CAPITOLO 1 – INSTALLAZIONE E AVVIO La schermata iniziale e le modalità d'uso di Fairmat Fairmat è un applicativo progettato per facilitare la modellazione dei contratti finanziari derivati. Fairmat consente, infatti, di modellare i contratti finanziari derivati con un alto livello di astrazione attraverso un linguaggio di scrittura di tipo algebrico, alquanto semplice, in modo da poter stilizzare in maniera semplificata i pay-off (anche quelli più complessi) dei contratti finanziari derivati stessi, e attraverso una Option Map, in modo da poter stilizzare la struttura dei pagamenti previsti dal contratto finanziario derivato oggetto di analisi. In particolare, in Fairmat il contratto finanziario derivato oggetto di analisi viene scomposto nelle proprie caratteristiche fondamentali e rilevanti come le dinamiche incerte relative ad esso, la struttura dei pagamenti previsti e la definizione dei suoi pay-off. La struttura contrattuale può essere, infine, memorizzata su dei file che hanno estensione .fair. Una volta cliccato sull'icona Fairmat Academic apparirà la schermata (denominata anche Fairmat Advices, figura 1.10) che non è esattamente quella iniziale ma che potremmo definire preliminare. (Figura 1.10: Schermata iniziale di Fairmat – 1) Come possiamo evincere dalla figura 1.10, le scelte che possiamo compiere sono le seguenti: • • • • New Empty Project (figura 1.11): scelta da effettuare qualora volessimo creare un file .fair ex-novo. Scegliendo tale advice apparirà la schermata iniziale di Fairmat vera e propria; Open File (figura 1.12): scelta da effettuare nel caso in cui volessimo aprire un file .fair già esistente; Show Recent Files (figura 1.13): scelta che ci permette di visualizzare un elenco dei file .fair recentemente aperti e/o modificati; Help (figura 1.14): scelta che ci rimanda alla guida utente dell'applicativo; alla guida utente possiamo comunque accedervi in qualunque momento e da qualunque finestra Fairmat ci troviamo semplicemente premendo dalla tastiera il tasto F1; 7 CAPITOLO 1 – INSTALLAZIONE E AVVIO (Figura 1.11: Schermata iniziale di Fairmat – 2) (Figura 1.12: Schermata Open File) 8 CAPITOLO 1 – INSTALLAZIONE E AVVIO (Figura 1.13: Schermata Show Recent Files) (Figura 1.14: Schermata Help) 9 CAPITOLO 1 – INSTALLAZIONE E AVVIO Con Fairmat possiamo lavorare utilizzando due diverse modalità (Modes): la Design Mode e l'Analysis Mode (quest'ultima disponibile solo nella versione Professional). In base alla scelta effettuata nella schermata degli advices, verremo automaticamente reindirizzati verso una delle due modalità; più precisamente, se stiamo avviando un nuovo progetto da zero o se stiamo aprendo un file .fair già esistente, verremo reindirizzati verso la Design Mode, mentre se si sta aprendo un file template creato con Fairmat, verremo reindirizzati verso la Analysis Mode. Ad ogni modo, soltanto però qualora stessimo utilizzando la versione Professional, possiamo sempre passare da una modalità all'altra, possiamo sempre cambiare la modalità, selezionando, dalla barra degli strumenti dell'applicativo, il seguente percorso View → Design Mode oppure il seguente percorso View → Analysis Mode. Nella Design Mode (figura 1.15) possiamo avere piena accessibilità all'editing di tutti i parametri, di tutti i processi e di tutte le strutture contrattuali. D'altra parte la Analysis Mode (figura 1.16) offre una visione compatta e semplificata di un progetto Fairmat che ci permette di gestire solo uno specifico sottoinsieme di parametri del progetto: quelli per i quali sia stato attivato il flag Publish nel tab Publishing. L'intento della Analysis Mode è quello di fornire un'interfaccia utente più semplice nel momento in cui avessimo bisogno di modificare più e più volte alcuni parametri del contratto (come ad esempio il suo nozionale oppure le date di pagamento previste) o alcune impostazioni per la valutazione (come ad esempio la data di valutazione – o Valuation Date – oppure ancora il numero di percorsi simulati). La Analysis Mode non viene però influenzata dai cambiamenti eventualmente intervenuti nella struttura della Option Map e nella struttura dei modelli sottostanti. (Figura 1.15: Schermata Design Mode) 10 CAPITOLO 1 – INSTALLAZIONE E AVVIO (Figura 1.16: Schermata Analysis Mode) Fairmat utilizza la Analysis Mode come visione di default quando apriamo un template dalla schermata iniziale oppure quando apriamo un template attraverso la selezione del seguente percorso: File → New Template Project → Generate Templates. Come possiamo notare dando nuovamente un'occhiata alla figura 1.16, possiamo suddividere idealmente la finestra di Fairmat in Analysis Mode in due parti: quella di sinistra, relativa ai parametri e alle impostazioni, e quella di destra, relativa invece ai risultati della valutazione. Nella parte in alto a sinistra possiamo scegliere il tipo di analisi che intendiamo condurre e le altre impostazioni generali, come ad esempio lo scenario di riferimento per il progetto (si veda la voce "Scenario"), la Trading Date (ovvero la data di negoziazione) e la Effective Date (ovvero la data di inizio contratto), il tipo di dati richiesto (si veda la voce "Hour/Data Request Type") e il tipo di calendario di riferimento (si veda la voce "Calendar"). In questa parte possiamo anche decidere se effettuare automaticamente un refresh dei dati di mercato nel momento in cui dobbiamo lanciare una valutazione oppure se forzare un aggiornamento dei dati di mercato cliccando sul comando “Refresh”. Una volta che tutte le impostazioni sono state scelte, possiamo iniziare a far svolgere al programma l'analisi che intendiamo effettuare cliccando sul comando “Run Analysis”. Nella parte in basso a sinistra possiamo, invece, editare i parametri specifici del contratto (quelli contrassegnati con il flag "Publish" nella Design Mode), ricercare i market data database 11 CAPITOLO 1 – INSTALLAZIONE E AVVIO (selezionando il tab Market Data), cambiare le impostazioni relative alla simulazione Monte Carlo (selezionando il tab Valuation Settings) e leggere alcune note relative al contratto in esame (selezionando il tab Notes). Quando clicchiamo sulla descrizione di un parametro Fairmat ne mostra, nella colonna di destra, la denominazione, il valore relativo (o i valori relativi), mentre nel box che si trova più in basso a sinistra, ovvero nel box "Addition Details" Fairmat ne fornisce maggiori informazioni al riguardo. Facendo doppio click sulla colonna “Value” apparirà una finestra la quale ci permetterà di inserire il valore (o i valori) del parametro stesso. Una volta portata a termine un'analisi, i principali risultati della medesima verranno riportati nel pannello più in basso a destra. Facendo doppio click sulla riga relativa all'analisi appena compiuta, nella parte più in alto a destra ci apparirà una finestra contenente una rappresentazione grafica e ulteriori dettagli relativi alla medesima. 12 CAPITOLO 1 – INSTALLAZIONE E AVVIO Vedremo ora come si presentano i menù principali di Fairmat. Con la figura 1.17 vediamo in particolare come si presenta la barra dei menù principali. (Figura 1.17: Barra dei menù principali) Il Menù File Il menù a cascata File (figura 1.18) ci permette di creare un nuovo progetto da zero senza titolo, ovvero ex-novo (mediante la selezione del comando New Empty Project o la selezione del comando New Template Project), o di aprire un file .fair già esistente da una cartella che lo contiene (mediante la selezione del comando Open). Quando creiamo o generiamo un file .fair, gli altri comandi dei menù principali diventano selezionabili. (Figura 1.18: Menù File) I comandi "Save" e "Save As" ci consentono semplicemente, e rispettivamente, o di salvare il file creato con l'estensione .fair o di salvarlo con il nome desiderato in una destinazione o in una cartella particolare. Notiamo che quando si seleziona il comando "Save As" Fairmat tiene in memoria l'ultima cartella di salvataggio utilizzata. Il comando "Merge With" ci permette di fondere, unire, più file con estensione .fair in un unico file (compiendo appunto un merge, ossia una fusione, fra due o più file). In particolare, dato un file aperto e con estensione .fair di nome A, se applichiamo il comando "Merge With" su un altro file, sempre con estensione .fair, di nome B, tutti gli oggetti di quest'ultimo file verranno copiati e trasferiti al file A; al termine del processo di merging, quindi, il file A conterrà sia i propri dati di 13 CAPITOLO 1 – INSTALLAZIONE E AVVIO partenza, i propri dati iniziali, che i dati del file B e trasferiti da B ad A appunto. I comandi "New Empty Project", "Open", "Save" sono anche presenti, con delle icone che li richiamano graficamente, sulla tavolozza grafica del menù File situata sotto il menù principale del programma. Il Menù Edit Il menù a cascata Edit (figura 1.19) contiene i comandi "Undo/Redo", "Show Editing History", "Delete", "Cut", "Copy", "Paste". (Figura 1.19: Menù Edit) I comandi "Undo" e "Redo" ci consentono, rispettivamente, o di revocare un'azione compiuta su un file .fair, o di muoversi avanti, ossia di riprendere un'azione precedentemente revocata con il comando "Undo". Il comando "Show Editing History" (figura 1.20) ci mostra una finestra con tutte le recenti azioni che abbiamo impostato e compiuti su un file .fair. I comandi "Delete", "Cut", "Copy" e "Paste" sono comandi attivi ed utilizzabili solo quando è attivo anche l'ambiente Option Map e ci consentono, rispettivamente, di cancellare, tagliare, copiare ed incollare oggetti creati appunto all'interno della Option Map dell'applicativo Fairmat. (Figura 1.20: Menù Edit – Show Editing History) 14 CAPITOLO 1 – INSTALLAZIONE E AVVIO Il Menù Analysis Il menù a cascata Analysis (figura 1.21) ci permette di condurre un'analisi su un file .fair. E' bene precisare che possiamo selezionare il menù Analysis solo e soltanto se è stato già aperto un file .fair. (Figura 1.21: Menù Analysis) Le analisi che possiamo condurre, in particolare, sono le seguenti: la Bivariate Sensitivity Analysis (Analisi di Sensibilità effettuata congiuntamente su coppie di parametri), la Univariate Sensitivity Analysis (Analisi di Sensibilità Univariata), la Dynamic and Volatility Analysis (Analisi sulla Dinamica e sulla Volatilità), la Impact Analysis (Analisi degli Impatti), la Risk Analysis (Analisi del Rischio), la Scenario (What If) Analysis (Analisi del Scenari possibili) e la Valuation (Valutazione). Avremo modo di vedere nel dettaglio i vari tipi di analisi che possiamo condurre su Fairmat nel Capitolo 4. Il Menù Settings Il menù a cascata Settings (figura 1.22) contiene diversi sottomenù contenenti a loro volta le impostazioni utili per la progettazione in Fairmat. I sottomenù ricompresi all'interno del menù Settings sono i seguenti: (Figura 1.22: Menù Settings) 15 CAPITOLO 1 – INSTALLAZIONE E AVVIO • Project Preferences (figura 1.23): è un sottomenù che si riferisce a specifiche impostazioni di un progetto da creare attraverso Fairmat (come ad esempio l'impostazione della Valuation Date – ovvero della data di valutazione – o della Effective Date – ovvero della data di inizio contratto). Il sottomenù Project Preferences comprende, a sua volta, ulteriori sottomenù: a) Simulation Dates and Conventions è un sottomenù utile per impostare la Trading Date, o Simulation Start Date, (ovvero la data di negoziazione del contratto) e la Contract Initial Date, o Effective Date, la quale costituisce il riferimento necessario per il reset delle date di pagamento in regime "Advance" e per la corretta computazione temporale convenuta, e per le simulazioni "Calendar" e "Convention". E' utile infatti sottolineare che la data impostata di default dal programma sia per la Trading Date che per la Contract Intial Date è quella corrente al momento dell'apertura del programma. E' bene precisare poi che le impostazioni di default "Calendar" e "Convention" sono rispettivamente "Italy" e "Unadjusted". Qualora il contratto oggetto di analisi preveda delle convenzioni diverse da queste ultime, e quindi da quelle preimpostate di default dal programma, dovremo opportunamente modificare le stesse anche perché tali impostazioni influenzano direttamente il procedimento elaborato dal simulatore. Al fine di adeguare il conteggio dei giorni in modo da poter tenere conto anche delle frazioni di giorno, si suggerisce l'utilizzo di appositi e specifici vettori di trasformazione delle date. E' importante, infine, notare che un aggiornamento delle Trading Date, o della Simulation Start Date, automaticamente provoca un aggiornamento del date picker Simulation presente nella barra degli strumenti. b) Analysis Preferences è un sottomenù che contiene le impostazioni per: b1) le sensitivity analysis (analisi di sensibilità): qualora, infatti, volessimo lanciare una sensitivity analysis, questa voce di impostazione ci permette di impostare le iterazioni nelle quali intendiamo suddividere il range bound ai fini della medesima. Ad esempio per un parametro “Range” per la sensitivity analysis uguale a +/- 0.80 e per un valore per il paramentro # of points (numero di punti) – sempre per la medesima – pari a 5, il range si muove a partire dal valore -0.80 con passo 0.40, incluso il valore nullo, eseguendo quindi 5 iterazioni in tutto. Ai fini dell'esecuzione di una corretta sensitivity analysis, è consigliabile impostare per il parametro # of points un valore corrispondente ad un numero dispari; b2) le distribution analysis (analisi sulla distribuzione): tale voce di impostazione mostra l'intervallo contenente l'X% della massa totale della distribuzione ed è utile per condurre appunto una dettagliata analisi sulla distribuzione; b3) le impact analysis (analisi degli impatti): tale voce di impostazione ci permette di fissare il range percentuale di variabilità di un dato parametro per condurre appunto una impact analysis; b4) le risk analysis (analisi del rischio): tale voce di impostazione ci permette di fissare un vettore di date di riferimento, utili per condurre appunto una risk analysis, o un vettore di date di pagamento contrattuali. La risk analysis è un'analisi utile per tracciare il profilo di rischio di un contratto derivato; 16 CAPITOLO 1 – INSTALLAZIONE E AVVIO (Figura 1.23: Menù Settings – Sottomenù Project Preferences) • Fairmat Prefereces (figure 1.24 e 1.25): è un sottomenù che si riferisce alle impostazioni generali dell'interfaccia utente di Fairmat (come ad esempio il numero di decimali visibili nello Status Panel, oppure il numero di repliche per le analisi reiterate). Accedendo al sottomenù Fairmat Preferences ci apparirà una finestra con due tab principali: a) Core Preferences tale tab, a sua volta, si suddivide in altri tre tab: 1) General: selezionando tale tab possiamo: – fissare il numero dei decimali visibili sugli output finali, mostrati sotto il pannello Valuation dello Status Panel. Il valore impostato di default è 2; – fissare il numero di analisi reiterate, ovvero il numero di volte per le quali le analisi devono essere replicate, ripetute; quando attiviamo un'analisi reiterata (selezionando il percorso Settings → Repeated Analysis) dobbiamo, infatti, anche impostare il numero di test da reiterare. Il valore impostato di default è 10; – rendere il codice output di Fairmat coerente con il codice Latex, flaggando il checkbox relativo “Generate Latex Friendly outputs”; per cui, ad esempio, l'espressione algebrica E[MTM|MTM >= 0] verrà scritta nel seguente modo $\mathbb{E}[MTM| MTM\geq0]$; – di impostare il “Verbosity Level" (ovvero il livello di verbosità) come un numero intero compreso tra 0 (corrispondente a nessun output) e 2 (corrispondente a più informazioni di output). Il “Verbosity Level” regola la quantità di informazioni di debug in Fairmat, e i suoi plug-in, e scrive nel tab Log dello Status Panel mentre sono in corso le valutazioni o altri computi. Il valore 0 significa che non verrà scritto nessun output di debug, mentre l'incremento dei valori positivi fa sì che Fairmat generi una quantità crescente di informazioni di debug (si noti che i valori di verbosity diversi da 0 sono di solito utilizzati per individuare dei problemi e possono comportare un allungamento dei tempi di elaborazione e di analisi); – di impostare il Market Data Provider di riferimento: in tal modo andiamo ad 17 CAPITOLO 1 – INSTALLAZIONE E AVVIO impostare il data provider a cui Fairmat deve far riferimento per il download dei dati di mercato. In particolare, i dati di mercato scaricati e i parametri dei modelli calibrati utilizzati per le valutazioni vengono memorizzati in un database all'interno del nostro PC. Qualora questi non fossero disponibili nel nostro database interno, Fairmat si riferisce ad uno (o più) Market Data Provider, in modo tale che tutte le informazioni di mercato siano immediatamente disponibili. Se il Market Data Provider è Fairmat.com (Market Data Provider selezionabile attraverso il seguente percorso Modeler → Preferences → Market Data Provider → Fairmat.com), dovremo inserire le credenziali del nostro account Fairmat; 2) Preview: nel quale possiamo fissare in anteprima il numero di percorsi e di passi temporali nell'ambito del tab “Preview” dell'editor Stochastic Processes; 3) Advanced: nel quale possiamo definire alcune impostazioni di tipo avanzato; b) Plug-in Preferences tale tab definisce le impostazioni utente relative alle estensioni e ai plug-in di Fairmat; (Figura 1.24: Menù Settings – Sottomenù Fairmat Preferences → Core Preferences) 18 CAPITOLO 1 – INSTALLAZIONE E AVVIO (Figura 1.25: Menù Settings – Sottomenù Fairmat Preferences → Plug-in Preferences, scelta del Market Data Provider) • Numerical Settings (figure 1.26 e 1.27): è un sottomenù che ci permette di definire le condizioni e il comportamento di un processo durante una simulazione Monte Carlo. Nella finestra principale del sottomenù Numerical Settings, ossia la finestra Project Numerical Settings, possiamo: – definire il campo "# of discrete timesteps" il quale ci permette di impostare il numero di step temporali che verranno simulati per ciascun percorso; – definire il campo "# of simulated path" il quale ci permette di impostare il numero di percorsi per la simulazione Monte Carlo; – attivare la funzionalità "Generate a repeatable random sequence", flaggando il relativo check-box; in tal modo decidiamo se simulare fissando o meno la testa di serie del generatore di numeri casuali (nel caso avessimo fissato una testa di serie); – definire il campo "Random Seed (integer)" il quale ci permette di impostare il valore della testa di serie da utilizzare. Il valore riportato in questo campo deve essere necessariamente un numero intero; Premendo il bottone "Advanced Settings", invece, possiamo impostare alcune preferenze connesse alla valutazione Monte Carlo ai minimi quadrati. Nella finestra Advance Simulation Settings possiamo definire: – il menù cascata "Base" con il quale possiamo scegliere differenti impostazioni base da utilizzare per stimare la funzione descrivente i valori continui; – il campo "Degree of polynomial" (ossia grado del polinomio) con il quale possiamo fissare il massimo grado da utilizzare nel problema dei minimi quadrati, per i termini misti ed omogenei; – il campo "Use also mixed terms" con il quale possiamo decidere se usare (flaggando l'apposito check-box) o meno termini misti nei casi in cui i valori continui dipendano da più di un fattore; – il menù a cascata "Predictor" con il quale possiamo scegliere quale set di variabili utilizzare per la stima del valore di continuazione (utilizzando nella valutazione di opzioni di tipo Americano); – il menù a cascata "Random number generation" con il quale possiamo impostare il tipo di generatore di numeri casuali; le scelte possibili sono o “Pseudo-Random” o “Quasi Random (low discrepance)”; 19 CAPITOLO 1 – INSTALLAZIONE E AVVIO (Figura 1.26: Menù Settings – Sottomenù Numerical Settings 1) (Figura 1.27: Menù Settings – Sottomenù Numerical Settings 2) • Plug-ins Management (figure 1.28, 1.29 e 1.30): è un sottomenù che ci permette di installare e gestire i plug-ins inseriti. All'interno di tale sottomenù vi sono tre sezioni diverse: 1) Installed Plug-ins: in questa prima sezione possiamo verificare i plug-ins che sono attualmente installati nei nostri sistemi locali. Sempre in questa sezione possiamo selezionare i comandi “Refresh”, “Enable” e “Disable”. Il comando “Refresh” ci consente, appunto, di effettuare il refresh dei plug-ins installati; i comandi “Enable” e “Disable” ci consentono, invece, rispettivamente di attivare o disattivare plug-ins; 2) Available On-line Plug-ins: in questa seconda sezione possiamo vedere i plug-ins che sono disponibili on-line o per essere installati o per essere semplicemente aggiornati. Per 20 CAPITOLO 1 – INSTALLAZIONE E AVVIO installare o aggiornare un plug-in dovremo semplicemente flaggare il check-box affianco al suo nome nella lista dei plug-ins disponibili e premere il comando “Install/Update”. Il sistema metterà in conto le eventuali dipendenze, qualora ci siano, fra i vari plug-ins; 3) Advanced: in questa terza sezione possiamo realizzare operazioni di tipo avanzato sui plug-ins. I comandi selezionabili in quest'ultima sezione sono “Install local Plug-in” o “Repair Repository”. Con il comando “Install local Plug-in” possiamo installare un plug-in da un file locale. Possiamo sfruttare questo comando nel momento in cui stiamo sviluppando dei plug-ins. I pacchetti di plug-ins hanno solitamente le estensioni .zip oppure .ddl. In questo caso specifico dovremo allora cliccare sul pacchetto di plug-ins che desideriamo installare e selezionare uno o più file contenuti al suo interno. Con il comando “Repair Repository” consentiamo a Fairmat di resettare e riparare il repository dei plug-ins locali. Dobbiamo selezionare tale comando qualora notiamo delle inconsistenze oppure dei problemi ai sistemi di plug-ins installati; (Figura 1.28: Menù Settings – Sottomenù Plug-ins Settings → Installed Plug-ins) (Figura 1.29: Menù Settings – Sottomenù Plug-ins Settings → Available On-line Plug-ins) 21 CAPITOLO 1 – INSTALLAZIONE E AVVIO (Figura 1.30: Menù Settings – Sottomenù Plug-ins Settings → Advanced) Il Menù Tools Il menù a cascata Tools contiene utili strumenti di Product Design e Market Data. Le funzionalità di tale menù sono disponibili solo quando sono aperti i file dei progetti. Di default Fairmat Professional carica i seguenti tools (o strumenti): il Goal Seeker e il Market Data Manager. A) Goal Seeker Lo strumento Goal Seeker (figure 1.31 e 1.32) ci permette di trovare gli insiemi dei valori, o delle soluzioni, o sottoinsiemi dei parametri del modello ottimizzando le metriche definite nel contratto in esame. In particolare, i “Goals” (obiettivi) attualmente disponibili sono: – “Maximization” (massimizzazione); – “Minimization” (minimizzazione); – “Level Finding” (accertamento livello); Le metriche contrattuali attualmente supportate sono le seguenti: – “Mark to Market” (Valuation); – “Average Standard Deviation of Cashflows” (Deviazione Standard media dei flussi di cassa); – “Average Cvar – Conditional Value at Risk – of Cashflows (valore a rischio condizionale medio dei flussi di cassa); Per definire dove ricercare i valori ottimali, per ogni parametro dobbiamo specificare i limiti entro i quali restringere la ricerca. I parametri che definiscono i limiti in questione possono essere specificati nel campo “Range” (si veda la figura 1.31). I parametri da ottimizzare, invece, devono essere inseriti nel parametro “Model parameters to optimize” (si veda la figura 1.32). 22 CAPITOLO 1 – INSTALLAZIONE E AVVIO (Figura 1.31: Menù Tools – Tool Goal Seeker 1) (Figura 1.32: Menù Tools – Tool Goal Seeker 2) B) Market Data Manager I dati di mercato scaricati e i parametri dei modelli calibrati utilizzati per la valutazione sono salvati in un database nel nostro PC. Il database, inizialmente vuoto, viene gradualmente riempito con i dati di mercato e di calibrazione da noi richiesti mediante il comando “Calibrate model using data provider”. Si noti che se i dati di mercato non sono già disponibili nel database, Fairmat automaticamente andrà ad invocare un data provider dal quale scaricare i dati di mercato necessari. Dopo di ché, sia i dati di mercato che i parametri di mercato vengono immagazzinati nel nostro database interno. Ciò incrementa in misura significativa la velocità di risposta del sistema dal momento che sia il download dei dati di mercato che le calibrazioni vengono eseguiti solo una volta e solo quando da noi richiesto. Selezionando il percorso Tools → Date → Market Data Management possiamo accedere a questo database interno al quale Fairmat si riferisce. Il tab Browse Calibrations (figura 1.33) ci mostra, in ogni linea, informazioni riguardanti ciascuna calibrazione, come il mercato di riferimento, la data di calibrazione e i valori dei parametri riferiti a quella data. C'è anche un filtro che ci permette di ricercare i dati per modello, tool, mercato di riferimento ed intervallo temporale. Il tab “Browse Market Data” (figura 1.34) mostra, per ogni data (Date), i dati di input utilizzati 23 CAPITOLO 1 – INSTALLAZIONE E AVVIO da Fairmat per calibrare il modello. Alla stessa data possono corrispondere più linee che differiscono nel tipo. Ciò in quanto, allo stesso tempo, diversi modelli possono richiedere diversi dati di input. Nell'esempio riportato nelle figure 1.33 e 1.34, il modello Jarrow-Yildrim necessita sia dell'oggetto Interest Rate Market Data (ovvero del dato relativo al tasso di interesse di mercato) che dell'oggetto Market Data. Information Market Data (ovvero dell'indicazione del mercato di riferimento). Un modello più semplice, come ad esempio il modello Hull e White ad un parametro, può richiedere solo il primo dei due oggetti elencati. (Figura 1.33: Menù Tools – Tool Market Data Manager → Browse Calibration) (Figura 1.34: Menù Tools – Tool Market Data Manager → Browse Market Data) Per quanto riguarda sempre il tool Market Data Manager, è bene infine precisare che l'attuale versione di Fairmat presenta alcune limitazioni. In particolare: – i dati di mercato possono essere recuperati soltanto a mercati chiusi, ovvero a sedute borsistiche concluse; – il recupero dei dati relativi ai tassi di interesse di mercato è ottimizzato solo per i mercati EU 24 CAPITOLO 1 – INSTALLAZIONE E AVVIO (Europa), US (Stati Uniti), CH (Svizzera), JP (Giappone) e GB (Gran Bretagna); – se dobbiamo cambiare la data prima di lanciare un'analisi, dovremo aggiornare i modelli stocastici manualmente cliccando su di essi e selezionando il comando “Calibrate model using data provider”; In tal senso le future versioni dell'applicativo Fairmat permetteranno di aggiornare automaticamente i dati e i modelli e forniranno maggiori dettagli su come i modelli siano stati calibrati. Il Menù Help Il menù a cascata Help (figura 1.35) contiene una voce denominata “Contents” con la quale verremo reindirizzati ad un documento di supporto, aiuto ed assistenza (nelle versioni attualmente disponibili di Fairmat, tale documento è disponibile solo in lingua inglese). Fairmat Help funziona anche offline. (Figura 1.35: Menù Help) 25 CAPITOLO 2 IL LINGUAGGIO PER LA DESCRIZIONE DEI PAYOFF CAPITOLO 2 – IL LINGUAGGIO ALGEBRICO DI FAIRMAT Fairmat è dotato di un semplice linguaggio di scripting i cui elementi base sono i parametri (ovvero le costanti – o Scalar –, vettori – o Vectors –, le matrici – o Matrices), i processi stocastici (o Stochastic Processes) e le funzioni (o Functions). Possiamo accedere alla creazione di questi oggetti dal menù che si trova nell'angolo in alto a sinistra della pagina principale (figura 2.1). (Figura 2.1: Fairmat – Elementi di base) Combinando questi oggetti attraverso degli operatori funzionali, possiamo creare facilmente delle espressioni; sono disponibili diverse funzioni ad uso standard e diversi operatori predefiniti, ma l'utente può anche definirne di propri e nuovi. Un suggerimento: possiamo eventualmente testare le espressioni create con Fairmat e utilizzarle in modo iterativo nella Fairmat Console dello Status Panel, disponibile nella parte bassa della schermata principale. Per esempio (figura 2.2), dopo aver definito uno Scalar di nome “Date”, posto uguale alla data del 30/12/2003, editando nella Fairmat Console “Day(Date)”, Fairmat ci mostrerà il valore dell'espressione creata (nel nostro caso pari a 30). (Figura 2.2: Esempio di testing di un'espressione attraverso la Fairmat Console) 26 CAPITOLO 2 – IL LINGUAGGIO ALGEBRICO DI FAIRMAT I differenti tipi di funzione disponibili in Fairmat sono i seguenti: – – – – – – – – – – – – Assets' Sets Functions; Date and Time Functions; Financial Functions; Functions on Vector and Matrices; Interest Rate Functions; Interval Functions; Selection Functions; Standard Functions; Special Functions and Distribution Functions; Other Functions; Reserved Symbols; Random Variables Generator; Esamineremo ora in dettaglio ciascuno dei tipi di funzione appena elencati con l'eccezione delle Special Functions e delle Distribution Functions. Le espressioni di Fairmat utilizzano le impostazioni di tipo internazionale per cui se nel nostro PC il separatore dei decimali è costituito dalla virgola (' , '), ciò si rifletterà nelle espressioni create con Fairmat. Nella tabella 2.1 sottoriportata è possibile vedere come lo stesso payoff venga visualizzato in modo differente utilizzando due diverse località di riferimento: (Tabella 2.1 – Impostazioni locali per la definizione del payoff) Località di riferimento Stati Uniti e rate (1; 2.5; @V1) Inghilterra Italia e resto Rate (1; 2,5; @V1) d'Europa Payoff Fairmat riconosce, inoltre, il simbolo % (percentuale) per cui le seguenti espressioni sono del tutto equivalenti: a = 0,12 oppure a = 12%. Assets' Sets Functions 27 CAPITOLO 2 – IL LINGUAGGIO ALGEBRICO DI FAIRMAT Le Assets' Sets Functions sono funzioni che possono essere utilizzate nelle espressioni di Fairmat e che hanno come argomento degli insiemi di attività (o asset set). Di conseguenza si tratta di un tipo di funzioni che lavorano su un determinato asset set di riferimento indicato dall'utente. Nella lista che segue, e che elenca i tipi di Assets' Sets Functions disponibili in Fairmat, @asset.set costituisce il riferimento all'insieme di attività (o asset set) sul quale la funzione deve lavorare mentre expr indica una comune espressione. Le Assets' Sets Functions permettono di effettuare operazioni di tipo aritmetico quali, ad esempio, la ricerca del valore massimo (o del valore minimo) all'interno di un insieme di valori oppure il calcolo della media di un insieme di valori e così via. La variabile bi rappresenta l'indice corrente (o attuale) ricompreso entro l'insieme dei valori di riferimento e può assumere valori a partire da 1 fino al numero massimo di elementi contenuti nell'asset set di riferimento. In particolare: • • • • • • • ASMax (@asset_set; {expr}): calcola il valore massimo fra i valori dell'espressione expr ottenuti durante la valutazione della stessa per ciascun elemento dell'asset set di riferimento; ASMin (@asset_set; {expr}): calcola il valore minimo fra i valori dell'espressione expr ottenuti durante la valutazione della stessa per ciascun elemento dell'asset set di riferimento; ASSum (@asset_set; {expr}): calcola la somma dei valori dell'espressione expr ottenuti durante la valutazione della stessa per ciascun elemento dell'asset set di riferimento; ASMean (@asset_set; {expr}): calcola la media aritmetica semplice dei valori dell'espressione expr ottenuti durante la valutazione della stessa per ciascun elemento dell'asset set di riferimento; ASWSum (@asset_set; @w; {expr}): calcola una somma ponderata, lungo il vettore dei pesi w, dei valori dell'espressione expr ottenuti durante la valutazione della stessa per ciascun elemento dell'asset set di riferimento. Il vettore dei pesi w deve contenere lo stesso numero di elementi dell'asset set di riferimento (in altre parole: la lunghezza del vettore w deve coincidere con la grandezza, in termini di numeri di elementi, dell'asset set di riferimento); ASProd (@asset_set; {expr}): calcola il prodotto fra i valori dell'espressione expr ottenuti durante la valutazione della stessa per ciascun elemento dell'asset set di riferimento. Tale funzione può essere utile per la costruzione di funzioni di segnalazione (o indication functions); ASCount (@asset_set; {expr}): conta il numero di volte che la valutazione dell'espressione expr, interagendo sugli elementi dell'asset set di riferimento, è positivo. Tale funzione assume le caratteristiche quindi di un contatore; Nelle espressioni argomento delle Assets' Sets Functions (ovvero expr) possiamo utilizzare il simbolo “V”, che rappresenta il valore del generico elemento dell'asset set di riferimento alla data attuale (o in corso) durante la corrente realizzazione. Usando l'operatore di indicizzazione, ovvero [ ], possiamo accedere al valore del generico elemento ad una specifica data. Per esempio V[x] indica il valore del generico elemento “V” alla data “x”. Per comprendere appieno le Assets' Sets Functions, vediamo ora brevemente alcuni esempi. Primo esempio: comparazione fra espressioni di diversa estensione Supponiamo di avere un problema definito in uno space assets (spazio di assets) del tipo S = V1, V2, 28 CAPITOLO 2 – IL LINGUAGGIO ALGEBRICO DI FAIRMAT …, Vn e di definire un asset set del tipo K = {V1, V2, V3}. Nel contesto dell'asset set definito valgono le seguenti equivalenze fra espressioni: – ASMax (@K; {V[5]/V[0] – 1}) equivale all'espressione max(V1[5]/V1[0] – 1; V2[5]/V2[0] – 1; V3[5]/V3[0] – 1); – ASProd (@K; {V[5]/V[0] – 1}) equivale all'espressione (V1[5]/V1[0] – 1)*(V2[5]/V2[0] – 1)*(V3[5]/V3[0] – 1); Secondo esempio: verifica della realizzazione di una condizione Su una data realizzazione, la seguente espressione restituisce il numero di elementi nell'asset set K che hanno avuto un incremento maggiore del 3% nel periodo compreso fra il periodo 4 e il periodo 6: – ASCount (@K; {V[6]/V[4] > 3%}) la quale è equivalente alla seguente espressione – ASCount (@K; {iif(V[6]/V[4] > 3%; 1; 0)}) Date and Time Functions Le Date and Time Functions sono funzioni che possono essere utilizzate per manipolare dei valori di tipo temporale. Fra le Date and Time Functions più importanti possiamo annoverare le seguenti: • Accrual (date; @payments): restituisce il periodo totale di maturazione con riferimento ad un dato istante temporale (date) e ad una data sequenza di date di pagamento (payment dates) definite dal vettore payments; Un esempio ci aiuterà a comprendere meglio l'utilizzo di tale funzione. Definiamo la data “Date”, variabile di tipo Scalar, come 30/06/2009, e il vettore payments come [06/10/2008; 05/10/2009; 04/10/2010]; supponiamo di voler calcolare il periodo di maturazione fra le “payment dates” 06/10/2008 e 05/10/2009, ovvero i primi due elementi del vettore payments; la funzione Accrual (date; @payments), sopra definita, restituirà come risultato il valore 0,7333423. In particolare, infatti, assumendo la data del 30/06/2009 (ossia il valore corrispondente alla variabile “Date”) sia come Effective Date che come Valuation Date i periodi da dover prendere in considerazione per il calcolo del periodo di maturazione, ovvero (30/06/2009 – 06/10/2008) e (05/10/2009 – 06/10/2008), verranno così convertiti da Fairmat in valori numerici (tenendo presente che l'anno 2008 è stato un anno bisestile mentre il 2009 non lo è stato): – (30/06/2009 – 06/10/2008) → [(31/12/2008 – 06/10/2008)/366] + [(30/06/2009 – 31/12/2008)/365] = = 87/366 + 180/365 = 0,2377049 + 0,4931507 = 0,7308556 – (05/10/2009 – 06/10/2008) → [(31/12/2008 – 06/10/2008)/366] + [(05/10/2009 – 31/12/2008)/365] = = 87/366 + 277/365 = 0,2377049 + 0,7589041 = 0,9966090 Per cui la funzione Accrual calcolerà il seguente rapporto: (30/06/2009 – 06/10/2008) / (05/10/2009 – 06/10/2008) = 0,7308556/0,9966090 = 0,7333423. • • Day (Date): restituisce il giorno del mese data una serie di date numeriche o una stringa di date (“Date”); Month (Date): restituisce il mese in un formato numerico data una serie di date o una stringa di date (“Date”); 29 CAPITOLO 2 – IL LINGUAGGIO ALGEBRICO DI FAIRMAT • Dayofweek (Date): restituisce il giorno della settimana in un formato numerico per una serie di date numeriche o per una stringa di date (“Date”). L'ordine è 0 – 6 e va dalla Domenica (Sunday) al Sabato (Saturday); Con un breve esempio cercheremo di illustrare ora l'utilizzo di tutte e tre le funzioni appena elencate. Definita la data 24/10/2008: – la funzione Day (Date) restituirà 24; – la funzione Month (Date) restituirà 10; – la funzione Dayofweek (Date) restituirà 5 ovvero Friday (in quanto il giorno 24/10/2008 era un Venerdì); • OnEvery (date; frequency): restituisce valore 1 (ossia VERO, “True”) solo se la data “Date” è un multiplo di frequency, 0 altrimenti (ovvero FALSO, “False”, altrimenti); Anche per quest'ultima funzione ne vediamo un breve esempio al fine di comprenderne meglio il funzionamento e l'utilizzo. In particolare: OnEvery (t; 0,25) è una funzione che restituirà 1 (ossia VERO, “True”) per tutte le t che risultino multiple di un quarto (0,25). Financial Functions Le Financial Functions sono funzioni che calcolano ed elaborano informazioni di tipo finanziario. Fra le Financial Functions disponibili in Fairmat si possono annoverare in particolare le seguenti: • • bscall (rf; S0; X; Sigma; Maturity): calcola il prezzo di un'opzione call di tipo europeo utilizzando il modello di Black e Scholes e la sua formula; bsput (rf; S0; X; Sigma; Maturity): calcola il prezzo di un'opzione put di tipo europeo utilizzando il modello di Black e Scholes e la sua formula; Riguardo ai parametri sui quali si basa il modello di Black e Scholes ricordiamoci, in particolare, che: – rf indica il rendimento di un titolo privo di rischio (o risk free); – S0 indica il prezzo dell'attività sottostante il contratto d'opzione (prezzo put); – X indica lo strike price (o prezzo d'esercizio) dell'opzione; – Sigma (o σ) indica la deviazione standard del sottostante (ovvero la sua volatilità); – Maturity (o scadenza) indica la data di scadenza (ovvero, nel caso specifico delle opzioni di tipo europeo, di possibile esercizio dell'opzione); Functions on Vectors and Matrices Un vettore è un dato di tipo strutturato che consiste in un gruppo di elementi i quali sono accessibili 30 CAPITOLO 2 – IL LINGUAGGIO ALGEBRICO DI FAIRMAT mediante l'indicizzazione. Con Fairmat possiamo creare vettori comuni contenenti valori reali (quali espressioni o date) e definiti come insiemi ordinati di elementi: ogni elemento del vettore potrà essere un numero, una costante (ovvero uno Scalar) oppure un'espressione o una data. Un vettore di nome v può essere utilizzato nelle espressioni di Fairmat nei seguenti modi: – se lo stesso vettore deve essere utilizzato come argomento di una funzione, esso dovrà essere passato come riferimento mediante la sintassi @v; – per accedere al valore degli elementi contenuti nello stesso vettore, si deve utilizzare l'operatore di indicizzazione [ ]. Per esempio v[1] restituirà il valore del primo elemento presente nel vettore v. Si noti bene che gli indici dei vettori in Fairmat sono in base uno, ovvero assumono valori da 1 fino a N, dove N indica il numero totale di elementi che compongono il vettore v; Per le funzioni che accettano come argomento i vettori si veda il sottoparagrafo dedicato alle Vector Functions. Allo stesso modo, una matrice di nome m può essere utilizzata nelle espressioni di Fairmat come segue: – se la stessa matrice deve essere utilizzata come argomento di una funzione, essa dovrà essere passata come riferimento mediante la sintassi @m; – per accedere al valore degli elementi contenuti nella stessa matrice, si deve utilizzare l'operatore di indicizzazione [riga; colonna]. Per esempio m[2; 4] restituirà il valore dell'elemento m2, 4 ovvero il valore dell'elemento della matrice m che si trova nella seconda riga e nella quarta colonna. Gli indici sono, anche nel caso delle matrici, come nel caso dei vettori, in base uno, per cui il primo elemento della matrice m, ovvero l'elemento m1, 1 è m [1; 1]; Per le funzioni che accettano come argomento le matrici si veda il sottoparagrafo dedicato alle Matrix Functions. Vector Functions In Fairmat sono disponibili diverse funzioni che accettano come argomento vettori ed espressioni e, nel contesto di tali funzioni, vi sono alcuni simboli interni che possono essere utilizzati per parametrizzare l'espressione expr. Più nello specifico: – x0 indica il valore del primo elemento del vettore v; – xa indica il valore dell'elemento corrente, attuale, del vettore v; – xb indica il valore dell'elemento del vettore v che era l'elemento corrente, attuale, nel corso della precedente iterazione della funzione; – xi indica l'indice corrente, attuale, nell'iterazione della funzione in corso sul vettore v; Le Vector Functions sono molto simili nel loro funzionamento alle Interval Functions (che esamineremo nel dettaglio fra qualche paragrafo). L'espressione generale delle Vector Functions è la seguente: vector_function (@vec; {expr}; [start]; [N]). Dove il simbolo @vec indica il vettore passato come riferimento e expr è un'espressione. Start e N definiscono, rispettivamente, la posizione dell'indice di partenza e il numero di elementi del vettore considerati. Start e N sono parametri opzionali per cui non è sempre necessario esplicitarli nella funzione; ai fini della 31 CAPITOLO 2 – IL LINGUAGGIO ALGEBRICO DI FAIRMAT notazione d'ora in avanti i parametri opzionali saranno mostrati entro le parentesi quadre (ad esempio [N]). E' bene ricordare ancora una volta che gli indici del vettore sono in base uno, per cui il punto di partenza di default è 1, se non viene esplicitato diversamente nella dichiarazione della funzione. Infatti le impostazioni di default dei parametri opzionali sono start = 1 e N = lenght(@vec) – start + 1. Le Vector Functions attualmente disponibili in Fairmat sono le seguenti: • • • • • • • • AMax (@vec; {expr}; [start]; [N]): restituisce il valore massimo dell'espressione expr valutata dall'indice della posizione di partenza del vettore vec (ovvero start) per il numero N di elementi considerati del vettore stesso; AMin (@vec; {expr}; [start]; [N]): restituisce il valore minimo dell'espressione expr valutata dall'indice della posizione di partenza del vettore vec (ovvero start) per il numero N di elementi considerati del vettore stesso; ACount (@vec; {expr}; [start]; [N]): restituisce il numero di volte che il valore dell'espressione expr, valutata dall'indice della posizione di partenza del vettore vec (ovvero start) per il numero N di elementi considerati del vettore stesso, è positivo; ASum (@vec; {expr}; [start]; [N]): restituisce la somma dei valori dell'espressione expr valutata dall'indice della posizione di partenza del vettore vec (ovvero start) per il numero N di elementi considerati del vettore stesso; AMean (@vec; {expr}; [start]; [N]): restituisce la media dei valori dell'espressione expr valutata dall'indice della posizione di partenza del vettore vec (ovvero start) per il numero N di elementi considerati del vettore stesso; AProd (@vec; {expr}; [start]; [N]): restituisce il prodotto dei valori dell'espressione expr valutata dall'indice della posizione di partenza del vettore vec (ovvero start) per il numero N di elementi considerati del vettore steso; AWSum (@vec; @weight_vec; {expr}): restituisce la somma ponderata dei valori dell'espressione expr valutata interagendo sugli elementi del vettore vec ed utilizzando, come pesi, i valori del vettore weight_vec. Le dimensioni dei vettori vec e weight_vec devono essere le stesse; AFirst (@vec; {expr}; [start]; [N]): restituisce il primo indice al quale corrisponde quell'elemento del vettore vec che, dall'indice della posizione di partenza del vettore vec stesso (ovvero start) per il suo numero N di elementi considerati, verifica l'espressione expr. Qualora la funzione restituisca il valore 0 significa che la condizione non è mai stata soddisfatta durante tutto il ciclo di iterazione; Related Functions Le Related Functions sono funzioni che restituiscono un determinato valore da un vettore; quindi anche in questo caso si tratta di funzioni che agiscono sui vettori. Fra le Related Functions disponibili in Fairmat possiamo annoverare le seguenti: • • • AFirst (@vec): restituisce il valore del primo elemento del vettore vec; ALast (@vec): restituisce il valore dell'ultimo elemento del vettore vec; ALen (@vec): restituisce il numero di elementi contenuti nel vettore vec. In altre parole tale funzione permette di determinare la lunghezza del vettore vec; 32 CAPITOLO 2 – IL LINGUAGGIO ALGEBRICO DI FAIRMAT • Lenght (@vec): restituisce il numero di elementi contenuti nel vettore vec. In altre parole tale funzione permette di determinare la lunghezza del vettore vec per cui tale funzione è del tutto equivalente alla precedente ALen (@vec); Alcuni esempi sull'utilizzo delle Vector Functions 1) Se vec1 è un vettore così definito [0, 1, 5, 3, 4, 2] e funz1 è una funzione così definita fun1 = 2*x, allora: – la funzione AMax (@vec1; {fun1(xa)}) restituirà 10 (ovvero 2*5); – la funzione AMax (@vec1; {fun1(xi)}) restituirà 12 (ovvero 2*6); in quanto xa indica il valore massimo presente fra i valori di vec1, che è pari a 5, mentre xi indica il valore massimo assunto dall'indice i, che (invece) è pari a 6. 2) Se vec1 è un vettore così definito [.1, .5, .3, .4, .2] possiamo scrivere le seguenti espressioni per la vector function AMax: – AMax (@vec1; {xa} che restituisce .5 (in quanto si parte, di default, dal primo elemento di vec1 fino ad arrivare a N, che è uguale a lenght(@vec1) – start + 1 = 5 – 1 + 1 = 5); – AMax (@vec1; {xa}; 3) che restituisce .4 (in quanto si parte dal terzo elemento del vettore vec1 fino ad arrivare a N, che è uguale a lenght(@vec1) – start + 1 = 3 – 1 + 1 = 3; in pratica con queste impostazioni è come se il vettore vec1 fosse di soli 3 elementi anziché di 5); – AMax (@vec1; {xa}; 3; 2) il quale restituisce .3 (in quanto si parte dal terzo elemento del vettore vec1 fino ad arrivare a N, che è uguale a lenght(@vec1) – start + 1 = 2 – 1 + 1 = 2, perché N è stato definito pari a 2; in buona sostanza, con queste impostazioni, è come se il vettore vec1 fosse di due soli elementi partendo però dal terzo elemento; in altre parole ancora, con queste impostazioni è come se il vettore vec1 fosse così definito: [.3, .2]); 3) Se vector è un vettore contenente i valori seguenti [.5, .7, 1.5] la seguente espressione: ASum (@vector; {Bond( xa ; 2; @v1)}; 1) equivale alla seguente: Bond (vector[1]; 2; @v1) + Bond (vector[2]; 2; @v1) + Bond (vector[3]; 2; @v1) (Avremo modo di vedere nel dettaglio la funzione Bond fra qualche paragrafo); 4) La seguente espressione restituisce il minimo di una serie di prezzi sottostanti relative a date fornite da un generico vettore A: AMin (@A; {v1[xa]/v1[xb – 1]}; 2); Matrix Functions Fra le Matrix Functions disponibili in Fairmat possiamo annoverare le seguenti: • • • • MRows (@m): restituisce il numero di righe della matrice m; MColumns (@m): restituisce il numero di colonne della matrice m; MRows (@m; row_index): restituisce il riferimento alla riga della matrice m con indice pari al valore di row_index; MColumns (@m; column_index): restituisce il riferimento alla colonna della matrice m con indice pari al valore di column_index; 33 CAPITOLO 2 – IL LINGUAGGIO ALGEBRICO DI FAIRMAT Le funzioni MRow (@m; row_index) e MColumns (@m; column_index) restituiscono in pratica il riferimento ad una riga o ad una colonna della matrice m; in questo modo possiamo richiamare una qualsiasi delle Vector Functions descritte nel paragrafo precedente, passando però, in questi casi, come riferimento anziché un vettore, una riga o una colonna della matrice m. Un esempio ci aiuterà a comprendere al meglio il funzionamento e l'utilizzo delle Matrix Functions appena illustrate. La seguente espressione calcola il valore massimo della seconda riga della matrice m: AMax (Mrow(@m; 2); xa). Interest Rate Functions Le Interest Rate Functions sono funzioni che hanno come oggetto dei tassi di interesse e che restituiscono come valore dei tassi di interesse. All'interno della macrocategoria delle Interest Rate Functions possiamo distinguere tre categorie di funzioni: 1) le Interest Rate Conversion Functions; 2) le Deterministic Interest Rate Functions; e 3) le Stochastic Interest Rate Functions; Interest Rate Conversion Functions Le Interest Rate Conversion Functions sono funzioni che permettono di convertire un tasso di interesse espresso sotto un determinato regime in un tasso di interesse equivalente sotto un altro regime – ricordandoci che i regimi di tassi di interesse più diffusi sono quello semplice, quello composto e quello composto per m volte l'anno. Fairmat dispone di quattro diverse Interest Rate Conversion Functions. Fra queste funzioni possiamo distinguere le Interest Rate Conversion Functions che dipendono dalla scadenza (o maturity) n e quelle che non dipendono da essa. Rientrano nella prima sottocategoria le funzioni Rc2Rs e Rs2Rc; rientrano, invece, nella seconda sottocategoria le funzioni Rc2Rm e Rm2Rc. Più nel dettaglio: • • Rc2Rs (Rc; n): restituisce il tasso di interesse semplice, a scadenza n, partendo dal tasso di interesse composto Rc; Rs2Rc (Rs; n): restituisce il tasso di interesse composto, a scadenza n, partendo dal tasso di interesse semplice Rs; Rc e Rs sono entrambi espressi in termini di tassi di interesse annuali. Le prime due funzioni appena esplicitate si basano sull'equazione [2.1] nella quale il tasso di interesse composto, a scadenza n, Rc(n) viene comparato con l'equivalente tasso di interesse semplice (sempre a scadenza n), Rs(n): e Rc ( n ) n 1 Rs(n)n [2.1] La [2.1] è risolvibile sia per Rc(n) che per Rs(n). 34 CAPITOLO 2 – IL LINGUAGGIO ALGEBRICO DI FAIRMAT Alcuni esempi ci aiuteranno a comprendere al meglio l'utilizzo delle due funzioni appena esplicitate. Ipotizziamo un tasso di interesse composto a 6 mesi, Rc, pari al 5% (tasso annuo). L'equivalente tasso di interesse semplice a 6 mesi, Rs, sarà dato da Rc2Rs (Rc; n) = Rc2Rs (0,05; 0.5) e quindi sarà pari al tasso del 5,063% annuo. L'equivalente tasso di interesse semplice a 3 mesi, invece, ovvero Rc2Rs (Rc; n) = Rc2Rs (0,05; 0.25), sarà pari al tasso del 5,031% annuo. Notiamo come l'equivalenza del tasso semplice Rs e con il tasso composto Rc, e viceversa, dipenda dalla scadenza n. • • Rc2Rm (Rc; m): restituisce il tasso di interesse composto per m volte l'anno, Rm, partendo dal tasso di interesse composto annuo Rc; Rm2Rc (Rm; m): restituisce il tasso di interesse composto annuo, Rm, partendo dal tasso di interesse composto per m volte l'anno, Rm; Rc e Rm sono entrambi espressi in termini di tassi di interesse annuali. Queste altre due funzioni appena esplicitate si basano sull'equazione [2.2] nella quale il tasso di interesse composto continuo (a scadenza n), Rc(n), viene comparato con l'equivalente tasso di interesse composto per m volte l'anno (sempre a scadenza n), Rm(n). mn Rm(n) [2.2] e Rc ( n ) n 1 m E' possibile semplificare entrambi i membri della [2.2] per n, ottenendo così: m Rm(n) Rc ( n ) [2.3] e 1 m ovvero un'espressione nella quale possiamo esprimere il tasso Rc(n) come funzione del tasso Rm(n) e viceversa. La [2.2] e la [2.3] sono entrambe risolvibili, quindi, sia per Rc che per Rm. Notiamo che l'equivalenza del tasso composto Rc con il tasso composto per m volte l'anno Rm, e viceversa, sia del tutto indipendente rispetto alla scandenza n. Un esempio ci aiuterà a comprendere al meglio l'utilizzo delle funzioni appena esplicitate. Ipotizziamo un tasso di interesse composto continuo pari al 5% (annuo), per cui si ipotizzi Rc = 5%. L'equivalente tasso di interesse composto per 2 volte l'anno (ovvero l'equivalente tasso di interesse composto continuo semestrale) è pari a Rc2Rm (Rc; m) = Rc2Rm (0,05; 2) = 5,063% (tasso annuo). Ribadiamo ancora una volta come l'equivalenza fra i due tassi, ovvero Rc e Rm non dipenda affatto dalla scadenza n. Deterministic Interest Rate Functions Le Deterministic Interest Rate Functions sono funzioni che calcolano i tassi di interesse forward 35 CAPITOLO 2 – IL LINGUAGGIO ALGEBRICO DI FAIRMAT partendo da una data struttura per scadenze dei tassi di interesse (o zero rate curve o yield curve). Nelle definizioni che seguiranno, intenderemo sempre i tassi di interesse (siano essi spot – ovvero a breve termine – che forward – ovvero a lungo termine) come composti e continui. Fra le Deterministic Interest Rate Functions disponibili in Fairmat possiamo annoverare le seguenti: • Iforward (t; @zr): restituisce il tasso di interesse forward istantaneo al tempo t data la struttura per scadenze dei tassi di interesse spot (o zero rate curve, zr); Data una certa struttura per scadenze dei tassi di interesse spot, il tasso di interesse forward istantaneo ad un dato istante t è dato dalla seguente: zr (t dt )(t dt ) zr (t dt )(t dt ) [2.4] 2dt • F.R.A. (t; n; @zr): calcola il tasso di interesse forward di tipo semplice corrente al tempo t per investimenti con scadenza n data una certa struttura per scadenze dei tassi di interesse spot, zr. La funzione F.R.A. (acronimo di Forward Rate Agreement, ovvero Accordo sui tassi di interesse futuri) restituisce un generico tasso LIBOR (London InterBank Offered Rate, tasso interbancario “lettera” su Londra) quando t indica una data storica e la struttura per scadenze zr è collegata al Market Data; Data una certa struttura per scadenze dei tassi di interesse spot, definita dalla variabile zr dichiarata nella funzione F.R.A., il tasso di interesse forward di tipo semplice corrente al tempo t con scadenza n è definibile attraverso la seguente: P (0, t+ n) −1 P (0, t) [2.5] n Dove P(0, t) indica il prezzo del titolo zero coupon con scadenza t. I tassi della struttura per scadenze zr sono di tipo composto continuo per cui P(0, t) è definito come: ezr(t)t. Un esempio ci aiuterà a comprendere al meglio l'utilizzo della funzione F.R.A. appena illustrata. Dati zr(0.5) = 0,0130870885 e zr(1.5) = 0,0156597434, il tasso forward semplice compreso tra il tempo 0,5 e il tempo 1,5, ovvero in altre parole il tasso forward di tipo semplice corrente al tempo 0.5 per investimenti scadenti fra 1 periodo è pari a F.R.A (0.5; 1; @zr) = 0,0170904700. (n è pari quindi a 1 e non a 1,5 in quanto del tasso forward corrente è a 1 periodo e non a 1,5 periodi). Stochastic Interest Rate Functions Fra le Stochastic Interest Rate Functions disponibili in Fairmat possiamo annoverare le seguenti: 36 CAPITOLO 2 – IL LINGUAGGIO ALGEBRICO DI FAIRMAT BOND (t; s; @v): calcola, con riferimento all'istante t, il prezzo di un bond con scadenza coincidente al tempo s, adottando come riferimento un determinato modello sui tassi di interesse v (come può essere, ad esempio, il modello Hull e White); • Ad esempio, BOND (2; 3; @v1) permette di calcolare al tempo 2, il prezzo di un bond zero coupon, con scadenza al tempo 3, adottando come riferimento il modello stocastico v1. CMS (t; n; [m]; @v): calcola, con riferimento all'istante t, il valore del CMS (Costant Maturity Swap) con scadenza al tempo n, adottando come riferimento un determinato modello sui tassi di interesse v (come può essere, ad esempio, il modello Hull e White). Il dato di input m indica l'intensità (ossia il numero di scambi finanziari previsti all'anno) relativa al CMS stesso. Con riferimento a quest'ultimo dato, in particolare, per le swapotion US, ovvero statunitensi, si deve utilizzare come dato di input m = 2 (il dato in questo caso indica una frequenza di scambi semestrale nell'arco di un anno) mentre per le swapotion europee, di tipo europeo, si deve utilizzare come dato di input m = 1 (il dato in questo caso indica una frequenza di scambi annuale nell'arco di un anno); • Se il processo stocastico è collegato con i data sources, le informazioni riguardanti l'intensità m sono ricavabili dai data sources stessi. Il valore all'istante t di un CMS con scadenza n e avente intensità m (il quale indica, come già accennato, il numero di scambi finanziari nell'arco di un anno, la frequenza degli scambi finanziari nell'arco di un anno), utilizzando come processo stocastico di riferimento v, è definibile mediante la seguente: 1 BOND (t ; mn;V ref ) mn [2.6] 1 / m BOND (t ; i / m;V ref ) i 1 dove il simbolo Vref equivale al simbolo @v. Un esempio ci aiuterà a comprendere al meglio l'utilizzo della funzione CMS appena esplicitata. La funzione CMS (4; 10; 2; @v1) permette di calcolare, all'istante 4, il CMS avente scadenza al tempo 10 e che prevede un'intensità pari a 2 (ovvero, in altre parole, una frequenza di scambi finanziari semestrale nell'arco di un anno) utilizzando come processo stocastico di riferimento v1. • RATE (t; n; @v): calcola il tasso di interesse stocastico relativo all'intervallo temporale [t; t+n] adottando come riferimento un determinato modello sui tassi di interesse v (come può essere, ad esempio, il modello Hull e White); In particolare il tasso di interesse relativo all'intervallo temporale che va dal tempo t alla scadenza n si può calcolare, utilizzando come modello stocastico di riferimento v, attraverso la seguente: 1 1 1 [2.7] ref BOND(t ; t n;V ) n dove il simbolo Vref equivale al simbolo @v. Un esempio ci aiuterà a comprendere al meglio l'utilizzo della funzione RATE appena esplicitata. La funzione RATE (1; 0,5; @v1) permette di calcolare, all'istante 1, il tasso di interesse con scadenza semestrale (0,5) utilizzando come processo stocastico di riferimento v1. • FIRS (t; n; m; Sk; @v): calcola con riferimento all'istante t, il valore dell'IRS (Interest Rate 37 CAPITOLO 2 – IL LINGUAGGIO ALGEBRICO DI FAIRMAT Swap) con scadenza coincidente al tempo n, avente intensità pari a m (il quale indica il numero di scambi finanziari nell'arco di un anno) collegato al tasso cedolare Sk, utilizzando come riferimento il processo stocastico sui tassi di interesse v. Solitamente Sk indica il tasso forward swap, ovvero lo strike price della swapotion. Il dato di input m indica l'intensità (ossia il numero di scambi finanziari previsti all'anno) relativa all'IRS stesso. Con riferimento a quest'ultimo dato, in particolare, per le swapotion US, ovvero statunitensi, si deve utilizzare come dato di input m = 2 (il dato in questo caso indica una frequenza di scambi finanziari semestrale nell'arco di un anno) mentre per le swapotion europee, di tipo europeo, si deve utilizzare come dato di input m = 1 (il dato in questo caso indica una frequenza di scambi finanziari annuale nell'arco di un anno); Il tasso forward swap con scadenza n, valutato all'istante t, data un'intensità finanziaria pari a m (indicante il numero di scambi nell'arco di un anno, la frequenza degli scambi finanziari nell'arco di un anno), dato il tasso cedolare di riferimento Sk, ed utilizzando come modello di riferimento sui tassi di interesse il processo v, è determinabile attraverso la seguente: Sk mn BOND (t , t i / m) BOND(t , t n) 1 [2.8] m i 1 Interval Functions Le Interval Functions sono funzioni che prendono come argomento un'espressione e poi eseguono un calcolo, iterando l'espressione stessa entro il ciclo di iterazione definito dall'utente e quindi entro l'intervallo di riferimento definito in input. Tutte queste funzioni ricevono quindi in input un'espressione expr, un intervallo di riferimento, – definito attraverso un valore di partenza (start) e un valore di terminazione (end) – nel quale l'espressione viene valutata, ed un parametro (opzionale) di incremento (increment) il quale definisce il successivo incremento in ciascuna iterazione, in ciascuna valutazione. Utilizzando delle notazioni generali è possibile definire le Interval Functions nel modo seguente: Interval_Functions (start; end; {expr}; [increment]) Notiamo che l'espressione expr è scritta entro delle parentesi graffe mentre il valore del parametro increment, che è un parametro di tipo opzionale, viene scritto entro delle parentesi quadre. Le Interval Functions sono molto simili alle Vector Functions, che abbiamo già visto e trattato in uno dei precedenti paragrafi, con la differenza che nel caso delle Vector Functions la funzione di valutazione è limitata soltanto ad una serie (discreta) di specifici valori definiti da un vettore (che negli esempi riportati avevamo denominato sempre vec). Utilizzando le Interval Functions, invece, possiamo impostare, attraverso la definizione del parametro increment, uno spazio di incremento piuttosto fine in modo tale da rendere la valutazione assai simile ad una effettuata su uno spazio di valori di tipo continuo, anziché di tipo discreto. Qualora omettessimo la specificazione relativa al parametro increment, la funzione di step di riferimento diventa lo step della simulazione Monte Carlo, definibile selezionando il percorso: Settings → Numerical Settings → # of discrete time steps. Le operazioni vengono iterate lungo tutto lo spazio di incremento compreso fra i valori definiti per start e per end. Entro il range del contesto delle funzioni definite, vi sono poi alcuni internal symbol che possono essere utilizzati: – xs: indica il valore impostato per il parametro start (ovvero il valore di partenza); 38 CAPITOLO 2 – IL LINGUAGGIO ALGEBRICO DI FAIRMAT – xe: indica il valore impostato per il parametro end (ovvero il valore di terminazione); – xa: indica il valore della variabile indipendente al momento dell'iterazione corrente, attuale; il simbolo a sta, infatti, per “actual” (attuale, corrente per l'appunto); – xb: indica il valore della variabile indipendente alla precedente iterazione (ovvero all'iterazione corrente meno il valore imputato per il parametro increment) richiamata nell'iterazione corrente, attuale; il simbolo b sta, infatti, per “before” (prima); Fra le Interval Functions attualmente disponibili in Fairmat si annoverano le seguenti: • • • • • • • IMax (start; end; {expr}; [increment]): restituisce il valore massimo dell'espressione expr valutata nell'intervallo di valori compresi fra start e end campionato con un numero di step (di passi di iterazione) pari a (end – start)/increment; IMin (start; end; {expr}; [increment]): restituisce il valore minimo dell'espressione expr valutata nell'intervallo di valori compresi fra start e end campionato con un numero di step (di passi di iterazione) pari a (end – start)/increment; ICount (start; end; {expr}; [increment]): restituisce il numero di volte per le quali il valore dell'espressione expr, valutata nell'intervallo di valori compresi fra start e end campionato con un numero di step (di passi di iterazione) pari a (end – start)/increment, è positivo; IProd (start; end; {expr}; [increment]): restituisce il prodotto dei valori dell'espressione expr valutata nell'intervallo di valori compresi fra start e end campionato con un numero di step (di passi di iterazione) pari a (end – start)/increment; ISum (start; end; {expr}; [increment]): restituisce la somma dei valori dell'espressione expr valutata nell'intervallo di valori compresi fra start e end campionato con un numero di step (di passi di iterazione) pari a (end – start)/increment; IMean (start; end; {expr}; [increment]): restituisce la media aritmetica semplice (ovvero con tutti i pesi pari a 1/N, quindi equiparati, tutti identici) dei valori dell'espressione expr valutata nell'intervallo di valori compresi fra start e end campionato con un numero di step (di passi di iterazione) pari a (end – start)/increment; ICondMean (start; end; {conditionexpr}; {expr}; [increment]): come la funzione precedente (IMean) restituisce la media aritmetica dei valori dell'espressione expr, valutata nell'intervallo di valori compresi fra start e end campionato con un numero di step (di passi di iterazione) pari a (end – start)/increment. Diversamente però dalla funzione IMean, precedentemente illustrata, ICondMean calcola la media (aritmetica semplice) dei valori dell'espressione expr solo in quei passi temporali nei quali la veridicità della condizione sia verificato (ovvero solo per quei valori dell'intervallo [start; end] campionato con un numero di passi di iterazione pari a (end – start)/increment), per i quali il valore dell'espressione expr, per esempio, è maggiore di zero. In altre parole, ICondMean calcola la media aritmetica solo di quei valori dell'espressione expr che verificano una determinata condizione, quale può essere, ad esempio, la condizione per cui expr > 0; Come abbiamo già accennato in più occasioni, il parametro increment identifica lo spazio di incremento. Se l'intervallo [start; end] è uguale a 1 (per cui il valore del parametro si riferisce ad un periodo di tempo di un anno) e se dobbiamo effettuare un campionamento giornaliero dell'intervallo temporale (daily) allora dovremo impostare il parametro increment uguale a 1/365 = 0,002739726, ovvero sia una frequenza di iterazione pari a 365. Increment è un parametro opzionale il cui valore di default è pari a dt, ovvero l'orizzonte temporale di simulazione di riferimento meno la Simulation Start Date diviso per il valore corrispondente al 39 CAPITOLO 2 – IL LINGUAGGIO ALGEBRICO DI FAIRMAT parametro # of discrete time steps (ovvero, diviso per il numero di passi temporali di tipo discreto). • Integral (start; end; {expr}): calcola l'integrale dell'espressione expr valutata nell'intervallo di valori compresi fra start e end. Più nel dettaglio, l'integrale viene calcolato numericamente, eseguito da un punto di vista numerico, con la regola del trapezoide; Alcuni esempi ci aiuteranno a comprendere al meglio il funzionamento e l'utilizzo delle Interval Functions appena illustrate. Primo esempio Calcolo della media di una funzione entro un range, un intervallo, prestabilito e con un numero prestabilito di incrementi. Ipotizziamo di voler calcolare la media di una funzione (come può essere ad esempio y = exp(x)) entro un range, un intervallo, prestabilito (ad esempio [1; 3]) e con un numero prestabilito di incrementi (ad esempio 4). Per tale scopo si può utilizzare la funzione IMean (start; end; {expr}; [increment]) = 0,5 (ciò in quanto sono richiesti 4 incrementi entro l'intervallo di riferimento [1; 3], per cui increment assumerà un valore pari a (end – start)/# of increment = (3 – 1)/4 = 0,5. Di conseguenza IMean (1; 3; {expr = exp(xa)}; 0,5) restituirà un valore pari a 9,37 ed equivarrà a scrivere la seguente espressione: [exp(1) + exp(1 + (1*0,5)) + exp(1 + (2*0,5)) + exp(1 + (3*0,5)) + exp(1+(4*0,5)) = (2,71828 + 4,48169 + 7,38906 + 12,18249 + 20,08554)/5 = 46,857/5 = 9,37. Secondo esempio Massimo incremento in un dato intervallo. Su una data realizzazione, la seguente formula restituisce il massimo incremento dei rialzi delle attività sottostanti al modello V1 osservati fra il periodo 4 e il periodo 6. IMax (4; 6; {V1[xa]/V1[xb]}) Selection Functions Le Selection Functions sono un tipo di funzioni molto più articolate di quelle che abbiamo visto finora in quanto si tratta di un tipo di funzioni che lavorano sia con gli asset set (o insiemi di attività) che con i vettori, attraverso delle espressioni di selezione. Fra le Selection Functions disponibili in Fairmat possiamo annoverare le seguenti: • ASSel (asset_set; vec; sel_expr; val_expr; mode): lavora su un asset set definito dal parametro asset_set e, per ogni data contenuta nel vettore vec, viene valutata, per ciascun elemento appartenente all'asset_set, l'espressione di selezione sel_expr; Dall'asset set di riferimento vengono rimossi i valori della funzione corrispondenti al massimo e al minimo per cui alla data corrente (attuale), l'espressione di selezione sel_expr verrà valutata sul restante asset set. In particolare, se il valore impostato per il parametro mode è pari a 1 allora, ad ogni iterazione, verrà rimosso l'elemento dell'asset set che massimizza il valore dell'espressione di selezione sel_expr (ovvero il suo valore massimo); diversamente se il valore impostato per il parametro mode è pari a 0 allora, ad ogni iterazione, verrà rimosso l'elemento dell'asset set che minimizza il valore dell'espressione di selezione sel_expr (ovvero il suo valore minimo). Infine, se l'asset set comprende K elementi, per le selezioni verranno considerati solo i primi K – 1 40 CAPITOLO 2 – IL LINGUAGGIO ALGEBRICO DI FAIRMAT elementi del Vector Date. • ASSelAvg (asset_set; vec; sel_expr; mode): lavora su un asset set definito dal parametro asset_set e, per ogni data contenuta nel vettore vec, viene valutata, per ciascun elemento appartenente all'asset_set, l'espressione di selezione sel_expr; Dall'asset set di riferimento vengono rimossi i valori della funzione corrispondenti al massimo e al minimo per cui la funzione restituirà la media (aritmetica semplice) dell'espressione di selezione sel_expr valutata sui rimanenti elementi dell'asset set di riferimento. In particolare, se il valore impostato per il parametro mode è pari a 1 allora, ad ogni iterazione, verrà rimosso l'elemento dell'asset set che massimizza il valore dell'espressione di selezione sel_expr (ovvero il suo valore massimo); diversamente se il valore impostato per il parametro mode è pari a 0 allora, ad ogni iterazione, verrà rimosso l'elemento dell'asset set che minimizza il valore dell'espressione di selezione sel_expr (ovvero il suo valore minimo). Se l'asset set comprende K elementi, per le selezioni verranno considerati solo i primi K elementi del Vector Date, per cui il vettore stesso dovrà contenere almeno K date. Standard Functions Le funzioni standard di tipo analitico e gli operatori di espressioni disponibili in Fairmat sono riassunti nella tabella 2.2 in parte sottoriportata e in parte riportata alla pagina successiva: (Tabella 2.2 – Elenco Standard Functions) Simbolo ( ) % ^ * / MOD + > < == >= Alias Nessuno Nessuno Nessuno Nessuno Nessuno Nessuno Nessuno Nessuno Nessuno Nessuno Nessuno Nessuno Descrizione Priorità all'interno di un'espressione Percentuale Elevazione a potenza Moltiplicazione Divisione Funzione modulo (resto della divisione intera) Addizione Sottrazione Maggiore di Minore di Uguaglianza Maggiore-uguale di 41 Esempio 5*(1+1) = 10 35% = 0.35 4^5 = 1024 3*6 = 18 9/2 = 4.5 Mod(7; 4) = 3 1+1 = 2 9-5 = 4 9>5 = 1 (VERO) 7<4 = 0 (FALSO) 5==4 = 0 (FALSO) 3>=3 = 1 (VERO) CAPITOLO 2 – IL LINGUAGGIO ALGEBRICO DI FAIRMAT (Tabella 2.2 – Elenco Standard Functions) Simbolo <= <> NOT AND OR IIF/SIIF MIN MAX SIN Alias Nessuno Nessuno Nessuno & || Nessuno Nessuno Nessuno Nessuno COS Nessuno TAN Nessuno ASIN ACOS ATAN Nessuno Nessuno Nessuno SEC Nessuno CSC Nessuno COT Nessuno SINH COSH TANH ABS EXP LOG LOG2 Nessuno Nessuno Nessuno Nessuno Nessuno LN Nessuno Descrizione Esempio 13<=9 = 0 (FALSO) Minore-uguale di Disuguaglianza 23<>20 = 1 (VERO) NOT(15) = -16 Negazione Operatore bitwise E (Prodotto Logico) 6 AND 5 = 4 Operatore bitwise O (Somma Logica) 13 OR 6 = 15 IIF(2<4; 4; 5) Se, costrutto di selezione Valore Minimo MIN(10; 3; 27; 13) = 3 Valore Massimo MAX(1; 9) = 9 Funzione Seno dell'argomento, espresso in radianti SIN(pi) = 0 Funzione Coseno dell'argomento, espresso in COS(pi) = -1 radianti Funzione Tangente dell'argomento, espresso in TAN(pi) = 0 radianti Funzione inversa della funzione Seno (SIN) ASIN(1) = 1,570 ACOS(-1) = 3,1416 Funzione inversa della funzione Coseno (COS) Funzione inversa della funzione Tangente (TAN) ATAN(0) = 0 Funzione Secante dell'argomento, espresso in SEC(0) = 1 radianti Funzione Cosecante dell'argomento, espresso in CSC(1) = 1,18 radianti Funzione Cotangente dell'argomento, espresso in COT(1) = 0,642 radianti Funzione Seno Iperbolico SINH(3) = 10,01 Funzione Coseno Iperbolico COSH(2) = 3,76 Funzione Tangente Iperbolica TANH(1) = 0,76 Funzione Valore Assoluto ABS(-8) = 8 EXP(3) = 20,08 e elevato a potenza Funzione Logaritmo Naturale LOG(16) = 2,77 Funzione Logaritmo in base 2 LOG2(8) = 3 La funzione SIGN (Segno) può restituire o il valore -1, o il valore 0 o il valore 1. Il valore restituito dall'operatore T2I è espresso in unità di frazioni d'anno. Gli operatori relazionali (quali >, <, <=, >=, = =, < >) possono restituire come risultato solo due valori: o 1 o 0 (ossia, rispettivamente, o TRUE – Vero – o FALSE – Falso). 42 CAPITOLO 2 – IL LINGUAGGIO ALGEBRICO DI FAIRMAT La funzione IIF e la funzione SIIF La funzione IIF è una funzione definita come segue: IIF (condition; true_expression; false_expression). In particolare, se la condizione (condition) è vera allora viene restituito il valore della true_expression; altrimenti viene restituito il valore della false_expression. La funzione IIF ha due differenti versioni; in altre parole può essere scritta in due modi diversi: • IIF (condition; expression1; expression2) oppure • IIF (condition; {expression1}; {expression2}); La principale differenza fra questi due differenti versioni consiste nel fatto che nella prima versione expression1 e expression2 vengono valutate prima della chiamata di funzione, mentre nella seconda versione, in base al valore della condition, viene valutata o solo la expression1 o solo la expression2. Quest'ultima versione risulta essere molto utile quando una delle espressioni (expression1 o expression2) contrasta con la condition. In questo caso solo una delle due espressioni indicate verrà valutata una volta verificata la condition. La funzione SIIF (ovvero una funzione sequenza di IIF) è definita, invece, come segue: SIIF (condition#1; true_expression1; condition#2; true_expression2; false_expression). Other Functions All'interno della macrocategoria delle Other Functions possiamo distinguere due sottocategorie di funzioni: 1) le Derivatives e 2) le Option Map Block Related Functions. Derivatives Fairmat permette di calcolare le derivate arrivando fino alla derivata seconda, sia di funzioni predefinite nel programma sia di funzioni definite dall'utente. Fra le Derivatives disponibili in Fairmat si possono, in particolare, annoverare le seguenti: • Partial (@f; x1): calcola la derivata prima parziale, rispetto a x1, della funzione monodimensionale f; • Partial (@f; x1; x2; component): calcola la derivata prima parziale (sul componente component = comp), rispetto sia a x1 che a x2, della funzione bidimensionale f; • Partial (@f; x1 ; x2; x3; component): calcola la derivata prima parziale (sul componente component = comp), rispetto a x1 , x2, e x3, della funzione tridimensionale f; • Partial2 (@f; x1): calcola la derivata seconda parziale, rispetto a x1, della funzione monodimensionale f; • Partial2 (@f; x1; x2; component): calcola la derivata seconda parziale (sul componente component = comp), rispetto sia a x1 che a x2, della funzione bidimensionale f; • Partial2 (@f; x1 ; x2; x3; component): calcola la derivata seconda parziale (sul componente component = comp), rispetto a x1 , x2, e x3, della funzione tridimensionale f; Option Map Block Related Functions 43 CAPITOLO 2 – IL LINGUAGGIO ALGEBRICO DI FAIRMAT Le Option Map Block Related Functions sono le funzioni relative al blocco, o ai blocchi, dell'ambiente Option Map. In alcune situazioni l'utilizzo dei blocchi composti non è sufficiente a descrivere alcune relazioni che occorrono fra le differenti parti contrattuali (i cosiddetti Legs dell'ambiente Option Map). Una simile situazione può, infatti, accadere quando da una data struttura decisionale (o da un dato albero decisionale) vogliamo utilizzare, sfruttare, solo il valore di un'altra differente sottostruttura, oppure quando il valore di un dato blocco deve essere scomposto in sottoblocchi, come avviene nel caso della modellazione del rischio di controparte. Fra le Option Map Block Related Functions disponibili in Fairmat si possono, in particolare, annoverare le seguenti: • Value (@option; date): calcola il valore d una data opzione (option) ad una determinata data (date); • Value (@option; infoDate payoffDate): calcola il valore atteso condizionale (con riferimento alle informazioni disponibili in infoDate) dei flussi di cassa attualizzati (scontati) del blocco denominato @option; Il valore del node viene calcolato come un'aspettativa condizionale qualora la data indicata (date) sia successiva alla data corrente del node medesimo; altrimenti, qualora la data sia antecedente alla data corrente del node medesimo, esso viene calcolato come un valore di realizzo. La funzione Value (@option; infoDate; payoffDate) può essere utilizzata nei seguenti casi: – quando, in un dato node della Option Map, è necessario conoscere il valore condizionale di nodes appartenenti a differenti sottostrutture; – quando è necessario conoscere il valore condizionale (o il valore storico) dei nodes con riferimento a date diverse rispetto a quella attuale; • Valuewd (@option; infoDate; defDate; recovery; versus): calcola il il valore dei futuri pagamenti modellati nel blocco @option, i quali sono condizionati da un (probabile) default che si verificherà (presumibilmente) alla data defDate e scontati in base alle informazioni disponibili in infoDate – Valuewd è l'abbreviativo di Value With Default; Il valore del node viene calcolato come un'aspettativa condizionale qualora la defDate (data presumibile del probabile default) sia successiva alla data corrente del node medesimo; altrimenti, qualora la data sia antecedente alla data corrente del node medesimo, esso viene calcolato come un valore di realizzo. Solitamente definita la defDate, qualora il valore attualizzato (scontato) dei futuri pagamenti provenienti da un'entità dichiarata in stato di default sia positivo, la controparte non in default riceverà solo il 40% del valore futuro dei pagamenti (in altri termini si applica alla somma dei futuri pagamenti un recovery rate, un tasso di recupero in caso di dichiarazione di default del 40%). Nel caso contrario, si dovrà considerare l'intero valore, dato dai futuri flussi di cassa attesi. Espliciteremo ora alcuni dettagli sugli argomenti della funzione Valuewd: 1) @option: indica la sottostruttura oggetto del valore da calcolare; 2) infoDate: indica la data di valutazione; 3) defDate: indica la data nella quale, si presume, occorra il default e a partire dalla quale dovrà essere presa in considerazione solo una parte dei flussi di cassa attesi; 4) recovery: indica il tasso di recupero o recovery rate; generalmente esso è pari al 40%; 5) versus; parametro che si deve impostare o pari a +1 o pari a -1; 44 CAPITOLO 2 – IL LINGUAGGIO ALGEBRICO DI FAIRMAT Attraverso la funzione Valuewd possiamo scrivere in modo composto la seguente espressione (del tutto equivalente): iif(versus*value (@option; id; defDate) > 0); {x1 – (1 – RecoveryRate)*value (@option; id; defDate)}; {value (@option; id; defDate)}). Reserved Symbols Fairmat definisce una serie di simboli i quali sono specifici alla modellazione del progetto e hanno un comportamento specifico. Per cui non possiamo creare simboli di uso comune (i cosiddetti custom symbols) con un nome speciale in quanto essi sono già definiti nel programma. Di seguito proponiamo una lista di tutti i Reserved Symbols (detti anche Private Symbols in quanto, appunto, riservati) utilizzati in Fairmat con l'illustrazione delle caratteristiche di ciascuno di essi: • Effective Date (Data inizio contratto): rappresenta la data nella quale il contratto ha inizio, ha effetto (e che può essere differente dalla data di valutazione, o Valuation Date). Il valore della variabile può essere impostato nelle Project Preferences. Tale variabile può essere utilizzata in qualsiasi espressione; • X: indica il valore della specifica attività sottostante in ciascun stato. Tale variabile può essere utilizzata nella finestra di dialogo di specificazione dell'attività sottostante qualora si voglia, ad esempio, definire un'attività che ha una certa correlazione con lo stato di un'altra attività; • t: indica la data attuale, il tempo relativo all'istante di partenza del progetto. Tale variabile viene espressa in unità di tempo e può essere usata in ogni espressione dei payoff, in ogni specificazione dell'attività e in ogni funzione analitica; • i: rappresenta l'indice riferito alla data attuale, il tempo relativo all'istante di partenza del progetto. Tale variabile viene utilizzata nella definizione delle funzioni ricorrenti; • xa: si tratta di una variabile utilizzabile sia nelle Interval Functions che nelle Vector Functions. In particolare nelle Interval Functions tale variabile indica il valore dell'attuale ciclo di iterazione (“a”, sta, infatti per “actual”, ovvero corrente, attuale); nelle Vector Functions tale variabile indica il valore dell'elemento corrente, attuale, del vettore; • xb: anche in questo caso, si tratta di una variabile utilizzabile sia nelle Interval Functions che nelle Vector Functions. In particolare nelle Interval Functions tale variabile indica il valore del tempo che era stato il tempo corrente nel passaggio precedente, nel ciclo di iterazione precedente (“b” sta, infatti, per “before”); nelle Vector Functions tale variabile indica il valore dell'elemento che era stato l'elemento corrente, attuale, nella precedente iterazione della funzione; • xs: anche tale variabile è una variabile utilizzabile sia nelle Interval Functions che nelle Vector Functions. In particolare, tale variabile indica il valore di partenza t0; • Scenario: tale variabile rappresenta l'indice dello scenario attuale, corrente. Essa può essere modificata manualmente dall'utente oppure automaticamente nella Scenario Analysis, che vedremo poi più in dettaglio nel corso del Capitolo 4. Tale variabile può essere utilizzata in qualunque espressione; • Horizon (orizzonte): tale variabile rappresenta la distanza temporale (espressa in frazioni d'anno) coperta dall'opzione con scadenza a più lungo termine; in altre parole, essa rappresenta l'orizzonte temporale della simulazione. Tale variabile può essere utilizzata in qualunque espressione; 45 CAPITOLO 2 – IL LINGUAGGIO ALGEBRICO DI FAIRMAT • • Global Calendar: tale variabile rappresenta il calendario di mercato sul quale si basano tutti i vettori e tutte le funzionalità di trasformazione delle date Date Vector Adjustment and Differences Calculator. Tale variabile si imposta selezionando il seguente percorso: Settings → Project Preferences e può essere utilizzata nelle project dates metrics e nelle funzionalità di trasformazione delle date Date Vector Transformation – ovvero nelle funzionalità Date Vector Adjustment and Differences Calculator; Random Variables Generator Fairmat può generare campionamenti casuali da variabili casuali indipendenti. Il campionamento casuale può essere utilizzato nei payoff, nella definizione di funzioni analitiche e nella definizione di processi stocastici. Le Random Variables Generator disponibili in Fairmat sono le seguenti: • Uniform (a; b): la quale restituisce un numero reale pseudo-casuale preso da una distribuzione uniforme definita nell'intervallo di valori [a; b]; • Negative Exponential (a): la quale permette di rappresentare la distribuzione esponenziale negativa con media, valore atteso, pari ad a; • Logistic (a; b): la quale restituisce un numero reale pseudo-casuale preso da una distribuzione logistica con media, valore atteso, pari ad a e spread pari a b; • Normal (a; b): la quale restituisce un numero reale pseudo-casuale preso da una distribuzione gaussiana (o normale) con media, valore atteso, pari ad a e deviazione standard pari a b; • Cauchy (a; b): la quale restituisce un numero reale pseudo-casuale preso da una distribuzione con mediana pari ad a ed un semi-intervallo interquartile pari a b; • Student (n): la quale restituisce un numero reale pseudo-casuale preso da una distribuzione t di Student con n gradi di libertà (n deve essere, in particolare, un numero intero); • Fisher (m; n): la quale restituisce un numero reale pseudo-casuale preso dalla distribuzione di Fisher – Snedecor con m e n gradi di libertà (m e n devono essere, in particolare, numeri interi); • Weibull (a; b): la quale restituisce un numero reale pseudo-casuale preso dalla distribuzione di Weibull a due parametri e, più precisamente con un parametro forma pari ad a ed un parametro scalare pari a b; • Poisson (I): la quale restituisce una variabile intera pseudo-casuale presa da una distribuzione di Poisson con media, valore atteso, pari a I; • Logicall (p): la quale restituisce un valore logico pseudo-casuale TRUE (ossia “Vero”, o 1) con probabilità pari a (p) e FALSE (ossia “Falso”, o 0) con probabilità pari a (1 – p); 46 CAPITOLO 3 IL WORK SPACE DI FAIRMAT CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Nel Capitolo 1 abbiamo visto che la pagina iniziale dell'applicativo Fairmat si presenta così (figura 3.1): (Figura 3.1: Schermata inziale – 2) Cercheremo ora di focalizzare l'attenzione sui due tab principali che si trovano alla sinistra della schermata iniziale di Fairmat ovvero i tab Structure e Info. Il tab Structure comprende, a sua volta, una serie di ambienti (figura 3.2), che vedremo dettagliatamente uno per uno nel corso di questo capitolo e che sono i seguenti: 1) L'ambiente Parameters & Functions nel quale possiamo inserire input generali (quali, ad esempio, le costanti, i vettori e le matrici), aggiungere funzioni analitiche o funzioni ricorrenti o aggiungere una funzione di trasformazione di un determinato dato di input (quale, ad esempio, una data di pagamento); 2) L'ambiente Stochastic Processes nel quale possiamo inserire un processo stocastico di base oppure un processo stocastico disponibile dopo aver effettuato un plug-in; 3) L'ambiente Discounting nel quale possiamo impostare i parametri base per l'attualizzazione (o discounting, appunto) globale del progetto che si sta analizzando ed esaminando; 4) L'ambiente Option Map nel quale possiamo modellare, da un punto di vista grafico, attraverso un apposito costruttore grafico posto su di una tavolozza, su di un pannello, il contratto derivato oggetto di analisi, creando una sorta di asse dei tempi delle varie scadenze da esso previste e al tempo stesso una sorta di struttura logica e decisionale il cui percorso varia in base al susseguirsi delle varie scadenze contrattuali e al manifestarsi dei vari pagamenti previsti fra le parti contrattuali coinvolte; 5) L'ambiente Manage Scenarios nel quale possiamo creare diversi scenari (o configurazioni) per il progetto che si sta analizzando ed esaminando; 47 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Figura 3.2: Tab Structure e relativi ambienti) L'ambiente Parameters & Functions Il tab Parameters & Functions (figura 3.3) ci porta ad un ambiente che ci consentire di creare e/o modificare oggetti come ad esempio le costanti, i vettori, le matrici e via discorrendo. Nel dettaglio Fairmat, attraverso l'ambiente Parameters & Functions, possiamo inserire: 1) Parameters (ossia Parametri) quali: - Scalar (scalari o, più semplicemente, costanti); - Vector (vettori); - Matrix (matrici); - Endogenous Variable (variabili endogene); - Vector of Ticker (vettori di ticker); - Vector and Matrices Aggregator (vettori e matrici aggregatori); - Vector of weights (vettore dei pesi); - Date Sequences (sequenze di date); 2) Functions (ossia Funzioni) quali: - Analytic Function (funzioni analitiche); - Interpolated Function (funzioni interpolanti); - Recurrence Function – time steps (funzioni ricorrenti – fasi temporali); - Recurrence Function – array (vettori di funzioni ricorrenti); - 2D Interpolated Function (funzioni interpolanti bidimensionali); 3) Transformations (ossia Trasformazioni) quali: - Date Vector Adjustment; - Date Vector Differences Calculator; - Zero Rate Curve Calculator; 48 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Figura 3.3: Ambiente Parameters & Functions) Parameters: Scalar Uno Scalar (o scalare o, più semplicemente, costante) – figura 3.4 – è un elemento che può essere passato come argomento di una funzione o essere utilizzato nelle espressioni Fairmat per definire i payoff del contratto derivato oggetto di analisi e ogni qual volta sia necessario specificare un valore costante (come ad esempio il valore nozionale di un contratto). Uno Scalar può essere un numero così come un'espressione algebrica oppure ancora una data. Come altri oggetti creati su Fairmat, le costanti possono essere taggate per essere incluse in una Sensitivity Analysis oppure in una Impact Analysis, oppure, semplicemente, possono essere rese pubbliche. Un suggerimento: se con il cursore del mouse passiamo sopra l'espressione appena creata per lo Scalar, Fairmat mostrerà il significato numerico dell'espressione stessa (ad esempio uno Scalar definito come una data e corrispondente, per ipotesi, alla data del 30/06/2004, in relazione ad una Valuation Date fissata, per ipotesi, in corrispondenza della data del 30/12/2003, corrisponde, in termini numerici, alla cifra 0,500014971180478 qualora siano state impostate le impostazioni di default Actual/Actual per il campo “Counter” e Unadjusted per il campo “Convention”). Vediamo come inserire uno Scalar nell'ambiente Parameters & Functions di Fairmat (figura 3.5) e come editarlo. Nel tab Definition dovremo compilare i campi “Name”, inserendovi il nome che vogliamo attribuire allo scalar che stiamo andando a creare, e “Expression”, nel quale inseriremo il suo valore (se stiamo inserendo una costante) oppure l'espressione ad esso relativa (se stiamo inserendo una data o, appunto, un'espressione). 49 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Figura 3.4: Ambiente Parameters & Functions – Scalar) (Figura 3.5: Finestra di editing di uno Scalar) Parameters: Vectors and Matrices Fra gli oggetti disponibili in Fairmat possiamo anche inserire vettori e matrici selezionando, nell'ambiente Parameters & Functions, il tab Parameters e poi l'oggetto Vector (o Matrix, a seconda che dobbiamo costruire o un vettore oppure una matrice). Gli editor degli oggetti Vector e Matrix (tab Data) ci permettono di inserire i dati: – o direttamente dalla tastiera; – o copiando una selezione di dati da un foglio di calcolo elettronico (come ad esempio un foglio di Excel), premendo il tasto “Import” e dopo aver dato comando “Import” (figure 3.6 e 3.7); – o copiando una selezione di dati da un foglio di calcolo elettronico (come ad esempio un foglio di Excel) ed incollando direttamente la selezione stessa nel campo “Expression”; 50 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Figura 3.6: Vectors and Matrices, finestra di editing 1) La dimensione del vettore creato (o della matrice creata) è indicata in basso a sinistra nella finestra di editing dell'oggetto (figura 3.8). Nel caso di fonti di dati separate attraverso il tabulatore, l'utente deve, prima ancora di inserire tali dati in una matrice, flaggare il check-box “Use also space as column separator”. Una volta che il vettore è stato creato (o che la matrice è stata creata) possiamo aggiungere un singolo elemento (una linea nel caso in cui si tratti di una matrice), prima o dopo un elemento di riferimento, semplicemente puntando con il mouse la testata della griglia di visualizzazione e cliccando il tasto destro (figura 3.9). (Figura 3.7: Vectors and Matrices, finestra di editing 2) 51 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Figura 3.8: Vectors and Matrices, dimensione) (Figura 3.9: Vectors and Matrices, aggiunta/rimozione elementi) 52 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Parameters: Date Sequences Attraverso l'oggetto Date Sequences (figura 3.10) abbiamo la possibilità di generare in automatico una sequenza di “payment dates” (ovvero di date di pagamento) mediante la specifica della data di inizio periodo, la data di fine periodo e la frequenza dei pagamenti. Le date così generate in automatico potranno poi essere modificate manualmente e trasformate con degli aggiustamenti. Lo scopo di questo oggetto è quello di semplificare la creazione di un Vector Dates evitando la necessità di compiere il passaggio di importarle da un software esterno o da un foglio di calcolo elettronico. Per attivare il generatore automatico di date dobbiamo entrare nell'ambiente Parameters & Functions, cliccare sul comando “Add”, selezionare l'oggetto Date Sequences e cliccare poi su “OK”. A questo punto possiamo impostare una data di partenza ed una data di fine periodo specificando anche l'intervallo temporale che deve intercorrere tra una data di scadenza e l'altra. Le scelte possibili in tal senso sono, in particolare: “Daily” (ovvero giornalmente, ogni giorno); “Weekly” (ovvero settimanalmente, ogni settimana); “Bi-Weekly” (ovvero bisettimanalmente, ogni due settimane); “Monthly” (ovvero mensilmente, ogni mese); “Theree Months” (ovvero trimestralmente, ogni tre mesi); “Six Months” (ovvero semestralmente, ogni sei mesi); “Year” (ovvero annualmente, ogni anno); Con le date specificate e con la frequenza temporale così impostata, Fairmat in automatico genererà un Vector Dates contenente una serie di date sulla base di quanto da noi impostato e richiesto. (Figura 3.10: Date Sequences, tab Definition) 53 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Functions: Analytic Functions L'oggetto Analytic Functions, presente all'interno dell'ambiente Parameters & Functions, ci permette di definire delle funzioni per un loro successivo utilizzo in Fairmat. L'obiettivo è di semplificare la scrittura di espressioni algebriche inserendo nelle funzioni espressioni che siamo soliti utilizzare varie volte. L'oggetto Analytic Functions (figure 3.11 e 3.12) viene definito in base a come compiliamo i campi del tab Expression durante la fase di Editing e quindi in base a come compiliamo i seguenti campi: – “Function Name” (nome della funzione): nel quale, appunto attribuiamo alla funzione che si sta creando un nome; nello specifico, il nome deve essere univoco e non può contenere spazi; – “# of Independent Variables” (numero di variabili indipendenti): con il quale si imposta il numero di variabili che verranno considerate dalla funzione analitica. E' possibile inserire fino ad un massimo di 16 variabili indipendenti; – “Expression f(x1, …, xN)” (ovvero l'espressione analitica della formula): l'espressione può riferirsi, in particolare, sia alle variabili indipendenti (x1, …, xN) che ad un qualunque altro simbolo definito in Fairmat, come ad esempio una costante (sia essa definita dall'utente che predefinita dal sistema); (Figura 3.11: Analytic Function, Tab Expression) 54 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Figura 3.12: Analytic Function, un esempio) Functions: Interpolated Functions Data una serie di coordinate (Xi, Yi), le quali sono costituite da coppie di numeri reali, attraverso l'oggetto Interpolated Functions possiamo procedere alla stima di un modello matematico, una funzione interpolante, in grado di descrivere i punti dati. Il valore della funzione interpolante è l'output del modello. In particolare, a tal fine in Fairmat possiamo utilizzare vari modelli per l'interpolazione fra i quali (figura 3.13): – Linear Interpolation (Interpolazione Lineare): dati due punti, il valore di Y corrispondente a X può essere trovato attraverso un'interpolazione di tipo lineare. Se i due punti noti sono dati dalle coordinate (X0, Y0) e (X1, Y1), l'interpolazione lineare individua la linea retta che passa tra questi punti. Per un valore di X nell'intervallo [X0, X1], il valore di Y lungo la linea retta sarà dato dalla seguente equazione: Y Y0 X X0 Y1 Y0 X 1 X 0 [3.1] risolvendo la [2.1] per Y, che è il valore dell'incognita, rispetto a X, si ottiene: Y Y0 ( X X 0 ) Y1 Y0 X1 X 0 [3.2] che è la formula per l'interpolazione lineare nell'intervallo (X0, X1); – Cubic Spline: l'interpolazione spline è una forma di interpolazione nella quale la funzione interpolante è un tipo speciale della funzione polinomiale a tratti chiamata appunto spline. Per una serie di dati {Xi} di N+1 punti, è possibile costruire una cubic spline con un polinomiale cubico a tratti fra i punti dati. Per una coppia di punti adiacenti viene calcolato un polinomio di 3° grado. Date due coppie di punti adiacenti, il polinomio viene calcolato in modo tale che si possa avere la stessa derivata in un punto comune (la funzione spline è, infatti, una funzione monotona); 55 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT – Polynomial Interpolation – Least Square (Interpolazione polinomiale – Minimi Quadrati): la “polynomial interpolation” è l'interpolazione di una data serie di polinomi. Più precisamente, dati alcuni punti, l'obiettivo è quello di individuare un polinomio che passi esattamente per i punti dati. Il modello stima un polinomio di uno specifico grado che minimizza l'errore fra il polinomio e la serie di dati; – Interpolation of a Zero (Steps Functions): dati due punt adiacenti con coordinate ad esempio (X0, Y0) e (X1, Y1), il valore della funzione nell'intervallo [X0, X1] è Y0. Per X ≥ X1 è Y1; (Figura 3.13: Interpolated Function, metodi di interpolazione e di estrapolazione) Nella finestra di editing di una Interpolated Function è anche possibile selezionare il metodo di estrapolazione dei dati (figura 3.13). In tal senso le scelte possibili sono le seguenti: – Extrapolated using the selected interpolation model (estrapolare utilizzando il modello di interpolazione selezionato) per cui l'estrapolazione sarà coerente con il modello di interpolazione scelto; – Extrapolated using a costant model (estrapolare utilizzando un modello costante) per cui l'estrapolazione sarà costante e verrà calcolata utilizzando l'algoritmo immediatamente più vicino, più simile; 56 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Functions: Recurrence Functions In molte situazioni, specialmente per descrivere eventi che si ripetono ad intervalli di tempo discreti e la cui evoluzione dipende dai dati previsionali, è naturale considerare le sequenze definite come ricorsive. Generalmente viene assegnato un dato iniziale, dopo di ché si imposta la regola in base alla quale si determinerà ciascun nuovo dato, come ad esempio avviene nel caso di una funzione previsionale. Vediamo ora un breve esempio di funzione ricorrente, in modo da comprenderne appieno il concetto. Ipotizziamo il caso più semplice, ovvero quello di dipendenza dai soli dati previsionali, ovvero la seguente situazione: αt+1 = f(at) per t=1, 2, …, n-1 e a1=α dove f(...) indica la funzione che descrive come il nuovo passo debba essere calcolato a partire dall'elemento precedente; α indica, invece, il dato iniziale, di partenza. Le funzioni ricorrenti, presenti e disponibili in Fairmat, vengono prima inserite dall'utente nell'ambiente Parameters & Functions e poi vengono richiamate nell'ambiente Option Map come semplici vettori. Le funzioni ricorrenti possono essere un'espressione nella quale appaiono sia la stessa funzione ricorrente sia le sue variabili sottostanti, sia, infine, gli altri parametri. Una funzione ricorrente può anche essere, a sua volta, una funzione di altre funzioni ricorrenti. In quest'ultimo caso particolare, se la funzione ricorrente, di nome ad esempio B, dipende da un'altra funzione ricorrente, di nome ad esempio A, dovremo rispettare la definizione dell'ordine di priorità. Fairmat fornisce due tipi di funzioni ricorrenti, definite da un valore iniziale e da una regola di ricorrenza, la quale permette di definirne l'evoluzione temporale: – Function defined by a recurrence expression – time steps (funzione definita da un'espressione ricorrente – passi temporali) per cui ad ogni tempo t, la funzione dipende dal suo valore riferito ai periodi precedenti t – dt; – Function defined by a recurrence expression – array (funzione definita da un'espressione ricorrente – vettore) per cui la funzione ricorrente viene collegata ad un vettore di riferimento. Per ogni dato X, il valore della funzione in X dipende dal suo valore riferito al dato precedente X – 1 e il numero totale di dati è uguale alla lunghezza, ovvero alla dimensione, del vettore di riferimento; Un esempio sulle funzioni ricorrenti (1) Il Conto Deposito di Mercato Monetario è un'attività che vale 1 Euro al tempo 0 e consente di guadagnare, in qualsiasi periodo di tempo dato, l'istantaneo tasso di interesse privo di rischio. A partire da tale attività finanziaria possiamo definire una funzione denominata MMA (Money Market Account) i cui parametri sono il tasso di interesse privo di rischio e gli istanti temporali nei quali maturano gli interessi. La variabile r può essere stocastica. Se V1 è il processo stocastico che descrive l'evoluzione temporale del tasso privo di rischio, la funzione MMA può essere implementata utilizzando una Function defined by a recurrence expression – time steps (figure 3.14 e 3.15). 57 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Figura 3.14: Recurrence Function MMA, tab Edit ) (Figura 3.15: Recurrence Function MMA, tab Preview) Il dato iniziale del vettore MMA (ossia MMA[0]) è 1, mentre la funzione che descrive l'accumulo degli interessi nel corso del tempo segue questa regola di ricorrenza: MMA[t – dt]*exp(V1[t – dt]*dt) al tempo t. In altre parole, le unità di euro capitalizzano interessi al tasso definito dal processo stocastico V1, con frequenza uguale a dt (un intervallo di tempo molto piccolo, ma già discreto). Infine, la funzione che viene richiamata entro la modellazione del contratto oggetto di analisi (nell'ambiente Option Map) come un vettore MMA[t] (figura 3.16) è la funzione descritta in precedenza e valutata alla scadenza 1 del contratto medesimo. 58 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Figura 3.16: Recurrence Function MMA, tab Timing and Payoff) Un esempio di funzione ricorrente (2) L'oggetto Recurrence Function può essere utile per prezzare i contratti derivati non standardizzati. Ne è un esempio il contratto derivato Colar Reef Swap (letteralmente Swap Barriera Corallina – figura 3.17) i cui payoff richiamano la forma di un rachet cap. Un rachet cap implica una serie di regole per la determinazione del tasso cap per ciascun caplet. Generalmente esso è uguale al tasso LIBOR rilevato alla precedente data di reset con l'aggiunta di uno spread. Nel contratto derivato Colar Reef Swap la parte A paga il valore positivo del prodotto fra il tasso EURIBOR a 3 mesi (rilevato in corrispondenza di certe date di reset) ed una funzione chiamata Option (t). Quest'ultima, evidenziata nella figura con un bordo rosso, è una funzione ricorrente il cui valore al tempo t è definito come: Option (t) = Option (t -1) + R Dove R è così determinato: – se il tasso EURIBOR a 3 mesi è minore del 4,35%, allora sarà uguale a -0.20; – se il tasso EURIBOR a 3 mesi è maggiore-uguale del 4,35%, allora sarà uguale a 1,50; 59 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Figura 3.17: Colar Reef Swap - Determinazione del payoff) L'editor della funzione definita da un'espressione ricorrente (ossia da un vettore) ha un nuovo campo chiamato Array Reference, ossia il campo nel quale deve essere esplicitato il vettore dei dati ai quali la funzione si riferisce (figura 3.18). In questo secondo esempio che stiamo discutendo il vettore di riferimento è il vettore delle date di pagamento (ossia Pdu). Il dato iniziale (Op[1]) è pari a R0 più il risultato del seguente costrutto di selezione: iif(rate(Rd[1], maturity, @V1)<4,35%;-0.2;1.5) (Figura 3.18: Recurrence Function Opt, Tab Editing) R0 è una costante che esprime il valore della funzione Opt al tempo 0. L'altra parte dell'espressione è, invece, il codice Fairmat per esprimere la funzione R. Se il tasso variabile Rate(Rd[1];maturity;@V1) – il quale è una Interest Rate Function che esprime il tasso EURIBOR con scadenza 3 a mesi, osservato al tempo Rd[1] e la cui dinamica è descritta attraverso un processo stocastico V1 – è minore del 4,35% allora il payoff sarà uguale a -0.20, altrimenti sarà uguale a 1.50. 60 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Figura 3.19: Recurrence Function Opt, Tab Preview) La “Update Expression” è la stessa espressione Opt[X – 1] + iif(rate(Rd[X]; maturity; @V1)<4,35%; -0.2; 1.5) con la sola eccezione che l'indice del vettore delle date di reset, ossia il vettore Rd, è X, mentre l'indice della funzione Opt è X – 1. In altre parole, la “Update Expression” assumerà ricorsivamente i valori: Opt[1] + iif(rate(Rd[2]; maturity; @V1)<4,35%; -0.2; 1.5) all'istanza X = 2; Opt[1] + iif(rate(Rd[3]; maturity; @V1)<4,35%; -0.2; 1.5) all'istanza X = 3; e così via fino ad arrivare a: Opt[lenght(@Pdu) - 1] + iif(rate(Rd[lenght(@Pdu)]; maturity; @V1)<4,35%; -0.2; 1.5) all'istanza finale; Infine, come la funzione ricorrente on time steps vista con il primo esempio, anche la funzione ricorrente Opt vista con questo secondo esempio può essere utilizzata come un semplice vettore entro la modellazione del contratto oggetto di analisi. (Figura 3.20: Recurrence Function Opt, Tab Timing and Payoff) 61 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Transformations: un'introduzione Solitamente un Vector Date (ovvero un vettore di date) può avere diversi significati: a) Gli elementi del vettore sono le “payment dates” (date di pagamento): in questo caso, se una “payment day” cade in un giorno non lavorativo, occorrerà un date rolling, ossia – letteralmente – uno scorrimento di date, in base ad una data “business day convention” (convenzione del giorno lavorativo) relativa ad uno specifico calendario; b) Gli elementi del vettore sono le “payment dates” utilizzate per calcolare le date di reset: in questo caso è necessario definire la “fixing convention” (convenzione fissante) di riferimento – in particolare se il fixing si riferisce all'inizio del periodo, la convenzione sarà di tipo Advanced; se, invece, il fixing si riferisce alla fine del periodo, la convenzione sarà di tipo Arrears – e il numero di giorni lavorativi precedenti la data alla quale far riferire il reset (ad esempio l'espressione “Advanced 2 business days before” significa due giorni lavorativi precedenti l'inizio del periodo). Infine se la data di reset cade in un giorno non lavorativo, occorrerà un date rolling in base ad una data “business day convention” relativa ad uno specifico calendario; c) Gli elementi del vettore vengono utilizzati, al pari di elementi adiacenti, per quantificare un periodo di tempo durante il quale maturano gli interessi. Ciò determina il numero di giorni intercorrenti fra due “payment dates”, l'una immediatamente successiva all'altra, in basa ad una data “business day metric” (metrica dei giorni lavorativi). Infine, se la data utilizzata per calcolare la maturazione degli interessi cade in un giorno non lavorativo, occorrerà un date rolling in base ad una certa “business day convention” relativa ad uno specifico calendario; La “business day convention” impostata di default sulle “payment dates” è Unadjusted (ossia non aggiustata, non corretta, letteralmente), mentre la “business day metric” è Actual/actual. Il calendario impostato di default è Italy (figura 3.21). Possiamo sempre e comunque modificare manualmente la metrica implicita nel motore di simulazione, il calendario e le convenzioni selezionando il percorso Settings → Project Preferences → Simulation Date and Conventions. Il tab Simulation Dates and Conventions ci permette anche di definire le date temporali più importanti quali: la Trading Date, o Simulation Start Date, (ossia la data di negoziazione o di partenza della simulazione) – la quale si può modificare non solo dal tab in questione ma anche dal menù della barra degli strumenti – e la Contract Initial Date, o Effective Date, (ossia la data di inizio contratto). Con Fairmat, inoltre, è possibile creare un nuovo Vector Date, vettore di output, modificando un vettore già esistente preso come riferimento (utilizzando quindi un vettore in input). A tal fine, in possiamo, in particolare, utilizzare le seguenti funzioni di trasformazione delle date: – Date Vector Adjustment con la quale possiamo trasformare il Vector Date iniziale, il vettore in input avente un numero costante di date, al fine di creare, note le “payment dates”, un Vector Date avente le date fissate con la convenzione Advanced, allo scopo di regolare i giorni non lavorativi relativi ad uno specifico calendario; – Date Vector Differences con la quale possiamo creare un nuovo vettore computando le differenze fra gli elementi di un Vector Date iniziale già esistente e preso a riferimento. Con tale funzione di trasformazione possiamo, inoltre, specificare una “day count convention” (convenzione per il conteggio dei giorni) e regolare le differenze per i giorni non lavorativi relativi ad uno specifico calendario; Prima di vedere in modo dettagliato ed approfondito le funzioni di trasformazione delle date appena 62 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT descritte, è necessario esplicitare bene il concetto appena accennato di “day count convention” e le relative componenti, visto che queste “conventions” vengono create ed utilizzate da Fairmat proprio nel momento in cui si ricorre a tali funzioni di conversione. (Figura 3.21: Project Preferences – Business Day Convention) Day Count Convention: uno sguardo generale Le Day Count Conventions (letteralmente, come già accennato più sopra, le convenzioni per il conteggio dei giorni – figura 3.22) di Fairmat ci permettono di determinare come viene calcolato l'accumulo degli interessi nel tempo. Queste “conventions” vengono create da Fairmat nel momento in cui ricorriamo all'utilizzo delle funzioni di trasformazione delle date (e quindi in particolare le funzioni Date Vector Differences Transformation) applicate ad un dato Vector Date. (Figura 3.22: Day Count Conventions – Uno sguardo generale) 63 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Le Day Count Conventions si possono suddividere in due componenti principali: 1) il Date Metrics Counter il quale specifica come i giorni debbano essere computati fra una data di inizio ed una di fine; 2) la Date Metrics Convention che ci occorre nel caso in cui un “payment day” o, più in generale, una data contrattuale utilizzata per calcolare l'accumulo degli interessi, cada in corrispondenza o di un giorno non lavorativo o di una festività; Generalmente è possibile un “melting-pot”, un miscuglio, fra queste due opzioni di convenzioni, per cui, ad esempio, Actual/360 Unadjusted rappresenta l'accumulo degli interessi fra due date le quali possono cadere in corrispondenza di una festività, ma il cui flusso di cassa (o i cui flussi di cassa) relativo(i) viene (vengono) pagato(i) in corrispondenza di un giorno lavorativo. Day Count Conventions: Date Metrics Counter Le Date Metrics Counter utilizzabili in Fairmat (riepilogate nella figura 3.23) sono le seguenti: • Thirty360: è una Day Count Convention del tipo 30E+/360. Se definiamo una sequenza di anni, mesi e giorni di ciascuna data (inizio e fine) come, rispettivamente, triple del tipo Ys, Ms, Ds, per la data di inizio, e Ye, Me, De, per la data di fine, il fattore viene così calcolato: 360 * (Ye Ys) 30 * ( Me Ms ) ( De Ds ) Fattore 360 dove: Ye corrisponde all'anno della data di fine; Ys corrisponde all'anno della data di inizio; Me corrisponde al mese della data di fine; Ms corrisponde al mese della data di inizio; De corrisponde al giorno della data di fine; Ds corrisponde al giorno della data d inizio; con le seguenti regole di aggiustamento, di correzione: - se Ds è 31, allora Ds cambia e diventa pari a 30; - se De è 31, allora Me cambia e passa al mese successivo mentre De cambia e diventa pari a 1; Ad esempio, se la data di inizio è 28/02/2010 e la data di fine è 31/08/2010, si avranno allora le seguenti triple Ys, Ms, Ds = 2010, 02, 28 e Ye, Me, De = 2010, 08, 31. Seguendo le regole di aggiustamento delle date, De e Me cambiano e diventano pari, rispettivamente, a 01 e 09 e il fattore allora sarà il seguente: 360 * (2010 2010) 30 * (09 02) (01 28) 360 * (0) 30 * (7) 27 237 Fattore 0,508333333 360 360 360 • Actual365Fixed: è una Day Count Convention che computa al numeratore della frazione il numero di giorni intercorrenti fra la data di inizio e la data di fine. Il denominatore della frazione è fisso e pari a 365. num( DataFine DataInizio) Fattore 365 dove: Edate indica la data di fine; 64 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Sdate indica la data di inizio; e dove num (…) indica il numero di giorni intercorrenti fra le due date. Come possiamo notare, il primo giorno del periodo in questione è incluso mentre l'ultimo giorno del medesimo è escluso. Ad esempio, se la data di inizio è 28/02/2010 e la data di fine è 31/08/2010, il fattore sarà: num(31 / 08 / 2010 28 / 02 / 2010) 184 Fattore 0,5041095890 365 365 • Actual/Actual: è una Day Count Convention del tipo ISDA. Tale convenzione richiede di dividere il periodo di tempo fra i giorni compresi in un anno bisestile e i giorni non compresi in un anno bisestile (se il periodo di tempo non è incluso in un anno bisestile la convenzione Actual/Actual equivale precisamente alla convenzione Actual365Fixed). Il fattore sarà: num(GG _ anno _ bisestile ) num(GG _ anno _ non _ bisestile ) Fattore 365 366 Come nel caso della convenzione Actual365Fixed, anche la convenzione Actual/Actual include il primo giorno del periodo in questione ma ne esclude l'ultimo. Vediamo ora alcuni esempi per comprendere meglio il funzionamento del meccanismo relativo a tale convenzione. Primo esempio (il primo anno non è un anno bisestile, il secondo sì) Se la data di inizio è 30/06/2007 e la data di fine è 30/06/2008 e se si definisce la soglia fra l'anno 2007 e l'anno 2008 come la data del 31/12/2007. Il fattore sarà: num(31 / 12 / 2007 30 / 06 / 2007 ) 1 num(30 / 06 / 2008 31 / 12 / 2007 ) 1 Fattore 365 366 (184 1) (182 1) 0,5068493150 0,4945355191 1,001384842 365 366 Secondo esempio (il primo anno è un anno bisestile, il secondo no) Se la data di inizio è 30/06/2008 e la data di fine è 30/06/2009 e se si definisce la soglia fra l'anno 2008 e l'anno 2009 come la data del 31/12/2008, il fattore sarà: num(31 / 12 / 2008 30 / 06 / 2008) 1 num(30 / 06 / 2009 31 / 12 / 2008) 1 Fattore 366 365 (184 1) (181 1) 0,5054644809 0,4931506849 0,998615158 366 365 Terzo esempio (entrambi gli anni, sia il primo che il secondo, non sono bisestili) Se la data di inizio è 30/06/2009 e la data di fine è 30/06/2010 e se si definisce la soglia fra l'anno 2009 e l'anno 2010 con la data 31/12/2009, il fattore sarà: num(30 / 06 / 2010 30 / 06 / 2009) 365 Fattore 0 1 365 365 Si noti come in quest'ultimo esempio la convenzione Actual/Actual equivale alla convenzione Actual365Fixed. • Actual360: è una convenzione che computa al numeratore della frazione il numero di giorni intercorrenti fra la data di inizio e la data di fine. Il denominatore della frazione è fisso e pari a 360. 65 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT num( DataFine DataInizio) 360 dove num(...) indica il numero di giorni intercorrenti fra le due date. Come si può vedere il primo giorno del periodo in questione è incluso mentre l'ultimo giorno del medesimo è escluso. Ad esempio, se la data di inizio è 28/02/2010 e la data di fine è 31/08/2010, il fattore sarà: num(31 / 08 / 2010 28 / 02 / 2010) 184 Fattore 0,5111111111 360 360 Fattore • Business252: è una convenzione che computa al numeratore della frazione il numero di giorni intercorrenti fra la data di inizio e la data di fine. Il denominatore della frazione è fisso e pari a 252. num( DataFine DataInizio) Fattore 252 dove num(...) indica il numero di giorni intercorrenti fra le due date. Come possiamo notare il primo giorno del periodo in questione è incluso mentre l'ultimo giorno del medesimo è escluso. • SimpleDayCounter: tale convenzione ha lo scopo di assicurare che le distanze temporali che coprono un mese intero siano restituite come un semplice rapporto (ad esempio 1 anno corrisponde a 1.0, 6 mesi corrispondono a 0.5, 3 mesi corrispondono a 0.25 e così via). Se si definisce la sequenza di anni, mesi e giorni di ciascuna data come triple del tipo Ys, Ms, Ds e Ye, Me, De rispettivamente per la data di inizio e la data di fine, il fattore viene così calcolato: ( Me Ms) Fattore (Ye Ys) 12 solo, però, se: - Ds è uguale a De; oppure - Ds è maggiore rispetto a De e, al tempo stesso, De è un giorno di fine mese; oppure - Ds è minore rispetto a De e, al tempo stesso, Ds è un giorno di fine mese; Altrimenti la convenzione SimplyDayCounter equivale alla convenzione Thirty360. Ad esempio, se la data di inizio è 30/08/2000 e la data di fine è 28/02/2001, si avranno allora le due triple Ys, Ms, Ds = 2000, 08, 30 e Ye, Me, De = 2001, 02, 28, il fattore sarà (02 08) ( 6) Fattore (2001 2000) 1 1 0,50 0,50 12 12 66 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Figura 3.23: Day Count Conventions – Date Metrics Counter) Date Metrics Conventions Le Date Metrics Conventions sono convenzioni di aggiustamento, correzione, delle date specificate o determinate con riferimento alla transazione. Questi aggiustamenti sono necessari qualora il giorno cada in corrispondenza di un giorno non lavorativo. Tali convenzioni vengono create nell'ambiente Parameters & Functions attraverso le funzioni di conversione delle date Date Vector Adjustment Transformation applicate ad un dato Vector Date. Le Date Metrics Conventions (riepilogate nella figura 3.24) utilizzabili in Fairmat che sono, in particolare, le seguenti: • Following: in base alla quale la data di riferimento sarà il primo giorno lavorativo successivo. Ad esempio, la data del 28/02/2009 cade di Sabato (sesto giorno della settimana, considerando Lunedì come primo giorno della settimana, e che non è un giorno lavorativo). Il primo giorno lavorativo dopo i giorni del fine settimana (o di festività) è Lunedì 02/03/2009, per cui in base a tale convenzione la data di riferimento sarà, appunto, Lunedì 02/03/2009. • Modified Following: in base alla quale la data di riferimento sarà il primo giorno lavorativo successivo (come avviene con la convenzione Following che abbiamo appena visto), a meno che il primo giorno lavorativo successivo non sia un giorno del mese di calendario successivo; in quest'ultimo caso la data di riferimento sarà, invece, il primo giorno lavorativo precedente. Ad esempio, la data del 28/02/2009 cade di Sabato (sesto giorno della settimana, considerando Lunedì come primo giorno della settimana, e che non è un giorno lavorativo). Il primo giorno lavorativo successivo dopo i giorni del fine settimana (o di festività) è Lunedì 02/03/2009. Ciò implica però il cambio del mese (in quanto, infatti, si passa da Febbraio a Marzo), perciò la data di riferimento in base in tale convenzione non sarà Lunedì 02/03/2009 ma Venerdì 27/02/2009 (che è un giorno lavorativo). • Preceding: in base alla quale la data di riferimento sarà il primo giorno lavorativo precedente. Ad esempio, la data del 28/02/2009 cade di Sabato (sesto giorno della settimana, 67 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT • • considerando Lunedì come primo giorno della settimana, e che non è un giorno lavorativo). Il primo giorno lavorativo precedente ai giorni del fine settimana (o di festività) è Venerdì 27/02/2009, per cui in base a tale convenzione la data di riferimento sarà, appunto, Venerdì 27/02/2009 (che è un giorno lavorativo). Modified Preceding: in base alla quale la data di riferimento sarà il primo giorno lavorativo precedente (come avviene con la convenzione Preceding, precedentemente descritta), a meno che il primo giorno lavorativo precedente non sia un giorno del mese di calendario precedente; in quest'ultimo caso la data di riferimento sarà, invece, il primo giorno lavorativo successivo. Ad esempio, la data del 28/02/2009 cade di Sabato (sesto giorno della settimana, considerando Lunedì come primo giorno della settimana, e che non è un giorno lavorativo). Il primo giorno lavorativo precedente ai giorni del fine settimana (o di festività) è Venerdì 27/02/2009. In questo caso non vi è stato il cambio del mese, perciò la data di riferimento in base a tale convenzione resterà Venerdì 27/02/2009. Altro esempio: la data del 01/03/2009 cade di Domenica (settimo ed ultimo giorno della settimana, considerando Lunedì come primo giorno della settimana, e che non è un giorno lavorativo, bensì festivo). Il primo giorno lavorativo precedente ai giorni del fine settimana (o di festività) è Venerdì 27/02/2009. Tuttavia in questo caso si andrebbe al mese di calendario precedente (indietreggiando, infatti, da Marzo a Febbraio), per cui, come spiegato, in questo caso non si dovrà considerare il primo giorno lavorativo precedente, bensì il primo giorno lavorativo successivo e perciò la data di riferimento in base a tale convenzione sarà Lunedì 02/03/2009. Unadjusted: in base alla quale non verrà applicata alcuna correzione, alcun aggiustamento, al Vector Date di riferimento. (Figura 3.24: Day Count Conventions – Date Metrics Conventions) 68 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Transformations: Date Vector Adjustment La funzione di trasformazione Date Vector Adjustment è una funzione di conversione delle date che ci permette di ottenere, partendo da un Vector Date in input (ossia partendo da un Vector Reference) un altro vettore di date aggiustate (ovvero il vettore Name). L'aggiustamento può essere riferito: – alla scelta della “fixing convention” (in tal senso le scelte possibili sono: Arrears, Set di Default o Advance); – alla trasformazione di un vettore in input avente un numero costante di date; – alla correzione per i giorni non lavorativi relativi ad un specifico calendario (“Date Metric”); Nella finestra di editing della funzione di conversione delle date Date Vector Adjustment (figura 3.25) gli unici campi richiesti e da compilare sono “Name” e “Vector Reference”. La conversione utilizza di default la funzionalità Inherit Project Date Metrics (letteralmente, “ereditare le metriche del progetto per le date”), qualora il check-box relativo sia flaggato, in base a quanto da noi impostato nel tab Simulation Dates and Conventions. Nell'esempio riportato nella fugura 3.25, il numero di giorni da aggiungere, o da sottrarre, (da riportare nel campo “Add/Sub Days”) al Vector Reference è nullo (ovvero pari a 0) mentre il tipo di reimpostazione delle date, di reset, (da specificare valorizzando il campo “Reset Type”) selezionato è di tipo Arrears. (Figura 3.25: Transformations, Date Vector Adjustment 1) 69 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Come possiamo notare osservando la figura 3.26, il Vector Reference è mostrato nella colonna “Expression”, mentre la colonna “Values” mostra le date del vettore Name, ovvero del vettore iniziale, di input, trasformato. E' importante poi notare che il campo “Add/Sub Days” (aggiungere o togliere dei giorni) può contenere solo valori numerici e di tipo costante, mentre il campo “Reset Type” può contenere, oltre che dei caratteri alfabetici, anche un valore logico per definire la “fixing convention” (in particolare il valore 0 equivale a stabilire la convenzione Advance, mentre il valore 1 equivale a stabilire la convenzione Arrears). Ma possiamo anche impostare un'altra “fixing convention”, un diverso numero di giorni da aggiungere (se il valore inserito nel campo “Add/Sub Days” è positivo) o da sottrarre (se il valore inserito nel campo “Add/Sub Days” è negativo) al Vector Reference e, disabilitando la funzionalità Inherit Project Date Metric (levando il flag dal relativo check-box), un'altra “business day convention”. Notiamo poi che nel caso in cui il Reset Type impostato sia di tipo Advance (o, in modo equivalente, impostato sul valore logico corrispondente, ovvero 0), il fixing avverrà all'inizio del periodo di riferimento. In tal modo, con riferimento al k-esimo elemento del vettore di output (ovvero del vettore Name), Fairmat si riferirà al k-esimo – 1 elemento del vettore in input (ovvero del Vector Reference). Per cui per il primo elemento del vettore Name (corrispondente alla posizione k=1 del vettore stesso in quanto l'indice del vettore parte da 1), l'elemento di riferimento sarà, di default, la Contract Initial Date, impostata nel tab Simulation Dates and Conventions. (Figura 3.26: Transformations, Date Vector Adjustment 2) Un esempio ci permetterà di comprendere meglio quanto finora esplicitato e la differenza fra il fixing Advance e quello Arrears. Supponiamo di detenere un'obbligazione con data di negoziazione (Trade Date) 16/06/2010, data di inizio contratto (Effective Date) 27/06/2010, durata 5 anni e frequenza di pagamento semestrale. Supponiamo poi che il fixing del tasso variabile sia in Arrears di 2 giorni (ovvero arretrando nel 70 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT calendario di 2 giorni lavorativi) e segue una precedente “business day convention”. Il risultato della trasformazione del Vector Date alle convenzioni di fixing supposte è il vettore Name (figura 3.27). (Figura 3.27: Transformations, Date Vector Adjustment 3) Vogliamo ora ottenere, partendo da un Vector Date (Pdu) ed utilizzando una costante (Rday), il vettore delle date di reset. Dall'ambiente Parameters & Functions, cliccando sul comando “Add” e selezionando l'oggetto Date Vector Adjustment, facendo doppio click sullo stesso oggetto, apriremo la finestra di editing, (figura 3.28). A questo punto dovremo riempire i campi “Name” (scrivendovi Rd) e “Vector Reference” (scrivendovi Pdu). Nel campo “Add/Sub Day” dovremo inserire invece l'oggetto scalar Rday (ricordiamo, infatti, che tale campo deve contenere un valore costante, uno scalare). Dovremo poi togliere il flag dal check-box relativo alla funzionalità Inherit Project Date Metrics, in modo da disabilitare tale funzionalità, ed impostare le metriche locali per le date (nello specifico la “business day convention” Preceding). 71 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Infine, dovremo selezionare, dal menù a tendina il “Reset Type”, la voce Arrears, o, più semplicemente, digitare 1, ovvero il valore logico corrispondente (figura 3.28). Qualora si voglia stabilire il fixing Advance, si dovrà allora impostare il “Reset Type”, valorizzando il relativo menù a tendina, con la voce Advance, o più semplicemente, digitando 0, ovvero il valore logico corrispondente. Notiamo, osservando ancora la figura 3.28, come il primo elemento del vettore Value (ovvero il vettore Name contenente le date convertite, trasformate) si riferisce alla Contract Initial Date. (Figura 3.28: Transformations, Date Vector Adjustment 4) 72 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Transformations: Date Vector Differences Calculator La funzione di conversione delle date Date Vector Differences Calculator calcola le differenze tra elementi adiacenti (continui) del Vector Reference. La correzione può essere relativa: – alla scelta del primo elemento del Vector Reference per il calcolo del primo elemento del vettore di output, diversamente che nel caso della funzione di conversione Date Vector Adjustment, per la quale, in caso di fixing Advance, il primo elemento preso come riferimento è la Contract Initial Date specificata nel tab Simulation Dates and Conventions, come già si è avuto modo di vedere nel precedente paragrafo; – alla correzione per i giorni non lavorativi in relazione ad uno specifico calendario (“date metric”), prima del calcolo delle differenze fra elementi adiacenti, continui, del Vector Reference; – alla scelta del “business day metric” al fine di determinare il numero di giorni intercorrenti fra due “payment days” immediatamente successivi l'uno all'altro; Nella finestra di editing della funzione di conversione delle date Date Vector Differences Calculator (figura 3.29) gli unici campi richiesti e da compilare sono “Name” e “Vector Reference”. La conversione utilizza di default, come dato addizionale, la Contract Initial Date e la funzionalità Inherit Project Date Metrics (flaggando il relativo check-box). Il Vector Reference è mostrato nella colonna “Reference”, mentre la colonna “Differences” mostra il vettore Name (figura 3.29). Notiamo, osservando ancora una volta la figura 3.29, il vettore Name ha la stessa dimensione del Vector Reference, nell'esempio specifico pari a 10x1. Ciò in quanto, attraverso la funzionalità Transformation Mode, Fairmat aggiunge una data “addizionale” al Vector Reference prima del calcolo delle differenze. Le opzioni relativa alla funzionalità Transformation Mode sono: – “Add the Start Contract Date” (Aggiungi la data di inizio contratto): in base a questa opzione inseriamo come data addizionale la Start Contract Date (o Effective Date) come specificata nel tab Simulation Dates and Conventions. Come notato sopra, essa è la stessa data addizionale vista nel paragrafo precedente, durante la trattazione della funzione di trasformazione Date Vector Adjustment nel caso in cui il Reset Type sia di tipo Advance; – “Add the Start Simulation Date” (Aggiungi la data di inizio simulazione): in base a questa opzione inseriamo come data addizionale la Start Simulation Date (o la Trading Date) come specificata nel tab Simulation and Dates Conventions. Tale opzione è molto utile per calcolare un prezzo quotato (come avremo modo di vedere meglio con l'esempio che verrà illustrato più avanti); – “Add a custom date”: con questa opzione abilitiamo un campo nel quale possiamo inserire come data addizionale, una data differente dalle due precedenti, ovvero differente rispetto sia all'Effective Date che alla Trading Date; – “Use only the references dates option (no additional date used – nessun utilizzo di date addizionali): in base a questa opzione non si aggiungiamo nessun altro elemento, nessuna data addizionale. Solo in quest'ultimo caso, il vettore di output avrà un elemento un meno rispetto al Vector Reference, ovvero al vettore in input. 73 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Figura 3.29: Transformations, Date Vector Differences Calculator 1) Vediamo ora, nel dettaglio e attraverso un esempio, il comportamento della funzione di conversione delle date Date Vector Differences Calculator L'esempio che segue si riferisce, in particolare, ad un vettore di dieci elementi che parte dalla data del 20/03/2011 e termina alla data del 20/03/2020, con frequenza annuale. La convenzione per il conteggio dei giorni è Actual/360, Unadjusted. Nel primo caso (figura 3.30), la data addizionale (ovvero 20/03/2010) è inferiore, è più remota, rispetto al primo elemento del Vector Reference. Per cui, come possiamo notare, Fairmat compie una fusione ordinata fra la costante Additional Date e il Vector Reference prima di determinare il Vector Differences (ovvero il vettore delle differenze, il vettore di output). La finestra di editing della funzione di conversione delle date Date Vector Differences Calculator mostra sia il Vector Reference che il Vector Difference (figura 3.30). Nel secondo caso (figura 3.31), la data addizionale (15/12/2015) è compresa fra le date del Vector Reference. 74 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Figura 3.30: Transformations, Date Vector Differences Calculator 2) (Figura 3.31: Transformations, Date Vector Differences Calculator 3) Un ulteriore esempio ci aiuterà a comprendere meglio e a fondo il meccanismo legato alla trasformazione delle date. Come riferimento utilizzeremo il meccanismo di calcolo del prezzo a pronti e quello del prezzo quotato per un'obbligazione a tasso fisso. Il prezzo quotato, al quale i traders fanno riferimento per le loro negoziazioni e che viene anche definito come prezzo cosiddetto “secco”, non è esattamente identico al prezzo a pronti pagato dall'acquirente di un'obbligazione, in quanto i traders generalmente identificano tale prezzo come 75 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT prezzo “tel quel”. In generale vale, quindi, la seguente identità: Prezzo a Pronti = Prezzo Quotato + Interessi maturati dalla data di stacco dell'ultima cedola Supponiamo che la data di stacco dell'ultima cedola sia il 09/03/2010 e consideriamo un'obbligazione con cedola pari al 6% annuo con scadenza Ottobre 2011 e che prevede una frequenza di pagamento delle cedole semestrale. La yield curve (o curva dei rendimenti) è riportata nella tabella 3.1: (Tabella 3.1 – Esempio Date Vector Differences Calculator, Definizione yield curve) ANNO 1 2 3 4 5 TASSO A PRONTI 3,25% 4,25% 4,85% 5,25% 5,55% Vogliamo ora calcolare il prezzo di riferimento e il prezzo a pronti dell'obbligazione in questione alla Valuation Date. Per far ciò dobbiamo creare un nuovo file .fair e poi aggiornare, una volta selezionato il percorso Settings → Project Preferences → Simulation Dates and Conventions, i campi sottostanti alla dicitura “Absolute timing dates” (figura 3.32) ovvero sia: “Simulation Start Date (o Trading Date)”, inserendovi la data corrispondente alla Valuation Date (ovvero sia la data del 09/03/2010 nel caso preso in esame), e “Effective Date (o Contract Initial Date)”, inserendovi la data di inizio contratto (ovvero sia la data del 23/10/2008 nel caso preso in esame). Nell'ambiente Parameters & Functions dovremo inserire poi gli oggetti necessari per costruire l'obbligazione a tasso e più precisamente sarà necessario inserire i seguenti oggetti: – due Scalar riferiti, rispettivamente, al tasso cedolare e al valore nozionale del contratto; – una Interpolated Function la quale rappresenterà la yield curve, ovvero la curva dei rendimenti (figura 3.33); – una Date Sequence la quale rappresenterà il Vector Dates. Per semplicità, assumiamo che non ci siano correzioni di base alla “business day convention”; – una funzione di trasformazione delle date Date Vector Differences Calculator per calcolare i periodi di maturazione degli interessi per ciascuna cedola; Notiamo che, dal momento che la Valuation Date è antecedente alla data di esecuzione, i primi due periodi, corrispondenti a t=1 e t=2, non verranno considerati. 76 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Figura 3.32: Transformations, Date Vector Differences Calculator 4) (Figura 3.33: Transformations, Date Vector Differences Calculator 5) Dopo di ché si dovremo entrare nell'ambiente Option Map ed inserire una Strip of Options (ovvero una serie di opzioni), la quale rappresenterà i pagamenti delle cedole periodiche, accompagnata ad una Single Option, la quale rappresenta il flusso di cassa relativo al rimborso finale del capitale alla scadenza. Infine, dovremo aggiornare il tab Discounting con una funzione di attualizzazione deterministica. La funzione esponenziale negativa utilizzerà nello specifico la funzione interpolante ZR. Nell'esempio descritto stiamo utilizzando tassi di interesse composti continui. Come già esplicitato in precedenza, il prezzo a pronti include gli interessi maturati. Selezionando come elemento addizionale la Contract Initial Date, il terzo elemento del vettore CVG (vettore 77 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT derivante dalla trasformazione Date Vector Differences Calculator), ossia CVG[3], si riferisce all'intero periodo intercorrente fra PD[2] (ovvero il secondo elemento del vettore PD, Vector Reference, corrispondente nel caso specifico preso in esame alla data del 22/10/2009), incluso, e PD[3] (ovvero il terzo elemento del vettore PD, Vector Reference, corrispondente nel caso specifico preso in esame alla data del 22/04/2010), escluso. Selezionando, invece, come elemento addizionale la Simulation Start Date, il terzo elemento del vettore CVG, ossia CVG[3], si riferisce soltanto al lasso temporale intercorrente fra la Simulation Start Date (corrispondente, nel caso specifico preso in esame, alla data del 09/03/2010), inclusa, e il terzo elemento del vettore PD, ossia PD[3] (corrispondente, nel caso specifico preso in esame, alla data del 22/04/2010), escluso. Questo è il prezzo di riferimento. Notiamo che la differenza tra il prezzo a pronti e il prezzo di riferimento è quindi data dagli interessi maturati dalla data di stacco dell'ultima cedola, rispetto alla Valuation Date. (Figura 3.34: Transformations, Date Vector Differences Calculator 6) 78 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Transformations: Zero Rate Curve Calculator Con il calibratore ZR possiamo calcolare una yield curve (o curva dei rendimenti) partendo dai dati di mercato. I dati di mercato utilizzati come input sono i prezzi a pronti, i tassi sui contratti F.R.A. (Forward Rate Agreement, ossia gli accordi sui tassi di interesse futuri) e i tassi sui contratti Swaps, e sono rappresentati attraverso matrici di dimensione Nx2 nelle quali ogni riga indica una differente scadenza, per cui la prima colonna riporta le varie scadenze mentre la seconda colonna riporta i tassi di interesse corrispondenti. Il calcolo della yield curve, e quindi la calibrazione, può essere effettuato utilizzando due metodi: 1) Metodo “Bootstrap” con il quale i nodes (i nodi), indicanti ciascuno un tasso sui zero coupon bond e corrispondenti ai tassi a pronti e ai tassi sui contratti F.R.A., vengono calcolati direttamente dai dati di mercato mentre gli altri nodes vengono calcolati in modo ricorsivo a partire dai tassi sui contratti Swaps; 2) Metodo “Least Square” (minimi quadrati) con il quale i nodes, ciascuno corrispondente ad un tasso sui zero coupon bond, vengono fissati minimizzando la somma degli scarti al quadrato fra i tassi di mercato a pronti, i tassi sui contratti F.R.A., i tassi sui contratti Swaps e quelli calcolati a partire dai tassi sui zero coupon bond, ovvero le obbligazioni prive di cedola; In entrambi i casi, i campi da compilare nel tab Edit (figura 3.35): – il “Calibration Method” (metodo di calibrazione) il quale si riferisce al metodo di calibrazione prescelto. Le scelte possibili in tal senso sono, come già accennato sopra, o “Bootstrap” o “Least Square”; – i “Cash Rates” (tassi a pronti) i quali si riferiscono alla matrice dei tassi a pronti; – i “F.R.A. Rates” (tassi sui contratti F.R.A.) i quali si riferiscono alla matrice dei tassi sui contratti F.R.A.; – i “Swaps Rates” (tassi sui contratti Swaps) i quali si riferiscono alla matrice dei tassi sui contratti Swaps; – il “Market” (mercato) il quale si riferisce al mercato di riferimento; – il “Number of Swap coupon payed every year” (numero di cedole sui contratti Swaps pagate ogni anno) il quale si riferisce al numero di cedole pagate attraverso contratti Swaps i cui tassi sono ricavabili dalla matrice dei tassi sui contratti Swaps (ovvero la matrice “Swaps Rates”); (Figura 3.35: Zero Rate Curve Calculator) 79 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT L'ambiente Stochastic Processes Quando al modello aggiungiamo un processo stocastico, Fairmat genera in automatico dei simboli in modo tale da avere un riferimento al processo stocastico generato, o per far sì che possiamo acquisirne i valori delle realizzazioni. In particolare, se nel modello vi sono N processi stocastici inseriti, Fairmat genererà in automatico i seguenti simboli: V1, V2, …, VN e @V1, @V2, …, @VN. Vi rappresenta il valore dell'i-esima attività sottostante, valutata nella corrente realizzazione delle incertezze e alla data corrente, mentre @Vi è un riferimento all'i-esima attività sottostante. Questo linguaggio algebrico ci aiuta a scrivere complesse espressioni dei payoff he dipendono, si basano, (appunto) su processi stocastici. Per esempio, se V1 è un processo stocastico e K è una costante, possiamo scrivere una semplice opzione call scrivendo semplicemente la seguente espressione: Max(V1-K; 0). In alcune circostanze potremmo poi essere interessati non tanto al processo stocastico nella sua interezza, ovvero nella sua totalità, ma soltanto ad alcune sue componenti. Come, ad esempio, potrebbe accadere qualora utilizzassimo come processo stocastico di riferimento il modello JarrowYildrim, per il quale, nel caso specifico, la componente V1a potrebbe identificare la componente relativa al tasso nominale di interesse, la componente V1b potrebbe identificare la componente relativa al tasso reale di interesse e, infine, la componente V1c potrebbe identificare l'indice dei prezzi dei beni al consumo. I processi stocastici disponibili in Fairmat sono diversi e suddivisibili in due grandi categorie: “Interest Rate Processes” (ovvero Processi relativi ai Tassi di Interesse) e “Other Processes” (ovvero Altri Processi). Più nel dettaglio fra gli “Interest Rate Processes” rientrano i seguenti processi stocastici: 1) Cox-Rubinstein Ingersoll; 2) Dai-Sigleton Interest Rate Model; 3) Hull&White 2 Factors (modello a due parametri); 4) Jarrow-Yildrim; 5) LIBOR Market Model; 6) Pelsser-Squared Gaussian Model; Fra gli “Other Processes” rientrano invece i seguenti processi: 1) Custom Dynamic; 2) Generic Itô Process (semplice); 3) Generic Log-Itô Process (logaritmico); 4) Geometric Brownian Motion Process; 5) Heston; 6) Heston with time dependent drift; 7) Log-Mean Reverting Process; 8) Mean-Reverting Process; 9) Multivariate Geometric Brownian Motion Process; 10) Poisson Arrival; Una descrizione dettagliata riguardante i principali modelli appena elencati (e, in particolare, i processi Geometric Brownian Motion, Mean-Reverting, Log-Mean Reverting, Generic Itô, Generic Log-Itô e Poisson Arrival) verrà fornita nel Capitolo 5 dedicata alla modellazione dei contratti finanziari, nel quale, appunto, esamineremo da un punto di vista formale e dettagliato i vari modelli finanziari disponibili in Fairmat per la modellazione dei contratti finanziari. 80 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Per inserire un processo stocastico in Fairmat dobbiao cliccare sul tab Stochastic Processes posto sul lato sinistro della finestra generale di Fairmat e scegliere il comando Add S.Process (figura 3.36). Si tenga presente che, nel caso dei modelli stocastici “Interest Rate” (ossia quelli basati sui tassi di interesse), dobbiamo associare al processo una struttura per scadenze dei tassi di interesse. Nel momento in cui selezioniamo il comando “Add S. Process”, Fairmat in automatico crea una nuova Zero Rate Function, a meno che non indichiamo una curva alternativa (ossia un oggetto denominato Function defined by value interpolation) già caricata nell'ambiente Parameters & Functions. (Figura 3.36: Inserimento di un processo stocastico in Fairmat) 81 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Figura 3.37: Inserimento di una Interpolated Function nell'ambiente Stochastic Processes) (Figura 3.38: Elenco dei modelli stocastici disponibili in Fairmat) Cliccando sul comando “Add Asset Set” possiamo inserire un gruppo di processi stocastici fra quelli inseriti in precedenza (ad esempio, possiamo inserire il gruppo di processi denominato Asset1 e comprendente i processi V1 e V2 – figura 3.39). L'editor del comando “Add Asset Set” ci permette di creare un nuovo gruppo di processi da un box contenente una lista iniziale che, a sua volta, contiene tutti i processi che abbiamo inserito in precedenza. 82 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Figura 3.39: Inserimento di gruppi di processi stocastici, comando “Add Asset Set”) Il comando “Remove” ci permette di rimuovere un processo stocastico (o un gruppo di processi stocastici, o meglio un Asset Set di processi stocastici) dalla lista dei processi stocastici inseriti. Il comando “Correlations” (figura 3.40), invece, permette di mettere in mostra le correlazioni tra due o più processi stocastici. Si noti che se un processo stocastico è composto da due o più componenti, la matrice delle correlazioni mostra anche le correlazioni fra le componenti del medesimo. Per esempio, se selezioniamo come processo stocastico di riferimento il processo Hull&White 2, a due parametri, la matrice delle correlazioni ci mostrerà, oltre che le possibili correlazioni con altri processi stocastici eventualmente selezionati ed inseriti, anche le correlazioni fra la componente primaria del processo Hull&White e la sua componente secondaria. (Figura 3.40: Correlazioni fra processi stocastici, comando “Correlations”) 83 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Un esempio di inserimento di un processo stocastico: Geometric Brownian Motion Vediamo ora mostrato un esempio di inserimento in Fairmat di un processo stocastico (figura 3.41). Supponiamo di voler inserire il processo stocastico Geometric Brownian Motion. Per inserire tale processo stocastico, dobbiamo selezionare il seguente percorso: Stochastic Processes → Add S. Process → Geometric Brownian Motion (GBM) → OK. Dopo di ché dobbiamo fare doppio click sul processo stocastico V1 appena creato, selezionare il tab GBM e compilare i seguenti campi: – “Base Value” (o “Starting Value”) che si ipotizza, nell'esempio riportato, pari a 100; – “Volatility” (ipotizzata, nell'esempio, pari a 74); – è necessario poi scegliere la combinazione dei “Control Parameters” e le scelte possibili in tal senso sono, in particolare, o “Dividend Yield” e “Growth Rate; Risk Premium”. Si supponga di voler scegliere quest'ultima combinazione e di porre un valore per il “Growth Rate” pari al 5%; (Figura 3.41: Esempio di inserimento di un processo stocastico: GBM) I valori preimpostati, di default, per i campi “Preview Paths” e “Preview Steps”, presenti sotto il tab Preview e visibili dopo aver selezionato il percorso Settings → Fairmat Preferences → Core Preferences → Preview, sono 500 e 25. Tuttavia possiamo impostare valori differenti, qualora lo si ritenga necessario ed opportuno. Il tab Preview della finestra di editing del processo stocastico (figura 3.41) ci permette di visualizzare un'anteprima della dinamica del medesimo (selezionando il sotto-tab Dynamic) e la sua distribuzione (selezionando il sotto-tab Distribution) lungo un dato orizzonte temporale (fissabile con lo slider posto sotto il grafico della distribuzione stessa). 84 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Figura 3.42: Impostazione dei parametri di un processo stocastico) Il Tab Data Source Qualora si utilizzasse la versione Professional di Fairmat, è disponibile il tab Data Source (figura 3.43). Tale tab ci permette di specificare come i dati di un processo stocastico sono connessi ad uno specifico mercato (o ad una specifica attività finanziaria) mediante l'indicazione del loro mercato di riferimento e del loro ticker, ovvero sia del loro codice, alfanumerico e di tipo arbitrario, di riconoscimento. Di conseguenza, Fairmat calibrerà i parametri del processo stocastico utilizzando i dati di mercato disponibili dal Market Data Provider prescelto (quale può essere, ad esempio, Bloomberg Professional). Rispetto alla versione Academic, la versione Professional di Fairmat dispone quindi di un tab aggiuntivo, il tab Data Source per l'appunto. (Figura 3.43: il Tab Data Source) 85 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Dal tab Data Source dell'editor dell'ambiente Stochastic Processes, possiamo selezionare e valorizzare, attraverso una serie di menù a tendina, i seguenti campi (figure 3.44, 3.45 e 3.46): – “Market” (ossia il mercato di riferimento); – “Ticker”: è un campo che contiene il codice Bloomberg Professional per lo specifico indice di mercato borsistico (o specifico titolo o specifica attività finanziaria) a cui il processo stocastico deve riferirsi. Nell'esempio riportato nella 3.43, il codice SX5E si riferisce all'indice EURO STOXX 50; (Figura 3.44: Il Tab Data Source – Campo “Market”) – “Calibration Strategy” (strategia di calibrazione): la quale dipende dal modello stocastico prescelto. Nell'esempio mostrato attraverso le figure 3.43 e 3.45, è stato scelto, in particolare, il modello Heston; (Figura 3.45: il Tab Data Source – Campo Calibration Strategy 1) Dopo aver valorizzato questi campi ed inserite queste impostazioni (ipotizziamo, per esempio, di aver valorizzato nel seguente modo i campi appena illustrati: “Market” → EU; “Ticker” → SXE5 Index → “Calibration Strategy” → Heston Estimator.CallEstimator), possiamo procedere con la calibrazione del modello semplicemente cliccando il tasto destro del mouse una volta selezionato lo stesso e poi selezionando il comando “Calibrate Model Using Data Provider”. A questo punto Fairmat aggiornerà automaticamente i parametri del modello (figura 3.46). 86 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Figura 3.46: il Tab Data Source – Campo Calibration Strategy 2) I dati di input utilizzati per la calibrazione sono mostrati nel Market Data Manager. Nel form Plug-ins Preferences del sottomenù Fairmat Preferences possiamo impostare e controllare, in ogni minimo dettaglio, la calibrazione dei processi stocastici inseriti. 87 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT L'ambiente Discounting Nell'ambiente Discounting possiamo utilizzare due sistemi che, si precisa, non sono affatto alternativi fra loro ma che, anzi, possono coesistere al tempo stesso nell'ambito del medesimo progetto, come avremo modo di precisare meglio più avanti. Tali sistemi sono, in particolare: – il sistema Global (Project) Discounting; – il sistema Option Dependent Discounting; Il sistema Global (Project) Discounting Nell'ambito del sistema Global (Project) Discounting possiamo scegliere fra tre differenti modi per impostare il modello di discounting (o di attualizzazione): 1) Use Constant Risk Free Rate (Utilizzo di un tasso di interesse privo di rischio – figura 3.47): si tratta di un modello di discounting (o di attualizzazione) da utilizzare quando il tasso di interesse annuo risk free, ossia il tasso di interesse annuo privo di rischio, è costante; una situazione del genere avviene, per esempio, nel caso della valutazione delle Real Options. In questo caso dobbiamo semplicemente inserire il valore del tasso risk free nel campo “Risk Free Rate (RF =)”; (Figura 3.47: Sistema Global (Project) Discounting, Use Constant Risk Free Rate) 2) Use Deterministic Expression (Utilizzo di un'espressione deterministica – figura 3.48): si tratta di un modello di discounting da utilizzare quando la struttura per scadenze dei tassi di interesse non è piatta o quando si vuole utilizzare un'espressione personalizzata per attualizzare i payoff del contratto. Se si sceglie di utilizzare tale modello dobbiamo inserire nel campo “Discounting Expression (f(t) =) un'espressione di attualizzazione (nell'esempio riportato in figura l'espressione inserita è exp(-zr(t)*t) dove zr è una funzione con variabile 88 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT indipendente t). In particolare, la variabile t, definita dal simulatore, rappresenta il tempo (espresso in frazioni d'anno) trascorso dalla Simulation Date; (Figura 3.48: Sistema Global (Project) Discounting, Use Deterministic Expression) 3) Use Dynamic Term Structure (Utilizzo di una struttura per scadenze dinamica – figura 3.49): si tratta di un modello di discounting da utilizzare quando il tasso risk free viene modellato, determinato, da un qualche modello stocastico, quali possono essere ad esempio i modelli Hull&White o Dai-Singleton. In questo caso Fairmat sceglierà automaticamente un modello di discounting coerente con il modello stocastico specificato. Se scegliamo di utilizzare tale modello di discounting, dobbiamo scrivere nel campo “Stochastic Processes Reference (e.g. @V1)” un riferimento appunto al processo stocastico sottostante per la modellazione del tasso risk free; (Figura 3.49: Sistema Global (Project) Discounting, Use Dynamic Term Structure) 89 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Qualora dovessimo utilizzare un tasso di interesse costituito da una componente risk free più una componente spread, si possono anche immettere due modelli stocastici @V1; @V2. In questo caso Fairmat automaticamente sceglierà un modello di discounting coerente con i processi inseriti e il fattore di sconto dipenderà quindi da entrambe le variabili (tasso risk free e spread). Quindi questo modello di discounting può essere molto utile quando la valutazione utilizza un tasso costituito da un tasso risk free più una componente, uno spread, che esprime il merito creditizio di uno dei contraenti. Qualche volta il credit spread può essere modellato sulla base di una funzione di ripartizione (o di sopravvivenza statistica) del tipo f(t). In questo caso possiamo scrivere @V1; @f (si veda ancora una volta la figura 3.49) e Fairmat prenderà in considerazione la corretta composizione dei fattori di sconto. In particolare, il fattore di sconto (dato da f(t)), riferito al lasso temporale che va dal tempo t1 fino al tempo t0 (con t1 > t0), sarà calcolato con il rapporto f(t1)/f(t0). Il sistema Option Dependent Discounting I modelli di discounting appena descritti possono essere fissati nell'ambito o di una specifica Standard Option o nell'ambito di una specifica Strip of Options semplicemente selezionando la linguetta Custom Discounting presente nella scheda del form dell'opzione creata nell'ambiente Option Map (accessibile facendo doppio click sul form dell'opzione stessa) e modificandone le impostazioni (figura 3.50). Con questa configurazione “locale”, ovvero riferita non alla globalità del progetto bensì ad una singola opzione, o solo ad una serie di opzioni, possiamo specificare un differente modello di discounting per ciascuna opzione creata. In particolare, una volta selezionato il tab Custom Discounting della finestra di editing dell'Option creata nell'Option Map, possiamo compiere due scelte alternative: A) Inherit discounting structure from parent node or project (ereditare il modello di discounting o da un nodo iniziale o dal progetto): selezionando questa funzionalità Fairmat utilizzerà il modello di discounting definito in precedenza per l'opzione corrente; oppure B) Use custom discounting (utilizzare un modello di discounting personalizzato): selezionando questa funzionalità Fairmat ci permetterà di definire un modello di discounting personalizzato per l'opzione corrente (e per le sue opzioni successive nel caso in cui non ci siano ulteriori specificazioni); (Figura 3.50: Sistema Option Dependent Discounting) 90 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Più nel dettaglio, il sistema Option Dependent Discounting funziona nel seguente modo: se un nodo è stato dichiarato come un modello di discounting personalizzato, Fairmat compirà i seguenti passaggi: – se l'opzione inserita è un'opzione di tipo Americano (ovvero esercitabile in un qualunque momento precedente la data di scadenza), per determinare il valore attuale del suo valore di continuazione verrà utilizzato un modello di discounting adatto per questo tipo di opzione (laddove specificato); – se un'opzione A è seguita, collegata, da un'opzione B di tipo composto, per l'attualizzazione dei payoff composti, ovvero derivanti dalla combinazione delle due opzioni A e B, verrà utilizzato il modello di discounting dell'opzione composta (ovvero dell'opzione B); – se nell'ambiente Option Map abbiamo inserito degli operatori funzionali, quali ad esempio Sum, Average o Functional (che vedremo più nel dettaglio in seguito, nei paragrafi dedicati, appunto, agli operatori funzionali), tali operatori utilizzeranno i modelli di discounting delle opzioni successive (laddove specificato); Come già anticipato in precedenza, i sistemi Global (Project) Discounting e Option Dependent Discounting non sono l'uno alternativo all'altro in assoluto, ma possono coesistere nell'ambito del medesimo progetto. A livello generale, il sistema Global (Project) funziona, si applica, sull'intero progetto, sull'intera Option Map del progetto, a meno che non impostiamo uno specifico sistema Option Dependent Discounting su uno dei branch (dei rami) della Option Map, ovvero su una Strip of Options o su una singola Standard Option. In questo caso, allora, il sistema Global (Project) Discounting funziona, si applica, sull'intero progetto, sull'intera Option Map del progetto con le eccezioni legate a quel specifico branch, o a quella specifica Strip of Options, o a quella specifica Standard Option, a cui il sistema di discounting “locale”, ovvero il sistema Option Dependent Discounting, fa riferimento. L'ambiente Discounting e le funzioni ricorrenti L'ambiente Discounting di Fairmat supporta anche le funzioni ricorrenti. In questo caso dovremo definire una funzione ricorrente (quale può essere, ad esempio, la funzione Disc – figura 3.51) e collegare il modello di discounting a tale funzione mediante il simbolo @ (inserendo nell'apposito campo “Stochastic Processes (e.g. @V1), ad esempio @Disc). (Figura 3.51: Ambiente Discounting e funzioni ricorrenti) 91 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT L'Ambiente Option Map Con Fairmat possiamo descrivere l'iterazione fra pagamenti e decisioni di pagamento mediante un apposito ambiente Option Map (figura 3.52) il quale ci permette di modellare, con uno stile grafico, le decisioni e le dipendenze dalle decisioni. (Figura 3.52: Ambiente Option Map) Vedremo ora nel dettaglio: 1) Come inserire e comporre nell'ambiente Option Map le Standard Options e le Strip of Options; 2) Come utilizzare nell'ambiente Option Map gli operatori funzionali disponibili; 3) Come modellare le decisioni nell'ambiente Option Map utilizzando i branches (ovvero i rami della struttura decisionale); 4) Come creare degli scenari per l'ambiente Option Map e gestirli (in realtà quest'ultimo aspetto verrà esplicitato non nel corso del presente paragrafo ma nel paragrafo dedicato all'ambiente Manage Scenarios); 92 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Come inserire e comporre nell'ambiente Option Map le Standard Option o le Strip of Options Molte delle opzioni tipiche, più conosciute, diffuse o note, possono essere modellate con Fairmat. Il blocco delle Standard Options, ovvero delle opzioni di tipo standard, è la base del blocco costruttore dell'ambiente Option Map e, utilizzandolo, è possibile modellare moltissime opzioni stile Europeo, Americano o Asiatico. Gli altri tipi di opzioni, quali ad esempio i pagamenti ricorrenti o le opzioni ricorrenti, possono invece essere modellati utilizzando il blocco costruttore Strip of Options. Per inserire un'opzione in Fairmat dobbiamo cliccare, sulla tavolozza grafica della Option Map presente sotto il menù principale, l'oggetto che si vuole creare, trascinarlo e lasciarlo cadere nella schermata grafica dell'ambiente Option Map. Le Standard Options Una Standard Option è generalmente caratterizzata da: – un payoff, il quale dipende dal valore delle variabili di stato; e – una data di esercizio, o più date d'esercizio (“Excercise Date/s”), la quale indica il tempo della data della decisione, che viene definita dalle caratteristiche dell'investimento. In tal senso, a proposito della data di esercizio di un'opzione, distinguiamo in genere fra opzioni di tipo Americano, le quali possono essere esercitate in un qualunque momento intercorrente fra la Start Date e la End Date, o Maturity Date, e opzioni di tipo Europeo, le quali possono essere esercitate solo a scadenza e quindi solo in corrispondenza della End Date; Dopo aver selezionato, nell'ambiente Option Map, una Standard Option, facendo doppio click sull'oggetto creato, apriremo una finestra con tre tab: General, Timing and Payoff e Custom Discounting (figura 3.53). (Figura 3.53: Creazione di una Single Option, tabs della finestra di editing) 93 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Il tab General (riquadro di sinistra della figura 3.53) ci permette di valorizzare i seguenti campi: – “Description” (Descrizione): nel quale possiamo inserire informazioni utili di tipo descrittivo. Dopo aver chiuso la finestra di editing ciò che è contenuto nel campo “Description” verrà visualizzato in basso a destra dell'opzione creata nell'ambiente Option Map; – “Name” (Nome): nel quale possiamo attribuire un nome univoco (e senza spazi) all'opzione creata nell'ambiente Option Map. Per attivare tale attributo dobbiamo flaggare il relativo check-box; – “Type” (Tipo): col quale possiamo selezionare il tipo dell'opzione scegliendo fra le seguenti possibilità (figure 3.54 e 3.55): Custom or Committed Option (European), Standard European o American Type Option; (Figura 3.54: Creazione di una Single Option, Scelta del “Type” - 1) (Figura 3.55: Creazione di una Single Option, Scelta del “Type” - 2) Per quanto riguarda il tab Timing and Payoff (riquadro di destra della figura 3.53), invece: A) Nel caso in cui l'opzione creata attraverso il tab General sia del tipo American type option, si attiverà il menù a tendina “American timing type”, il quale ci permetterà di compiere una fra le seguenti scelte possibili (zona contrassegnata dalla lettera A nel riquadro di destra della figura 3.53 e figura 3.56): – “Continuos”: qualora sia previsto che l'esercizio dell'opzione possa avvenire in qualsiasi momento fra la Start Date e la End Date. In questo caso dovremo soltanto specificare la End Date, o Maturity, in quanto la Start Date sarà automaticamente supposta uguale a 0; – “Bermudan” (Uniform Steps): qualora sia previsto che l'esercizio dell'opzione possa avvenire in corrispondenza di specifiche date, dette anche “step dates”, e definite da un apposito “exercise step”, fra la Start Date (supposta anche in questo caso uguale a 0) e la End Date; – “Bermudan Date's Vector Reference”: qualora sia previsto che l'esercizio dell'opzione possa avvenire in corrispondenza di specifiche date definite da un apposito “exercise date's reference vector”; – “Inherited (from another option's exercise)”: qualora si voglia, per l'opzione creata, ereditare da un'altra opzione la relativa politica di esercizio attraverso un'apposita 94 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT “Master Option”; (Figura 3.56: Creazione di una Single Option, tab “Timing and Payoff”) B) Nel caso in cui l'opzione creata attraverso il tab General sia di tipo European Standard oppure di tipo Custom o Committed (European), si attiverà il solo campo “Continuos” il quale ci permetterà di specificare la End Date dell'opzione stessa (zona contrassegnata dalla lettera B nel riquadro di destra della figura 3.53); C) Il gruppo di box “Relative Time” include, fra gli altri, il check-box relativo al campo “Timing relative to exercise of option” e un menù a cascata conseguente. Ciò serve a specificare l'opzione cui il tempo di esercizio si riferisce (zona contrassegnata dalla lettera C nel riquadro di destra della figura 3.53); D) E' possibile poi flaggare il check-box “Export Payoff”, attivando la relativa funzionalità (zona contrassegnata dalla lettera D nel riquadro di destra della figura 3.53); E) E' possibile, infine, valorizzare il check-box “Payoff Expression” per poter inserire i payoff dell'opzione creata nell'ambiente Option Map (zona contrassegnata dalla lettera E nel riquadro di destra della figura 3.53); Un esempio sulle Standard Options Consideriamo un'espressione per i payoff data da Max(V1-3%; 0%) uguale a V1-3%. Questo è il payoff di un'opzione di tipo call scritta su un sottostante descritto attraverso il processo stocastico V1 e con uno strike rate pari al 3%. A seconda del momento nel quale tale opzione dovrà essere valutata e a seconda del tipo dell'opzione stessa, nei tab General e Timing and Payoff dovremo compiere delle scelte ben precise; in particolare: – se l'opzione è di tipo Americano e dovrà essere valutata in un qualsiasi istante di tempo fra la Start Date e la End Date, nel tab General dovremo valorizzare il campo “Type” (selezionando la voce “American type option”) mentre nel tab Timing and Payoff dovremo valorizzare il campo “American timing type” (selezionando la voce “Bermudan date's vector reference”); – se l'opzione è d tipo Standard European o Custom o Committed e dovrà essere valutata ad una specifica data d'esercizio, ovvero alla sua scadenza, nel tab General dovremo valorizzare il campo “Type” (selezionando la voce “Custom or Committed European” o la voce “Standard European”, a seconda dei casi), mentre nel tab Timing and Payoff dovremo valorizzare il campo “Continuos” (specificandovi soltanto la End Date, o Maturity Date). In quest'ultimo caso il payoff sarà semplicemente pari a V1-3% con esercizio in corrispondenza della End Date; Le Strip of Options 95 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Oltre che le Single Standard Options, Fairmat ci permette anche di inserire un'intera strip (serie) di opzioni attraverso il blocco Strip of Options. Tale blocco ci permette di modellare una serie di opzioni composte. La serie di opzioni (e dei relativi pagamenti) viene parametrizzata sia nella voce “Exercise Date” che nella voce “Payoff”. Utilizzando un ambiente apposito, possiamo creare facilmente una sequenza composta da molte opzioni o da molti pagamenti. Fairmat crea una serie di opzioni sostituendo al simbolo incognito # i valori attuali dei cicli di iterazione presi dai campi “From”, “Step” e “To” presenti nel tab Timing and Payoff (figura 3.58). Così come avviene nel caso della creazione di Single Standard Options, dopo aver selezionato una Strip of Options, facendo doppio click sull'oggetto creato nell'ambiente Option Map, si aprirà una finestra con due tab: General e Timing and Payoff (figure 3.57 e 3.58). Il tab General (figura 3.57) ci permette di valorizzare i seguenti campi: – “Name” (Nome): nel quale possiamo attribuire un nome univoco (e senza spazi) all'opzione creata nell'ambiente Option Map. Per attivare tale attributo dobbiamo flaggare il relativo check-box; – “Description” (Descrizione): nel quale possiamo inserire altre informazioni utili di tipo descrittivo. Dopo aver chiuso la finestra di editing ciò che è contenuto in questo campo verrà visualizzato in basso a destra dell'opzione creata nell'ambiente Option Map; – “ID”: nel quale possiamo inserire un codice in grado di identificare univocamente l'opzione; – “Type” (Tipo): il quale è una combinazione di box attraverso cui possiamo scegliere il tipo di opzione. Le scelte possibili in tal senso sono: Standard European Option o Committed Option. Di default il tipo di opzione impostato è Custom, o Committed Option; – “Strip Type” (Tipo di strip): con il quale possiamo definire il tipo di collegamento fra le operazioni comprese nella Strip of Options. L'utente può scegliere fra due alternative: “Sequence Compound Option” o “Sum of Independent Options”; (Figura 3.57: Creazione di una Strip of Options, tab General) Il tab Timing and Payoff (figura 3.58 ci permette, invece, di valorizzare i seguenti campi: – “From” (Da), “Step” (Passo), “To” (A): parametri che servono a definire i valori “Start”, 96 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT “Step” e “End” dei cicli di iterazione (ad esempio, ponendo i parametri nel seguente modo: “From” = 2, “Step” = 1 e “To” = 6, richiederemo al simbolo incognito # di assumere nel corso dei vari cicli di iterazione i valori 2, 3, 4, 5 e 6. Ponendo, invece, i parametri nel seguente modo: “From” = 2, “Step” = 2 e “To” = 6, richiederemo al simbolo incognito # di assumere nel corso dei vari cicli di iterazione i valori 2, 4 e 6). Premendo il tasto “View” possiamo visualizzare in dettaglio i parametri “Date Expression” e “Payoff Expression” collegati con i valori assunti dal simbolo incognito # durante lo svolgimento delle varie iterazioni in modo da poter, utilmente, verificare se gli input che abbiamo inserito per i payoff di un'opzione siano corretti o meno; – “Parametric Exercise Date (#)”: con il quale possiamo definire le date di esercizio delle opzioni comprese, appartenenti, alla strip (ad esempio, il parametro Pd[#] significa che le date di pagamento, le “payment dates”, del Vector Date, Pd, sono definite dai parametri inseriti nei campi “From”, “Step” e “To”); – “Parametric Payoff (#)”: nel quale possiamo inserire i payoff delle opzioni; – “Callability (Redimibilità)”: nel quale possiamo inserire maggiori informazioni riguardo alla callability dell'opzione, e quindi informazioni inerenti alla possibilità che la stessa possa essere rimborsata, o estinta, prima della sua naturale scadenza e quindi in via anticipata, le quali sono visibili nella relativa sottosezione. Un menù a tendina, presente all'interno di questo campo, ci permetterà di scegliere fra tre possibilità: 1) “No Callability” (Nessun rimborso od estinzione anticipata): scegliendo questa alternativa non poniamo alcuna possibilità di uscita preventiva dal contratto; 2) “Callability” (Redimibilità possibile in quanto prevista): scegliendo questa alternativa poniamo una possibilità di uscita preventiva dal contratto coincidente con una delle date impostate nel campo “Parametric Payoff (#)”; 3) “Callability with different exit payoff” (Redimibilità con un differente payoff d'uscita): scegliendo questa alternativa poniamo una possibilità di uscita preventiva dal contratto coincidente con una delle date impostate attraverso il parametro “Parametric Alternative Payoff (#)”; (Figura 3.58: Creazione di una Strip of Options, tab “Timing and Payoff”) Vedermo ora tre esempi su come creare e gestire, attraverso Fairmat, delle Strip of Options e su 97 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT come gestire la relativa clausola di callability, laddove eventualmente prevista. I primi due esempi hanno carattere del tutto generale; il terzo esempio ha un taglio più specifico e costituirà anche un modo assai utile per rivedere e ripassare tutte le funzionalità e le caratteristiche di Fairmat che abbiamo finora trattato in modo da fissarne meglio i relativi concetti. Un esempio di Strip of Options (1): Opzioni senza clausola di callability Supponiamo di detenere un coupon bond che prevede il pagamento, fra le “payment dates” comprese fra il tempo 5 e il tempo 9 (estremi dell'intervallo inclusi) una cedola aggiustata per le date's metric conventions ed impostata sulla base delle date relative ai vettori CVG[] (vettore delle date aggiustate) e N[] (vettore dei valori nozionali). La figura di riferimento è la 3.59. Il simbolo incognito # assumerà quindi i valori 5, 6, 7, 8 e 9 per ciascuna opzione appartente alla Strip. Nel caso esaminato con questo esempio numero 1, i parametri e i relativi valori saranno quelli riassunti nella tabella 3.2: (Tabella 3.2 – Esempio 1, Definizione parametri e valori) Parametro From Step To Parametric Payoff (#) Parametric Exercise Date Valore 5 1 9 coupon[#]*Cvg[#]*N[#] Pd[#] (Figura 3.59: Esempio 1 – Definizione dei payoff) 98 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Un esempio di Strip of Options (2): Opzioni con clausola di callability (esempio generico) Possiamo anche attivare un callability flag direttamente per ciascuna delle opzioni incluse nella Strip (figura 3.60). A proposito della clausola di Callability vedremo due esempi: uno generico, ossia l'esempio numero 2 – proposto in questo paragrafo –, l'altro più specifico che verrà riportato immediatamente dopo). Nel caso dell'esempio numero 2 il callability flag rappresenta la caratteristica di callability (ovvero di redimibilità) della Strip of Options nel suo complesso. Il menù a tendina accanto alla voce “Callability” del tab Timing and Payoff ci permette di regolare la possibilità (per un ente emittente) di chiudere anticipatamente, estinguendolo, il contratto (possibilità in genere esercitabile dopo però un determinato periodo di tempo, detto anche di lockout, durante il quale la stessa possibilità resta preclusa). Come abbiamo già visto in precedenza, dal menù a tendina “Callability” sono selezionabili tre voci distinte che sono le seguenti: – “No Callability”: scelta con la quale escludiamo qualunque possibilità per l'emittente di un richiamo anticipato; – “Callability”: scelta con la quale attiviamo la previsione di un'uscita anticipata, rispetto alla scadenza, dal contratto, la quale coinciderà (nel caso della scelta specifica in questione) con una delle date impostate nel campo “Parametric Payoff (#)”; – “Callability with different exit payoff”: scelta con la quale attiviamo la previsione di un'uscita anticipata, rispetto alla scadenza, dal contratto, la quale coinciderà (nel caso della scelta specifica in questione) con una delle date impostate attraverso il parametro denominato “Parametric Alternative Payoff (#) (figura 3.60); Riprendiamo il coupon bond che abbiamo visto con l'esempio numero 1. Come detto, tale bond paga, fra le “payment dates” comprese fra il tempo 5 e il tempo 9 (estremi inclusi) o una cedola o una coupon call, nel caso in cui venga esercitato il diritto di callability da parte dell'emittente. Nel caso esaminato con questo esempio numero 2, i parametri e i relativi valori saranno quelli riassunti nella tabella 3.3: (Tabella 3.3 – Esempio 2, Definizione parametri e valori) Parametro From Step To Parametric Payoff (#) Parametric Alternative Payoff ( #) Parametric Exercise Date (#) Valore 5 1 9 Coupon[#]*Cvg[#]*N[#] Payoff nel caso di non esercizio del diritto di callability (CouponCall[#]*Cvg[#]*N)+N Payoff nel caso di esercizio del diritto di callability Pd[#] Notiamo che nel caso in cui il diritto di callability venga esercitato, il valore dell'opzione successiva, all'interno della Strip, sarà pari a 0. 99 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Figura 3.60: Esempio 2 – Definizione dei payoff) Un esempio di Strip di Opzioni (3): Opzioni con clausola di callability (esempio specifico) Abbiamo già accennato più volte, in precedenza, che la clausola di callability (o di redimibilità) di un'attività finanziaria consente all'emittente della stessa di redimerla, ovvero di rimborsarla ad una certa data antecedente rispetto a quella fissata per la scadenza richiamandola oppure imponendo al possessore del relativo titolo di rivenderlo. Normalmente è previsto comunque un periodo cosiddetto di lock-out, ovvero un periodo (della durata di qualche anno in genere) durante il quale l'opzione redimibile non può essere esigibile o richiamabile per l'emittente; in altre parole, un periodo di blocco durante il quale l'emittente non può esercitare la clausola di redimibilità né può richiamare in via anticipata l'attività emessa. Ipotizziamo ora di trattare un semplice coupon bond fixed-floating (ovvero fisso contro variabile) il quale prevede un tasso cedolare fisso per il primo anno, un tasso variabile dal secondo anno fino alla scadenza naturale del titolo e che abbia incorporata una clausola di callability. Con la tabella 3.4 riassumiamo i dati fondamentali del problema in esame: • Principal (Capitale): 1.000,00; • Trade Date (Data di negoziazione): 13/10/2010; • Effective Date (Data inizio): 29/10/2010; • Termination Date (Data di scadenza): 29/10/2020; • Leg A frequency of payments (frequenza dei pagamenti della parte A): -; • Leg B frequency of payments (frequenza dei pagamenti della parte B): Semestrale; 100 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Tabella 3.4 – Esempio 3, Definizione parametri e valori) Scambi Primo anno Dal secondo anno in poi Alla scadenza Lock period = 1 anno Convenzioni Drivers rates reset Day Count Conventions Parte A Parte B 6,00% Max[2%; (Eur6M+125bps)] * 1000 (Principal) * * Titolo riscattabile dall'emittente un anno dopo la data di regolamento (esclusa) e dopo di che con frequenza semestrale. Si noti che il pagamento del valore di rimborso avviene o contestualmente alla data dell'estinzione anticipata (se ciò accade) o alla scadenza (ossia alla Termination Date). Parte A Parte B Advance, 2 days 30/360, Unadjusted Il file in versione .fair di questo esempio è disponibile e scaricabile direttamente dal sito web di Fairmat (www.fairmat.com). La rilevazione del tasso Euribor a 6 mesi (Eur6M), dal secondo anno in poi, avviene, in particolare, due giorni prima dell'inizio del periodo di maturazione degli interessi (pertanto la fixing convention per il computo delle date di reset e di tipo Advance). Nel dettaglio, durante il primo anno il tasso cedolare è fisso ed è uguale al 6%. Dal secondo anno in poi il tasso cedolare è, tuttavia, variabile ed indicizzato al tasso Euribor a 6 mesi, più uno Spread dell'1,25%, con un tasso minimo garantito del 2%. La frequenza dei pagamenti è semestrale. Dal secondo anno in poi, l'emittente del bond può richiamarlo, riacquistandolo ad un prezzo predeterminato, generalmente pari al valore nominale, in corrispondenza di ciascuna “payment date”. Il possessore del titolo ha quindi venduto all'emittente un'opzione call con strike price pari al prezzo predeterminato. Questo diritto, generalmente, non può essere esercitato durante i primissimi anni di vita del titolo (periodo di lock-out period, o periodo di blocco). Il premio relativo all'opzione redimibile (o callable option) si riflette in un minor prezzo per il bond o, in maniera equivalente, in un maggior tasso di rendimento rispetto a quello riconosciuto su un titolo avente caratteristiche simili ma privo di clausola di callability. Nella tabella 3.5 riproponiamo lo stesso quadro riassuntivo proposto in precedenza con la tabella 3.4, in termini però diversi, ovvero in termini parametrici e quindi utilizzando gli oggetti disponibili nell'ambiente Parameters & Functions. • Principal (Capitale): N; • Trade Date (Data di negoziazione): Valuation Date (Data di valutazione); • Effective Date (Data inizio): Effective Date (Data inizio); • Termination Date (Data di scadenza): Pda[end]; • Leg A frequency of payments (frequenza dei pagamenti della parte A): -; • Leg B frequency of payments (frequenza dei pagamenti della parte B): Matfl; 101 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Tabella 3.5 – Esempio 3, Definizione parametri e valori) Scambi Primo anno Dal secondo anno in poi Alla scadenza Lock period = 1 anno Convenzioni Drivers rates reset Day Count Conventions Parte A - Parte B Fix Max[K; (EuriborMatfl+Spd/1000)] Funzione Float CN * 1000 (Principal) * * Titolo riscattabile dall'emittente un anno dopo la data di regolamento (esclusa) e dopo di che con frequenza semestrale. Si noti che il pagamento del valore di rimborso avviene o contestualmente alla data dell'estinzione anticipata (se ciò accade) o alla scadenza (ossia alla Termination Date). Parte A Parte B Reset Type: Advance; Add/Sub Days: Rday Cvg Vedremo ora come procedure dal punto di vista operativo in Fairmat. Nel dettaglio: prima di tutto dovremo aprire un nuovo progetto. Selezionando poi il percorso Settings → Project Preferences → Tab Simulation Dates and Conventions dobbiamo specificare la Valuation Date e la Effective Date, che come possiamo evincere dalle tabelle 3.4 e 3.5, corrispondono rispettivamente alla Trade Date e alla Effective Date del contratto. Dopo di che dobbiamo entrare nell'ambiente Parameters & Functions nel quale andremo ad inserire tutti gli oggetti necessari per la modellazione del contratto, che nel dettaglio sono quelli elencati con la tabella 3.6 riportata nella pagina successiva (gli oggetti elencati sono ordinati in base al loro “Type” ovvero sia in base al loro tipo). (Figura 3.61: Esempio 3 – Riepilogo oggetti inseriti nell'ambiente Parameters & Fucntions) 102 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Tabella 3.6 – Esempio 3, Descrizione analitica oggetti ambiente Parameters & Functions) Nome N Tipo Scalar LO Period Scalar Matfl Scalar Rday Scalar Fix Scalar K Scalar Spd Scalar Float CN Analytic Function Pdu Date Sequence Pda Date Vector Adjustment Rd Date Vector Adjustment Cvg Date Vector Differences Calculator Zr Disc Interpolated Function Categoria Descrizione Parameters Ammontare del nozionale del derivato. Numero di periodi di lock-out, durante i Parameters quali l'emittente non può esercitare il diritto di callability. Scadenza del tasso variabile espressa in Parameters frazioni d'anno (0,5 equivale, quindi, a sei mesi). Numero di giorni da togliere alle reset Parameters dates. Tasso cedolare fisso, valido durante il Parameters lock-out period. Floor Strike Price (prezzo minimo Parameters d'eserczio). Si utilizza nella funzione definita dall'utente Float CN. Spread aggiunto al tasso variabile espresso Parameters in punti base. Si utilizza nella funzione definita dall'utente Float CN. Funzione definita dall'utente che esprime i payoff corrisposti dall'emittente al detentore del titolo. Se il tasso variabile è Parameters inferiore al tasso K, l'emittente pagherà almeno il tasso K, altrimenti pagherà il tasso variabile più uno spread (Spd). Max è una funzione incorporata. Vettore delle date di pagamento Parameters unadjusted (non aggiustate). Vettore delle date di pagamento (ottenuto a partire dal vettore Pdu) e aggiustate per Parameters la Modified Following Date Rolling Convention. Trasformazione del vettore delle date (Date's Vector Transformation) ottenuta a partire dal vettore Pdu utilizzando l'oggetto Parameters Rday e selezionando la Date Rolling Convention Preceding. Il reset type da impostare è Advance. Date's Vector Differences Transformation ottenuta a partire dal vettore Pdu selezionando l'oggetto Thirty 360 nel menù Parameters a tendina Day Count Conventions e l'oggetto Unadjusted nel menù a tendina Date Rolling Convention. Parameters Curva di sconto. 103 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Una volta completato l'inserimento di tutti gli oggetti necessari nell'ambiente Parameters & Functions (figura 3.61), dobbiamo definire il processo stocastico sottostante attivando così l'ambiente Stochastic Processes. Con il comando “Add S. Process” possiamo inserire un modello stocastico fra quelli disponibili e presenti nella lista. La lista dei modelli stocastici disponibili può essere, tuttavia, estesa mediante dei plug-ins. Una volta inserito il processo stocastico, dovremo aprire la finestra di editing e selezionare il tab Data Source al fine di attivare il data link - nello specifico dovremo valorizzare il campo “Binding Type” e selezionare la voce “Bind Project to specific data - e, quindi, il mercato di riferimento - per cui, in altre parole, dovremo valorizzare il campo “Market” - e gli strumenti sui quali la calibrazione verrà eseguita - valorizzando, infine, il campo “Calibration Strategy” (riquadro di sinistra della figura 3.62). Nell'esempio specifico in questione utilizzeremo un ben noto e diffuso modello per la determinazione dei tassi di interesse a breve, ovvero sia il modello Hull&White 1 (ad un parametro) e la calibrazione verrà eseguita utilizzando come riferimento swapoptions di tipo europeo. (Figura 3.62: Esempio 3 – Definizione processo stocastico sottostante) Dopo aver chiuso la finestra di editing, bisognerà premere il tasto destro del mouse per aprire il menù a tendina relativo alla calibrazione e selezionare la voce “Calibrate model using data provider” (riquadro di destra della figura 3.62) Per quanto attiene alla scelta del market data provider, si deve selezionare il seguente percorso Settings → Fairmat Preferences → Tab Core Preferences → Tab General → Menù a tendina Market Data Provider. 104 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Una volta definito il processo stocastico sottostante, il passo successivo sarà quello di impostare il modello di discounting più opportuno. In questo caso dovremo utilizzare un processo stocastico per il quale si deve definire un modello di discounting riferito al processo stocastico medesimo (@V1 – riquadro di sinistra della figura 3.63). (Figura 3.63: Esempio 3 – Impostazione del modello di Discounting) In aggiunta, dovremo poi definire lo stile di simulazione e il numero di percorsi della Simulazione Monte Carlo (riquadro di destra della figura 3.63). Queste impostazioni vengono specificate selezionando il seguente percorso: Settings → Numerical Settings e valorizzando i campi “# of discrete time steps” e “# of simulated paths” (per esempio, se 2000 è il numero dei giorni di calendario intercorrenti fra la Simulation Date e la Termination Date, allora 10000 potrebbe essere il numero dei percorsi simulati; per cui, in definitiva si avrà che “# of discrete time steps” = 2000 e “# of simulated paths” = 10000); 105 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT A questo punto siamo pronti per la modellazione del contratto nell'ambiente Option Map. Dalla tavolozza grafica della Option Map, con un semplice drag&drop (letteralmente, “prendi e lascia”), dovremo inserire due Strip of Options e, infine, una Single Option (figura 3.64). In particolare, la prima Strip of Options si riferisce al periodo di lock-out, durante il quale l'obbligazione paga un tasso cedolare fisso; la seconda Strip of Options si riferisce ai semestri successivi, durante i quali l'obbligazione paga un tasso cedolare variabile e l'emittente potrebbe riscattare il titolo in corrispondenza di una qualunque “payment date”; l'ultima Single Option, che è di tipo Standard, include sia il pagamento dell'ultima cedola prevista che il rimborso finale del capitale, il quale avviene appunto alla scadenza. (Figura 3.64: Esempio 3 – Modellazione contratto nell'ambiente Option Map) Al fine di sfruttare le caratteristiche di callability, dovremmo inserire i payoff rispettando il punto di vista del possessore dell'opzione (ovvero sia il punto di vista dell'acquirente della callability option e quindi dell'emittente dell'obbligazione, nel caso specifico in esame). Ma siamo interessati maggiormente ad una valutazione dal punto di vista del possessore del bond (che nel caso specifico preso in esame è anche il venditore della callability option) e quindi il punto di vista di colui che lo ha sottoscritto e acquistato. A tal fine utilizziamo il Functional Operator - del quale al momento facciamo solo un accenno ma che vedremo nel dettaglio nei paragrafi successivi dedicati agli Operators disponibili in Fairmat ponendolo prima di tutti gli altri oggetti delineati in precedenza (figura 3.64). Con la figura 3.67 proponiamo il dettaglio relativo la funzione definita Float CN, creata nell'ambiente Parameters & Functions come y=f(x1) - dove x1 è la variabile indipendente e y è il risultato della funzione - e richiamata nell'ambiente Option Map o, meglio, nella finestra di editing della Strip of Options. x1, in particolare, è una variabile di tipo Scalar e, in quanto tale, può essere o la componente di un vettore (quale ad esempio Rd[end]), o il risultato di una funzione incorporata (quale, ad esempio, la funzione RATE, utilizzata in questo esempio specifico per la determinazione del tasso cedolare) o una semplice costante (quale, ad esempio, è Matfl che è una variabile di input per la funzione RATE, appena accenata). K e Spd sono anche essi Scalar e come tali possono essere invocati direttamente nella finestra di editing della funzione. Possiamo definire la funzione Float CN come una funzione di tre variabili indipendenti (y=f(x1, x2, x3) = max(x2; x1+x3/1000)) richiamandola nell'ambiente Option Map, nella finestra di editing della Strip of Options, come Float CN(Rate(Rd[end]; Matfl; @V1); K; Spd). Con la figura 3.66 mostriamo la finestra di editing della Strip of Options relativa al periodo durante il quale l'obbligazione paga un tasso variabile e l'emittente può esercitare il diritto di callability. 106 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Partendo dal 3° semestre (e quindi scrivendo nel campo “From” LOper+1, dove LOper assume valore 2 poiché il lock-out period nel caso specifico in esame copre un periodo della durata di due semestri) fino ad arrivare al 19° Semestre (e quindi scrivendo nel campo “To” Lenght(@Pda) – 1, dove Lenght(@Pda) assume valore pari a 20) l'emittente paga il tasso Float CN (ossia il tasso Euribor a 6 mesi maggiorato di uno spread dell'1,25% con un tasso minimo garantito del 2%) moltiplicato per Cvg, ovvero il periodo di riferimento, coperto dal tasso. (Figura 3.65: Esempio 3 – Inserimento operatore Functional e definizione ValSide) (Figura 3.66: Esempio 3 – Definizione payoff durante il periodo di esercitabilità del diritto di callability) (Figura 3.67: Esempio 3 – Definizione Analytic Function FLOATCN) 107 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Teniamo presente che, semplificando, nel caso specificato preso in esame: x1 → Tasso Euribor a sei mesi, incognita del modello; x2 → tasso variabile minimo → K; x3 → Spread applicato al tasso Euribor a sei mesi → Spd La possibilità relativa all'estinzione anticipata del contratto viene abilitata attraverso il menù a tendina Callability, del quale ne abbiamo già parlato in precedenza descrivendone le scelte possibili: – “No Callability”: per cui la caratteristica di callability resta disabilita. Questa è l'impostazione di default; – “Callability”: per cui la caratteristica di callability viene abilitata. Nel caso in cui la condizione di uscita occorra alla i-esima data, il contratto prevederà il pagamento dell'iesimo payoff; – “Callability with different exit payoff”: per cui la caratteristica di callability viene abilitata. Nel caso in cui la condizione di uscita occorra alla i-esima data, il contratto prevederà il pagamento di un payoff alternativo, il cui valore viene specificato nel campo “Parametric Alternative Payoff (#)”; Quando attiviamo la caratteristica di callability, una volta chiusa la finestra di editing, sopra a destra dell'opzione appena creata nell'ambiente Option Map apparirà una C di colore rosso, proprio per segnalare la presenza di tale caratteristica per l'opzione in questione (figura 3.64). 108 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Gli Operators dell'ambiente Option Map: come inserirli ed utilizzarli Gli Operators che possiamo utilizzare in Fairmat sono i seguenti: • Functional Operator; • Decisional Operator; • AND Operator; • OR Operator; Altri Operators sono disponibili con l'installazione di appositi plug-ins. Il Functional Operator Il Functional Operator (figura 3.68) serve per modellare una decisione relativa ad un dato istante (decisione modellata come il risultato della valutazione di una funzione) o per modellare una trasformazione dei flussi di cassa generati da una sequenza di nodes nell'ambito di una struttura decisionale. Il Functional Operator ci permette di fare operazioni sui valori dei child nodes di una struttura decisionale (ai quali faremo riferimento con le variabili x1, x2, …, xn). (Figura 3.68: Functional Operator) Facendo doppio click sull'Operator creato nell'ambiente Option Map si aprirà la finestra di editing relativa allo stesso (figura 3.69). Nella finestra di editing possiamo fornire una breve descrizione formale relativa all'Operator creato e darne un nome. Nell'esempio illustrato con la figura 3.69, in particolare, i child nodes successivi al Functional Operator sono A e B, mostrati rispettivamente con le nomenclature x 1 e x2. Nel caso specifico, i nodes portano avanti, in particolare, delle differenze fra A e B. 109 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Figura 3.69: Functional Operator – Finestra di editing) Il Decisional Operator Il Decisional Operator (figura 3.70) ci consente di inserire delle condizioni sulle opzioni di scelta, quindi dei costrutti di selezione lungo la struttura decisionale. (Figura 3.70: Decisional Operator) Facendo doppio click sull'Operator creato nella Option Map si aprirà la finestra di editing relativa allo stesso (figura 3.71). Una volta aperta la finestra di editing, dovremo fare doppio click sulla voce If[ ], per poter inserire il costrutto di selezione, ovvero la condizione legata alla If, e poi doppio click sulla voce “Select”, in modo da selezionare o l'opzione A o l'opzione B attraverso un apposito menù a tendina. Si noti che affinché questo Operator abbia un senso da un punto di vista logico, esso necessita di almeno due “leaf” (ovvero di almeno due foglie, letteralmente, della struttura decisionale) e quindi 110 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT di almeno due possibilità, due nodes, fra le quali scegliere per la prosecuzione all'interno della struttura decisionale. (Figura 3.71: Decisional Operator – Finestra di editing) L'AND Operator L'AND Operator (figura 3.72) esprime la possibilità di esercitare due o più opzioni non esclusivamente reciproche fra loro. Tale Operator ci permette di calcolare la somma di opzioni fra loro indipendenti. (Figura 3.72: AND Operator) 111 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT L'OR Operator L'OR Operator (figure 3.73 e 3.74) seleziona la migliore successione di nodes utilizzando varie metriche di riferimento (ad esempio o massimizzando, oppure minimizzando, il valore di una successione di nodes). L'OR Operator ci permette di calcolare il massimo valore all'interno di una serie di Strip of Options (esclusive fra loro), o di impegni di pagamento, e ne sceglie la migliore. L'Operator in questione modella la seguente situazione: il decision maker esercita la miglior Strip of Options e attendendo fino al momento in cui le stesse opzioni saranno esercitabili. Il decision maker ha anche la possibilità della scelta di non esercitare nessuna delle opzioni appartenenti alla successione restituendo un valore di ritorno pari a 0. Quest'ultima caratteristica dell'Operator può essere disabilitata flaggando il check-box accanto alla voce relativa alla funzionalità “Exercise at least one of the subsequent nodes” detta anche “Excluding not-exercising option”. In questo caso il decision maker sarà obbligato a scegliere almeno una delle Strip of Options, o di impegni di pagamento. In altre parole: l'OR Operator si comporta come un'opzione che, nella determinazione della politica di ottimizzazione, considera anche la possibilità di non esercitare nessuna delle Strip of Options. Se, però, viene flaggato il check-box “Exercise at least one of the subsequent nodes”, la possibilità di non fare nessuna operazione non sussisterà. (Figura 3.73: OR Operator) (Figura 3.74 – OR Operator – Finestra di editing) 112 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT I Branches Un branch (ossia un ramo – figura 3.75) è una connessione fra due o più elementi. Se due opzioni (oppure un Operator e un'opzione) sono collegate fra loro attraverso un branch nella direzione da sinistra verso destra, lungo la Option Map, allora l'elemento (opzione o Operator che sia) che si trova a sinistra rappresenta la causa per l'elemento (opzione o Operator che sia) che si trova a destra. Ciò significa che qualunque elemento che si trova, lungo la Option Map, a destra potrebbe accedere solo dopo che l'elemento che si trova a sinistra è stato eseguito (ovvero a causa dell'esecuzione relativa all'elemento che si trova a sinistra). In un senso ricorsivo a ritroso, implicito nella programmazione dinamica, potremmo quindi affermare che il valore dell'elemento che si trova a sinistra dipende dal valore dell'elemento che si trova a destra. Prima di inserire i dati in Fairmat dobbiamo costruire la corretta Option Map del progetto finanziario che stiamo analizzando. Questo è il punto di partenza fondamentale per affrontare al meglio il problema della valutazione di un progetto finanziario. (Figura 3.75: Esempio di utilizzo dei branches) In particolare, nell'esempio riportato con la figura 3.75, l'esercizio dell'opzione Opt_1 consentirà di poter decidere la miglior scelta possibile fra l' opzione Opt_2 e l'opzione Opt_3. L'esercizio dell'opzione Opt_2 comporterà l'esercizio delle opzioni Opt_4 e Opt_5; il payoff che ne deriverà sarà dato dalla media aritmetica dei payoff derivanti, appunto, dalle stesse opzioni Opt_4 e Opt_5.D'altra parte, invece, l'esercizio dell'opzione Opt_3 comporterà, dopo un flusso di cassa addizionale (il quale dovrà essere pagato oppure ricevuto), l'esercizio sia dell'opzione Opt_6 che dell'opzione Opt_7. In buona sostanza, quindi, il valore dell'opzione Opt_1 dipende sia dai suoi payoff che dai valori delle opzioni Opt_2 e Opt_3 e avrà come componente il valore massimo generato o dall'esercizio dell'opzione Opt_2 o dall'esercizio dell'opzione Opt_3. A sua volta, il valore dell'opzione Opt_2 dipende, oltre che dai suoi payoff, anche dai valori delle opzioni Opt_4 e Opt_5 e avrà come componente la media dei payoff derivanti appunto dalle opzioni Opt_4 e Opt_5. Il valore dell'opzione Opt_3, invece, dipende, oltre che dai suoi payoff, sia dall'ammontare del flusso di cassa addizionale che dai payoff derivanti dalle opzioni Opt_6 e Opt_7, sicché essa avrà come componente la somma dell'ammontare dei payoff derivanti appunto dalle opzioni Opt_6 e Opt_7. 113 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT L'ambiente Manage Scenarios Fairmat ci permette di creare differenti Scenarios (scenari o configurazioni), nell'ambito del progetto finanziario che stiamo analizzando, mediante l'utilizzo dell'apposito ambiente Manage Scenarios (figure 3.76 e 3.77). Dopo aver creato un form nell'ambiente Option Map, attraverso il tab Manage Scenarios possiamo aggiungere allo scenario di default, premendo il comando “Add New”, uno o più scenari (figura 3.76). Possiamo scegliere quale configurazione utilizzare selezionandola dalla lista di gestione degli scenari (figura 3.77). (Figura 3.76: L'ambiente Manage Scenarios - 1) (Figura 3.77: L'ambiente Manage Scenarios - 2) In ciascun scenario, le seguenti proprietà delle opzioni possono assumere valori differenti: – “Type” (American/European/Committed): in una data configurazione un'opzione potrà essere di tipo Americano mentre in un'altra potrà essere invece di tipo Committed Decision; – “Callability” (Redimibilità): una Strip of Options potrà avere o non avere la clausola di callability a seconda dello scenario; – “Enable/Disable”: un'opzione o un operatore funzionale può sussistere o meno a seconda dello scenario; La funzionalità Scenarios può essere utilizzata per creare uno scenario od una serie di scenari e/o per fare un'analisi del tipo What If (“Cosa accadrebbe se …). 114 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Il Tab Info Come già si è avuto modo di accennare all'inizio di questo capitolo, i due tab principali che si trovano alla sinistra della schermata iniziale del programma sono i tab Structure e Info (figura 3.78). Il tab Structure è stato già trattato nel corso dei precedenti paragrafi, per cui vedremo ora nel dettaglio il tab Info. (Figura 3.78: Schermata iniziale di Fairmat – il tab Info messo in evidenza) Il tab Info contiene al suo interno due campi distinti da poter riempire: 1) il campo “Notes” (Note) nel quale è possibile aggiungere, a nostra discrezione, eventuali informazioni aggiuntive relative al file .fair sul quale stiamo lavorando (figura 3.79); 2) “il campo “Document's plug-ins dependencies” (Dipendenze del documento dai plug-ins) nel quale vengono segnalate le eventuali dipendenze da plug-ins del documento in versione .fair sul quale stiamo lavorando e che, quindi, sono segnalati come mancanti e necessari e che dovremo scaricare ed installare per il file medesimo (figura 3.79); Fairmat include, infatti, in tutti i suoi modelli una lista di plug-ins che sono necessari per far funzionare un qualsiasi modello stocastico sottostante. Qualora manchi uno o più plug-ins di dipendenza e necessari per il file con estensione .fair sul quale stiamo lavorando, Fairmat provvederà prontamente a suggerirci di installare i plug-ins necessari e quindi da installare (nell'esempio riportato nella figura 3.79, il file .fair in corso di elaborazione necessita di quattro plug-ins ed in particolare dei seguenti plug-ins: “Fairmat Core”, “Dates Generator”, “Fairmat Core Extension” e “Plain Vanilla”). Premendo il tasto “OK” verremo reindirizzati al form degli Available on-line plug-ins, ossia al form relativo ai plug-ins disponibili on-line (figura 3.80). Alcuni file in versione .fair necessitano di un link ad un database modello. Quest'ultima caratteristica, tuttavia, è disponibile soltanto con la versione Professional di Fairmat. 115 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Figura 3.79: Il Tab Info) (Figura 3.80: Finestra di alert per le dipendenze dai plug-ins del documento .fair) 116 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT La Toolbar La Toolbar (figura 3.81) ci permette di fissare le principali impostazioni ai fini dell'analisi che intenderemo condurre. (Figura 3.81: Toolbar) Attraverso l'utilizzo di una serie di menù a cascata attraverso la Toolbar potremo impostare: • il Current Scenario (Scenario corrente, attuale) al quale l'analisi, che intenderemo condurre, deve riferirsi; (Figura 3.82: Toolbar – Selezione del Current Scenario) • il tipo di Analysis (Analisi) che intediamo condurre; (Figura 3.83: Toolbar – Analysis) • il Starting Node (Nodo di partenza) a partire dal quale la Simulation (Simulazione) debba partire; (Figura 3.84: Toolbar – Starting Node) 117 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT L'informazione di default per identificare un node è il codice Id, un codice univoco che identifica un oggetto (ad esempio Optio, id=1). Qualora aggiungessimo delle informazioni nel campo “Description”, queste ultime saranno visualizzabili (ad esempio 1_year); • La Effective Date, ovvero sia la data a partire dalla quale il contratto inizierà o è già iniziato. Per vedere come impostare la Effective Date in Fairmat si riveda la funzionalità Project Preferences del tab Settings, già analizzata nel dettaglio nel corso del Capitolo 1; • La Simulation Date, ovvero sia la data alla quale l'analisi che intendiamo condurre fa riferimento. Anche per quando riguarda la Simulation Date, vale quanto sopra scritto per la Effective Date, ovvero sia che si raccomanda di rivedere la funzionalità Project Preferences del tab Settings, già analizzata nel dettaglio nel corso del Capitolo 1; (Figura 3.85: Toolbar – DatePicker) (Figura 3.86: Toolbar – Lancio di un'analisi, prima possibilità) 118 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Figura 3.87: Toolbar – Lancio di un'analisi, seconda possibilità) Il comando “Run Analysis”, evidenziato nel riquadro rosso della figura 3.87, è una scorciatoia per poter lanciare un'analisi in Fairmat. Il medesimo risultato si ottiene comunque cliccando con il tasto destro del mouse sul comando “Analysis” (figura 3.86). 119 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Lo Status Panel e i suoi tab Lo Status Panel (figura 3.88) si riferisce a tutti quei tab che si trovano nella parte bassa della schermata principale. (Figura 3.88: Status Panel) I tab che compongono lo Status Panel sono i seguenti: – Valuation; – Errors; – Parameters; – Log; – Fairmat Console; Analizzeremo ora nel dettaglio, uno per uno, i tab sopra elencati. Il Tab Valuations Il tab Valuations visualizza, in ogni istante e seguendo, in particolare, un ordine decrescente (ovvero partendo dall'ultima analisi effettuata, partendo dall'analisi effettuata più recentemente), le informazioni riguardo le analisi effettuate fra cui: – lo “Starting Node” di riferimento; – il “Expected Value” (ossia il valore atteso del contratto oggetto di analisi o del progetto oggetto di analisi); – la “Standard Deviation” (o “Std. Dev.”, Deviazione Standard); – lo “Standard Error” (o errore standard relativo all'analisi); – il metodo di valutazione adottato (nell'esempio riportato nella figura 3.89, in particolare, la Simulation numero 8, evidenziata dal cursore in blu, supporta la simulazione Monte Carlo); – il “Time” della valutazione (ossia l'istante nel quale è stata effettuata l'analisi richiesta); – lo “Scenario” di riferimento; Nell'esempio riportato nella figura 3.88, l'analisi numero 8, evidenziata dal cursore in blu, è una Sensitivity Analysis (Analisi di Sensibilità) sul parametro α (alfa), riferita allo “Starting Node” IRS_KO, con lo Scenario_B come “Scenario” di riferimento e condotta utilizzando la simulazione Monte Carlo. Facendo doppio click sulla valutazione selezionata verremo reindirizzati ad una finestra contenente i dettagli relativi alla valutazione stessa. Il tab Errors 120 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Come l'etichetta stessa suggerisce, il tab Errors si riferisce ad un errore occorso durante l'utilizzo di Fairmat. Gli avvisi di errore possono essere di tre tipi distinti (figure 3.89, 3.90 e 3.91): 1) “Error Type 1”: è un tipo di errore che ci viene segnalato durante l'editing di un file .fair e quindi può apparire, ad esempio, qualora avessimo editato una Analytic Function utilizzando tre variabili senza provvedere a modificare il campo “# of indipendent variables” nel combo-box menù relativo all'editing delle funzioni. Tale tipi di errori vengono segnalati in quanto Fairmat controlla i codici durante l'editing da parte dell'utente; 2) “Error Type 2”: è un tipo di errore che normalmente occorre qualora lanciassimo un'analisi su un file .fair contenente un errore che deve essere necessariamente corretto prima di poter procedere con l'esecuzione dell'analisi stessa; 3) “Error Type 3”: è un tipo di errore che viene evidenziato per segnalarci la presenza di potenziali bug che potrebbero occorrere durante l'esecuzione del programma Fairmat. Possiamo aggiungere un commento a tali eventuali bug, qualora occorrano, e decidere se sia il caso o meno di inviare un report allo staff di Fairmat, facendo così una segnalazione in tal senso. Possiamo avvisare lo staff di Fairmat attraverso il form Fairmat's Error Report (figura 3.93) oppure postando un bug sul reporting Fairmat's Bug; (Figura 3.89: Tab Errors, Error Type 1) (Figura 3.90: Tab Errors, Error Type 2) (Figura 3.91: Tab Errors, Error Type 3) 121 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Figura 3.92: Fairmat's Error Report) Il tab Parameters Il tab Parameters (figura 3.93) fornisce informazioni derivanti dall'ambiente Parameters & Functions. E' assai utile dare un'occhiata e verificare quali sono i parametri contenuti nell'ambiente Parameters & Functions e, per alcune tipologie di oggetti, le funzionalità eventualmente attivate (come ad esempio il range impostato per la Sensitivity Analysis oppure l'attivazione dell'export flag per la Impact Analysis). (Figura 3.93: Tab Parameters) Dalla colonna “Par. Name”, facendo doppio click sulla riga alla quale l'oggetto selezionato fa riferimento, possiamo accedere alla finestra di editing dell'oggetto medesimo e modificarne le impostazioni. Dalla colonna “Export”, facendo doppio click sulla riga alla quale l'oggetto selezionato fa riferimento, possamo, direttamente dal tab Parameters, attivare (selezionando la voce “True”) o disattivare (selezionando la voce “False”) l'export flag relativo all'oggetto medesimo. 122 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Il tab Log Il tab Log (figura 3.94) fornisce informazioni riguardo ai processi software di background di Fairmat in corso mentre lo stesso programma è in fase di esecuzione. (Figura 3.94: Tab Log) Nota solo per gli sviluppatori di plug-ins per Fairmat. Tutti i metodi di programmazione di Fairmat, ovvero Console.Write e Console.Write.Line sono reindirizzati al tab Log di Fairmat. Per ulteriori informazioni si veda la sottosezione How to Publish Fairmat Plug-ins presente nella sezione “Developers” del sito web del programma (www.fairmat.com). Il Tab Fairmat Console Il tab Fairmat Console (figura 3.95) è uno strumento che utilizza variabili e funzioni in modo iterativo, come se fosse un calcolatore. (Figura 3.95: Fairmat Console) 123 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Supponiamo di voler costruire un semplice contratto derivato di tipo Collar, dato da una combinazione fra una posizione lunga su una floor otion (per cui il venditore dovrà pagare un'eventuale payoff derivante da tale opzione di tipo put) e una posizione long su un'opzione call (per cui l'acquirente dovrà ricevere un'eventuale payoff derivante da tale opzione di tipo call, appunto). La funzione fl si può esprimere come segue: • Se X ≤ Tfloor → X + Max( Tfloor – X; 0); • Se Tfloor < X ≤ Tcap → X; • Se X > Tcap → X – Max(X – Tcap; 0); Con Tfloor = 3% e Tcap = 6%. Nella command line del tab Fairmat Console (contraddistinta con il segno >) possiamo inserire le dichiarazioni di variabili (e quindi possiamo insrire, ad esempio, l'input della funzione fl allo scopo di verificare che il suo comportamento sia coerente e corretto). Nel tab Fairmat Console possiamo utilizzare le caratteristiche di auto-complete (ovvero di autocompletamento). In partcolare, mentre si stanno editando delle espressioni, premendo CTRL + SPACE, apparirà un box di auto-complete il quale ci permetterà di visualizzare tutte le possibilità di completamento disponibili e attraverso le quali possiamo completare più rapidamente l'espressione che stavamo editando, o che volevamo editare. Possiamo continuare, comunque, a scrivere, ad editare; in questo caso la lista delle “completations” disponibili verrà aggiornata di conseguenza; oppure potremo scegliere uno fra le “completations” suggerite dal programma mediante l'utilizzo delle frecce presenti sulla tastiera e premendo il tasto ENTER (Invio). 124 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT Le funzionalità di auto-complete Fairmat possiede una serie di strumenti che ci consentono di scrivere ed editare più velocemente. In particolare: • il testo delle espressioni note (e riconosciute dal programma) vengono colorate; di conseguenza vedremo i simboli e le espressioni note, riconosciute, da Fairmat contrassegnate rispettivamente con il colore arancione e con il colore rosso (mentre gli operatori e i numeri rimangono contrassegnati con il colore nero). Inoltre, al fine di agevolarci nella creazione delle espressioni, il programma evidenzia le coppie di parentesi inserite (tonde, quadre, graffe); • Le espressioni possono essere auto-completate premendo CTRL + SPACE; • I simboli creati possono essere rinominati dall'utente in qualunque momento; L'Autocomplete box aiuta a risparmiare tempo nell'editing delle espressioni, mostrandoci quali sono le funzioni e i simboli definiti nel progetto e/o disponibili in Fairmat. L'Autocomplete box funziona nel seguente modo: • In ogni textbox di Fairmat durante l'editing delle espressioni, possiamo premere il comando CTRL + SPACE. Questo comando ci mostrerà un form nel quale possiamo completare l'espressione che stavamo scrivendo; • Una volta che appare il form di autocomplete, possiamo comunque continuare a scrivere (in questo caso la lista dei possibili completamenti conosciute dal programma verrà aggiornata) oppure può scegliere l'oggetto di completamento desiderato e selezionarlo utilizzando il mouse e i tasti direzionali della tastiera UP e/o DOWN. Premendo poi il tasto ENTER sceglieremo e completeremo l'espressione che stavamo scrivendo; • Contrariamente al caso di selezione di una variabile costante o di uno Scalar, se l'oggetto che abbiamo selezionato è una funzione, la lista delle possibili differenti forme funzionali apparirà sul lato destro del pannello. Le forme funzionali selezionabili possono essere scelte utilizzando i tasti direzionali della tastiera LEFT e/o RIGHT; • Per il simbolo selezionato viene fornito un link al sistema di aiuto, accessibile cliccando sulla voce “More Help”. Tale link attiverà Fairmat nella ricerca del sistema di supporto per il simbolo selezionato appunto; Per comprendere appieno il funzionamento delle funzionalità di Autocomplete, diamo un'occhiata all'esempio riportato nella figura 3.96. In particolare, dopo aver editato “Ma”, premendo il comando CTRL + SPACE, Fairmat mostra un box con il quale possiamo vedere tutte le funzioni contenenti le lettere “ma” (oppure tutti gli oggetti creati e presenti nell'ambiente Parameters & Functions contenenti le lettere “ma”, i quali vengono contrassegnati con il colore verde). La funzionalità di Autocomplete non è case sensitive; in altre parole non è sensibile alle differenze tra i caratteri maiuscoli o minuscoli della tastiera. Di conseguenza, nell'esempio della figura 3.96, risulta che a contenere le lettere “Ma” siano sia la funzione vettoriale AMax che l'oggetto MatEur. Dando rilievo all'oggetto selezionato con il cursore a forma di freccia, verrà mostrata una breve descrizione dell'oggetto stesso (ad esempio Amax calcola il massimo dell'espressione expr valutata per tutti gli elementi degli vettore arr). Se l'oggetto è stato creato nell'ambiente Parameters & Functions, la breve descrizione si sovrapporrà a quanto inserito nel campo “Description” (Descrizione). 125 CAPITOLO 3 – IL WORK SPACE DI FAIRMAT (Figura 3.96: La funzionalità di Autocomplete) Il Renaming Il comando Rename ci permette di rinominare un oggetto presente nell'ambiente Parameters & Functions. Per procedere con il renaming è necessario, in particolare, selezionare l'oggetto da rinominare, selezionarlo cliccando il tasto destro del mouse e premere il comando “Rename”. La funzionalità di renaming include anche una possibilità di re-factoring (si veda in tal senso il check-box “Change also all the occurences of this symbol in the project” - ovvero, cambiare anche tutte le occorrenze di questo simbolo nel progetto – figura 3.97) la quale ci permette di rinominare il simbolo in tutte le volte, in tutte le occasioni, che esso compare all'interno del progetto. Con quanto riportato nella figura 3.97, si mostra un esempio di renaming (e di re-factoring) di una costante il cui nome originariamente è N e che dopo il renaming viene rinominata Noz. (Figura 3.97: Il Renaming) 126 CAPITOLO 4 LE ANALISI E GLI OUTPUT CAPITOLO 4 – LE ANALISI E GLI OUTPUT I tipi di analisi effettuabili Come abbiamo già avuto modo di vedere nel Capitolo 1, a proposito in particolare del Menù Analysis, selezionando, appunto, il menù stesso Fairmat ci consente di effettuare un'analisi su un file .fair. Più nel dettaglio, le analisi che possiamo effettuare sono le seguenti: – la Bivariate Sensitivity Analysis (Analisi di sensibilità effettuata congiuntamente su coppie di parametri); – la Univariate Sensitivity Analysis (Analisi di sensibilità univariata); – la Dynamic and Volatility Analysis (Analisi sulla dinamica e la volatilità); – la Impact Analysis (Analisi degli impatti), la Risk Analysis (Analisi del rischio); – la Scenario (What if) Analysis (Analisi degli scenari possibili); – la Valuation (Valutazione); – la Greek Analysis (Analisi delle greche); In particolare: • La Bivariate Sensitivity Analysis ci permette di calcolare come varia il valore del Mark to Market del contratto oggetto di analisi al variare di coppie di specifici parametri; • La Univariate Sensitivity Analysis ci permette di calcolare come varia il valore del Mark to Market del contratto oggetto di analisi al variare di uno specifico parametro alla volta; • La Dynamic and Volatility Analysis ci permette di calcolare la dinamica di andamento del valore del contratto oggetto di analisi e di calcolare la media delle varianze dell'evoluzione del valore del contratto o del progetto; • La Impact Analysis ci permette di calcolare l'impatto sul valore del Mark to Market del contratto oggetto di analisi di una specifica variazione intervenuta contemporaneamente nel valore di due o più parametri; • La Risk Analysis ci permette di determinare il livello di rischio sia della distribuzione dei futuri flussi di cassa sia del valore residuo del contratto oggetto di analisi; • La Scenario Analysis ci permette di comparare il valore del Mark to Market del contratto oggetto di analisi sotto differenti scenari ipotetici; • La Valuation ci permette di calcolare il valore del Mark to Market del contratto oggetto di analisi; • La Greek Analysis ci permette di determinare le greche del contratto oggetto di analisi. Le greche sono i coefficienti di sensibilità di un contratto finanziario derivato; Nei paragrafi che seguiranno vedremo nel dettaglio la Valuation, la Risk Analysis, la Sensitivity Analysis, la Impact Analysis, la Scenario Analysis e la Greek Analysis; Valuation 127 CAPITOLO 4 – LE ANALISI E GLI OUTPUT La Valuation restituisce il Mark to Market del contratto oggetto di analisi. Per lanciare una Valuation dobbiamo entrare nell'ambiente Option Map, selezionare un Operator, cliccare il tasto destro del mouse e selezionare il percorso Analysis → Valuation (figura 4.1). Prima ancora di procedere con la Valuation di un contratto dobbiamo però impostare le preferenze selezionando il percorso Settings → Project Preferences. Alternativamente, si può utilizzare la Toolbar posta in alto nella schermata principale (figura 4.2). (Figura 4.1: Valuation – Primo metodo di lancio) (Figura 4.2: Valuation – Secondo metodo di lancio) Una volta lanciata la Valuation e terminata la sua elaborazione, il programma restituisce una riga 128 CAPITOLO 4 – LE ANALISI E GLI OUTPUT sotto il tab Valuations dello Status Panel posto in basso a sinistra della schermata principale nel quale vengono mostrati – come abbiamo già avuto modo di vedere nel Capitolo 3 e più precisamente nel paragrafo che tratta proprio lo Status Panel – i principali risultati della Valuation stessa ovvero: – lo Starting Node di riferimento; – l'Expected Value (ossia il valore atteso del contratto oggetto di analisi); – la Standard Deviation (o St. Dev., Deviazione Standard); – lo Standard Error (o errore standard relativo all'analisi); – il metodo di valutazione adottato (nell'esempio riportato nella figura 4.2, in particolare, la Simulation numero 6 supporta la simulazione Monte Carlo); – il Time della valutazione (ossia l'istante nel quale è stata effettuata l'analisi richiesta); – lo Scenario di riferimento; Con un doppio click con il tasto sinistro del mouse sulla riga sotto il tab Valuations, Fairmat mostra anche un grafico con una distribuzione di probabilità (ovvero una distribuzione delle probabilità attese – figura 4.3) e il valore attuale netto del progetto stesso (ovvero il Net Project Value o (E)NPV o il Mark to Market nel caso specifico degli strumenti finanziari). Nell'esempio mostrato con la figura 4.3 la parte colorata di blu della distribuzione si riferisce ai flussi di cassa positivi, mentre la parte colorata di rosso della distribuzione si riferisce a flussi di cassa negativi. Sotto il grafico viene mostrato un prospetto riassuntivo che fornisce i valori relativi al valore atteso, l'errore standard e il valore atteso condizionato dal valore del Mark to Market positivo del contratto (indicato con E[MTM|MTM>=0]) e il valore atteso condizionato dal valore del Mark to Market negativo del contratto (indicato E[MTM|MTM<0]) in relazione alle loro probabilità di realizzazione. Per quanto attiene l'analisi dei percentili essa va letta, nel caso di flussi di cassa negativi, come la probabilità di perdere più del valore atteso; nel caso, invece, di flussi di cassa positivi, essa va letta come la probabilità (pari al 100% meno le relative probabilità) di guadagnare più del valore atteso. Sempre nell'esempio della figura 4.3, il fair value del contratto oggetto di analisi è pari a -1.018.52 euro. Vi è una probabilità relativa del 100% - 80% = 20% di guadagnare più di 1.368,68 euro e, dall'altro lato, vi è la stessa probabilità (ovvero il 20% di probabilità) di perdere di più di -3.396,94 euro. (Figura 4.3: Valuation – Esempio di distribuzione di probabilità) Qualora volessimo modificare la percentuale dell'intervallo della massa di distribuzione impostando 129 CAPITOLO 4 – LE ANALISI E GLI OUTPUT il nuovo valore sotto il tab Distribution si dovrà selezionare il seguente percorso (figura 4.4): Settings → Project Preferences → Analysis Preferences → Distribution → Campo Show the interval containing the x% of mass distribution. (Figura 4.4: Valuation – Modifica percentuale dell'intervallo della massa di distribuzione) Possiamo ripetere la Valuation sul contratto oggetto di analisi quante volte lo riteniamo opportuno. I risultati delle analisi vengono mostrati da quella più recente a quella più vecchia (più precisamente, e per migliore comprensione, la prima riga del tab Valuations dello Status Panel si riferisce all'ultima analisi lanciata). Spesso è utile impostare la funzione Repeated Analysis – attraverso la selezione del percorso Settings → Repeated Analysis – la quale ci permette di implementare l'esecuzione dell'analisi sul contratto oggetto di analisi per il numero di volte impostato mediante la selezione del percorso Settings → Fairmat Preferences → Repeated Analysis: number of replications. In quest'ultimo caso, Fairmat mostra sul tab Log dello Status Panel anche il valore medio e un valore per la deviazione standard della popolazione statistica oggetto dell'analisi. Risk Analysis La Risk Analysis ci permette di determinare il livello di rischio sia della distribuzione dei futuri flussi di cassa (selezionando il percorso Risk Profile → Cash Flows of the contract) sia del valore residuo del contatto derivato oggetto di analisi (selezionando il percorso Risk Profile → Value of the Contract) in corrispondenza delle payment dates. Per avviare la Risk Analysis dobbiamo entrare nell'ambiente Option Map, selezionare un Operator (OR o AND oppure una funzione quale può essere ad esempio la funzione Sum – Somma), cliccare il tasto destro del mouse e selezionare il percorso Analysis → Risk Analysis (figura 4.5). In alternativa, possiamo avviare la Risk Analysis utilizzando la Toolbar posta in alto nella schermata principale (figura 4.6). In via opzionale, possiamo poi determinare il livello di rischio dei flussi di cassa futuri e del valore residuo del contratto oggetto di analisi riferito ad uno specifico vector date. In questo caso verranno prese in considerazione ai fini dell'analisi solo le date posteriori a quella della valutazione. 130 CAPITOLO 4 – LE ANALISI E GLI OUTPUT (Figura 4.5: Risk Analysis – Primo metodo di lancio) (Figura 4.6: Risk Analysis – Secondo metodo di lancio) Possiamo ripetere la Risk Analysis sul contratto oggetto di analisi quante volte riteniamo opportuno. I risultati delle analisi vengono mostrati da quella più recente a quella più vecchia. Spesso è utile impostare la funzione Repeated Analysis – attraverso la selezione del percorso Settings → Repeated Analysis – la quale ci permette di implementare l'esecuzione dell'analisi sul contratto oggetto di analisi per il numero di volte impostato mediante la selezione del percorso Settings → Fairmat Preferences → Repeated Analysis: number of replications. In quest'ultimo caso, Fairmat mostra sul tab Log dello Status Panel anche il valore medio e un valore per la deviazione standard della popolazione statistica oggetto dell'analisi. 131 CAPITOLO 4 – LE ANALISI E GLI OUTPUT (Figura 4.7: Risk Analysis – Esempio di distribuzione di probabilità 1) (Figura 4.8: Risk Analysis – Esempio di distribuzione di probabilità 2) Sensitivity Analysis La Sensitivity Analysis ci permette di studiare come la variazione (incerta) nel risultato, nell'output, di un modello matematico possa essere rapportata, da un punto di vista qualitativo o da un punto di vista quantitativo, a differenti fonti di variazione nell'input (o negli input) del modello. Una volta creato un file .fair i passi che dovremo seguire, compiere, per l'implementazione della Sensitivity Analysis sono i seguenti: 1) Primo Passo (figura 4.9): selezionare nell'ambiente Parameters & Functions il parametro (o 132 CAPITOLO 4 – LE ANALISI E GLI OUTPUT i parametri) che dovrà variare (o che dovranno variare) durante la Sensitivity Analysis, fare doppio click su esso (o su essi) e valorizzare i campi Expression (tramite tale valorizzazione, in particolare, imposteremo il valore a partire dalla quale inizierà la Sensitivity Analysis) e Range (tramite tale valorizzazione, invece, imposteremo l'intervallo entro il quale la variabile potrà subire variazioni). Si noti che se Range è impostato come uno Scalar, la Sensitiviy Analysis verrà condotta sull'intervallo [Valore base – Range; Valore base + Range] dove Valore base indica il valore attuale, corrente, del parametro; se, invece, Range è impostato come un vettore di due elementi, espresso nella forma a1; a2, l'intervallo utilizzato sarà [a1; a2]; 2) Secondo Passo: ripetere il passo indicato nel precedente punto 1) per tutti i parametri interessati alla Sensitivity Analysis. La scelta di due parametri può essere utile sia per condurre una Univariate Sensitivity Analysis (ovvero un'analisi di sensibilità univariata, condotta su un solo parametro di riferimento alla volta) sui due parametri considerati ciascuno singolarmente, sia per condurre una Bivariate Sensitivity Analysis (ovvero un'analisi di sensibilità bivariata, effettuata congiuntamente su coppie di parametri) sui entrambi i parametri considerati in maniera congiunta, contemporaneamente; 3) Terzo Passo (figura 4.10): per avviare la Sensitivity Analysis dobbiamo entrare nell'ambiente Option Map, selezionare un Operator (OR o AND oppure una funzione quale può essere ad esempio la funzione Sum – Somma), cliccare il tasto destro del mouse e selezionare il percorso Analysis → Univariate/Bivariate Sensitivity Analysis; In alternativa (figura 4.11) possiamo avviare la Sensitivity Analysis utilizzando la Toolbar posta in alto nella schermata principale. (Figura 4.9: Sensitivity Analysis – Primo metodo di lancio, passi 1 e 2) 133 CAPITOLO 4 – LE ANALISI E GLI OUTPUT (Figura 4.10: Sensitivity Analysis – Primo metodo di lancio, passo 3) (Figura 4.11: Sensitivity Analysis – Secondo metodo di lancio) Possiamo ripetere la Sensitivity Analysis sul contratto derivato quante volte riteniamo opportuno. I risultati delle analisi vengono mostrati da quella più recente alla più vecchia. Spesso è utile impostare la funzione Repeated Analysis (attraverso la selezione del percorso Settings → Repeated Analysis) la quale ci permette di implementare l’esecuzione dell’analisi sul contratto per le volte impostate con il percorso Settings → Fairmat Preferences →Repeated Analysis: number of replications. In quest’ultimo caso, Fairmat mostra sul tab Log dello Status Panel anche il valore medio e un valore per la deviazione standard della popolazione statistica oggetto dell’analisi. Impact Analysis La Impact Analysis mostra l'impatto sul Mark to Market del contratto oggetto di analisi di una specifica variazione intervenuta contemporaneamente nel valore di uno o più parametri. Qualora la Impact Analysis venga effettuata su due o più parametri al termine dell'elaborazione i parametri verranno mostrati in ordine crescente, ovvero in base alla capacità di ciascuno di essi di impattare sul valore del Mark to Market. I passi che dobbiamo compiere per poter lanciare una Impact Analysis sono i seguenti: 1) Primo passo (figura 4.12): entrare nell'ambiente Parameters & Functions e scegliere il parametro, o i parametri, il cui impatto sul Mark to Market del contratto oggetto di analisi 134 CAPITOLO 4 – LE ANALISI E GLI OUTPUT dovrà essere valutato, cliccandoci sopra due volte verificando poi se la voce Impact del tab Analysis sia flaggata o meno; nel caso non fosse flaggata, flaggarla; 2) Secondo Passo: ripetere il passo indicato nel precedente punto 1) per tutti i parametri interessati dalla Impact Analysis. Diversamente che nel caso della Sensitivity Analysis dovremo poi definire il range di riferimento non compilando direttamente il relativo box ma selezionando il seguente percorso: Settings → Project Preferences → Analysis Preferences → tab Impact (figura 4.13); 3) Terzo Passo: nell'ambiente Option Map, selezionare un Operator (AND, OR oppure una funzione, quale può essere ad esempio Sum – Somma; in ogni caso, normalmente, si sceglie l'Operator che si trova più a sinistra), cliccare il tasto destro del mouse e selezionare il seguente percorso: Analysis → Impact Analysis; In alternativa, possiamo avviare la Impact Analysis utilizzando la Toolbar posta in alto nella schermata principale (figura 4.14). (Figura 4.12: Impact Analysis – Primo metodo di lancio) (Figura 4.13: Impact Analysis – Definizione del range di riferimento) 135 CAPITOLO 4 – LE ANALISI E GLI OUTPUT (Figura 4.14: Impact Analysis – Secondo metodo di lancio) Ad ogni lancio della Impact Analysis Fairmat restituisce come una riga sotto il tab Valuations dello Status Panel. Con un doppio click su ogni riga presente nel tab Valuations l’applicativo mostra una figura che traccia il gap nel Mark to Market del contratto oggetto di analisi, causato dall’incremento (o dal decremento) nel valore del parametro inserito come input (o dei parametri inseriti come input). Il programma pone in ordine decrescente i parametri coinvolti nella Impact Analysis ovvero in base alla loro capacità di impatto sulla variazione del Mark to Market del contratto oggetto di analisi. Un esempio di grafico relativo al gap nel Mark to Market viene mostrato con la figura 4.15 nella quale il parametro maggiormente significativo è σ (sigma), seguito da α (alfa). Questo implica che nel contratto oggetto di analisi, prezzato con il processo stocastico Hull & White ad un parametro, il parametro σ è il più importante e significativo. Questa informazione ci può essere utile per una migliore calibrazione dei parametri. Sempre analizzando attentamente ed ancora una volta la figura 4.15, si può notare anche una barra verticale nera che rappresenta il valore atteso del contratto oggetto di analisi (Expected Project Value), valore che funge da benchmark di riferimento per la valutazione. (Figura 4.15: Impact Analysis – Esempio di grafico relativo al gap nel Mark to Market) 136 CAPITOLO 4 – LE ANALISI E GLI OUTPUT Scenario Analysis Come abbiamo già avuto modo di vedere nel corso del Capitolo 3, nel paragrafo dedicato all'ambiente Manage Scenarios, il medesimo ambiente ci permette di creare differenti scenari (o configurazioni) nell'ambito di un progetto di natura finanziaria (figura 4.16). Di base viene impostato uno scenario di "Default", ma possiamo aggiungerne uno nuovo o rimuovere uno già esistente entrando appunto nell'ambiente Manage Scenarios e selezionando i comandi "Add New" o "Remove". Dopo aver creato uno scenario, possiamo scegliere quale configurazione utilizzare selezionandola dal combo box Current Scenario. (Figura 4.16: Scenario Analysis) In ogni scenario, le seguenti caratteristiche fondamentali dei contratti derivati possono assumere differenti valori: a) Contratti derivati American-Style o European-Style o Custom Tag: un contratto derivato può essere un’opzione American-Style, ossia di tipo americano, in un dato scenario, ma in un altro scenario può essere o European-Style, ossia di tipo europeo, o Custom Tag; b) Callability (ossia esigibilità): una Strip of Option può avere (o non avere) la clausola di esigibilità, a seconda dei vari scenari; c) Enabled/Disabled (Abilitato/Disabilitato): un’opzione o un Operator può essere considerato o meno a seconda dei vari scenari; d) Il simbolo di Fairmat Scenario assume la valenza di un’indice degli scenari selezionabili nella lista degli scenari possibili. Il simbolo Scenario assume valori da 1 fino al numero di scenari definiti e possibili. Ciò migliora la flessibilità nella definizione di come uno scenario differisca da un altro in quanto uno scenario può essere condizionato sulla base di un altro dato scenario attraverso espressioni logiche (come ad esempio la seguente: iif(Scenario==1; do this; do that) – ossia se lo scenario selezionato è lo scenario 1, allora deve essere eseguita una determinata operazione, altrimenti deve essere eseguita un’altra operazione). Anche le variabili dipendenti di uno scenario possono essere definite allo stesso modo, ossia sulla base 137 CAPITOLO 4 – LE ANALISI E GLI OUTPUT di un altro dato scenario attraverso espressioni logiche. Ad esempio se volessimo definire una variabile dipendente di un dato scenario A, la quale assume differenti valori in tutti gli scenari possibili, basta creare un vettore chiamato A ed utilizzare il simbolo Scenario come indice. Quindi per esempio possiamo scrivere A[Scenario]; La Scenario Analysis ci permette di lanciare le analisi Scenario o What – if (Cosa succede se ...) per poter stimare l’impatto di cambiamenti strutturali intervenuti nel modello. Quando gli scenari sono definiti nel modello, anche la Sensitivity Analysis utilizza le informazioni di configurazione generando tante linee quanti sono gli scenari (figura 4.17, nel cui esempio vengono presi in esame due scenari diversi: un'opzione con la clausola di callability ed una senza la clausola di callability). (Figura 4.17: Scenario Analysis - Esempio) Possiamo ripetere la Scenario Analysis sul contratto derivato quante volte riteniamo opportuno. I risultati delle analisi vengono mostrati da quella più recente alla più vecchia. Spesso è utile impostare la funzione Repeated Analysis (attraverso la selezione del percorso Settings → Repeated Analysis) la quale ci permette di implementare l’esecuzione dell’analisi sul contratto per le volte impostate con il percorso Settings → Fairmat Preferences →Repeated Analysis: number of replications. In quest’ultimo caso, Fairmat mostra sul tab Log dello Status Panel anche il valore medio e un valore per la deviazione standard della popolazione statistica oggetto dell’analisi. Greek Analysis Solitamente il prezzo di un contratto derivato viene calcolato utilizzando un modello statistico in grado di simulare l'andamento dell'attività finanziaria sottostante, sicchè il prezzo può essere visto, facilmente, come una funzione di un modello parametrico. Le greche sono derivate parziali di tale funzione e vengono prese in considerazione per testare la 138 CAPITOLO 4 – LE ANALISI E GLI OUTPUT sensibilità del prezzo in relazione ai cambiamenti intervenuti nelle condizioni di mercato. Oltre ai modelli parametrici, un'altra variabile che può essere presa in considerazione per questo tipo di analisi è il flusso temporale, il passare del tempo. Se prezziamo, ad esempio, un contratto Equity Derivatives (ovvero un tipo di contratto derivato avente come sottostante un titolo azionario o un paniere di titolo azionario) utilizzando come riferimento il modello di Black e Scholes allora possiamo ipotizzare, realisticamente, che il sottostante segua un GBM (Geometric Brownian Motion). Per cui: S (t ) S (t )dt S (t ) dW (t ) [4.1] Con S(0) = S0 (ovvero lo "Starting Value") e con i flussi di cassa che vengono scontati, attualizzati, ad un tasso di interesse costante privo di rischio. In questa modellazione il prezzo del contratto è una funzione V che dipende dai parametri μ, σ, S0, r nonché la vita residua del contratto, ovvero dal tempo mancante alla scadenza. Allora definiremo le greche come segue: V [4.2] S 0 2V S 02 V V r V t [4.3] [4.4] [4.5] [4.6] In particolare: • Delta (Δ) – formula [4.2] – è la derivata prima del prezzo del contratto derivato rispetto al prezzo dell'attività sottostante. Misura le variazioni attese del prezzo del contratto derivato al variare del prezzo dell'attività sottostante; • Gamma (Γ) – formula [4.3] – è la derivata seconda del prezzo del contratto derivato rispetto al prezzo dell'attività sottostante. Misura le variazioni del delta del contratto derivato al variare del prezzo dell'attività sottostante; • Vega (υ) – formula [4.4] – è la derivata prima del prezzo del contratto derivato rispetto alla volatilità del titolo sottostante, e quindi rispetto alla sua deviazione standard (la quale come è noto misura il grado di rischiosità del sottostante medesimo). Misura quindi quanto varia il valore del contratto derivato al variare del parametro σ (sigma, ovvero appunto la deviazione standard dell'attività sottostante); • Theta (Θ) – formula [4.5] – è la derivata prima del prezzo del contratto derivato rispetto a T. Misura quindi quanto varia il valore del contratto derivato al variare del tempo a scadenza, della maturità. Spesso tale greca viene espressa con un valore negativo; • Rho (ρ) – formula [4.6] – è la derivata prima del prezzo del contratto derivato rispetto al tasso di interesse privo di rischio. Misura quindi la variazione del prezzo del contratto derivato rispetto ad una variazione intervenuta nel tasso di interesse privo di rischio; 139 CAPITOLO 4 – LE ANALISI E GLI OUTPUT Espliciteremo come poter effettuare il calcolo delle greche in Fairmat. Nell'ambiente Option Map, bisogna selezionare un Operator (AND, OR oppure un altro tipo di Operator), cliccarci sopra con il tasto destro del mouse e selezionare il seguente percorso: Analysis → Greek Derivatives (figura 4.18). (Figura 4.18: Greek Analysis) Una volta terminato il calcolo delle greche, cliccando sulla corrispondente linea presente sotto il tab Valuations dello Status Panel, possiamo visualizzare una tabella riportante i valori delle stesse. Da un punto di vista squisitamente tecnico, le greche vengono calcolate numericamente attraverso delle differenze finite. Per ciascun rapporto incrementale da stimare, viene effettuata una nuova valutazione con il corrispondente parametro modificato in maniera adeguata. Per esempio la greca Delta (Δ) viene calcolata attraverso la seguente: V S 0 h V S 0 [4.7] h La greca Gamma (Γ) è una derivata seconda, sicchè sarà necessario effettuare un'ulteriore valutazione. Di conseguenza Gamma (Γ) viene calcolata attraverso la seguente: V S 0 h V ( S 0 h) 2V ( S 0 ) [4.8] h2 Attraverso questi calcoli viene fissata la testa di serie da simulare in modo tale da minimizzare l'errore statistico sul numeratore del rapporto. Ciascun processo stocastico fornisce delle informazioni riguardanti quei parametri da considerare o come un punto di partenza o come parametri di volatilità da variare nei calcoli delle greche Delta (Δ), Gamma (Γ), Vega (υ). In presenza di più processi, di più contratti da valutare, le greche verranno calcolate per tutti i parametri di tali processi così che vi saranno più Delta (Δ), Gamma (Γ) e così via. 140 CAPITOLO 4 – LE ANALISI E GLI OUTPUT Le greche dei contratti derivati sui tassi di interesse Per garantire consistenza e senso tecnico alle greche calcolate attraverso l'applicazione del modello Black e Scholes, nel caso di un contratto derivato sui tassi di interesse le greche Delta (Δ), Gamma (Γ) e Rho (ρ) vengono calcolate nel seguente modo: • Delta (Δ) e Gamma (Γ): nel modello di Black tali greche vengono calcolate rispetto al valore di partenza del tasso forward e nella valutazione il tasso di attualizzazione viene tenuto costante, invariato. Allo stesso modo, similarmente, nel caso di un processo non arbitrario sui tassi a breve, per il quale la simulazione dipende dalla struttura per scadenze dei tassi di interesse (ovvero dalla zero rate curve) – come avviene nel caso del modello Hull & White – tali greche vengono calcolate mutando costantemente la struttura per scadenze e mantenendo, invece, invariato il tasso di attualizzazione; • Rho (ρ): nel modello di Black tale greca viene calcolata considerando il tasso di interesse privo di rischio e mantenendo costante il valore iniziale del tasso forward. Allo stesso modo, similarmente, nel caso di un processo non arbitrario sui tassi a breve, per il quale la simulazione dipende dalla struttura per scadenze dei tasssi di interesse (ovvero dalla zero rate curve) tale greca viene calcolata mutando il tasso di attualizzazione e mantenendo, invece, invariata la struttura per scadenze di riferimento per la simulazione; Il cambio del metodo attualizzazione viene eseguito a prescindere dal modello di discounting prescelto (quindi indipendentemente che esso sia il modello Use Costant Risk Free Rate oppure il modello Use Deterministic Expression oppure il modello Use Dynamic Term Structure). 141 CAPITOLO 5 LA MODELLAZIONE DEI CONTRATTI FINANZIARI CAPITOLO 5 – LA MODELLAZIONE DEI CONTRATTI FINANZIARI Ogni progetto di investimento coinvolge una o più attività finanziarie sottostanti; in più vi possono essere numerose fonti di incertezza, valori guida e variabili di stato. Ciascuna attività sottostante può, in particolare, seguire o un processo stocastico secondo il processo Geometric Brownian Motion (GBM), o secondo un Mean Reverting Process, o secondo un Log-Mean Reverting Process, o secondo Generic Itô Process o, infine, secondo un Generic Log-Itô Process. I processi stocastici appena elencati in serie, sono tutti noti come processi di diffusione. Per modellare una variabile economica in una maniera più realistica possiao anche aggiungere un Poisson Jump Process ad uno già esistente. Vi sono poi disponibili anche i seguenti modelli stocastici più recenti: il Auto-Regressive Process, (o ARMA) e il Log-Auto Regressive Process (o Log-ARMA). Geometric Brownian Motion (GBM) Per una variabile di stato V(t) che segue un Geometric Brownian Motion, l'equazione del suo incremento nell'intervallo temporale di durata Δt è la seguente: V (t ) g (t ) t [5.1] V (t ) dove g indica il parametro di moto, σ incida la varianza del parametro e, infine, ϵ rappresenta una distribuzione normale standardizzata. Secondo la [5.1], il rapporto di variazione di valore dell'attività sottostante nell'intervallo temporale definito è dato dalla somma di una parte deterministica (gΔt) e di una componente stocastica (σ √ Δt ϵ ) , per cui la distribuzione dell'incremento di V(t) è di tipo log-normale. Il processo log-normale viene spesso utilizzato per modellare l'evoluzione dei prezzi delle attività finanziarie o dei valori dei progetti finanziari (per cui, ad esempio tale processo può essere molto utile per calcolare il valore attuale dei flussi di cassa prodotti dal progetto) in quanto essi non possono mai assumere valori negativi. La caratteristica principale di questo tipo di processi è quello per cui, appena si presta attenzione al futuro, il range dei percorsi possibili (dei “path” possibili), soprattutto per il processo della distribuzione log-normale, si amplifica con il tempo. Ovvero, la volatilità dell'attività sottostante, misurata dalla sua deviazione standard, cresce con la radice quadrata della lunghezza dell'orizzonte temporale di riferimento. Infatti: V (t ) gV (t )t [5.2] gt V (t ) V (0)e [5.3] 2 2 VarV (t ) V (t ) t [5.4] 2 2 Var V (t ) V (t ) t [5.5] 2 2 gt t 1 VarV (t ) V (0) e [5.6] 2 Utilizzo del GBM in Fairmat In Fairmat, nell'ambiente Stochastic Process, possiamo inserire un processo di Geometric Brownian Motion selezionando il seguente percorso: Add S. Process → Standard Processes: GBM Appena inserito nell'ambiente Stochastic Process un GBM, sono editabili i seguenti tab (figura 5.1): Data Source, GBM, Preview, Bounds, Jumps, Parameters e History. Analizzeremo ora nel dettaglio 142 CAPITOLO 5 – LA MODELLAZIONE DEI CONTRATTI FINANZIARI due dei tab mostrati nella figura 5.1, ovvero i tab Data Source e GBM, che sono i tab principali e più importanti. Il tab Data Source mostra e ci richiede di compilare i seguenti campi: • “Binding type”: con il quale possiamo decidere se collegare il progetto ad una specifica serie di dati (tramite la selezione della voce “Bind object to specific data”, o di scollegare il progetto a qualsiasi data source, con la conseguenza che le informazioni eventualmente acquisite in precedenza andranno perse (tramite la selezione della voce “Unbind object data source (binding info will be lost”) oppure ancora, infine, di disabilitare il collegamento ai dati (tramite la selezione della voce “Disable Data Binding”); Qualora avessimo deciso di valorizzare il campo “Binding type” selezionando la voce “Bind object to specific data” diverranno poi selezionabili e valorizzabili i seguenti campi: • “Market”: con il quale andiamo ad indicare il mercato di riferimento; • “Foreign Market”: con il quale andiamo ad indicare il mercato estero di riferimento; • “Ticker”; • “Calibration Strategy”: con il quale specifichiamo la strategia di calibrazione da imporre al modello stocastico generato; in tal senso le scelte possibili sono le seguenti: “Historical series calibration” (Calibrazione mediante utilizzo delle serie storiche), “Exchange rate historical calibration” (Calibrazione mediante utilizzo dei tassi di cambio storici); “Volatility surface calibration” (Calibrazione mediante utilizzo della volatilità apparente); Infine, premendo sul tasto “Calibration Options” possiamo impostare per la “Calibration Strategy” scelta: 1) “Time series samples frequency” (frequenza di campionamento della serie temporale); 2) “Interval in years on which the samples must be found” (intervallo di tempo, espresso in anni, sul quale si deve effettuare il campionamento); 3) “Minimum number of observations in historical series” (Numero minimo di osservazioni delle serie storiche); 4) “Maximum number of observations in historical series” (Numero massimo di osservazioni delle serie storiche); 5) “Growth Rate calibration” (calibrazione del tasso di crescita): la calibrazione può avvenire seguendo due diverse modalità: “Use Historical Price” (Utilizzo dei prezzi storici) oppure “Use Zero Rate Curve” (Utilizzo della struttura per scadenze dei tassi di interesse); 6) “Volatility calibration method” (metodo di calibrazione della volatilità): i metodi adottabili possono essere, alternativamente, i seguenti: “Population”, “Risk Metrics”, “Risk MetricsAVG”; 7) “Risk metrics average window” (finestra Risk MetricsAVG); 8) “Local currency conversion” (conversione in valuta locale); 9) “Convert to univariate process” (conversione al processo univariato); Si noti che i campi “Market”, “Foreign Market” e “Ticker” sono esportabili mediante l'attivazione del relativo flag “Publish”. Il tab GBM mostrerà poi i seguenti campi: • “Base Value”: che equivale a V(0); • “Volatility”: che equivale a σ; • “Control Parameters”: che definisce, in modo alternativo, due espressioni per il parametro di moto g, ovvero: - “Growth Rate; Risk Premium”: nella quale g equivale al Growth Rate meno il Risk 143 CAPITOLO 5 – LA MODELLAZIONE DEI CONTRATTI FINANZIARI Premium (ovvero il tasso di crescita meno il premio al rischio); - “Payout Rate (Dividend Yield)”: nella quale g equivale al Payout Rate (ovvero il tasso di distribuzione) che sta al dividend yield meno il valore costante del risk free rate (ovvero il tasso privo di rischio); Si noti che la lunghezza di Δt viene definita selezionando il seguente percorso: Settings → Numerical Settings → campo # of discrete time steps. Al momento le specificazioni sul GBM e relative all'espressione del “Payout Rate” (“Dividend Yield”) possono essere utilizzate solo con il metodo di attualizzazione al tasso di interesse privo di rischio (o risk free rate). Qualora necessitassimo di un altro metodo di attualizzazione dovremo, al momento, modellare i flussi di casso impostando il tasso di crescita (Growth Rate) e il tasso del premio al rischio (Risk Premium). (Figura 5.1a: GBM, campi da compilare) 144 CAPITOLO 5 – LA MODELLAZIONE DEI CONTRATTI FINANZIARI (Figura 5.1b: GBM, esempio di andamento grafico) Calibrazione del MGB: opzioni di stima Come abbiamo avuto modo di accennare in merito alle possibili strategie di calibrazione selezionabili nel tab Data Source, la calibrazione dei parametri relativi al tasso di crescita (“Growth Rate”) e alla volatilità (“Volatility”) può essere performata utilizzando tre differenti strategie: 1) Calibrazione delle serie storiche: è una strategia di calibrazione che sfrutta le serie storiche dell'indice; 2) Calibrazione dei tassi di cambio: è una strategia di calibrazione che fissa i parametri per la simulazione di un tasso di cambio; 3) Calibrazione della volatilità apparente: è una strategia di calibrazione che fissa i parametri scaricandoli direttamente dal market data provider. Questa caratteristica è disponibile se viene utilizzato il Market Data Provider di Bloomberg; Nel caso in cui la valuta dell'indice di riferimento sia differente dalla valuta associata al mercato nel quale il contratto viene valutato, allora viene incorporato nel tasso di crescita un aggiustamento quantitativo calcolato sulla base delle serie storiche. Se il processo è multivariato la matrice delle correlazioni viene sempre determinata attraverso le serie storiche. Vi sono poi alcune opzioni di calibrazione che possono essere impostate per modificare la procedura di calibrazione stessa. In particolare: • “Time series sample frequency” (frequenza di campionamento della serie temporale): imposta la frequenza delle serie storiche utilizzate o per stimare il tasso di crescita nel caso del calcolo dei prezzi storici o per determinare l'aggiustamento quantitativo, o per determiare la matrice delle correlazioni, nel caso in cui esse debbano essere calcolate; • “Growth rate calibration” (calibrazione del tasso di crescita): nel caso della strategia del 145 CAPITOLO 5 – LA MODELLAZIONE DEI CONTRATTI FINANZIARI • • • • • • • calcolo dei prezzi storici, se impostiamo l'utilizzo della “Zero Rate Curve”, il tasso di crescita viene calcolato attraverso la struttura per scadenze dei tassi di interesse, mentre, se impostiamo l'utilizzo dei prezzi storici, il tasso di crescita viene calcolato attraverso le serie storiche; “Volatily calibration method” (metodo di calibrazione della volatilità): imposta il metodo da utilizzare nel calcolo della volatilità: o il classico metodo sulla popolazione (“Population”) oppure le metriche del rischio (“Risk Metrics” o “Risk MetricsAVG”) laddove per le più recenti osservazioni sia stata calcolata la media; “Risk metrics average window” (finestra della media delle metriche del rischio): imposta il numero di elementi che devono essere considerati nel calcolo delle metriche del rischio medie; “Local currency conversion” (conversione della valuta locale): nel caso del calcolo dei prezzi storici, tale opzione converte le serie storiche nella valutazione della valuta di mercato e utilizza le serie convertite per calcolare il tasso di crescita e la volatilità e per assegnare il valore di partenza del processo; “Convert to univariate process” (conversione al processo univariato): nel caso della specificazione di ticker multipli nel campo “Ticker”, l'impostazione permette di specificare se il risultato sarà un processo multivariato (non si attiverà allora il relativo flag) o un processo univariato risultante dalla media ponderata delle differenti componenti (allora si attiverà il relativo flag); “Interval in years on which the samples must be ritrieved” (Intervallo temporale, espresso in anni, sul quale il campione debba essere recuperato): imposta quanto lontano dobbiamo cercare nei dati storici passati i campioni; “Minimum number of observed samples” (Numero minimo di campioni osservati): fissa il numero minimo di osservazioni da utilizzare come serie storiche; “Maximum number of observed samples” (Numero massimo di campioni osservati): fissa il numero massimo di osservazioni da utilizzare come serie storiche; Il GBM per la simulazione dei tassi di cambio Quando utilizziamo la strategia di calibrazione dei tassi di cambio, il modello di riferimento è quello descritto dalle seguenti dinamiche: dX (t ) (rd r f ) X (t ) dt X (t ) dW (t ) [5.7] dove rd e rf indicano, rispettivamente, il tasso di interesse a breve domestico privo di rischio e il tasso di interesse a breve estero privo di rischio, σ indica la volatilità del tasso di cambio, X indica il tasso di cambio e rappresenta il valore, espresso in valuta domestica, di una quantità unitaria della valuta estera. I tassi a breve vengono calcolati estrapolando nella “Zero Rate Curve”, nelle curve dei tassi a breve dei due paesi, mentre la volatilità viene calcolata sulla base delle serie storiche del tasso di cambio. La valuta domestica è quella nella quale vengono espletati, effettuati, i pagamenti e definisce la misura del rischio neutrale da utilizzare per la valutazione. L'equazione di previsione di previsione della dinamica, viene utilizzata, ad esempio, quando il mercato domestico è “EU” (Europa), il mercato estero è “US” (Stati Uniti, America) e il “Ticker” relativo al tasso di cambio è “USDEUR Curncy” che indica l'ammontare di euro corrispondenti ad un dollaro. Se prendiamo in considerazione i medesimi mercati domestico ed estero ma volessimo prezzare il reciproco del tasso di cambio (S = 1/X), nell'esempio come già accennato “USDEUR Curncy”, le 146 CAPITOLO 5 – LA MODELLAZIONE DEI CONTRATTI FINANZIARI dinamiche che dovremo utilizzare vengono trovate attraverso il Lemma di Itô e quindi attraverso le seguenti dinamiche: 1 (r f rd 2 ) S (t ) dt S (t )dW dS (t ) d X ( t ) [5.8] Fairmat automaticamente verifica la stringa del “Ticker” e, in dipendenza del mercato locale e del mercato estero, imposta le dinamiche in accordo con la [5.7] e con la [5.8]. I “Ticker” relativi alle valute supportati in Fairmat sono: – quelli trovati concatenando due delle seguenti stringhe di valute: “EUR”, “USD”, “GBP”, “JPY”, “CHF”, “HKD” seguite dalla stringa di caratteri “Curncy” (ad esempio “EURUSDCurncy”, “USDCHFCurncy”, e via discorrendo); – i tassi di cambio di riferimento della Banca Centrale Europea (BCE): indice EUCFUSD, indice EUCFGBP, indice EUCFJPY, indice EUCFCHF, indice EUCFHKD; Mean Reverting Process Il Mean Reverting Process più semplice (ovvero quello di Ornstein – Uhlenbeck) è il seguente: Vt (V Vt )t s t [5.9] dove η indica la velocità di reversione, V indica il livello di lungo termine per Vt (ovvero il livello al quale tende Vt quando t tende a ∞, infinito), s indica il parametro per identificare la volatilità e ϵ indica una distribuzione normale standardizzata. Il Mean Reverting Process è adatto per descrivere l'evoluzione dei prezzi delle materie prime o di altre attività che sperimentano shock di breve termine muovendo i prezzi al di fuori del loro livello di lungo termine (o del loro livello medio) e al di fuori del controllo da parte delle forze di mercato (domanda e offerta) le quali poi spingono indietro i prezzi stessi, entro i loro livelli di lungo termine, i loro livelli medi. Se Vt indica il prezzo di una materia prima, allora esso potrebbe essere il costo marginale di produzione di tale attività nel lungo periodo. Il Mean Reverting Process è anche adatto per modellare le dinamiche dei tassi di interesse, come ad esempio viene fatto dal modello di Vasicek o dal modello di Cox – Ingersoll – Ross. Al fine della definizione del modello di Vasicek o del modello di Cox – Ingersoll – Ross, s deve essere definito come di seguito: • s [5.10] per il modello di Vasicek s Vt • [5.11] per il modello di Cox – Ingersoll – Ross Utilizzo del Mean Reverting Process in Fairmat 147 CAPITOLO 5 – LA MODELLAZIONE DEI CONTRATTI FINANZIARI In Fairmat, nell'ambiente Stochastic Process, possiamo inserire un Mean Reverting Process selezionando il seguente percorso: Add S. Process → Standard Processes → Mean Reverting Process. Appena inserito nell'ambiente Stochastic Process un Processo di Reversione Media, sono editabili i seguenti tab (figura 5.2): Data Source, Mean Reverting, Preview, Bounds, Jumps, Parameters e History. Analizzeremo ora nel dettaglio due dei tab mostrati nella figura 5.2, ovvero i tab Data Source e Mean Reverting, che sono i tab principali e più importanti. Il tab Data Source mostra e richiede di compilare i seguenti campi: • “Binding type”: con il quale possiamo decidere se collegare il progetto ad una specifica serie di dati (tramite la selezione della voce “Bind object to specific data”, o di scollegare il progetto a qualsiasi data source, con la conseguenza che le informazioni eventualmente acquisite in precedenza andranno perse (tramite la selezione della voce “Unbind object data source (binding info will be lost”) oppure ancora, infine, di disabilitare il collegamento ai dati (tramite la selezione della voce “Disable Data Binding”); Qualora avessimo deciso di valorizzare il campo “Binding type” selezionando la voce “Bind object to specific data” diverranno poi selezionabili e valorizzabili i seguenti campi: • “Market”: con il quale andiamo ad indicare il mercato di riferimento; • “Foreign Market”: con il quale andiamo ad indicare il mercato estero di riferimento; • “Ticker”; • “Calibration Strategy”: con il quale specifichiamo la strategia di calibrazione da imporre al modello stocastico generato; in tal senso è possibile una sola scelta ovvero “Ornstein – Uhlenbeck Historical Calibration” (calibrazione basata sui dati storici ottenuti attraverso l'applicazione del modello Ornstein – Uhlenbeck); Infine, premendo sul tasto “Calibration Options” possiamo impostare per la “Calibration Strategy” scelta: 1) “Interval in years on which the samples must be found” (intervallo di tempo, espresso in anni, sul quale si deve effettuare il campionamento); 2) “Minimum number of observations in historical series” (Numero minimo di osservazioni delle serie storiche); 3) “Maximum number of observations in historical series” (Numero massimo di osservazioni delle serie storiche); Si noti che i campi “Market”, “Foreign Market” e “Ticker” sono esportabili mediante l'attivazione del relativo flag “Publish”. Il tab Mean Reverting mostrerà poi i seguenti campi: • “Starting Value”: che equivale a V(0); • “Standard Deviation”: che equivale al parametro della volatilità s; • “Mean Reversion Rate” (tasso di reversione media): che equivale al parametro η, il quale, si ricorda, indica la velocità media della reversione; • “Risk Premium” (premio al rischio): che indica il tasso di rendimento atteso al di sopra del tasso di interesse costante privo di rischio; • “Long-term Mean”: che equivale a V , il livello di lungo termine di Vt; Si noti che la lunghezza di Δt viene definita selezionando il seguente percorso: Settings → Numerical Settings → campo # of discrete time steps. 148 CAPITOLO 5 – LA MODELLAZIONE DEI CONTRATTI FINANZIARI (Figura 5.2: Mean Reverting Process, campi da compilare) (Figura 5.2b: Mean Reverting Process, esempio di andamento grafico) Log-Mean Reverting Process 149 CAPITOLO 5 – LA MODELLAZIONE DEI CONTRATTI FINANZIARI Un altro tipo di Mean Reverting Process, ovvero il Log-Mean Reverting Process, è il seguente: Vt (V Vt )t t [5.12] Vt dove η indica la velocità di reversione media, V indica il livello di lungo termine per Vt (ovvero il livello al quale tende Vt quando t tende a ∞, infinito), s è il parametro relativo alla volatilità e ϵ rappresenta una distribuzione normale standardizzata. Generic Itô Process Il processo stocastico continuo nel tempo V(t) rappresentato dall'equazione dinamica: [5.13] V (t ) (V (t ), t )t (V (t ), t ) viene definito Generic Itô Process. In particolare: ϵ rappresenta una distribuzione normale standardizzata; (V (t ), t ) e (V (t ), t ) sono funzioni note (e non di tipo casuale). La caratteristica principale del Generic Itô Process appena presentato è data dal fatto che i coefficienti relativi al flusso e alla varianza sono funzioni dello stato corrente e del tempo. La distribuzione di probabilità dell'incremento di questo processo, ovvero V (t ) è di tipo normale con media pari a (V (t ), t ) e varianza pari a 2 (V (t ), t ) t . Il Generic Itô Process è il processo di tipo continuo (il processo stocastico di tipo continuo) più generale. Log-Itô Process Il Log-Itô Process generalizzato per F (Vt , t ) ln(Vt ) (chiamato Ft), diventa: 2 Ft g t W 2 In altre parole, il processo per Ft è il seguente: Ft F0 Ft [5.14] [5.15] 2 t W Ft ln(V0 ) g [5.16] 2 Nella [5.16], la quale rappresenta un processo distribuito in modo normale con media pari a e ( g 2 / 2)t varianza pari a 2T , in particolare, ln(V0 ) indica il valore di base, di partenza, ( g 2 / 2)t rappresenta il termine deterministico e W , infine, rappresenta il termine stocastico. Il processo per Vt è, invece, il seguente: 2 [5.17] Vt V0 e g / 2 t e W La [5.17] rappresenta un processo distribuito in modo log-normale. Poisson Jump Process 150 CAPITOLO 5 – LA MODELLAZIONE DEI CONTRATTI FINANZIARI Il Poisson Jump Process è un processo soggetto a salti (o eventi) di misura fissa o variabile, causale, per la quale i tempi di arrivo seguono una distribuzione casuale secondo Poisson. Premesso che λ denota il tasso medio di arrivo di un evento, durante un intervallo di tempo di lunghezza infinitesimale pari a dt, la probabilità che un evento occorra, accada, è data da λdt, mentre la probabilità che un evento non accada è data da (1 – λdt), evento complemento. L'evento è un salto di misura u(t), la quale può essere essa stessa una variabile casuale. Denotiamo con q(t) un processo poissoniano, allora l'incremento che il processo stesso ha nell'intervallo t , t t , incremento denotato con Δdt, sarà pari a: • 0 se l'evento non accade (si ricordi che la probabilità che l'evento non accade è pari a 1 – λdt; • u(t) se l'evento accade (si ricordi che la probabilità che l'evento accade è pari a λdt; Fairmat ci permette di combinare un Poisson Jump Process con un percorso deterministico di tipo continuo (lo stesso processo poissoniano è disponibile solo attraverso specifici plug-ins). Questo tipo di processo ha un incremento pari a ΔV(t), per cui: V (t ) f (V (t ), t )t g (V (t ), t ) q (t ) [5.18] dove f (V (t ), t ) e g (V (t ), t ) sono funzioni note (non casuali). Tale incremento può essere anche combinato con un processo di diffusione, per cui possiamo riscrivere la precedente [5.18] nei seguenti termini: V (t ) a(V (t ), t )t b(V (t ), t ) g (V (t ), t )q(t ) [5.19] Si noti che il Poisson Jump Process influenza il livello del rischio idiosincratico (così come il livello del rischio diversificabile) ma non anche il parametro di flusso. Un esempio: GMB con Poisson Jump Process Possiamo prendere visione, osservare, l'andamento del prezzo del petrolio come una combinazione del Geometric Brownian Motion con un Poisson Jump Process; durante i periodi di normalità i prezzi fluttuano continuamente, ma i prezzi possono anche essere soggetti ad ampi rialzi o a pesanti ribassi a causa di improvvisi cambiamenti nella condizioni politiche ed economiche. Per ottenere tale combinazione in Fairmat, dovremo innanzitutto selezionare il seguente percorso: Stochastic Process → Add S. Process → GBM. Dopo di ché, dovremo fare doppio click sul nuovo processo stocastico appena creato in modo da inserire i seguenti parametri (figura 5.3): • “Base Value”: si supponga di inserire ad esempio il valore 100; • “Volatility”: si supponga di inserire ad esempio il valore 15%; e poi scegliere nel box “Control Parameters” fra la funzione “Dividend Yield” o la funzione “Growth Rate, Risk Premium”. Dovremo poi aggiungere, inserire, un Poisson Jump Process avente, per ipotesi, un tasso medio di arrivo dell'evento (o Arrival Rate) pari a 135 ed un Loss of Value (Perdita di valore) pari al 75% (figura 5.4). Nell'esempio della figura 5.4, notiamo che sono stati forzati i valori di default dei percorsi e dei path, impostando, rispettivamente, i valori 1000 e 100. (Figura 5.3: Esempio di combinazione GBM con il Poisson Jump Process 1) 151 CAPITOLO 5 – LA MODELLAZIONE DEI CONTRATTI FINANZIARI (Figura 5.4: Esempio di combinazione GBM con il Poisson Jump Process 2) La calibrazione dei modelli Il file XML Interest Rate Market Data Il file XML Interest Rate Market Data contiene informazioni che descrivono i dati relativi ai tassi di interesse per un dato mercato in corrispondenza di una determinata scadenza, o durata. Possiamo utilizzare tali dati per calibrare i modelli sui tassi di interesse. Per i campi dei vettori, i valori delle differenti componenti vengono separati attraverso il tabulatore. Per i campi delle matrici, ciascuna riga viene costruita come se fosse un vettore per cui le varie linee vengono separate dal carrello di ritorno e dalla linea di avanzamento (che corrisponde alla linea standard di terminazione nei sistemi Windows). Le scadenze, le maturities, vengono misurate in frazioni d'anno, mentre i tassi e le volatilità vengono scritte con il loro valore corretto senza però il simbolo % (percentuale) – per cui un tasso del 3,2% viene scritto come 0.032; una volatilità del 15,2% viene scritta come 0,152. I campi contenuti nei file Interest Rate Market Data sono i seguenti: 152 CAPITOLO 5 – LA MODELLAZIONE DEI CONTRATTI FINANZIARI • • • • • • • • • • • • • • • • • • • Market (mercato): è una stringa che descrive il mercato al quale i dati si riferiscono; le possibili scelte sono: EU (per il mercato europeo), US (per il mercato americano), UK (per il mercato del Regno Unito), SW (per il mercato svizzero), GB (per il mercato britannico), JP (per il mercato giapponese); Date (data): indica la data alla quale i dati si riferiscono; il formato della data del tipo ddmmyyyy ovvero day/month/year (gg/mm/aaaa, giorno/mese/anno); CashRates (tassi a breve): è un vettore contenente i valori dei tassi a breve (ovvero con scadenza minima di un giorno e massima di 6 mesi); CashDates (scadenze dei tassi a breve): è un vettore contenente le scadenze corrispondenti ciascuna ai valori contenuti nel campo CashRates; FRARates (tassi F.R.A.): è un vettore contenente i valori dei tassi sui contratti F.R.A. (Forward Rate Agreement); FRADates (scadenze dei F.R.A.): è un vettore contenente le scadenze corrispondenti ciascuna ai valori nel campo FRARates (ovvero le frazioni d'anno dopo la quale viene corrisposto il F.R.A.); SwapRates (tassi Swap): è un vettore contenente i valori dei tassi sui contratti Swap; SwapDates (scadenze dei Swap): è un vettore contenente le scadenze corrispondenti ciascuna ai valori nel campo SwapRates; SwapCouponYear (cedola annua dello Swap): è un numero intero che rappresenta il numero di pagamenti all'anno relativi alla parte fissa del contratto Swap o per il quale vengono quotati i tassi Swap; ZRMarket (tassi zero coupon di mercato): è un vettore contenente i valori dei tassi sui zero coupon bond (da utilizzare, da considerare come tassi di interesse composti di tipo continuo, così che il prezzo dello zero coupon bond con scadenza al tempo T sia data da exp (ZRMarket(T)*T); ZRMarketDates (yield curve): è un vettore contenente le scadenze corrispondenti ciascuna ai valori contenuti nel campo ZRMarket; ATMCapVolatility (volatilità degli ATMCap): è un vettore contenente le volatilità Cap del modello di Black per lo strike at the money, ovvero alla pari, avente diverse scadenze; CapTenor (tenore dei Cap): indica la frazione compresa fra due pagamenti di opzioni di tipo Cap per le quali siano dati il vettore ATMCapVolatility e la matrice CapVolatility; CapMaturity (scadenza dei Cap): è un vettore contenente le scadenze corrispondenti a ciascun Cap (di riferimento sia per il vettore ATMCapVolatility che per la matrice CapVolatility); CapRate (tassi Cap): è un vettore contenente i strike price per le opzioni di tipo Cap e di riferimento per la matrice CapVolatility; CapVolatility (volatilità dei Cap): è una matrice contenente i valori relativi alle volatilità dei Cap; l'elemento CapVolatility [i, j] indica la volatilità (determinata secondo il modello di Black) del Cap con scadenza pari al valore contenuto nel campo CapMaturity [i] e strike price uguale, corrispondente, al valore contenuto nel campo CapRate [j]; Swaption Tenor (tenore delle swaption): indica la frazione d'anno intercorrente fra due pagamenti relativi alla parte fissa del contratto Swap, per il quale viene data la matrice delle volatilità delle swaption; OptionMaturity (scadenza opzione): è un vettore contenente le scadenze corrispondenti a ciascuna swaption contenuta, a sua volta, all'interno della matrice SwaptionVolatility (ovvero le scadenze in corrispondenza delle quali il detentore della swaption può decidere se acquistare o meno lo swap); SwapDuration (duration dello Swap): è un vettore contenente i valori per le duration dei 153 CAPITOLO 5 – LA MODELLAZIONE DEI CONTRATTI FINANZIARI • Swap connesse alle swaption contenute, a loro volta, all'interno della matrice SwaptionVolatility (la durata dello Swap può essere acquisita dal detentore della swaption); SwaptionVolatility (volatilità delle swaptions): è una matrice contenente i valori per le volatilità delle swaption; l'elemento SwapVolatility [i, j] indica la volatilità (determinata secondo il modello di Black) della swaption che può essere esercitata al tempo corrispondente alla scadenza contenuta nel campo OptionMaturity [i] e con una duration dello swap sottostante corrispondente al valore contenuto nel campo SwapDuration [j]; <InterestRateMarketData> L'ordine dei vari campi all'interno del file non è rilevante e, data una certa calibrazione, può essere <Market>EU</Market> che<Date>31122010</Date> non tutti i campi siano necessari ai fini del calcolo. Se un valore di volatilità non è rilevabile, perché non osservabile sul mercato, il suo corrispondente valore nella matrice CapVolatility o <CashRates>0.0051 0.0067 0.008 0.0094 0.0097 0.0117</CashRates> SwapVolatility è da porre pari a 0. <CashDates>0.0192 0.0833 0.1667 0.25 0.3333 0.5</CashDates> <FRARates>0.0134 0.0153</FRARates> <FRADates>0.5 Nella pagina 1</FRADates> successiva si riporta un esempio di file formato XML Interest Rate Market Data. (I valori visualizzati in questo esempio sono riportati solo <SwapRates>0.0124 0.0147 0.0162 0.0178 0.0194 0.0215 0.0232 0.0242 0.0259 0.0265 0.0284per 0.03 esemplificazione) 0.0306 0.0305 0.0299 0.0288 0.0288 0.0285</SwapRates> <SwapDates>1 2 3 4 5 6 7 8 9 10 12 15 20 25 30 35 40 50</SwapDates> <SwapCouponYear>1</SwapCouponYear> <SwaptionTenor>1</SwaptionTenor> <ZRMarket>0.0058 0.0054 0.0059 0.0063 0.008 0.0096 0.0122 0.012 0.0129 0.0138 0.0159 0.0176 0.0194 0.0213 0.0232 0.0243 0.0261 0.027 0.0291 0.0307 0.0316 0.0305 0.0291 0.0273 0.0269</ZRMarket> <ZRMarketDates>0.0027 0.0192 0.0384 0.0833 0.1667 0.25 0.5 0.75 1 2 3 4 5 6 7 8 9 10 12 15 20 25 30 40 50</ZRMarketDates> <ATMCapVolatility>0.4305 0.5182 0.4666 0.4542 0.4257 0.3913 0.3613 0.3351 0.3211 0.3068 0.2812 0.2569 0.2432</ATMCapVolatility> <CapTenor>0.5</CapTenor> <CapMaturity>1 2 3 4 5 6 7 8 9 10 12 15 20</CapMaturity> <CapRate>0.0175 0.02 0.0225 0.025 0.03 0.035 0.04 0.05 0.06 0.07 0.08 0.1</CapRate> <OptionMaturity>0.0833 0.25 0.5 1 2 3 4 5 7 10</OptionMaturity> <SwapDuration>1 2 3 4 5 6 7 8 9 10 15 20 25 30</SwapDuration> <CapVolatility>0.0000 0.5262 0.4714 0.5135 0.5417 0.5208 0.5551 0.5698 0.5754 0.5857 0.5845 0.5984 0.0000 0.5180 0.5490 0.4939 0.5139 0.5183 0.5235 0.5311 0.5314 0.5404 0.5433 0.5429 0.0000 0.4719 0.4762 0.4695 0.4746 0.4763 0.4626 0.4689 0.4683 0.4767 0.4770 0.4784 0.0000 0.4514 0.4437 0.4355 0.4220 0.4341 0.4153 0.4225 0.4210 0.4317 0.4289 0.4402 0.0000 0.4194 0.4099 0.3993 0.3829 0.3833 0.3687 0.3703 0.3734 0.3775 0.3810 0.3909 0.0000 0.4013 0.3854 0.3712 0.3491 0.3455 0.3303 0.3303 0.3344 0.3345 0.3421 0.3477 0.0000 0.3839 0.3646 0.3468 0.3222 0.3188 0.3025 0.2932 0.2972 0.3002 0.3135 0.3198 0.0000 0.3684 0.3524 0.3395 0.3034 0.2962 0.2769 0.2773 0.2731 0.2774 0.2830 0.2925 0.0000 0.3559 0.3387 0.3276 0.2911 0.2817 0.2651 0.2601 0.2557 0.2608 0.2722 0.2766 0.0000 0.3474 0.3336 0.2607 0.2780 0.2393 0.2508 0.2424 0.2439 0.2476 0.2579 0.2652 0.0000 0.3367 0.3124 0.2994 0.2669 0.2496 0.2344 0.2229 0.2283 0.2340 0.2372 0.2437 0.0000 0.3173 0.2977 0.2643 0.2528 0.2361 0.2204 0.2074 0.2138 0.2156 0.2256 0.2357 0.0000 0.2992 0.2889 0.2585 0.2369 0.2285 0.2072 0.2025 0.2028 0.2005 0.2117 0.2211</CapVolatility> <SwaptionsVolatility>0.4322 0.3804 0.3984 0.4909 0.4149 0.3967 0.4417 0.4407 0.3725 0.5060 0.4332 0.3304 0.4811 0.3977 0.3067 0.4059 0.3278 0.2881 0.3249 0.2774 0.2642 0.2811 0.2503 0.2503 0.2264 0.2071 0.2357 0.1944 0.1852 0.2282</SwaptionsVolatility> </InterestRateMarketData> 0.3785 0.3917 0.3999 0.4093 0.3968 0.3908 0.3901 0.3914 0.3909 0.3698 0.3714 0.4121 0.4113 0.4034 0.3780 0.3681 0.3558 0.3536 0.3480 0.3352 0.3502 0.3690 0.4207 0.4057 0.3852 0.3638 0.3519 0.3355 0.3312 0.3303 0.3163 0.3298 0.3476 0.3984 0.3798 0.3619 0.3453 0.3352 0.3280 0.3207 0.3150 0.3007 0.3000 0.3090 0.3638 0.3320 0.3194 0.3074 0.2921 0.2935 0.2877 0.2826 0.2742 0.2737 0.2876 0.3087 0.3023 0.2904 0.2842 0.2794 0.2718 0.2678 0.2639 0.2484 0.2537 0.2719 0.2698 0.2629 0.2552 0.2485 0.2519 0.2403 0.2391 0.2389 0.2312 0.2379 0.2534 0.2427 0.2299 0.2334 0.2310 0.2292 0.2276 0.2274 0.2256 0.2164 0.2212 0.2350 0.2055 0.2038 0.2037 0.2050 0.1992 0.2085 0.2074 0.2118 0.2070 0.2145 0.2238 0.1919 0.1858 0.1962 0.1936154 0.1969 0.2024 0.1981 0.2022 0.2060 0.2186 0.2291 CAPITOLO 5 – LA MODELLAZIONE DEI CONTRATTI FINANZIARI Il file XML Call Price Market Data Il file XML Call Price Market Data contiene informazioni che descrivono i dati relativi alle opzioni 155 CAPITOLO 5 – LA MODELLAZIONE DEI CONTRATTI FINANZIARI scritte su un certo titolo azionario (o su un certo indice azionario) in corrispondenza di una determinata data. Possiamo utilizzare tali dati per calibrare il modello di Helston. Per i campi dei vettori, i valori delle differenti componenti vengono separati attraverso il tabulatore. Per i campi delle matrici, ciascuna riga viene costruita come se fosse un vettore per cui le varie linee vengono separate dal carrello di ritorno e dalla linea di avanzamento (che corrisponde alla linea standard di terminazione nei sistemi Windows). Le scadenze, le maturities, vengono misurate in frazioni d'anno. I campi contenuti nel file Call Price Market Data sono i seguenti: • Market (mercato): è una stringa di caratteri che specifica il mercato di riferimento dell'indice azionario sottostante o del titolo azionario sottostante; • Ticker: è una stringa di caratteri che specifica il nome del titolo azionario sottostante o dell'indice azionario sottostante; • Date (date): è la data alla quale l'opzione si riferisce. Il formato è del tipo ddmmyyyy, ovvero day/month/year (gg/mm/aaaa, giorno/mese/anno); • S0: indica il valore del titolo in corrispondenza della data indicata, riportata nel campo Date; • StrikeATM: indica il valore dello strike per le opzioni at the money, ovvero alla pari; • PutPriceATM (Prezzo Put ATM): è il vettore dei prezzi put per lo strike at the money, ovvero alla pari, in corrispondenza delle differenti scadenze; • CallPriceATM (Prezzo CallATM): è il vettore dei prezzi call per lo strike at the money, ovvero alla pari, in corrispondenza delle differenti scadenze; • MaturityATM (Scadenze ATM): è il vettore delle scadenze corrispondenti ai campi dei vettori StrikeATM, PutPriceATM e CallPriceATM; • Maturity (Scadenze): è il vettore delle scadenze corrispondenti ai campi della matrice CallPrice; • Strike (Prezzi Strike): è il vettore dei valori dei strike price corrispondenti ai campi della matrice CallPrice; • CallPrice (Prezzi call): è la matrice dei prezzi; l'elemento CallPrice [i; j] è il prezzo dell'opzione call con scadenza corrispondente al valore contenuto nel campo Maturity [i] e con strike price corrispondente al valore contenuto nel campo Strike [j]; • DividendYield: è il vettore dei dividend yield (ovvero, dei rapporti dividendo/prezzo) in corrispondenza delle differenti scadenze <tt>; • DividendYieldMaturity: è il vettore delle scadenze corrispondenti ciascuna ai campi del vettore DividenYield; • Volatility (volatilità, varianza): è la matrice delle opzioni call sottointese le varianze; l'elemento Volatility [i; j] è la varianza sottointesa dell'opzione call con scadenza corrispondente al campo Maturity [i] e con strike price corrispondente al valore contenuto nel campo Strike [j]; L'ordine dei vari campi all'interno del file non è importante e, data una certa calibrazione, può essere che non tutti i campi siano necessari ai fini del calcolo. Per esempio, se la matrice CallPrice non è definita al fine di calibrare il modello di Helston, tale matrice verrà definita sotto forma di altre informazioni. Lo stesso accade per il vettore DividendYield che viene calcolata attraverso la relazione di parità put – call sfruttando il vettore di informazioni ATM. Se il prezzo di un'opzione non è rilevabile, perché non osservabile sul mercato, il suo corrispondente valore nella matrice CallPrice viene posto pari a -1. 156 CAPITOLO 5 – LA MODELLAZIONE DEI CONTRATTI FINANZIARI Si riporta di seguito un esempio di file formato XML Call Price Market Data. ( I valori visualizzati in questo esempio sono riportati solo per esemplificazione) <CallPriceMarketData> <Ticker>YOURINDEX Index</Ticker> <Date>31122010</Date> <S0>2278.19</S0> <StrikeATM>2300</StrikeATM> <PutPriceATM>64 104.3 133.5 170 215.8 248.7 307.5 360 420.8 453 523.8</PutPriceATM> <CallPriceATM>26.2 50.3 71.9 106.5 138.7 164.7 158.2 192.7 199.2 219.4 245.7</CallPriceATM> <MaturityATM>0.03013698630136986 0.1068493150684932 0.2027397260273973 0.2794520547945206 0.3753424657534247 0.4520547945205479 0.5287671232876713 0.6246575342465753 0.7013698630136986 0.7780821917808219 0.8547945205479453</MaturityATM> <Maturity>0.08333333333333333 0.1666666666666667 0.25 0.5 1 1.5 2</Maturity> <Strike>1826.472 2054.781 2168.9355 2226.01275 2283.09 2340.16725 2397.2445 2511.399 2739.708</Strike> <DividendYieldMaturity>0.03013698630136986 0.1068493150684932 0.2027397260273973 0.2794520547945206 0.3753424657534247 0.4520547945205479 0.5287671232876713 0.6246575342465753 0.7013698630136986 0.7780821917808219 0.8547945205479453 0.9506849315068493 1.027397260273973 1.123287671232877 1.2 1.276712328767123 1.372602739726027 1.449315068493151 1.526027397260274 1.621917808219178 1.698630136986301 1.794520547945206 1.871232876712329 1.947945205479452 2.024657534246575</DividendYieldMaturity> <DividendYield>0.3083582699107246 0.1576927250328625 0.1035512734816964 0.0857649295704567 0.06353199968140713 0.06018800926350469 0.05684401884560224 0.0526640308232242 0.0499210405675944 0.0471780503119646 0.0444350600563348 0.05099526131696908 0.05624342232547651 0.06280362358611079 0.06108838166666165 0.0593731397472125 0.05722908734790107 0.05551384542845193 0.05379860350900279 0.05165455110969136 0.05205709518318747 0.05256027527505761 0.05296281934855372 0.05336536342204984 0.05376790749554595</DividendYield> <CallPrice>423.77483157 423.56875474 222.47314901 429.23833302 236.29677329 450.16013959 271.51018063 452.51392799 293.07304494 444.26873704 296.72272759 431.08367518 289.59312338 210.11162320 138.70999051 155.60135798 195.78610592 224.85747589 233.56029727 229.23753343 119.78575264 104.15741296 121.96691590 162.61728033 193.23219834 202.13308815 194.45350853 83.29481819 69.65460789 86.57364413 129.62172641 170.24391446 193.50213715 213.61384144 49.80012651 26.86670548 14.32315354 44.87264704 28.17098089 9.92251465 61.05213089 41.88246593 17.74412915 102.40054998 79.55705517 44.87582262 145.57164762 122.36514636 83.71141906 172.39434010 149.85530708 110.99580551 198.49451310 175.82118455 136.45687489 3.96225915 0.64832371 1.21676272 2.62122466 11.59000226 34.56883151 56.55344395 78.20811580</CallPrice> <Volatility>0.42996300 0.36628900 0.30563000 0.34980900 0.29724400 0.32726100 0.28557400 0.29942100 0.26896300 0.28107600 0.25514100 0.26429300 0.23908400 </CallPriceMarketData>< 0.33123400 0.27976000 0.27374900 0.26674500 0.25462000 0.24300700 0.22758700 0.29727500 0.26962100 0.26492600 0.25837200 0.24669400 0.23443800 0.21565700 0.28451800 0.24546900 0.24253500 0.24544000 0.24620600 0.24624800 0.24903600 0.25697500 0.23201800 0.23164200 0.23653900 0.24116500 0.24421000 0.25154400 0.24376300 0.29250300 0.22794100 0.21058600 0.20187900 0.20750600 0.21430800 0.22194900</Volatility> 0.23981300 0.22551400 0.22438000 0.22927600 0.23517900 0.23902700 0.24622200 0.23687700 0.21917000 0.21431700 0.21672100 0.22435600 0.22953700 0.23695200 La modellazione del rischio di credito Con Fairmat (Versione Professional) possiamo stimare l'impatto dei vari eventi legati al rischio di credito in uno schema di valutazione apposito così consentendoci di prezzare, appunto, i contratti derivati sul rischio di credito, ovvero i cosiddetti Credit Derivatives – quali sono ad esempio i 157 CAPITOLO 5 – LA MODELLAZIONE DEI CONTRATTI FINANZIARI Credit Default Swap (CDS), i First to Default (Ftd) e i Collateralized Debt Obbligations (CDO) – e consentendoci di prezzare anche i CVA (Credit Value Adjustment) e i DVA (Debt Value Adjustment). Tutte queste nuove funzionalità di valutazione utilizzano come variabile casuale di riferimento la variabile causale time to default (tempo del default, letteralmente), la quale modellizza la probabilità che nel tempo un dato Ente dichiari default, ovvero dichiari uno stato di insolvenza. La variabile casuale time to default Fairmat ci consente di calcolare esplicitamente i tempi di default di un ente emittente permettendo così il pricing dei contratti derivati sul rischio di credito – ovvero i cosiddetti Credit Derivatives – e la stima del CVA (Credit Value Adjustment). La variabile casuale time to default può essere utilizzata sia per calcolare la probabilità deterministica neutrale al rischio di default sia per simulare esplicitamente i tempi di default in una simulazione Monte Carlo. La variabile casuale time to default, denotata con il simbolo τ, è una variabile causale che può essere modellata in vari modi. In particolare Fairmat implementa i modelli di intensità. Di default, di base, la probabilità della variabile casuale time to default può essere calcolata dalla funzione RNDP la cui sintassi è la seguente: RNDP (@randomvar; date) [5.20] dove @randomvar indica la variabile causale mentre date indica il tempo la stima della probabilità di default fa riferimento. Ecco un esempio per la funzione appena esplicitata: RNDP (@v1; pd[1]). Al fine di modellare l'avvento di un default, di una dichiarazione di insolvenza, o per una simulazione deterministica o per una simulazione Monte Carlo, deve essere creata una variabile causale time to default. Per far ciò è necessario selezionare il seguente percorso (figura 5.5): Parameters & Functions → Add → Function defined by value interpolation Nella funzione così aggiunta è possibile importare una struttura per scadenze degli spread sui CDS o una struttura per scadenze degli spread sugli Asset Swap. Per importare gli spread sui CDS da Bloomberg, in particolare, è necessario selezionare il tab Data Source e poi specificare il mercato di riferimento (ad esempio EU, US, e via discorrendo), la radice del ticker di Bloomberg (ad esempio ITALY CDS USD SR) e il tipo di dati (ad esempio Credit Default Swap Curve). Dopo di ché si dovrà cliccare sul comando “Update”. In questo modo Fairmat scaricherà tutti gli spread sui CDS disponibili per lo specifico emittente (figura 5.6). (Figura 5.5: Creazione della variabile casuale time to default, passo 1) 158 CAPITOLO 5 – LA MODELLAZIONE DEI CONTRATTI FINANZIARI (Figura 5.6: Creazione della variabile casuale time to default, passo 2) A questo punto, dovremo passare, selezionandolo, all'ambiente Random Variables in modo da inserire il simulatore della variabile casuale time to default (selezionando Time to default simulator – figura 5.7). Nella finestra di dialogo di creazione del simulatore Time to default simulator, sarà poi necessario specificare il tasso di recupero assunto, ipotizzato (campo “Recovery Rate”), il tenore degli spread sui CDS (campo “Tenor”), a struttura per scadenze degli spread (campo “Reference to CDS structure”) e la zero rate curve (campo “Reference to ZR spreads”) - queste ultime due variabili devono essere precedute dal simbolo @. 159 CAPITOLO 5 – LA MODELLAZIONE DEI CONTRATTI FINANZIARI Selezionando il tab Preview è poi possibile vedere i tempi di default simulati. (Figura 5.7: Creazione della variabile casuale time to defautl, passo 3) La variabile casuale time to default τ è il primo salto temporale di un processo poissoniano, per cui essa ha una componente esogena che è indipendente da tutte le informazioni sul default liberamente disponibili sul mercato. Questa famiglia di modelli è adatta a modellare i credit spreads e, nella loro formulazione base, sono facili da calibrare ai CDS. Time Inhomogeneous Poisson Processes Ci muoveremo ora verso i processi poissoniani a tempi disomogenei (Time Inhomogeneous Poisson Processes) dove la probabilità del primo default (del primo salto) è una funzione dipendente dal tempo. Consideriamo un'intensità deterministica variabile in base al tempo (t ) , funzione positiva e continua a destra, allora l'intensità cumulata (o funzione di Hazard) è la seguente: t (t ) : (u )du [5.21] 0 Se Mt è un processo poissoniano standard (avente intensità uno), allora il processo poissoniano a tempi disomogenei Nt con intensità (t ) si può descrivere attraverso la seguente: N t M (t ) [5.22] per cui N avrà il primo salto temporale in τ il che implica, a sua volta, che M avrà il primo salto temporale in ( ) ; vale il viceversa. Dalle proprietà dei processi poissoniani si ha: (t ) : ~ EXP(1) [5.23] 160 CAPITOLO 5 – LA MODELLAZIONE DEI CONTRATTI FINANZIARI invertendo la [8.23] si avrà: 1 ( ) [5.24] con che indica la variabile casuale esponenziale standard, il che suggerisce implicitamente come simulare la variabile casuale time to default. Avremo facilmente anche: Qs t Q( s ) ( ) (t ) Q( s) (t ) [5.25] Q ( s ) Q (t ) exp ( s ) exp (t ) ed in particolare, la formula: t Q t exp (t ) exp ( s )ds 0 [5.26] La natura variabile in base al tempo di γ consente di tenere conto di una possibile struttura per scadenze dei credit spread. E' questo, in effetti, il modello che viene utilizzato per depurare le probabilità di default dalle quotazioni dei CDS. Il processo poissoniano a tempi disomogenei, con intensità variabile in base al tempo (t ) , è la forma ridotta del modello utilizzato sul mercato per depurare le probabilità di default dalle quotazioni dei CDS. Considerando il tasso di azzardo, di rischio, (t ) come una funzione deterministica e costante a tratti del tipo: (t ) =γi per t Ti 1 , Ti [5.27] dove le Ti attraversano, indicano, le scadenze rilevanti. Notiamo che: t ( t ) 1 0 i 1 (t ) ( s )ds (T i Ti 1 ) i (t T (t )1 ) ( t ) [5.28] dove β(t) rappresenta l'indice della prima Ti a seguito di t. E' necessario fissare: Tj j 0 i 1 j : ( s )ds (Ti Ti 1 ) i [5.29] Per calcolare le scadenze dei CDS, dove R indica il fair value, la quotazione equa, del contratto e α indica il tenore, avremo la seguente: Tb CDS a ,b (0, R, LGD ; ()) R P(0, u )(T (u )1 u )d (e (u ) ) Ta b P(0, T ) R e i i a 1 i (Ti ) [5.30] Tb LGD P(0, u )d (e (u ) ) Ta Così che, con la costante a tratti γ, otteniamo: 161 CAPITOLO 5 – LA MODELLAZIONE DEI CONTRATTI FINANZIARI Ti CDS a ,b (0, R, LGD ; ()) R e i 1 i (u Ti 1) P (0, u )(u Ti 1 )du Ti 1 b P(0, T ) R e i i a 1 LGD i Ti b e i a 1 i (Ti ) i 1 i ( u Ti 1 ) [5.31] P (0, u )du Ti 1 Nel mercato si osservano Ta = 0 e Tb = 1y, 2y, 3y … con tenore α (per esempio si può ipotizzare che Ti si resetti ogni trimestre, trimestralmente) delle quotazioni al fair value R per Tb. Allora possiamo risolvere le equazioni di cui sopra così: CDS 0,1 y (0, R0MKT [5.32] ,1 y , LGD ; 1 2 3 4 : 1 ) 0; 1 2 CDS 0, 2 y (0, R0MKT , 2 y , LGD ; ; 5 6 7 : 8 : ) 0;... [5.33] e così via, trovando in corrispondenza di ciascun tempo i nuovi quattro parametri di intensità. Simulazione dei tempi di default Assumendo di aver rilevato il tasso di azzardo, di rischio (positivo deterministico), γ dalle quotazioni di mercato dei CDS possiamo simulare il tempo di default γ partendo da 1 ( ) , seguendo questo schema ed i seguenti passi: 1) simulare una variabile causale esponenziale standard del tipo 1 , 2 ,..., m ; 2) per ciascun campione j , risolvere ( j ) j $ rispetto a j ; si otterrà che le soluzioni sono i campioni simulati 1 , 2 ,..., m del tempo di default τ; CDS Un CDS (Credit Default Swap) è un contratto swap nel quale l'acquirente effettua un pagamento al venditore ed in cambio riceve un payoff qualora l'emittente di uno strumento di credito, tipicamente un bond, un titolo obbligazionario, dichiara uno stato di insolvenza o di default. Perciò nel caso di un default legato ad un prestito o di un qualunque altro evento legato al rischio di credito, il venditore del CDS dovrà compensare l'acquirente della perdita occorsa. Fairmat, versione Professional, ci permette di prezzare i contratti CDS o utilizzando una simulazione deterministica o una simulazione Monte Carlo. Entrambi i metodi richiedono la definizione di una variabile casuale time to default. Di seguito vedremo nel dettaglio come prezzare il CDS, i cui dati vengono riportati nella tabella 5.1 che segue, in Fairmat utilizzando sia la simulazione deterministica che la simulazione Monte Carlo. 162 CAPITOLO 5 – LA MODELLAZIONE DEI CONTRATTI FINANZIARI (Tabella 5.1 – Riepilogo dati esempio CDS) Principal (Capital) Recovery Rate (Tasso di recupero) Reference Entity (Ente di riferimento) Start Date (Data Inizio) End Date (Data Fine) Frequency (Frequenza di pagamento) Buyer Premium (Premio all'acquirente) $1.000.000,00 40% Repubblica Italiana 10/07/2012 10/07/2013 Trimestrale $ 100.000 al 06/07/2012 Una volta inserita la variabile casuale time to default simulator possiamo prezzare il CDS. La variabile casuale è necessaria per calcolare la probabilità di default neutrale al rischio e la sua distribuzione. Implementazione deterministica La funzione RNDP può essere utilizzata per calcolare la probabilità di default al tempo della dichiarazione di insolvenza. La funzione richiede una variabile casuale e il tempo fino al quale deve essere stimata la probabilità di default (ad esempio RNDP (@v1; pd[1])). Il Mark to Market del CDS (che sarà negativo per il venditore, il writer, del contratto derivato) sarà uguale al valore scontato, attualizzato, della perdita derivante dal default (ovvero 1 – Recovery Rate) moltiplicata per il capitale (Principal) N e per la probabilità di default neutrale al rischio osservata fra pd(t) e pd(t-1) (od osservata in pd(t) per il primo periodo). Si veda anche in tal senso la figura 5.8. (Figura 157: CDS in Fairmat, implementazione deterministica) 163 CAPITOLO 5 – LA MODELLAZIONE DEI CONTRATTI FINANZIARI Simulazione Monte Carlo In Fairmat possiamo stimare il valore di un CDS utilizzando la simulazione dei tempi di default Monte Carlo. Come si Il Mark to Market del CDS (negativo per il venditore, il writer, del contratto derivato) sarà uguale alla somma dei valori attuali delle perdite derivanti dal default (ovvero 1 – Recovery Rate) moltiplicata per il capitale (Principal) N, se occorre un default, o a zero, altrimenti, in caso contrario. Si veda anche in tal senso la figura 5.9. (Figura 5.9: CDS in Fairmat, Simulazione Monte Carlo) CVA Il Credit Value Adjustment (CVA) è un aggiustamento fatto al valore del contratto in considerazione del rischio unilaterale di controparte. Questa è una simulazione nella quale si assume che soltanto la una delle due parti contraenti può dichiarare default mentre viene assunto, ipotizzato, il fatto che, dall'altra parte, dall'altro lato, l'investitore che sta effettuando il calcolo dell'aggiustamento sia immune da rischi di insolvenza. La formula fondamentale per la valutazione del rischio di controparte è la seguente: E 0D (t , T ) 1 2t E 0 (t , T ) E LGD2 1t 2 T D(t , 2 ) NPV 0 ( 2 ) [5.34] D dove E 0 (t , T ) indica il payoff per l'investitore immune dal rischio di insolvenza, τ2 indica il tempo di default della controparte (ovvero il momento nel quale la controparte dichiara lo stato di insolvenza), LGD indica la Loss Given Default, ovvero la perdita determinata dal default e data da (1 – Recovery Rate), D(t , 2 ) indica il fattore di attualizzazione, o di sconto, e indica il valore del NPV0 ( 2 ) E 2 ( 2 , T )conratto al momento del default della controparte, al momento della dichiarazione di insolvenza della controparte. Se non vi è nell'immediato un default, il payoff si ridurrà ad un lascito libero da problemi di 164 CAPITOLO 5 – LA MODELLAZIONE DEI CONTRATTI FINANZIARI insolvenza. Nel caso in cui vi sia nell'immediato, o a breve, un default verranno ricevuti i soli pagamenti corrisposti prima della data del default; in particolare, se occorrerà il default e il valore residuo del contratto è positivo, allora l'investitore perderà parte di questo valore (per un valore esattamente pari a LGD, Loss Given Default); viceversa, se il valore residuo del contratto è negativo, allora l'investitore dovrà pagare interamente tale valore. Ecco perchè il secondo termine del membro di destra della [5.34] viene definito CVA. Nell'esempio riportato con le figure 5.10 e 5.11, trattiamo uno swap fisso contro variabile dove solo il pagatore del tasso variabile è immune al rischio di insolvenza. Una volta modellato lo swap, dal punto di vista dell'investitore immune al rischio di insolvenza, così come mostrato nella figura 5.10, si dovrà trascinare l'operatore CVA dalla barra degli strumenti e farlo "cadere" nell'ambiente Option Map dietro la strip di swap inserita precedentemente. (Figura 5.10: CVA in Fairmat 1) Poi, con un doppio click sull'operatore CVA appena creato, appena inserito, sarà possibile specificare il tasso di recupero (campo "Recovery Rate") e le variabili casuali che simulano i tempi di default della controparte (campo "Counterparty times to default"). Si veda anche la figura 5.11. La valutazione così condotta ci restituirà il valore aggiustato, corretto, del contratto swap oggetto della transazione fra le parti contraenti. 165 CAPITOLO 5 – LA MODELLAZIONE DEI CONTRATTI FINANZIARI (Figura 5.11: CVA in Fairmat 2) 166 PARTE II ESEMPI E APPLICAZIONI • TUTORIAL I VANILLA INTEREST SWAP • TUTORIAL II FIXED – FLOAT CROSS CURRENCY • TUTORIAL III ACCRUAL SWAP • TUTORIAL IV PATH DEPENDENCE • TUTORIAL V SWAP WITH ASIAN OPTION • TUTORIAL VI RELOAD3 BOND • TUTORIAL VII CONVERTENDO BPM WITH WARRANT TUTORIAL I VANILLA INTEREST SWAP TUTORIAL I – VANILLA INTEREST SWAP In questo tutorial vedremo un esempio di valutazione di un Vanilla Interest Swap, ovvero un accordo fra due parti – Parte A e Parte B – di scambio dei flussi di cassa (fisso contro variabile) espressi nella stessa valuta. Si tratta quindi di un'operazione finanziaria caratterizzata dallo scambio tra due parti di flussi di interesse facenti riferimento ad importi nominali (ovvero i valori dei capitali nozionali) che non vengono trasferiti né all'inizio né alla conclusione della transazione. Inoltre, il regolamento dei flussi di interesse fra le controparti avviene in via differenziale. Con la tabella I.1, di seguito riportata, proponiamo la scheda tecnica del contratto derivato che andremo ad analizzare e denominato “Plain Vanilla”: (Tabella I.1 – Scheda tecnica contratto Plain Vanilla) Up-Front Capitale Parte A Capitale Parte B Data Negoziazione Data Inizio Contratto Data di Scadenza Frequenza di pagamento Parte A Frequenza di pagamento Parte B Scambio Dal 24/03/2005 al 24/03/2010 Convenzione Date di Reset Day Count Fraction 1.000.000,00 (Bullet) 1.000.000,00 (Amortizing) 22/03/2005 24/03/2005 24/03/2010 Annuale Semestrale Parte A Parte B Euribor a 6 Mesi 3,2165% Parte A Parte B Advance, 2 giorni 30/360, Act/360 Adjusted Unadjusted (Modified Following) Dove tutte le payment dates vengono aggiustate, corrette, seguendo la convenzione Modified Following Business Day. Osservando ancora una volta la scheda tecnica soprariportata, possiamo osservare le principali caratteristiche del contratto: 1) la differente frequenza di pagamento per le parti: Annuale per la Parte A, Semestrale per la Parte B; 2) le differenti caratteristiche del capitale nozionale di riferimento per le parti: per la Parte A il nozionale è, infatti, di tipo Bullet, ovvero fisso, mentre per la Parte B il nozionale è in Amortizing, ovvero soggetto ad ammortamento; 3) una differente Day Count Fraction per le parti: per la Parte A verrà, infatti, applicata la convenzione 30/360 Unadjusted; mentre per la Parte B verrà, invece, applicata la convenzione Act/360 Adjusted; Il modo più semplice per valutare il contratto derivato Vanilla Interest Swap, prendendo come data di riferimento per la valutazione la Trade Date (o la Valuation Date) – ovvero la Data di Negoziazione del contratto, o la Data di Valutazione – è quello basato sui tassi di interesse forward (a lungo termine) derivanti dalla Zero Rate Curve disponibile appunto alla Valuation Date. Con il termine Zero Rate Curve ci riferiamo alla struttura per scadenze dei tassi di interesse; il risultato del metodo di inferenza statistica di bootstrap parte dai tassi spot (a breve termine) disponibili sul 167 TUTORIAL I – VANILLA INTEREST SWAP mercato (riferendosi ai valori di chiusura). I tassi forward e i risultati del processo stocastico sottostante al contratto che andremo poi a modellare in Fairmat, ovvero Zr, seguono il regime di interesse composto continuo. Oltre alle informazioni recuperabili dalla scheda tecnica di cui alla tabella I.1, dovremo caricare in un nuovo file Fairmat (.fair) anche i seguenti vector dates, riportati nel dettaglio attraverso la tabella I.2, sottoriportata: (Tabella I.2 – Vector dates da caricare per la valutazione del Plain Vanilla) Nr 1 2 3 4 5 6 7 8 9 10 Payment Dates Unadjusted (Parte A) 24/03/2006 24/03/2007 24/03/2008 24/03/2009 24/03/2010 Payment Dates Capitale Nozionale Unadjusted Parte B (Amortizing) (Parte B) 24/09/2005 1.000.000,00 24/03/2006 900.000,00 24/09/2006 800.000,00 24/03/2007 700.000,00 24/09/2007 600.000,00 24/03/2008 500.000,00 24/09/2008 400.000,00 24/03/2009 300.000,00 24/09/2009 200.000,00 24/03/2010 100.000,00 Con la figura I.1 riepiloghiamo i dati del tutorial che dovremo inserire nell'ambiente Parameters & Functions una volta aperto il file .fair in Fairmat. I vettori Pda_A, Pda_B e Rd_B (Vector's Transformation) e i vettori Cvg_A e Cvg_B (Vector's Difference Transformation) derivano dai vettori di input Pdu_A e Pdu_B utilizzando, rispettivamente, le funzioni di conversione Date's Vector Adjustment Transformation e Date's Vector Differences Transformation. La prima data di reset (ovvero il primo elemento del vettore Rd_B) coincide esattamente con la Trade Date. Dal momento che si assume che la Trade Date coincide con la Valuation Date e che i dati di mercato si riferiscono ai valori di chiusura, alla Valuation Date (ovvero alla data del 22/03/2005) il primo valore dell'Euribor a 6 mesi è già noto, è già conosciuto, e quindi verrà trattato come un dato storico di mercato. 168 TUTORIAL I – VANILLA INTEREST SWAP (Figura I.1: Riepilogo dati di input del tutorial Vanilla Interest Swap) (Figura I.2: Modellazione dei payoff delle parti contrattuali nell'ambiente Option Map) Passando alla modellazione nell'ambiente Option Map dei payoff che ciascuna parte contrattuale è tenuta a corrisponde all'altra in corrispondenza delle scadenze pattuite (figura I.2), i tab da selezionare per l'editing della Single Committed Option del ramo relativo alla Parte B sono Timing and Payoff e Discounting (figure I.3 e I.4). 169 TUTORIAL I – VANILLA INTEREST SWAP (Figura I.3: Modellazione del payoff a carico della Parte B, Editing Single Option , tab Timing and Payoff) (Figura I.4: Modellazione del payoff a carico della Parte B, Editing Single Option , tab Discounting) Notiamo che il sistema Option Dependent Discounting è disponibile sia nell'editor della Single Option che nell'editor delle Strip of Options. In particolare il sistema Option Dependent Discounting contiene le impostazioni puntuali della struttura di discounting (di attualizzazione) disponibile nell'ambiente Discounting in quanto esso si riferisce solo ad una specifica Single Option o solo ad una specifica Strip of Options e alle sue opzioni conseguenti, successive. Il sistema Option Dependent Discounting ci dà una maggiore flessibilità nella costruzione di un progetto. Per questo tutorial le due impostazioni (figure I.5 e I.6) sono del tutto equivalenti, ma l'ultima 170 TUTORIAL I – VANILLA INTEREST SWAP (figura I.7) ci consente di impostare differente impostazioni della struttura di attualizzazione (di discounting) per ciascuna Single Option o per ciascuna Strip of Options. (Figura I.5: Impostazioni per il sistema Option Dependent Discounting 1) (Figura I.6: Impostazioni per il sistema Option Dependent Discounting 2) Notiamo che per l'esempio della figura I.6, le impostazioni locali devono essere impostate sia nella Single Option 1_Party B (le quali verranno poi applicate automaticamente alla Strip of Options che va dall'opzione 2_Party B fino all'opzione end_Party B) sia nella Strip of Options che va dall'opzione 1_Party A fino all'opzione end_Party A. Attraverso la figura I.7 mostriamo la successiva Strip of Options presente nel ramo relativo alla Parte B. (Figura I.7: Modellazione del payoff a carico della Parte B, Editing Strip of Options, tab Timing and Payoff) 171 TUTORIAL I – VANILLA INTEREST SWAP Per calcolare i tassi forward si ricorre all'utilizzo della funzione interna di Fairmat FRA che è, come noto, una Interest Rate Function. Possiamo notare, osservando attentamente la finestra di autocomplete contenuta nella figura I.7 – e come già spiegato nel corso del Capitolo 2 della Parte I – la funzione FRA calcola i tassi forward (a lungo termine) fra due date, fra due istanti, t e d, partendo da una determinata struttura per scadenze dei tassi di interesse Zr. Ai fini del presente tutorial sono necessari, dobbiamo calcolare, i tassi forward a 6 mesi (ovvero con maturità semestrale) per cui la funzione FRA calcolerà i tassi, nel caso preso in esame, attraverso la seguente formula: exp {zr ( Rd + matEur)∗( Rd + matEur )} 1 FRA( Rd ; (Rd + matEur); zr ref )= −1 ∗ exp {zr( Rd )∗Rd } matEur dove Rd indica una generica data di reset, matEur è noto ed è pari a 0,5 (ovvero 6 mesi espressi in termini di frazioni d'anno) e il simbolo zrref equivale a @zr. ( ) Passando, infine, ai payoff relativi alla Parte A, possiamo affermare che questi sono piuttosto semplici da strutturare: il capitale nozionale di riferimento per la Parte A (di tipo Bullet, ovvero fisso) programma i tempi dei tassi swap secondo la Day Count Fractions 30/360 Unadjusted. L'unico tab da selezionare per l'editing della Strip of Options del ramo relativo alla Parte A è Timing and Payoff (figura I.8). (Figura I.8: Modellazione del payoff a carico della Parte A, Editing Strip of Option s, tab Timing and Payoff) 172 TUTORIAL II FIXED-FLOAT CROSS CURRENCY TUTORIAL II – FIXED FLOAT CROSS CURRENCY Il Cross Currency Interest Rate Swap (CCIRS) è un accordo fra due controparti – Parte A e Parte B – di scambio di flussi di cassa (fisso contro variabile) espressi in una differente valuta. Con un CCIRS le parti contrattuali si scambiano, quindi, dei pagamenti in base a due diverse tipologie di tassi (da una parte il tasso fisso e dall'altra parte il tasso variabile) e a due diverse valute. Rispetto al caso, che abbiamo precedentemente analizzato con il Tutorial I, ovvero il caso del semplice contratto derivato Interest Rate Swap (IRS), nel caso del CCIRS abbiamo due capitali nozionali di riferimento, espressi in due diverse valute, che verranno scambiati all'inizio e alla fine del contratto di scambio. Con la tabella II.1, sottoriportata, proponiamo la scheda tecnica del contratto CCIRS oggetto di questo tutorial: (Tabella II.1 – Scheda tecnica del Cross Currency Interest Rate Swap) Nozionale (espresso in Dollari) Nozionale (espresso in Euro) Tasso di cambio EUR/USD alla Data di Negoziazione Data Negoziazione Data Inizio Contratto Data di Scadenza Frequenza di pagamento Parte A Frequenza di pagamento Parte B Scambio All'inizio del contratto Dal 01/06/2009 al 01/06/2019 Alla scadenza del contratto Convenzione Parte A € 1.428.571,43 5,00% $2.000.000,00 Parte A Drivers rates per le Date di reset - Day Count Fraction 30/360, Unadjusted 2.000.000,00 1.428.571,43 1,4000 29/05/2009 01/06/2009 01/06/2019 Semestrale Semestrale Parte B $2.000.000,00 Euribor 6 Mesi + 0,90% € 1.428.571,43 Parte B Advance, Il primo giorno Act/360, Unadjusted Come possiamo evincere dalla tabella II.1, il capitale inizialmente pagato dalla controparte A è pari a 1.428.571,43 € (EUR) a fronte di un capitale pari a 2.000.000,00 $ (USD) ricevuti dalla controparte B. Questo scambio, calcolato sulla base del tasso di cambio Euro/Dollaro (EUR/USD) corrente al momento dello scambio stesso, rende alla data iniziale (ovvero alla Trade Date) il contratto finanziariamente equo. I pagamenti aventi periodicità semestrale che la controparte A è tenuta ad effettuare sono fissi e proporzionali ad un tasso nominale annuo del 5,00% applicato al capitale nozionale espresso in Dollari (USD). I pagamenti aventi periodicità semestrale che la controparte B è tenuta ad effettuare sono, invece, variabili ed indicizzati al tasso Euribor a 6 mesi rilevato all'inizio di ciascun periodo con l'aggiunta di uno spread di 90 punti base (ovvero dello 0,90%) applicato al capitale nozionale espresso in Euro (EUR). La restituzione del capitale inizialmente scambiato dalle controparti contrattuali è previsto alla scadenza mediante il pagamento di 2.000.000,00 $ (USD) da parte della controparte A e il pagamento di 1.428.571,43 € (EUR) da parte della controparte B; in altre parole: con il contratto CCIRS, la Parte A trasforma un capitale di debito a tasso variabile espresso in Euro, indicizzato al 173 TUTORIAL II – FIXED FLOAT CROSS CURRENCY tasso Euribor a 6 mesi con l'aggiunta di uno spread dello 0,90%, in un capitale di debito a tasso fisso espresso in Dollari. Vale il viceversa per la Parte B. Ai fini di questo tutorial e dell'analisi che dobbiamo condurre sul contratto CCIRS, possiamo considerare la transazione appena descritta come la somma di tre strutture elementari: 1) un contratto Fixed-Float Interest Rate Swap (Interest Rate Swap Fisso contro Variabile) denominato in USD; 2) un contratto Float-Float Cross Currency Basis Swap (Cross Currency Basis Swap Variabile contro Variabile) con valute EUR/USD; 3) un contratto Basis Swap 3M vs 6M, il quale prevede uno scambio fra un tasso a 3 mesi contro un tasso a 6 mesi, denominato in EUR; Il vantaggio di questa scomposizione è che i prezzi di queste tre strutture elementari sono quotati sui mercati ufficiali. Ciò rende la valutazione libera dai modelli relativi ai prezzi di mercato dal momento che non dobbiamo, così facendo, ricorrere ad assunzioni riguardanti le dinamiche dei fattori sottostanti. In altre parole si può scomporre il payoff principale – schematizzato attraverso la tabella II.2 e la cui schematizzazione e scansione temporale dei flussi di cassa vengono basati sul punto di vista della Parte A (per cui con il segno "+" vengono indicati i flussi di cassa positivi, in entrata, per la stessa mentre con il segno "-" vengono indicati quelli negativi, in uscita) –, ovvero il seguente: (Tabella II.2 – Schematizzazione payoff principale derivante dal contratto CCIRS) Data d'esercizio t=0 tA = 0.25, 0.5, …, 10 tB = 0.25, 0.5, …, 10 tA = tB = 10 Scambi Parte A -€ 1.428.571,43 -5.00% (in USD) -$2.000.000,00 Scambi Parte B +$2.000.000,00 + Euribor a 6 mesi + 0.90% (in Euro) +€ 1.428.571,43 nelle tre seguenti strutture elementari: 1) Tabella II.3 (la cui schematizzazione si basa sempre sul punto di vista della Parte A): il Fixed-Float Interest Rate Swap prevede il pagamento semestrale di un tasso fisso pari al 5,00% espresso in EUR da parte della controparte A, a fronte del pagamento trimestrale di un tasso variabile Libor a 3 mesi espresso in USD da parte della controparte B. Il valore del capitale nozionale della precedente struttura è pari a 2.000.000,00 USD: (Tabella II.3 – Schematizzazione contratto Fixed-Float Interest Rate Swap) Data d'esercizio t=0 tA = 0.5, 1, …, 10 Scambi Parte A -5.00% (in Euro) tB = 0.25, 0.5, …, 10 - tA = tB = 10 - 174 Scambi Parte B + Libor a 3 mesi (in USD) - TUTORIAL II – FIXED FLOAT CROSS CURRENCY 2) Tabella II.4 (la cui schematizzazione si basa sempre sul punto di vista della Parte A): il Float-Float Cross Currency Basis Swap prevede il pagamento di un tasso variabile Libor a 3 mesi espresso in USD da parte della controparte A, calcolato su un capitale nozionale di riferimento di 2.000.000,00 $, a fronte del pagamento di un tasso variabile Euribor a 3 mesi espresso in EUR da parte della controparte B, calcolato su un capitale nozionale di riferimento di 1.428.571,43 €: (Tabella II.4 – Schematizzazione contratto Float-Float Cross Currency Basis Swap) Data d'esercizio t=0 tA = 0.5, 1, …, 10 tB = 0.25, 0.5, …, 10 tA = tB = 10 Scambi Parte A -€ 1.428.571,43 -Libor a 3 mesi (in USD) -$2.000.000,00 Scambi Parte B +$2.000.000,00 + Euribor a 3 mesi (in Euro) +€ 1.428.571,43 3) Tabella II.5 (la cui schematizzazione si basa sempre sul punto di vista della Parte A): il Basis Swap 3M vs 6M prevede il pagamento di un tasso variabile Euribor a 3 mesi espresso in EUR da parte della controparte A, a fronte del pagamento di un tasso variabile Euribor a 6 mesi espresso in EUR, con l'aggiunta di uno spread di 90 punti base, da parte della controparte B. Il valore del capitale nozionale della precedente struttura è pari a 1.428.571,43 €: (Tabella II.5 - Schematizzazione contratto Basis Swap 3M vs 6M) Data d'esercizio t=0 tA = 0.5, 1, …, 10 tB = 0.25, 0.5, …, 10 tA = tB = 10 Scambi Parte A -Euribor a 3 mesi (in Euro) - Scambi Parte B + Euribor a 6 mesi + 0.90% (in Euro) - Il modo più semplice per valutare queste tre strutture elementari, ad esempio basandosi sulla Trade Date – ovvero la Data di Negoziazione – è attraverso la determinazione dei tassi di interesse forward (a lungo termine) derivanti dalla zero rates curve (la struttura per scadenze dei tassi di interesse) disponibile a quella data. 175 TUTORIAL II – FIXED FLOAT CROSS CURRENCY Implementazione con Fairmat Con la Tabella II.6, sottoriportata, riproponiamo ancora una volta la scheda tecnica, già mostrata in precedenza con la tabella II.1, in termini però diversi, ovvero in termini parametrici, ossia ricorrendo all'utilizzo degli oggetti disponibili nell'ambiente Parameters & Functions: (Tabella II.6 – Scheda tecnica del CCIRS riproposta in termini parametrici) Nozionale (espresso in Dollari) Nozionale (espresso in Euro) Tasso di cambio EUR/USD alla Data di Negoziazione Data Negoziazione Data Inizio Contratto Data di Scadenza Frequenza di pagamento Parte A Frequenza di pagamento Parte B Scambio All'inizio del contratto N_D N_F FxSpot Valuation Date Effective Date Pdu_6M [end] o Pdu_3M [end] Matfl_3M Matfl_6M Parte A Parte B N_F N_D EUR Euribor Matfl_6M + Spread Fix N_D N_F Parte A Parte B Reset type =Advance, Add/Sub Days = Rday Cvg_6M_30360 Cvg_6M_Ac360 Dal 01/06/2009 al 01/06/2019 Alla scadenza del contratto Convenzione Drivers rates per le Date di reset Day Count Fraction Con la tabella II.7 riproponiamo, invece, nel dettaglio i dati contenuti nei vector dates Pdu_6M e Pdu_3M, i quali contengono le date di scadenza semestrale (6M) e trimestrale (3M) non corrette, non aggiustate, che costituiranno le date di partenza per la modellazione delle strutture elementari fin qui descritte. (Tabella II.7 – Vector dates Pdu_6M e Pdu_3M) # 1 2 3 … … 18 19 20 21 22 23 … … 37 38 39 40 Pdu_6M 01/12/2009 01/06/2010 01/12/2010 … … 01/06/2018 01/12/2018 01/06/2019 176 Pdu_3M 01/09/2009 01/12/2009 01/03/2010 … … 01/12/2013 01/03/2014 01/06/2014 01/09/2014 01/12/2014 01/03/2015 … … 01/09/2018 01/12/2018 01/03/2019 01/06/2019 TUTORIAL II – FIXED FLOAT CROSS CURRENCY Di seguito, con le tabelle II.8, II.9 e II.10, proponiamo la scomposizione dei payoff principali dei tre prodotti elementari delineati precedentemente ai fini del pricing del CCIRS: (Tabella II.8 – Schematizzazione payoff principale del contratto Fixed-Float Interest Rate Swap) Parte 1: Fixed-Float Interest Rate Swap (USD) Nozionale (espresso in Dollari) Data Negoziazione Data Inizio Contratto Data di Scadenza Frequenza di pagamento Parte A Frequenza di pagamento Parte B Scambio Da 1 fino a Pdu_6M [end] o Pdu_3M [end] Convenzione N_D Valuation Date Effective Date Pdu_6M [end] o Pdu_3M [end] Matfl_6M Matfl_3M Parte A Parte B Fix USD Libor Matfl_3M Parte A Parte B Reset type =Advance, Add/Sub Days = Rday Cvg_6M_30360 Cvg_6M_Ac360 Drivers rates per le Date di reset Day Count Fraction (Tabella II.9 – Schematizzazione payoff principale del contratto Float-Float Cross Curreny Swap) Parte 2: Float-Float Cross Currency Basis Swap (USD) Nozionale (espresso in Dollari) N_D Nozionale (espresso in Euro) N_F Tasso di cambio EUR/USD alla Data di Negoziazione FxSpot Data Negoziazione Valuation Date Data Inizio Contratto Effective Date Data di Scadenza Pdu_3M [end] Frequenza di pagamento Parte A Matfl_3M Frequenza di pagamento Parte B Matfl_3M Scambio Parte A Parte B Da 1 fino a Pdu_3M [end] o Pdu_3M [end] USD Libor Matfl_3M EUR Libor Matfl_3M Pdu_3M [end] N_D N_F Convenzione Parte A Parte B Reset type = Advance, Reset type =Advance, Drivers rates per le Date di reset Add/Sub Days = Rday Add/Sub Days = Rday Day Count Fraction Cvg_3M_Ac360 Cvg_3M_Ac360 177 TUTORIAL II – FIXED FLOAT CROSS CURRENCY (Tabella II.10 – Schematizzazione payoff principale del contratto Basis Swap 3M vs 6M) Parte 3: Basis Swap 3M vs 6M (EUR) Nozionale (espresso in Euro) Data Negoziazione Data Inizio Contratto Data di Scadenza Frequenza di pagamento Parte A Frequenza di pagamento Parte B Scambio N_F Valuation Date Effective Date Pdu_6M [end] o Pdu_3M [end] Matfl_3M Matfl_6M Parte A Parte B EUR Euribor Matfl_6M + EUR Euribor Matfl_3M Spread Parte A Parte B Reset type =Advance, Reset type =Advance, Add/Sub Days = Rday Add/Sub Days = Rday Cvg_3M_Ac360 Cvg_6M_Ac360 Da 1 fino a Pdu_6M [end] Convenzione Drivers rates per le Date di reset Day Count Fraction Dati di input e loro inserimento A questo punto dobbiamo riepilogare, attraverso tabella II.11, ordinandoli per categoria, i dati di input, che poi dovremo inserire nell'ambiente Parameters & Functions, alcuni dei quali si riferiscono in generale ad entrambe le controparti contrattuali, mentre altri, invece, si riferiscono solo ad una specifica controparte: (Tabella II.11 – Riepilogo e descrizione dati di input Tutorial Fixed-Float Cross Currency) NOME TIPO DI DATO CATEGORIA N_D Scalar Parametro N_F Scalar Parametro FxSpot Scalar Parametro Matfl_3M Scalar Parametro Rday Scalar Parametro Date Sequence Parametro Pdu_6M 178 DESCRIZIONE Indica l'ammontare del nozionale del derivato espresso nella valuta domestica (USD) Indica l'ammontare del nozionale del derivato espresso nella valuta estera (EUR) Indica il tasso di cambio alla Valuation Date (ovvero alla Trade Date). Si riferisce al tasso di cambio della valuta domestica contro la valuta estera Rappresenta la scadenza del tasso variabile espressa in frazioni d'anno (per cui 0,25 equivale a 3 mesi) Indica il numero di giorni da aggiungere (o sottrarre) alle Date di Reset Rappresenta il vettore delle date di pagamento non aggiustate, non corrette (con frequenza pari a Matfl_6M, ovvero semestrale) TUTORIAL II – FIXED FLOAT CROSS CURRENCY (Tabella II.11 – Riepilogo e descrizione dati di input Tutorial Fixed-Float Cross Currency) NOME Pdu_3M TIPO DI DATO Date Sequence CATEGORIA Parametro Pda_6M Date Vector Adjustment Parametro Pda_3M Date Vector Adjustment Parametro Rd_3M Date Vector Adjustment Parametro Cvg_6M_ Ac360 Date Vector Differences Calculator Parametro ZrDisc_D ZrDisc_F ZrDisc_F_ E3 Fix Funzione Interpolante Funzione Interpolante Funzione Interpolante Scalar Parametro Parametro Parametro Parte A Date Vector Differences Calculator Parte A Spread Scalar Parte B Matfl_6M Scalar Parte B Date Vector Adjustment Parte B Cvg_6M_ 30360 Rd_6M 179 DESCRIZIONE Rappresenta il vettore delle date di pagamento non aggiustate, non corrette (con frequenza pari a Matfl_3M, ovvero trimestrale) Rappresenta il vettore delle date di pagamento derivante dal vettore Pdu_6M, aggiustate, corrette per la Modified Following Date Rolling Convention Rappresenta il vettore delle date di pagamento derivante dal vettore Pdu_3M, aggiustate, corrette per la Modified Following Date Rolling Convention Date's Vector Transformation derivante dal vettore Pdu_3M utilizzando l'oggetto Rday. Il Reset Type da impostare è di tipo Advance Date's Vector Differences Transformation derivante dal vettore Pdu_6M selezionando l'oggetto Actual360 nel menù a tendina “Day Count Convention” e l'oggetto Unadjusted nel menù a tendina “Date Rolling Convention” Rappresenta la curva di sconto del mercato domestico Rappresenta la curva di sconto del mercato estero Rappresenta la curva di sconto del mercato estero per i tassi Euribor a 3 Mesi Indica il tasso fisso del Cross Currency Date's Vector Differences Transformation derivante dal vettore Pdu_6M selezionando l'oggetto Thirty360 nel menù a tendina “Day Count Convention” e l'oggetto Unadjusted nel menù a tendina “Date Rolling Convention” Indica la componente positiva da aggiungere al tasso variabile Rappresenta la scadenza del tasso variabile espressa in frazioni d'anno (per cui 0,5 equivale a 6 mesi) Date's Vector Transformation derivante dal vettore Pdu_6M utilizzando l'oggetto Rday. Il Reset Type da impostare è di tipo Advance TUTORIAL II – FIXED FLOAT CROSS CURRENCY (Tabella II.11 – Riepilogo e descrizione dati di input Tutorial Fixed-Float Cross Currency) NOME TIPO DI DATO CATEGORIA DESCRIZIONE Cvg_3M_ Ac360 Date Vector Differences Calculator Parte B Date's Vector Differences Transformation derivante dal vettore Pdu_3M selezionando l'oggetto Actual360 nel menù a tendina “Day Count Convention” e l'oggetto Unadjusted nel menù a tendina “Date Rolling Convention” Fswap Funzione Interpolante Parte B Indica il tasso swap utilizzato per la determinazione della curva di sconto estera A questo punto dovremo aprire un nuovo progetto in Fairmat. Selezionando il percorso Settings → Project Preferences → Tab Simulation Dates and Conventions possiamo specificare la Valuation Date e la Effective Date. In questo caso dovremo, in particolare, impostare la Valuation Date uguale alla Trade Date (e quindi corrispondente alla data del 29/05/2009). Con la figura II.1 vediamo come apparirà l'ambiente Parameters & Functions una volta che abbiamo provveduto ad inserire in esso tutti gli oggetti necessari alla modellazione del contratto CCIRS. (Figura II.1: Riepilogo oggetti dell'ambiente Parameters & Functions necessari per la modellazione del CCIRS) 180 TUTORIAL II – FIXED FLOAT CROSS CURRENCY Per questo tutorial utilizzeremo il plug-in Plain Vanilla. Qualora esso non sia già disponibile nella versione installata è possibile scaricarlo (o semplicemente aggiornarlo) dal sito web di Fairmat selezionando il seguente percorso: Settings → Plug-Ins Management e quindi utilizzando il PlugIns Management (figura II.2). (Figura II.2: Plug-In Plain Vanilla, Ambiente Plug-Ins Management, tab Available Online Plug-Ins) Una volta che il plug-in Plain Vanilla è stato installato, una nuova tavolozza di icone apparirà vicino alla solita tavolozza Option Map e che è la seguente: Il prossimo passo consiste nel preparare correttamente le impostazioni relative al sistema di attualizzazione (o di discounting) globale, ovvero riferito al progetto nel suo complesso. Nell'esempio di questo tutorial utilizzeremo i tassi forward e i fattori di sconto saranno determinati attraverso un'espressione deterministica. I tassi sono di tipo composto continuo per cui la funzione dei fattori di sconto sarà una funzione esponenziale collegata alla curva di sconto del mercato domestico ricordandoci che nell'esempio di questo tutorial il mercato domestico di riferimento è quello americano (figura II.3). Infine, dal momento che il pricing non è ancorato ad alcun tipo di modello finanziario, dovremo impostare il Numerical Method cambiando, modificando la valorizzazione del relativo campo, da Simulation ad Analytic Solution. Il percorso da selezionare è Setting → Numerical Method. 181 TUTORIAL II – FIXED FLOAT CROSS CURRENCY (Figura II.3: Impostazione del sistema di discounting del progetto) Siamo ora pronti per costruire gli strumenti finanziari finora descritti nell'ambiente Option Map. Con la figura II.4 mostraimo il contratto CCIRS, come la somma di tre derivati di base elementari, ovvero come la somma di: 1) un Fixed-Float Interest Rate Swap (IRS Fisso contro Variabile); 2) un Float-Float Cross Currency Basis Swap (Cross Currency Basis Swap Variabile contro Variabile); e 3) un Basis Swap 3M vs 6M (Basis Swap 3 Mesi contro 6 Mesi); (Figura II.4: Modellazione nell'ambiente Option Map del contratto CCIRS) 182 TUTORIAL II – FIXED FLOAT CROSS CURRENCY Fixed-Float Interest Rate Swap Il contratto Fixed-Float Interest Rate Swap (ovvero Fisso contro Variabile) consta di una parte fissa (rappresentata dal blocco –FIX_6M_D) corrisposta dalla Parte A con frequenza semestrale (e quindi con frequenza pari a @Pda_6M) con date rolling convention 30/360, e di una parte variabile (rappresentata dal blocco L3_3M_D) ricevuta dalla Parte A su base trimestrale (e quindi con frequenza pari a @Pda_3M) con date rolling convention Actual/360. L'ammontare del capitale nozionale di riferimento è espresso in dollari ed è dato dal valore dell'oggetto N_D. Per la costruzione del blocco –FIX_6M_D (figura II.5) dobbiamo compilare il solo tab Contract Specification, mentre per la costruzione del blocco L3_3M_D (figura II.6) dovremo compilare, oltre al tab Contract Specification, anche il tab Market Data. Notiamo che la Forwarding Curve è la stessa Discounting Curve utilizzata per il global discounting del progetto. L'operatore funzionale (IRS-FXFL-USD) è costituito dalla somma dei due blocchi dati i segni impostati correttamente (ovvero impostando l'operazione algebrica -x1 + x2 – figura II.7). (Figura II.5: Editing blocco –FIX_6M_D del Fixed-Float Interest Rate Swap) 183 TUTORIAL II – FIXED FLOAT CROSS CURRENCY (Figura II.6: Editing blocco L3_3M_D del Fixed-Float Interest Rate Swap) (Figura II.7: Editing operatore funzionale Function del Fixed-Float Interest Rate Swap) 184 TUTORIAL II – FIXED FLOAT CROSS CURRENCY Float-Float Cross Currency Basis Swap Il contratto Float-Float Cross Currency Basis Swap (ovvero Variabile contro Variabile) è costituito da due parti variabili. La prima (rappresentata dal blocco –L3_3M_D) corrisposta dalla Parte A, è esattamente la medesima che la Parte A riceve sul contratto Fixed-Float Interest Rate Swap, che abbiamo visto in precedenza, con l'eccezione legata al pagamento dell'ammontare del capitale nozionale (pari a 2.000.000,00 USD) alla scadenza; la seconda (rappresentata dal blocco E3_3M_EUR_F) viene ricevuta dalla Parte A con frequenza trimestrale (e quindi con frequenza pari a @Pda_3M) con date rolling convention Actual/360 ed è collegata al mercato europeo. L'ammontare del capitale nozionale di riferimento è espresso in euro ed è dato dal valore dell'oggetto N_F. La Forwardind Curve si riferisce, quindi, al mercato europeo. Alla scadenza, ciascuna controparte paga l'ammontare del capitale nozionale (espresso in euro). Sia per la costruzione del blocco –L3_3M_D che per la costruzione del blocco E3_3M_EUR_F dovremo compilare sia il tab Contract Specification che il tab Market Data (figure II.8 e II.9). Si noti che si stiamo utilizzando differenti strutture per scadenze dei tassi di interesse per stime di mercato coerenti dei fattori di sconto e dei tassi forward aventi differenti regimi di tasso sottostanti (quali ad esempio, l'Euribor a 3 mesi, l'Euribor a 6 mesi, ecc.). Per il calcolo dei tassi forward ricorreremo, infatti, ad una yield curve diversa (ZrDisc_F_E3) rispetto a quella utilizzata per il calcolo dei tassi forward Euribor a 6 mesi espressi in euro (ZrDisc_F). (Figura II.8: Editing blocco –L3_3M_D del Float-Float Cross Currency Basis Swap) 185 TUTORIAL II – FIXED FLOAT CROSS CURRENCY (Figura II.9: Editing blocco E3_3M_EUR_F del Float-Float Cross Currency Basis Swap) Le funzioni interpolanti CCBS_Spread e Fswap rappresentano, rispettivamente, lo spread base del Cross Currency e la struttura per scadenze dei tassi swap sul mercato estero. Utilizziamo questi oggetti al fine di effettuare correttamente la valutazione basata sulle curve di sconto modificate, corrette, così come descritto e suggerito nell'articolo di W. Boenkost e M.W. Schmidt intitolato "Cross Currency Swap Valuation" del Novembre 2004, edito presso la Hfb School of Finance & Management. Notiamo che gli scambi iniziali degli ammontari dei nozionali fra le controparti vengono omessi e che N_F è esattamente pari a N_D moltiplicato per FxSpot. L'operatore funzionale (CC-FLFL-EURUSD) è costituito dalla somma dei due blocchi dati i segni impostati correttamente. Il blocco E3_3M_EUR_F restituisce un ammontare in euro che verrà poi convertito in dollari (l'operatore algebrico da impostare è pertanto -x1 + x2*FxSpot – figura II.10). (Figura II.10: Editing operatore funzionale Function del Float-Float Cross Currency Basis Swap) 186 TUTORIAL II – FIXED FLOAT CROSS CURRENCY Basis Swap 3M vs 6M Il Basis Swap 3M vs 6M consta di due parti variabili. La prima (rappresentata dal blocco – E3_3M_F) viene corrisposta dalla Parte A con frequenza trimestrale (e quindi con frequenza pari a @Pda_3M); la seconda (rappresentata dal blocco (E6+spread)_6M_F) viene ricevuta dalla Parte A con frequenza semestrale (e quindi con frequenza pari a @Pda_6M). L'ammontare del capitale nozionale di riferimento è espresso in euro e corrisponde a N_F = N_D/FxSpot e la date rolling convention applicata è Actual360. Sia per la costruzione del blocco –E3_3M_F che per la costruzione del blocco (E6+spread)_6M_F dovremo compilare, oltre ai tabs Contract Specification e Market Data, anche il tab Custom Discounting (figure II.11 e II.12), in quanto entrambi i blocchi del contratto Basis Swap 3M vs 6M si riferiscono al capitale nozionale denominato in euro per cui dovremo anche specificare un fattore di sconto collegato al mercato europeo (e quindi estero nell'esempio perchè ricordiamoci sempre che in questo caso consideriamo domestico il mercato americano) piuttosto che a quello americano. (Figura II.11: Editing blocco –E3_3M_F del Basis Swap 3M vs 6M) 187 TUTORIAL II – FIXED FLOAT CROSS CURRENCY (Figura II.12: Editing blocco (E6+spread)_6M_F del Basis Swap 3M vs 6M) 188 TUTORIAL II – FIXED FLOAT CROSS CURRENCY L'operatore funzionale (BS-FLFL-EUR) è costituito dalla somma dei due blocchi dati i segni impostati correttamente. Entrambi i blocchi si riferiscono ad un nozionale espresso in euro, per cui il valore attuale dovrà essere convertito in dollari (l'operatore algebrico da impostare è pertanto (-x1 + x2)*FxSpot – figura II.13). (Figura II.13: Editing operatore funzionale Function del Basis Swap 3M vs 6M) 189 TUTORIAL III ACCRUAL SWAP TUTORIAL III – ACCRUAL SWAP La clausola Range Accrual (letteralmente, clausola di "intervallo di accumulazione") è una generica forma di accumulazione degli interessi nella quale il tasso di interesse cedolare viene guadagnato solo sui giorni nei quali esso ricade entro uno specificato range, o intervallo. Nel contratto Accrual Swap il pagamento degli interessi viene effettuato qualora il tasso di interesse di riferimento, quale ad esempio il tasso Euribor o il tasso Libor, sia superiore o inferiore rispetto ad un certo livello. La ragione principale per la quale un soggetto sottoscrive questa tipologia di contratto derivato è dovuta al tentativo di ottenere un tasso di interesse fisso più basso mediante l'assunzione del rischio che il tasso di riferimento cada al di fuori del range (o intervallo) concordato. Descrizione La clausola Range Accrual è una generica forma di accumulazione degli interessi nella quale il tasso di interesse cedolare (denominato Rate) viene guadagnato solo sui giorni nei quali un altro tasso di interesse, dal quale il tasso di interesse cedolare deriva (denominato Driver), ricade entro uno specificato range, o intervallo. L'espressione matematica che permette di sintetizzare il concetto appena espresso è la seguente: N 1 Coupon j= ∑ Ratei per j = 1, 2, ... , M [III.1] N i =1 dove Ratei viene definita come una funzione dei Driveri e quindi attraverso la seguente: Rate i=ValInf se Driveri ≤EstrInf [III.2] Rate i= Ratei se EstrInf < Driveri ≤EstrSup Rate i=ValSup se Driveri ≥EstrSup dove N indica il numero dei giorni inclusi in ciascun periodo di calcolo M; EstrInf e EstrSup indicano, rispettivamente, l'estremo inferiore e l'estremo superiore dell'intervallo concordato e di riferimento (ovvero il range); Driveri indica il tasso di interesse di riferimento, ovvero il Driver Rate, la cui fluttuazione può essere al di sopra dell'estremo superiore (EstrSup), al di sotto dell'estremo inferiore (EstrInf) oppure fra i due estremi dell'intervallo concordato e di riferimento; Ratei indica l'accumulazione dell'interesse e può essere esso stesso un estremo inferiore o un estremo superiore. L'indice i sta a significare che la rilevazione del Driver Rate, i cui movimenti definiscono il tasso Rate, viene effettuata giorno per giorno per i giorni inclusi in ciascun periodo di calcolo. Per cui per valutare questo strumento derivato dobbiamo simulare l'evoluzione del Driver Rate per gli N i-giorni inclusi in ciascun periodo di calcolo M. Come avremo modo di vedere più avanti, ciò potrebbe essere fatto attraverso la funzione incorporata di Fairmat IMean. { 190 TUTORIAL III – ACCRUAL SWAP Con la tabella III.1, sottoriportata, possiamo vedere la scheda tecnica del contratto Accrual Swap oggetto di questo tutorial: (Tabella III.1 - Scheda tecnica dell'Accrual Swap) Nozionale Data Negoziazione Data Inizio Contratto Data di Scadenza Frequenza di pagamento Parte A Frequenza di pagamento Parte B Scambi € 4.500.000,00 16/06/2010 27/06/2010 27/06/2015 Semestrale Semestrale Parte A Parte B Primo anno se Eur6M < 2,50% altrimenti 2,50% - 0,30% Eur6M - 0,30% Secondo anno se Eur6M < 3,50% altrimenti 3,50% - 0,30% Eur6M - 0,30% Terzo anno se Eur6M < 4,50% altrimenti 4,50% - 0,30% Eur6M - 0,30% Convenzione Date di Reset Day Count Fraction Parte A Arrears, 2 giorni Act/360, Unadjusted Somma da i = 1 fino a N Rate(i) + 0,50% Dove Rate(i) è definito come: se Eur6M < 0,10% 0,00% Se 0,10% <= Eur6M <= 4,70% Eur6M (i) altrimenti 0,50% se Eur6M < 0,20% 0,00% se 0,20% <= Eur6M <= 4,80% Eur6M (i) altrimenti 0,50% se Eur6M < 0,30% 0,00% Se 0,30% <= Eur6M <= 5,20% Eur6M (i) altrimenti 0,50% N = numero di giorni di ciascun periodo Parte B L'i-esimo giorno 30/360, Unadjusted In questo tutorial mostreremo un (semplice) esempio di contratto Accrual Swap nel quale il tasso variabile è condizionato dal numero di giorni nei quali il tasso Euribor (ovvero il tasso di riferimento) si trova ricompreso entro un range, un intervallo, concordato durante un periodo predefinito. La ragione principale per la quale un soggetto sottoscrive questa tipologia di contratto derivato è dovuta al tentativo di ottenere un tasso di interesse fisso più basso assumendosi il rischio che il tasso di riferimento cada al di fuori del range (o intervallo) concordato. Le formule generali, descritte sopra attraverso la [III.1] e la [III.2], vengono in questa sede semplificate dal momento che Drivers e Rate coincidono e sono pari al tasso Euribor a 6 mesi, sono equivalenti al tasso Euribor a 6 mesi, il quale costituisce il tasso di riferimento del contratto Range Accrual. 191 TUTORIAL III – ACCRUAL SWAP Implementazione con Fairmat Con la tabella III.2, sottoriportata, riproponiamo la scheda tecnica del contratto Accrual Swap, già proposta con la precedente tabella III.1, in termini però diversi, ovvero in termini parametrici e quindi utilizzando gli oggetti disponibili nell'ambiente Parameters & Functions. (Tabella III.2 - Scheda tecnica dell'Accrual Swap) Nozionale Data Negoziazione Data Inizio Contratto Data di Scadenza Frequenza di pagamento Parte A Frequenza di pagamento Parte B Scambi N Valuation Date Effective Date Pda[end] Matfl Matfl Parte A Parte B Da 1 fino a Pda [end] Somma da i = 1 fino a N Dove Rate(i) è definito come: se Eur Matfl < TassoSoglia altrimenti TassoSoglia – Spd EurMatf – Spd Funzione Convertible se Eur Matfl < Estr. Inf. se Estr. Inf <= Eur Matfl <= Estr. Sup. altrimenti Rate(i) + Add Estr. Inf. Eur Matfl (i) Estr. Sup. Funzione Range Accrual N = numero di giorni di ciascun periodo Convenzione Date di Reset Day Count Fraction Parte A Reset type: Arrears Add/Sub Days: Rday Cvg_A Parte B all'interno della funzione incorporata IMean Cvg_B Da questa riprosizione della scheda tecnica possiamo notare l'esplicazione di due diverse funzioni create dall'utente: Convertible e Range Accrual. In base alla funzione creata dall'utente Convertible se – nel periodo che va dall'Effective Date a Pda[end], ovvero alla scadenza – il tasso Euribor a 6 mesi risulta inferiore al TassoSoglia definito contrattualmente allora la Parte A dovrà corrispondere un tasso di interesse pari a TassoSoglia – Spd (ovvero meno lo Spread); altrimenti dovrà corrispondere un tasso di interesse pari all'Euribor a 6 mesi meno lo Spread (ovvero EurMatfl – Spd). In base alla funzione create dall'utente RangeAccrual, invece, se – nel periodo che va dall'Effective Date a Pda[end], ovvero alla scadenza – il tasso Euribor a 6 mesi risulta inferiore rispetto a EstrInf, ovvero inferiore rispetto all'estremo inferiore del range concordato, la Parte B dovrà corrispondere un tasso pari proprio a EstrInf; se il tasso Euribor a 6 mesi risulta compreso fra EstrInf e EstrSup, ovvero fra i due estremi del range concordato, e quindi risulta compreso fra l'estremo inferiore e quello superiore dell'intervallo concordato, la Parte B corrisponderà un tasso pari a EurMatfl, ovvero pari allo stesso Euribor a 6 mesi; altrimenti, ovvero qualora il tasso Euribor a 6 mesi risulti superiore rispetto a EstrSup, ovvero superiore rispetto all'estremo superiore del range concordato, la Parte B dovrà corrispondere un tasso pari proprio a EstrSup. 192 TUTORIAL III – ACCRUAL SWAP Ritornando alle formule descritte in precedenza, ovvero quelle descritte attraverso la [III.1] e la [III.2], la clausola Range Accrual – la quale rappresenta il payoff per la Parte B – può essere quindi riespressa anche come segue: N 1 Coupon j= ∑ Ratei per j = 1, 2, ..., 10 [III.3] N i =1 mentre Ratei può essere ridefinita come una funzione dei tassi Euribor a 6 mesi con data di reset corrispondente all'i-esimo giorno di ciascuna semestralità. Per cui possiamo riscrivere la [III.2] come segue: Rate i=0,00 % se Euribor 6 Mesi i≤EstrInf [III.4] Rate i=Euribor 6 Mesi i se EstrInf < Euribor 6 Mesi i≤EstrSup Rate i=0,50 % se Euribor 6 Mesi i≥EstrSup Il payoff relativo alla Parte A, invece, può essere definito come una funzione di due scenari ancora una volta definiti dal valore del tasso Euribor a 6 mesi ma rilevato semestralmente due giorni prima della fine del periodo di rilevazione (si parla anche della cosidetta fixing convention definita Arrears, 2 giorni lavorativi). { Con la tabella III.3, sottoriporata, mostriamo, nel dettaglio, le date contenute nei vector dates Pdu e Sdu e i corrispondenti valori del tasso di interesse soglia – rappresentato dall'oggetto TassoSoglia – di riferimento per la Parte A, e dell'estremo inferiore (EstrInf) e dell'estremo superiore (EstrSup) del Range Accrual di riferimento invece per la Parte B. (Tabella III.3 – Vector Dates Pdu e Sdu e corrispondenti tassi di interesse soglia) # Pdu 1 2 3 4 5 6 7 8 9 10 27/12/2010 27/06/2011 27/12/2011 27/06/2012 27/12/2012 27/06/2013 27/12/2013 27/06/2014 27/12/2014 27/06/2015 TassoSoglia Parte A 2,50% 2,50% 3,50% 3,50% 4,50% 4,50% 4,50% 4,50% 4,50% 4,50% Sdu 27/06/2010 27/12/2010 27/06/2011 27/12/2011 27/06/2012 27/12/2012 27/06/2013 27/12/2013 27/06/2014 27/12/2014 Estr. Inf. Parte B 0,10% 0,10% 0,20% 0,20% 0,30% 0,30% 0,30% 0,30% 0,30% 0,30% Estr. Sup. Parte B 4,70% 4,70% 4,80% 4,80% 5,20% 5,20% 5,20% 5,20% 5,20% 5,20% Per modellare il contratto Accrual Swap dobbiamo, innanzitutto, aprire in Fairmat un nuovo progetto vuoto (New Empty Project). Selezionando il percorso Settings → Project Preferences → Tab Simulation Dates and Conventions è possibile specificare la Valuation Date (ovvero la data di valutazione) e la Effective Date (ovvero la data di inizio contratto). Dopo di chè dovremo entrare nell'ambiente Parameters & Functions nel quale sarà possibile inserire gli oggetti necessari per la modellazione del contratto, alcuni dei quali si riferiscono ad entrambe le controparti contrattuali mentre altri si riferiscono soltanto ad una specifica controparte. Attraverso la tabella III.4, riportata alla pagina successiva, andiamo a riepilogare, ordinandoli per categoria, i dati di input di questo tutorial, e che dovremo inserire nell'ambiente Parameters & Functions, appunto. 193 TUTORIAL III – ACCRUAL SWAP (Tabella III.4 - Riepilogo e descrizione dati di input Tutorial Accrual Swap) NOME TIPO DI DATO CATEGORIA Scalar Parametro Pdu Date Sequence Parametro Pda Date Vector Adjustment Parametro Matfl Scalar Parametro ZrDisc Funzione interpolante Parametro Rday Scalar Parte A Rd Date Vector Adjustment Parte A Cvg_A Date's Vector Differences Calculator Parte A TassoSoglia Vector Parte A Spd Scalar Parte A Funzione analitica Parte A Scalar Parte B N Convertible Add DESCRIZIONE Indica l'ammontare del capitale nozionale del contratto E' il vettore delle date di pagamento (non corrette, ovvero unadjusted) E' il vettore delle date di pagamento ottenuto a partire dal vettore Pdu aggiustando le date per la Modified Following Date Rolling Convention Indica la scadenza del tasso variabile espressa in frazioni d'anno (per cui 0,5 equivale a 6 mesi) Rappresenta la curva di sconto Indica il numero di giorni da sottrarre alle date di reset Date's Vector Transformation ottenuta a partire dal vettore Pdu utilizzando l'oggetto Rday e selezionando Preceding come Date Rolling Convention. Il Reset type da impostare è Arrears Date's Vector Differences Transformation ottenuta a partire dal vettore Pdu selezionando l'oggetto Actual360 nel menù a tendina “Day Count Convention” e l'oggetto Unadjusted nel menù a tendina “Date Rolling Convention” Indica la soglia oltre la quale il tasso applicato alla Parte A varia convertendosi da fisso (sottratto lo Spread) a variabile (sottratto lo Spread) Indica la componente negativa da sommare algebricamente al tasso fisso o variabile. Viene utilizzato nella funzione definita dall'utente Convertible E' la funzione definita dall'utente che esprime il payoff della Parte A. In particolare, se il tasso di interesse è inferiore al TassoSoglia, la Parte A pagherà un tasso fisso, ovvero il TassoSoglia sottratto lo Spread Spd, altrimenti la Parte A pagherà un tasso variabile, ovvero il tasso Euribor a 6 mesi sottratto lo Spread Spd Indica la componente positiva fissa da aggiungere algebricamente al tasso variabile applicato alla Parte B 194 TUTORIAL III – ACCRUAL SWAP (Tabella III.4 - Riepilogo e descrizione dati di input Tutorial Accrual Swap) NOME Sdu TIPO DI DATO CATEGORIA Date Sequence Parte B Estr.Inf.B Vettore Parte B Estr.Sup.B Vettore Parte B Valnf Scalar Parte B ValSup Scalar Parte B RangeAccrual Cvg_B Funzione analitica Date's Vector Differences Calculator DESCRIZIONE E' il vettore delle date di pagamento (non corrette, ovvero unadjusted). Include la Effective Date ed esclude l'ultima data di pagamento (ovvero Pdu[end]). Tale vettore ha la stessa dimensione del vettore Pdu e viene utilizzato come argomento dell'Interval Function IMean Indica l'estremo inferiore della funzione definita dall'utente RangeAccrual Indica l'estremo superiore della funzione definita dall'utente RangeAccrual Indica il valore della funzione definita dall'utente RangeAccrual nel caso di rilevamento del tasso variabile inferiore rispetto all'estremo inferiore dell'intervallo concordato (ovvero inferiore rispetto a Estr.Inf.B) Indica il valore della funzione definita dall'utente RangeAccrual nel caso di rilevamento del tasso variabile superiore rispetto all'estremo superiore dell'intervallo concordato (ovvero superiore rispetto a Estr.Sup.B) E' la funzione definita dall'utente che esprime il payoff della Parte B. In particolare, tale funzione definisce il tasso Ratei nel caso in cui il tasso Euribor a 6 mesi (il quale viene espresso attraverso un processo stocastico) si muova al di sopra dell'estremo superiore dell'intervallo concordato o al di sotto dell'estremo inferiore dell'intervallo concordato. Si noti che la funzione RangeAccrual verrà richiamata entro la funzione incorporata IMean Date's Vector Differences Transformation ottenuta a partire dal vettore Pdu selezionando l'oggetto Thirty360 nel menù a tendina “Day Count Convention” e l'oggetto Unadjusted nel menù a tendina “Date Rolling Convention” Parte B Parte B 195 TUTORIAL III – ACCRUAL SWAP Una volta inseriti tutti gli input sopra elencati, l'ambiente Parameters & Functions ci apparirà così come mostrato attraverso la figura III.1. (Figura III.1: Riepilogo dati di input dell'Accrual Swap Tutorial) Dopo di chè dobbiamo definire il processo stocastico sottostante, attivando l'ambiente Stochastic Process. Cliccando sul comando Add S. Process possiamo inserire un modello stocastico da quelli presenti in lista. La lista dei modelli disponibili può essere estesa con numerosi plug-ins disponibili on-line. Una volta inserito il processo stocastico, dovremo aprire la finestra di editing e selezionare il tab Data Source al fine di attivare il data-link – per cui il campo "Binding type" dovrà essere valorizzato selezionando la voce Bind object to specific data – selezionare il mercato borsistico di riferimento – per cui si dovrà valorizzare il campo "Market" selezionando, ad esempio, con riferimento al caso specifico del presente tutorial, la voce EU – e gli strumenti sui quali la calibrazione dovrà essere effettuata – per cui si dovrà valorizzare opportunamente il campo "Calibration Strategy" (figura III.2). Per l'esempio specifico abbiamo scelto un modello assai noto per la determinazione dei tassi di interesse a breve, ovvero il modello Hull & White e la calibrazione avverrà utilizzando le swapoptions europee. Dopo aver chiuso la finestra di editing, dovremo aprire il menù di contesto, premendo il tasto destro del mouse, e si dovrà selezionare la voce Calibrate model using data provider. Per la scelta del Market Data Provider dovremo selezionare il seguente percorso: Settings → Fairmat Preferences → Tab Core Preferences → Tab General; arrivati al tab General si dovrà valorizzare opportunamente il menù a cascata "Market Data Provider". 196 TUTORIAL III – ACCRUAL SWAP (Figura III.2: Definizione del processo stocastico sottostante per il tutorial Accrual Swap) Il passo successivo è quello poi di impostare il modello di discounting. Per questo esempio specifico stiamo utilizzando un processo stocastico per il quale viene definito un modello di discounting riferito al processo medesimo (@V1 – figura III.3). (Figura III.3: Impostazione del modello di Discounting) In aggiunta dovremo definire lo step di simulazione e il numero dei paths (ovvero dei percorsi) della simulazione Montecarlo. Possiamo specificare tali impostazioni selezionando il seguente percorso: Settings → Numerical Settings e compilando i campi "# of discrete time steps" e "# of simulated paths" (nel caso specifico preso in esame – parte destra della figura III.3 – dovremo valorizzare i campi inserendo, rispettivamente, i valori 1837 – ovvero il numero di giorni di calendario intercorrenti fra la Simulation Date, ovvero la data di inizio simulazione, e la Termination Date, ovvero la data di fine, di scadenza – e 5000 – ovvero il numero dei percorsi simulati (o "simulated paths"). 197 TUTORIAL III – ACCRUAL SWAP A questo punto siamo pronti per la modellazione del contratto nell'ambiente Option Map. Dalla tavolozza grafica della Option Map, attraverso un semplice drag&drop (letteralmente "trascina e lascia cadere") dovremo innanzitutto inserire un operator Functional al quale dovremo poi unire, attraverso due branches, due Strip of Options. Attraverso la figura III.4, possiamo vedere come appare l'ambiente Option Map una volta inseriti l'operator Functional e le due Strip of Options, una relativa alla Parte A e l'altra relativa alla Parte B. (Figura III.4: Option Map e Operatore funzionale Functional) Nel dettaglio, la Parte A (Leg A) del contratto è caratterizzato alla funzione Convertible (figura III.5) creata dall'utente nell'ambiente Parameters & Functions come y = f(x1, x2) – dove x1 e x2 sono le variabili indipendenti e y è l'output della funzione stessa – e richiamata nell'ambiente Option Map. Con l'eccezione legata all'oggetto Spread (uno scalar che può essere invocato nell'ambiente dell'editor della funzione) x1 e x2 sono sempre scalar risultati di una funzione incorporata (ovvero RATE(x1, x2, x3)) come anche lo sono le componenti di un vettore, TassoSoglia[#] ad esempio, o come anche il semplice scalar Matfl (il quale è input della funzione RATE). (Figura III.5: Dettaglio della funzione Convertible, e del payoff della Parte A) 198 TUTORIAL III – ACCRUAL SWAP La Parte B (Leg B) del contratto è, invece, caratterizzata dalla funzione RangeAccrual (figura III.6). Le variabili indipendenti x1, x2 e x3 vengono invocate nell'ambiente Option Map come, rispettivamente, il risultato della funzione incorporata RATE, dei componenti del vettore Estr.Inf.B e dei componenti del vettore Estr.Sup.B. L'intera funzione definita dall'utente RangeAccrual viene poi ricompresa all'interno della funzione incorporata IMean per calcolare il valore medio di ciascuna payment date. La funzione IMean(start; end; (expr); [increment]) restituisce la media aritmetica semplice (ovvero con tutti i pesi pari a 1/N, quindi equiparati, tutti identici) dei valori dell'espressione expr valutata nell'intervallo di valori compresi fra start e end campionato con un numero di step (di passi di iterazione) pari a (end – start)/increment. Si precisa che increment è un parametro opzionale che identifica lo spazio di incremento. Se viene omesso nella chiamata di funzione, sarà uguale allo step della simulazione Montecarlo (in questo caso quindi l'intervallo temporale verrà campionato in modo daily, e quindi increment sarà pari a 1/365). Assumendo # = 1 la funzione incorporata IMean sarà per il caso specifico preso in esame con il presente tutorial: I Mean(Sdu[1]; Pdu[1]; {RangeAccrual(RATE(xa ; matfl; @V1); Estr.Inf.B[1]; Estr.Sup.B[1])}; (1/365)) dove Sdu[1] è uguale a 0,03014, Pdu[1] è uguale a 0,53151 e Increment è pari a 1/365 = 0,00274 per cui il numero dei passi di iterazione è pari a 183 circa. Per cui la funzione RangeAccrual verrà invocata circa 183 volte allo scopo di definire il range, l'intervallo, medio di accumulazione per la prima payment date. (Figura III.6: Dettaglio della funzione RangeAccrual, e del payoff della Parte B) In questo esempio abbiamo implementato come scalar elementi come N, Spread, ValInf e ValSup. Nel caso in cui il contratto in esame contenga payment dates dipendenti da una serie di parametri, può essere utilizzata la caratteristica di indicizzazione dei vettori consentita da Fairmat. 199 TUTORIAL IV PATH DEPENDENCE TUTORIAL IV – PATH DEPENDENCE In questo tutorial mostriamo un esempio di valutazione di un contratto derivato con la caratteristica del Path Dependent (letteralmente, "del percorso dipendente"). Un'opzione Path Dependent è un'opzione il cui valore a scadenza dipende non soltanto dal prezzo finale dell'attività sottostante ma anche dalla serie storica dei suoi prezzi. Con la tabella IV.I, sottoriportata, proponiamo la scheda tecnica dell'opzione Path Dependent, appena descritta. (Tabella IV.1 – Scheda tecnica opzione Path Dependent) Up-Front Nozionale Data Negoziazione Data Inizio Contratto Data di Scadenza Frequenza di pagamento Parte A Frequenza di pagamento Parte B Scambi Dal 17/05/2005 al 17/05/2006 Dal 17/05/2006 al 17/05/2008 Dal 17/05/2008 al 17/05/2010 Convenzioni Date di Reset Day Count Fraction 22.000,00 11/05/2005 17/05/2005 17/05/2010 Trimestrale Trimestrale Parte A 0,600% Max [CN -1 + 3,75*(Eur3 – X); 0] CN – 1 Payment Dates 17/08/2006 17/11/2006 17/02/2007 17/05/2007 17/08/2007 17/11/2007 17/02/2008 17/05/2008 Parte A Advance Act/360 Parte B 4,60% Tasso Fisso (X) 2,75% 2,95% 3,15% 3,35% 3,55% 3,75% 3,95% 4,15% Parte B Act/360 Tutte le date sono corrette, aggiustate, seguendo la Modified Following Business Day Convention. La funzione CN si riferisce alla cedola immediatamente precedente. Come possiamo notare osservando nuovamente e con attenzione la scheda tecnica proposta con la tabella IV.1, la caratteristica del Path Dependent è attiva a partire dal secondo anno fino alla Termination Date (ovvero fino alla data di scadenza). Il metodo più semplice per valutare questo tipo di contratto derivato è quello di costruire una funzione specifica Path Dependent che verrà utilizzata per il secondo e il terzo anno di contratto; la caratteristica del Path Dependent in realtà, come già accennato in precedenza, continua a valere fino alla Termination Date (ovvero fino alla data di scadenza) ma in questa sede adottiamo una semplificazione ed ipotizziamo che gli ultimi otto scambi – ovvero quelli che avvengono nel 200 TUTORIAL IV – PATH DEPENDENCE periodo compreso tra la data del 17/08/2008 e la data del 17/05/2010 (Termination Date) – saranno fissati al 12° scambio. Con la tabella IV.2, sottoriportata, proponiamo l'elenco delle date contenute nei vector dates Pdu e Exu e l'elenco dei tassi fissi Xi associati alle rispettive date d'esercizio non corrette di cui al vettore Exu. (Tabella IV.2 – Vector dates Pdu e Exu e tassi fissi Xi associati alle date d'esercizio non corrette) Pdu Exu (Payment dates (Date d'esercizio non corrette) non corrette) 17/05/2005 17/08/2006 17/08/2005 17/11/2006 17/11/2005 17/02/2007 17/02/2006 17/05/2007 17/05/2006 17/08/2007 17/08/2006 17/11/2007 17/11/2006 17/02/2008 17/02/2007 17/05/2008 17/05/2007 17/08/2007 17/11/2007 17/02/2008 17/05/2008 17/08/2008 17/11/2008 17/02/2009 17/05/2009 17/08/2009 17/11/2009 17/02/2010 17/05/2010 Xi (Tasso fisso d'esercizio) 2,75% 2,95% 3,15% 3,35% 3,55% 3,75% 3,95% 4,15% Il processo stocastico sottostante in grado di descrivere l'evoluzione temporale del driver rate, del tasso di interesse di riferimento (che nel caso specifico è rappresentato dal tasso Euribor a 3 mesi, con scadenza trimestrale), potrebbe essere uno dei processi stocastici gestibili in Fairmat. Nel caso specifico abbiamo scelto il processo Hull & White ad un parametro, i cui parametri sono così valorizzati alla data di negoziazione (Trade Date): • α (alpha): 0,000000010001438; • σ (sigma): 0,0634152698142725; dove α indica il coefficiente di reversione media (mean reversion) mentre σ indica la deviazione standard dei tassi a breve. A questo punto dovremo aprire un nuovo progetto in Fairmat (ovvero un New Empty Project) e dovremo inserire nell'ambiente Parameters & Functions gli input del problema. Con la figura IV.1 mostriamo come apparirà l'ambiente Parameters & Functions di Fairmat una 201 TUTORIAL IV – PATH DEPENDENCE volta inseriti tutti gli input e tutti gli oggetti del problema relativo a questo tutorial. (Figura IV.1: Riepilogo oggetti dell'ambiente Parameters & Functions necessari per la modellazione del tutorial Path Dependence) I vettori di date Pd e rdAr derivano dal vettore Pdu, ovvero il vettore di date contenente le payment dates non aggiustate, non corrette, mediante l'utilizzo della funzione di conversione delle date Vector's adjustment function. Il vettore time si ottiene, invece, utilizzando la funzione di conversione delle date Vector's difference function. Gli ultimi quattro oggetti inseriti nell'ambiente Parameters & Functions (ovvero il vettore Exu, il vettore Ex, il vettore Xi e la funzione CN) si riferiscono specificamente alla caratteristica del Path Dependent del contratto derivato oggetto di analisi del presente tutorial. In particolare: il vettore di date Ex (Exercise Date) contiene le date d'esercizio aggiustate, corrette, ovvero le payment dates del secondo e del terzo anno di contratto; il vettore Xi contiene, invece, i tassi di interesse fissi associati alle payment dates contenute nel vettore Ex. Per quanto concerne la funzione ricorrente di Fairmat CN (figura IV.2) nel dettaglio: • il suo vettore di riferimento è dato Ex; detto altrimenti la caratteristica del Path Dependent è indicizzata allo specifico vettore Ex; • il suo valore iniziale (ovvero il "Starting Value") deriva dalla seguente espressione max (0,60% + 3,75% * (RATE(rdAr[5]; 0,25; @v1) – Xi[1]; 0) dove: 1) 0,60% indica l'ultima cedola rilevata prima dell'inizio del periodo di validità della caratteristica del Path Dependent; 2) il vettore rdAr è indicizzata alla posizione numero 5 (detto altrimenti e meglio, il vettore rdAr ha l'indice che parte dal valore 5) in quanto lo stesso deriva dal vettore Pdu ma la funzione legata alla caratteristica del Path Dependent parte dalla quinta data contenuta nel vettore Pd e quindi dalla posizione 5 del vettore Pd; 3) il vettore Xi ha l'indice che parte dal valore 1 in quanto, come il vettore Ex, anche lo stesso vettore Xi rappresenta uno specifico vettore per la funzione legata alla caratteristica del Path Dependent; • la sua "Update Expression" (ovvero l'espressione di ricorrenza) è rappresentata dalla seguente: max (CN[x-1] + 3,75% * (RATE(rdAr[x+4]; 0,25; @v1) – Xi[x]; 0) nella quale 202 TUTORIAL IV – PATH DEPENDENCE CN[x-1] rappresenta la caratteristica base del Path Dependent (per cui il valore di CN[x] dipende dal valore di CN[x-1]). Il valore della funzione CN dipende da x. Il vettore rdAr si riferisce alle payment dates mentre il vettore Xi è direttamente collegato, indicizzato, al vettore delle date d'esercizio Ex (@ex); (Figura IV.2: dettaglio della funzione ricorrente CN) La funzione CN si riferisce al payoff che la Parte A è tenuta a corrispondere per il secondo e per il terzo anno di contratto. Più nel dettaglio e formalmente vale la seguente: Coupon(i)=max [Coupon(i−1)+ 3,75∗(Eur3− X (i)); 0] per i = 1,2, ..., 8 [IV.1] La funzione ricorrente CN vale per il periodo che va dalla data del 17/08/2006 fino alla data del 17/05/2008, ovvero dalla quinta payment date fino alla dodicesima payment date. Tale funzione necessita di un valore di partenza (corrispondente nel caso specifico a CN[1], dove CN[0] indica il tasso cedolare rilevato alla data del 17/05/2006 – Trade Date o data di negoziazione contratto – e che risulta essere pari allo 0,60%) e di un'espressione di aggiornamento, di un'espressione ricorrente. 203 TUTORIAL IV – PATH DEPENDENCE Notiamo che la variabile x si riferisce alle date di esercizio, mentre il vettore rdAr si riferisce alle payment dates. Così, ad esempio, quando x è uguale a 2 si avrà: rdAr[x+4] = rdAr[2+4] = rdAr[6] Xi[x] = Xi[2] e CN[x-1] = CN[2-1] = CN[1] ovvero il valore di partenza della funzione ricorrente CN. Per implementare correttamente la caratteristica del Path Dependent in Fairmat è anche, e soprattutto, necessaria un'impostazione preliminare attivabile selezionando il seguente percorso: Settings → Numerical Settings → Advanced Settings successivamente si dovrà valorizzare il campo "Predictors" selezionando la voce Recurrence Functions + all State Variables (forced). 204 TUTORIAL V SWAP WITH ASIAN OPTION TUTORIAL V – SWAP WITH ASIAN OPTION Le opzioni asiatiche (o Asian Options) sono contratti finanziari derivati non standardizzati il cui valore dipende dalla media dei prezzi, dei valori, dell'attività sottostante (quale può essere, per esempio, un indice azionario o un paniere di titoli azionari) durante un determinato periodo di tempo. Descrizione Con questo tutorial mostreremo un esempio di contratto swap con il quale si realizza lo scambio di un tasso di interesse fisso contro un tasso di interesse variabile. Più nel dettaglio la Parte A paga trimestralmente un tasso di interesse fisso del 4,50% mentre la Parte B paga, a scadenza, il payoff di una Asian Option costruita sull'indice azionario FTSE MIB (ovvero sull'indice azionario di riferimento della Borsa Valori di Milano). Con la tabella V.1, sottoriportata, proponiamo la scheda tecnica del contratto derivato oggetto di questo tutorial, appena descritto. (Tabella V.1 - Scheda tecnica del contratto Swap con Asian Option) Nozionale Data di Negoziazione Data Inizio Contratto Data di Scadenza Frequenza di pagamento Parte A Frequenza di pagamento Parte B Scambi Dalla Data di Inizio Contratto Fino alla Data di Scadenza Alla Data di Scadenza € 1.000.000,00 16/06/2010 18/06/2010 18/06/2015 Trimestrale Alla Scadenza Parte A Parte B 4,50% 4,50% Convenzioni Parte A Drivers rate per le date di reset - Day Count Conventions Act/360, Unadjusted 205 Max [70% ((ind_f/ind_i-1)-1); 0,00%] - ind_i rappresenta il valore dell'indice FTSE MIB alla Data di Inizio Contratto; - ind_f rappresenta la media dei valori dell'indice FTSE MIB rilevati in corrispondenza delle Date di Osservazione; Date di Osservazione 18/06/2011 18/06/2012 18/06/2013 18/06/2014 18/06/2015 Parte B In corrispondenza delle Date di Osservazione Act/360, Unadjusted TUTORIAL V – SWAP WITH ASIAN OPTION La principale caratteristica del contratto appena descritto è che esso è collegato al payoff finale che la Parte B sarà tenuta a corrispondere. La Parte B paga, infatti, un payoff corrispondente al 70% della variazione del valore dell'indice azionario FTSE MIB (indice di riferimento per la Borsa Valori Italiana) da un suo valore di partenza ad un suo valore finale (qualora la differenza tra il suo valore finale e il suo valore iniziale rilevati sia positiva). In ogni caso, è bene notare che mentre la rilevazione iniziale occorre in corrispondenza di una specifica data (e più precisamente la data del 18/06/2010), la rilevazione finale è data da una media aritmetica dei valori dell'indice rilevati in corrispondenza delle Date di Osservazione (e più precisamente al 18 Giugno di ciascun anno e per 5 anni a partire dall'anno 2011). E' quindi in questo modo che dobbiamo determinare il payoff derivante da una Asian Option. Implementazione con Fairmat Con la tabella V.2, sottoriportata, riproponiamo la scheda tecnica del contratto oggetto di questo tutorial in termini però diversi, ovvero in termini parametrici e quindi utilizzando gli oggetti disponibili nell'ambiente Parameters & Functions. (Tabella V.2 - Scheda tecnica del contratto Swap con Asian Option) Nozionale Data di Negoziazione Data Inizio Contratto Data di Scadenza Frequenza di pagamento Parte A Frequenza di pagamento Parte B Scambi Dal tempo 1 Fino a Pda[end] In corrispondenza di Pda[end] Parte A N Trade Date Effective Date Pda[end] Frequenza del vettore Pda In corrispondenza di Pda[end] Parte B Fix Fix Max [Gear ((ind_f/ind_i-1)-1); K] Funzione FTSEcn - ind_i rappresenta il valore dell'indice FTSE MIB alla Data di Inizio Contratto; Convenzioni Parte A Drivers rate per le date di reset - Day Count Conventions Cvg_A 206 - ind_f rappresenta il valore ottenuto applicando la funzione incorporata AMean sui valori dell'indice FTSE MIB rilevati in corrispondenza di ciascun elemento del vettore Oda; Parte B In corrispondenza di ciascun elemento del vettore Oda Cvg_B TUTORIAL V – SWAP WITH ASIAN OPTION Per modellare il contratto Swap con Asian Option dobbiamo, innanzitutto, aprire in Fairmat un nuovo progetto vuoto (ovvero un New Empty Project). Selezionando il percorso Settings → Project Preferences → Tab Simulation Dates and Conventions è possibile specificare la Valuation Date e la Effective Date (ovvero la Data di Inizio Contratto). Dopo di chè dovremo entrare nell'ambiente Parameters & Functions nel quale potremo inserire gli oggetti necessari per la modellazione del contratto Swap con Asian Option, riepilogati attraverso la tabella V.3. (Tabella V.3 - Riepilogo e descrizione dati di input Tutorial Swap with Asian Option) NOME TIPO DI DATO CATEGORIA Scalar Parametro Pdu Date Sequence Parametro Pda Date Vector Adjustmet Parametro Cvg Date Vector Differences Calculator Parametro N ZrDisc Fix Funzione Interpolante Scalar Parametro Scalar Parte B K Scalar Parte B Odu Date Sequence Parte B Oda Date Vector Adjustmet Parte B Funzione Analitica Parte B FTSEcn Rappresenta la curva di sconto Parte A Gear DESCRIZIONE Indica l'ammontare del capitale nozionale del contratto E' il vettore delle date di pagamento non aggiustate, non corrette E' il vettore delle date di pagamento corrette, aggiustate per la Following Date Rolling Convention, ottenuto a partire dal vettore Pdu Date's Vector Differences Transformation ottenuta a partire dal vettore di date Pdu selezionando l'oggetto Actual360 nel menù a tendina “Day Count Convention” e l'oggetto Unadjusted nel menù a tendina “Date Rolling Convention” Indica il tasso cedolare fisso Indica la percentuale (o tasso) di partecipazione nel cambio dell'indice FTSE MIB. Tale variabile viene utilizzata nella funzione definita dall'utente FTSEcn Indica il strike floor rate, ovvero il tasso di interesse minimo di esercizio. Tale variabile viene utilizzata nella funzione definita dall'utente FTSEcn E' il vettore delle date di osservazione non aggiustate, non corrette E' il vettore contenente le date di osservazione aggiustate, corrette per la Preceding Date Rolling Convention, ottenuto a partire dal vettore Oda E' la funzione definita dall'utente che esprime il payoff che la Parte B dovrà corrispondere. In particolare, tale payoff è dato dal valore massimo fra il valore della variabile K e il risultato del prodotto ottenuto moltiplicando la variabile Gear e il rapporto fra i due valori assunti dall'indice FTSE (meno 1). Max è una funzione incorporata di Fairmat 207 TUTORIAL V – SWAP WITH ASIAN OPTION Una volta inseriti tutti gli input sopra elencati e riepilogati, l'ambiente Parameters & Functions apparirà così come mostrato attraverso la figura V.1. (Figura V.1: Riepilogo oggetti dell'ambiente Parameters & Functions necessari per la modellazione del Tutorial Swap with Asian Option) Dopo di chè dovremo definire il processo stocastico sottostante attivando l'ambiente Stochastic Process. Cliccando sul comando Add S. Process possiamo inserire un modello stocastico da quelli presenti in lista. La lista dei modelli disponibili può essere estesa con una serie di numerosi plug-ins disponibili on-line. Una volta inserito il processo stocastico dovremo aprire la finestra di editing e selezionare il tab Data Source al fine di attivare il data-link – per cui dovremo valorizzare il campo "Binding type" selezionando la voce Bind object to specific data –, selezionare il mercato borsistico di riferimento – per cui dovremo valorizzare il campo "Market" selezionando, ad esempio con riferimento al caso specifico di questo tutorial, la voce EU. In questo caso specifico l'attività sottostante alla Asian Option è un indice azionario per cui dovremo specificare anche il ticker reference – valorizzando il relativo campo "Ticker" con il codice FTSEMIB Index, che è il ticker che identifica appunto l'indice FTSE MIB nella piattaforma di Bloomberg Professional – oltre che la strategia di calibrazione del processo stocastico inserito – per cui dovremo valorizzare opportunamente il campo "Calibration strategy" (figura V.2). Per l'esempio specifico abbiamo selezionato un semplice modello GBM (Geometric Brownian Motion), collegato all'indice FTSE MIB, e la calibrazione avverrà utilizzando i dati relativi ai tassi a breve di mercato. Dopo aver chiuso la finestra di editing, dovremo aprire il menù di contesto, premendo il tasto destro del mouse e dovremo selezionare la voce Calibrate model using data provider. Per la scelta del Market Data Provider dovremo selezionare il seguente percorso: Settings → Fairmat Preferences → Tab Core Preferences → Tab General; arrivati al tab General dovremo valorizzare opportunamente il menù a cascata "Market Data Provider". 208 TUTORIAL V – SWAP WITH ASIAN OPTION (Figura V.2: Editing Tab Data Source) Il passo successivo è quello di impostare il modello di discounting (figura V.3). Per questo esempio specifico il tasso di crescita (ovvero il Growth Rate) del modello GBM è r-d (corrispondente al risk free rate, ovvero il tasso di interesse privo di rischio, e quindi corrispondente al tasso di interesse che giace lungo la curva di sconto, la yield curve, in corrispondenza del tempo 0 sottratto il dividend-yield). Di conseguenza dovremo impostare il tasso di sconto (ovvero il discount rate) uguale alla costante ZrDisc(0). (Figura V.3: Impostazione del modello di Discounting) In aggiunta dovremo definire lo step di simulazione e il numero dei paths (ovvero dei percorsi) della simulazione Montecarlo (parte di destra della figura V.3). Possiamo specificare tali impostazioni selezionando il seguente percorso: Settings → Numerical Settings e compilando successivamente i 209 TUTORIAL V – SWAP WITH ASIAN OPTION campi "# of discrete time steps" e "# of simulated paths" (nel caso specifico preso in esame i campi dovranno essere valorizzati inserendo, rispettivamente, i valori 1828 – ovvero il numero di giorni di calendario intercorrenti fra la Simulation Date, ovvero la data di inizio simulazione, e la Termination Date, ovvero la data di scadenza, termine – e 5000 – ovvero il numero dei percorsi simulati (o "simulated paths"). Siamo a questo punto pronti per la modellazione del contratto Swap with Asian Option nell'ambiente Option Map (parte di sinistra della figura V.4). Come già accennato, la Parte A paga, su base trimestrale, una serie di flussi di cassa connessi al tasso di interesse fisso concordato. La Parte B paga, invece, un unico flusso di cassa, alla scadenza, a seconda della performance dell'indice FTSE MIB nel tempo. Per cui dalla tavolozza grafica della Option Map, attraverso un semplice drag&drop (letteralmente "trascina e lascia cadere") dovremo innanzitutto inserire un operator Functional al quale dovremo poi unire, attraverso due branches, una Strip of Options (che si riferirà alla Leg A del contratto e che quindi sarà relativa alla Parte A) e una Single Option (che si riferirà invece alla Leg B del contratto e che quindi sarà relativa alla Parte B). L'operator Functional permette, in particolare, di determinare la compensazione dei flussi di cassa scambiati fra le parti contraenti assumendo il punto di vista soggettivo della Parte A (parte di destra della figura V.4). (Figura V.4: Ambiente Option Map e Operator Functional) Esaminando nel dettaglio le dinamiche relative alle parti contrattuali interessate e ai loro payoff (figura V.5) nella finestra di editing del tab Timing and Payoff relativa alla Parte A mostriamo una serie di pagamenti che vanno dal tempo 1 fino al tempo corrispondente al valore a lenght(@Pda), ovvero una serie di pagamenti che coprono temporalmente tutta la lunghezza del vettore Pda (nel caso specifico pari a 20), calcolati come un tasso di interesse fisso moltiplicato per il periodo di 210 TUTORIAL V – SWAP WITH ASIAN OPTION accumulo degli interessi (o Accrual Period) e per l'ammontare del capitale nozionale di riferimento. Premendo il tasto View possiamo notare come nel processo di iterazione così costruito, il simbolo incognito (#) assume i valori 1, 2, ..., lenght(@Pda) – parte di destra della figura V.5. (Figura V.5: Dettaglio del payoff della Parte A) La Parte B (Leg B) del contratto è, invece, caratterizzata dalla funzione FTSEcn, funzione definita e creata dall'utente nell'ambiente Parameters & Functions come y = f(x1 , x2) – dove x1 e x2 sono le variabili indipendenti e y è il risultato della funzione – richiamata nell'ambiente Option Map. Con l'eccezione legata alla variabile Gear (uno scalar che può essere invocato direttamente nell'ambito dell'editor della funzione), x1 e x2 sono sempre scalar risultati della funzione incorporata AMean come anche il valore del processo GBM in corrispondenza della Effective Date (valore rappresentato dall'oggetto V1 [Effective Date]). (Figura V.6: Dettaglio della funzione FTSEcn, e del payoff della Parte B) La funzione AMean (@vec; {expr}; [start]; [N]) restituisce la media dei valori dell'espressione expr valutata dall'indice della posizione di partenza del vettore vec (ovvero start) per il numero N di 211 TUTORIAL V – SWAP WITH ASIAN OPTION elementi considerati dal vettore stesso. I parametri start e N sono parametri opzionali per cui non è sempre necessario esplicitarli nella funzione. Qualora venga omessa la dichiarazione di tali parametri nella chiamata della funzione, le impostazioni di default saranno le seguenti start = 1 e N = lenght(@vec). Nel caso specifico di questo tutorial, il vettore di riferimento è Oba (ovvero il vettore delle date di osservazione aggiustate, corrette) e la funzione calcola una media dei valori assunti dal processo stocastico V1 alle date di osservazione (corrette, aggiustate). 212 TUTORIAL VI RELOAD3 BOND TUTORIAL VI – RELOAD 3 BOND Introduzione Il Bond Reload3 è un'obbligazione strutturata che prevede il pagamento di una cedola fissa periodica e il pagamento di una cedola aggiuntiva determinata da un evento aleatorio o azionario. Il verificarsi di tale evento è, in particolare, condizionato all'andamento di alcuni indici di borsa (nel caso specifico si tratta dei seguenti indici: Eurostoxx50, SP500, Nikkei250, Swiss Market e Hang Seng). L'evento aleatorio o azionario contemplato nel contratto consiste in questo: data la media di ciascun indice riferita a tre date, ovvero le date 23/05/2008, 24/05/2008 e 25/05/2008 (il cui valore è rappresentato dalla variabile InitMean), il valore di ciascun indice non deve essere inferiore del 90% (valore di confronto e di riferimento rappresentato dalla variabile thres) rispetto al valore medio iniziale in almeno un anno a partire dal terzo anno di vita del contratto. La media dell'indice viene calcolata, in particolare, sui valori di chiusura rilevati i giorni 23, 24 e 25 del mese di Aprile per ogni anno a partire dal terzo. Tali date, di riferimento ai fini del calcolo della media dell'indice, sono, in particolare, contenute nel vettore di date RevD. A seconda dell'anno in cui si verifica l'evento viene definito il piano per il tasso cedolare aggiuntivo pagato dall'obbligazione negli anni successivi. Con la tabella VI.1 riportiamo i valori relativi al piano delle (eventuali) cedole aggiuntive nel caso in cui si verifichi l'evento aleatorio, o azionario, anno per anno. (Tabella VI.1 – Piano delle cedole aggiuntive) Interessi aggiuntivi eventuali Evento No Evento 4° Anno 5° Anno 23/05/2013 0 20,00% 0 23/05/2014 0 6,10% 27,40% Per riga leggiamo le date di pagamento residue mentre per colonna leggiamo le cedole aggiuntive da corrispondere qualora si verifichi l'evento aleatorio, o azionario, previsto contrattualmente. Per cui: qualora l'evento aleatorio o azionario si verificasse al 4° anno, al possessore del bond verranno corrisposte alla data del 23/05/2013 e alla data del 23/05/2014 delle cedole aggiuntive del, rispettivamente, 20,00% e 6,10%; qualora, invece, l'evento aleatorio o azionario si verificasse al 5° anno al possessore del bond verrà corrisposta alla data 23/05/2014 una sola cedola aggiuntiva del 27,40%. Nel caso in cui, invece, l'evento aleatorio o azionario non si verificasse al possessore del bond non verrà corrisposta alcuna cedola. 213 TUTORIAL VI – RELOAD 3 BOND Funzione ricorsiva Per valutare qual è il valore ad oggi del bond Reload3 dobbiamo innanzitutto definire la matrice, di dimensione 2x3, degli eventuali pagamenti delle cedole aggiuntive (o optional extra-coupons), ovverosia la matrice ExtraCpn nella quale tutti i valori della prima colonna sono posti pari a 0 (dal momento che tali valori si riferiscono al caso in cui l'evento aleatorio o azionario non si verifichi mai), mentre nelle due colonne successive verrà riportato il piano relativo alle cedole aggiuntive per i due anni, appunto, di contratto successivi al terzo (in quanto tali valori si riferiscono, invece, al caso in cui l'evento aleatorio o azionario si verifichi, rispettivamente, o al 4° anno o al 5° anno). Nello specifico la matrice ExtraCpn si presenterà così: 0 0 0,02 0,061 0 0,274 oppure così 0 0 20,00% 6,10% 0 27,40% Per valutare l'opzionalità delle cedole aggiuntive dobbiamo implementare una funzione ricorrente avente lo scopo di identificare l'indice di colonna corretto della matrice ExtraCpn. Con la figura VI.1 mostriamo l'implementazione del payoff relativo al pagamento dell'eventuale cedola aggiuntiva, o ai pagamenti delle eventuali cedole aggiuntive. (Figura VI.1: Editing del payoff relativo al pagamento delle eventuali cedole aggiuntive) In particolare nell'espressione della Strip of Options, la matrice ExtraCpn viene richiamata con indice di riga definito dai valori inseriti nei campi "From", "Step" e "To" (riportati nella parte alta della finestra di editing) e con indice di colonna definito dalla funzione XtCpCol. Tale funzione serve, in particolare, per selezionare il valore dell'indice di colonna della matrice ExtraCpn. La funzione ricorrente così definita ed utilizzata è nello specifico una Function defined by a recurrence expression (array) nella quale deve essere specificato (figura VI.2): • il vettore sul quale devono essere iterati, ciclati, gli indici, valorizzando il campo "array reference"; • il valore di partenza della funzione, valorizzando il campo "Starting Value (XtCpCol(1)=)"; • il valore della funzione negli steps successivi, valorizzando il campo "Update Expression (XtCpCol(x)=)"; 214 TUTORIAL VI – RELOAD 3 BOND (Figura VI.2: Editing della funzione ricorrente XtCpCol) Sempre osservando ancora una volta e più attentamente la figura VI.2, notiamo il fatto che per definire la funzione ricorrente XtCpCol abbiamo dovuto utilizzare la funzione ASprod, una funzione che ci permette di valutare più attività sottostanti, e la funzione AMean. Quest'ultima ha come argomento il vettore di date di riferimento RevD su cui calcolare la media, i processi (indicizzati con xa), l'indice (di posizione) della prima data da considerare per il calcolo ed, infine, il numero di date complessivo da considerare (in questo caso pari a 3 in quanto è compresa la prima data). L'espressione riportata nel campo "Update expression (XtCpCol(x)=)" provvede, in particolare, ad aggiornare l'espressione pecedente considerando la situazione verificatasi in precedenza (con indice x). 215 TUTORIAL VII CONVERTENDO BPM 2009/2013 - 6,75% WITH WARRANT TUTORIAL VII – CONVERTENDO BPM 2009/2013 - 6,75% with WARRANT Introduzione Un Mandatory Convertible Bond (ovvero un'obbligazione convertibile obbligatoriamente a scadenza) è un particolare tipo di obbligazione contenente la clausola di conversione obbligatoria, o di mandatory convertible appunto, da esercitarsi a scadenza. Fino alla scadenza, il possessore del bond riceve una cedola in corrispondenza di ciascuna payment date. A scadenza, il possessore del bond riceverà un dato numero di azioni di compendio, definito contrattualmente, anzichè il rimborso del bond per il suo valore nominale. Nel caso preso in esame con questo tutorial, il possessore del bond ha anche la facoltà di convertire il valore nominale del bond in un dato numero di azioni di compendio prima della scadenza. La conversione del bond comporta l'aumento del numero di azioni outstanding (ovvero in circolazione, costituenti il flottante di mercato) e, quindi, una diluizione del capitale azionario. Nel corso dell'offerta al pubblico, al sottoscrittore del bond Convertendo BPM 2009/2013 – 6,75% viene anche proposta in offerta un'opzione Warrant la quale consente di sottoscrivere un certo numero di azioni BPM, emittende del bond in questione. Un warrant è, in particolare, un'attività finanziaria che conferisce al suo possessore la facoltà di sottoscrivere, o di acquistare o di vendere, da esercitarsi a, oppure entro una certa scadenza, un determinato numero di azioni (definite anche azioni di compendio) contro il pagamento di un ammontare fisso, o comunque determinato sulla base di determinati criteri stabiliti contrattualmente (nel caso dei warrant di sottoscrizione o di acquisto), o contro dell'incasso di un certo di un ammontare fisso, o determinato sulla base di determinati cristeri stabiliti contrattualmente (nel caso dei warrant di vendita o di tipo put). Qualora il warrant riconosca al suo possessore l'esercizio della facoltà soltanto ad una determinata scadenza, allora lo stesso sarà di tipo europeo. Se, invece, il warrant riconosce al suo possessore l'esercizio della facoltà entro una certa scadenza, allora lo stesso sarà di tipo americano. I warrant sono solitamente collegati a dei bond e possono essere utilizzati dall'emittente per migliorare il rendimento dei bond stessi rendendoli più appetibili ai potenziali acquirenti. Frequentemente tali warrant sono separabili rispetto al bond cui sono collegati (ovvero il cosiddetto titolo principale) e possono essere negoziati in modo del tutto indipendente rispetto al titolo principale stesso. Il prezzo del warrant viene definito premio. Avendo come sottostante titoli azionari, l'esercizio del warrant impatta, cambiandoli, sia il valore delle azioni dell'emittente che il numero delle azioni outstanding. Infatti, a fronte del pagamento del prezzo d'esercizio del warrant, la società emittente emette nuove azioni: ciò porterà ad una riduzione del rapporto EPS (ovvero Earnings per Shares, rapporto Utile/Prezzo) e quindi ad una dimininuzione del livello di utile per ciascuna azione. 216 TUTORIAL VII – CONVERTENDO BPM 2009/2013 - 6,75% with WARRANT Un esempio In questo esempio assumiamo di voler stimare il valore del bond e del warrant, descritti nel dettaglio attraverso la scheda tecnica riportata con la tabella VII.1, alla data del 25 Agosto 2009. (Tabella VII.1 – Scheda tecnica del Bond Convertendo BPM 2009/2013 with Warrant) CONVERTENDO BPM 2009/2013 – 6,75% CON WARRANT Numero massimo di bond 695.535.200 Numero di bond 4.599.624 Numero di bond in offerta pubblica 4.599.624 Valore nominale unitario 100,00 Prezzo 100 + rateo interessi Data Inizio Contratto 03/07/2009 Data Scadenza 01/06/2013 Annuale, Frequenza cedola A partire dal 10/06/2010 BOND 6,75% (Convenzione Act/365) Cedola Conversione volontaria Periodo d'esercizio Dal 01/01/2010 al 28/03/2013 Rapporto di conversione 100/7 azioni Conversione obbligatoria a scadenza Media aritmetica dei 20 rapporti giornalieri di conversione osservati negli ultimi 20 giorni precedenti il terzo giorno di Rapporto di conversione negoziazione antecedente la scadenza. Dove il rapporto giornaliero di conversione (o Daily Conversion Ratio – DCR) è pari a: se il prezzo ufficiale delle ● 100/6 azioni di compendio è ≤ 6; se il prezzo ufficiale delle azioni di compendio è ● 100/Prezzo Ufficiale compreso fra 6 e 7; se il prezzo ufficiale delle ● 100/7 azioni di compendio è > 7; WARRANT Numero di Warrant assegnati 2.355.728 Numero di Warrant da assegnare 4.599.624 1 warrant per ciascun bond sottoscritto durante il periodo della Rapporto di assegnamento pubblica offerta Periodo d'esercizio Dal 01/05/2013 al 01/06/2013 Prezzo di sottoscrizione 8 Rapporto d'esercizio 9 azioni di compendio per ciascun warrant esercitato 217 TUTORIAL VII – CONVERTENDO BPM 2009/2013 - 6,75% with WARRANT Il possessore del bond riceve una cedola annua del 6,75% (la prima cedola, in particolare, viene corrisposta alla data del 10/06/2010) fino alla scadenza. Dalla data del 01/10/2010 alla data del 28/03/2013 il possessore del bond ha la facoltà (non l'obbligo) di convertire il bond sottoscritto in un ammontare minimo di azioni BMP (ovvero di azioni di compendio), ed esattamente pari a 14,286 azioni per ogni bond sottoscritto (ovverosia il risultato del rapporto fra 100 e 7). Se ciò accade, ovvero se il possessore del bond esercitasse la facoltà di conversione volontaria, egli non riceverà più nè le cedole annue previsto fino alla scadenza nè il rateo di interessi. A scadenza il bond verrà automaticamente convertito in azioni, qualora il possessore del bond non abbia esercitato prima la facoltà di conversione anticipata. Il numero di azioni attribuite all'investitore è dato dal rapporto giornaliero di conversione (o Daily Conversion Ratio – DCR) osservato sui 20 giorni precedenti il terzo giorno di negoziazione antecedente la scadenza (ovvero osservato duante il periodo di osservazione). Il rapporto di conversione giornaliero, in particolare, sarà pari a 16,667 azioni per ogni bond sottoscritto (ovverosia il risultato del rapporto fra 100 e 6) qualora il prezzo ufficiale delle azioni di compendio (o Official Share Price) sia inferiore a 6 euro. Il rapporto di conversione giornaliero sarà, invece, pari a 14,286 per ogni bond sottoscritto (ovverosia il risultato del rapporto fra 100 e 7) qualora il prezzo ufficiale delle azioni di compendio sia superiore a 7 euro. Il rapporto di conversione giornaliero sarà, infine, pari al risultato del rapporto fra 100 e il prezzo ufficiale delle azioni di compendio qualora lo stesso Official Share Price sia compreso fra i 6 euro e i 7 euro (per esempio: se si rileva un prezzo ufficiale per le azioni di compendio pari a 6,5 euro, il rapporto di conversione giornaliero sarà pari a 100/6,5 = 15,385 azioni di compendio per ogni bond sottoscritto). Per cui il prezzo minimo di conversione è pari a 6 euro per azione di compendio mentre quello massio di conversione è pari a 7 euro per azione di compendio. Il rapporto di conversione minimo è pari a 100/7 = 14,286 azioni per bond sottoscritto mentre il rapporto di conversione massimo è pari a 100/6 = 16,667 azioni per bond sottoscritto. Durante il periodo dell'offerta pubblica, ai sottoscrittori del bond verrà assegnato un warrat per ogni bond sottoscritto. Il portatore del warrant può esercitare, in particolare, la facoltà di acquistare azioni ordinarie BPM al prezzo d'esercizio di 8 euro per ciascun warrant nel periodo che va dalla data del 01/05/2013 alla data del 01/06/2013. Il payoff del warrant è quindi assai simile a quello di un'opzione call di tipo americano (ovvero al seguente payoff: max{0; Sk – K}) dal momento che il portatore del warrant avrà convenienza ad esercitarlo, esercitandone la facoltà incorporata, solo se il prezzo dell'azione sottostante supera il prezzo d'esercizio. A differenza del caso delle opzioni call di tipo americano, l'esercizio del warrant comporta però l'emissione di nuove azioni e quindi la diluizione del capitale sociale della società emittente. Il prezzo del warrant dovrà essere pertanto aggiustato, corretto, da un coefficiente (denominato X) che dovrà tener conto di tale effetto. Il coefficiente X è definito come il rapporto fra il numero delle azioni outstanding (corrispondente a N) e la somma dell'ammontare delle azioni outstanding più l'ammontare delle azioni emesse a seguito dell'eventuale esercizio dei warrant e dell'esercizio della clausola di mandatory convertible (corrispondente a N+M) così che X = N/ (N+M). 218 TUTORIAL VII – CONVERTENDO BPM 2009/2013 - 6,75% with WARRANT Un'implementazione con Fairmat L'implementazione attraverso Fairmat dell'attività finanziaria descritta finora richiede una serie di dati di input riepilogati attraverso la figura VII.1. (Figura VII.1: Riepilogo dati di input del tutorial Convertendo BPM 2009/2013 – 6,75% with Warrant) I parametri, appena elencati, possono essere classificati in tre categorie distinte: • i parametri specifici relativi al contratto in esame e oggetto del presente tutorial; • i parametri relativi ai dati di mercato; e, infine • gli oggetti di tipo ausiliari e strumentali (ovvero gli oggetti e le funzioni che rappresentano le trasformazioni dei parametri); Con la tabella VII.2 (riportata nella pagina successiva) vengono elencati e descritti dettagliatamente gli input che dovremo inserire nell'ambiente Parameters & Functions per la modellazione, prima, e la valutazione, poi, del Bond Convertendo BPM with Warrant. 219 TUTORIAL VII – CONVERTENDO BPM 2009/2013 - 6,75% with WARRANT (Tabella VII.2 - Riepilogo e descrizione dati di input Tutorial Convertendo BPM with Warrant) NOME Mat Pd C sd ed RcMin RcMax PcMin PcMax Coupon N sdW StrikeW nW f1 X TIPO DI DATO DESCRIZIONE Costant Indica la scadenza del bond Convertendo BPM E' il vettore delle date di pagamento non aggiustate, non Date Sequence corrette, di dimensione 4x1, utilizzando per gli oggetti ausiliari Pda e Cvg E' il vettore contenente le date test approssimativamente di richiamo (o di callability) che cadono con frequenza Vector bisettimanale anziché ogni giorno Indica il primo giorno di riferimento per il calcolo del rapporto Costant di conversione giornaliero medio Indica l'ultimo giorno di riferimento per il calcolo del rapporto Costant di conversione giornaliero medio Costant Indica il rapporto di conversione minimo (pari a 100/7) Costant Indica il rapporto di conversione massimo (pari a 100/6) Costant Indica il prezzo minimo di conversione Costant Indica il prezzo massimo di conversione Costant Indica il tasso cedolare annuo Costant Indica il valore nominale del bond Convertendo BPM Costant Indica il primo giorno del periodo d'esercizio del warrant Costant Indica il prezzo d'esercizio del Warrant Indica il numero di azioni di compendio per ciascun warrant Costant esercitato E' la funzione analitica che permette di determinare il rapporto di conversione giornaliero. In particolare le variabili della funzione analitica f1 sono le seguenti: x1 = V1; x2 = Funzione PcMin; x3 = RcMax; x4 = PcMax; x5 = RcMin; Analitica La funzione analitica ha, al suo interno, il seguente costrutto di selezione: iif (x 1 ≤ x 2 ; x 3 ; iif (x 1 ≥ x 4 ; x 5 ; N/x 1 )) Costant ZR Funzione Interpolante q Funzione Interpolante Pda Date Vector Adjustment Cvg Date Vector Difference Calculator Indica il fattore di correzione, di aggiustamento, della diluizione di capitale a seguito dell'esercizio dei warrant e della conversione dei bond emessi Indica la Zero Rate Curve ottenuta a partire dai tassi a breve (spot) attraverso un modello di bootstrap Indica il dividend yield (ovvero il rapporto tra il dividendo staccato da un'azione e il prezzo di mercato dell'azione stessa) ottenuta a partire dalla parità put/call in corrispondenza di ciascuna scadenza E' il vettore delle date di pagamento corrette, aggiustate per la convenzione specificata (ad esempio Modifing Following, ottenuto a partire dal vettore Pd Date's Vector Differences Transformation ottenuta a partire dal vettore di date Pd selezionando nei menù a tendina “Day Count Convention” e “Date Rolling Convention” l'oggetto relativo alla convenzioni specificate (ad esempio Act/Act e Unadjusted) 220 TUTORIAL VII – CONVERTENDO BPM 2009/2013 - 6,75% with WARRANT Modelliamo il processo stocastico sottostante che si riferisce all'andamento delle azioni di compendio (e che per comodità e semplicità di esposizione denomineremo semplicemente BPM) utilizzando il modello di Heston i cui parametri di riferimento sono riepilogati attraverso la tabella VII.3, sottoriportata: (Tabella VII.3 – Parametri di riferimento del modello stocastico) NOME S0 V0 K theta sigma Zero Rate Cuve Dividend Yield Curve DESCRIZIONE Indica il valore iniziale del processo stocastico (riferito al titolo azionario) Indica il valore iniziale del processo di variazione istantanea Indica il tasso al quale la variazione istantanea ritorna al valore di theta Indica la varianza lunga, o meglio la varianza media di lungo periodo, del prezzo Indica la volatilità della variabilità e determina quindi la varianza della variazione istantanea Indica la Zero Rate Curve ottenuta a partire dai tassi a breve (spot) attraverso un metodo di bootstrap Indica il dividend yield (ovvero il rapporto tra il dividendo staccato dall'azione e il suo prezzo di mercato) ottenuta a partire dalla parità put/call in corrispondenza di ciascuna scadenza Attraverso la figura VII.4 mostriamo il riepilogo dei parametri del processo stocastico sottostante inseriti nell'ambiente Stochastic Process. (Figura VII.3: Riepilogo parametri del processo stocastico sottostante – modello di Heston) 221 TUTORIAL VII – CONVERTENDO BPM 2009/2013 - 6,75% with WARRANT Implementazione del bond Mandatory Convertible Possiamo stilizzare il bond Convertendo BPM 2009/2013 – 6,75% come un bond che paga una cedola del 6,75% in corrispondenza di ciascuna payment date con una serie di opzioni incorporate. Nel periodo che va dal 01/10/2010 al 28/02/2013, il possessore del bond ha la facoltà di convertire il bond in un ammontare minimo di azioni BPM, ed esattamente pari a 100/7 = 14,286 azioni per ogni bond sottoscritto. Possiamo stilizzare tale facoltà come una clausola di richiamo anticipato (o callability). Attraverso la figura VII.4 mostriamo la fase di editing della prima cedola annua corrisposta in favore del possessore del bond. Il possessore del bond riceverà tale cedola annua alla data del 01/06/2010 (con una probabilità del 100% e quindi sicuramente) dato il fatto che il periodo di conversione volontaria inizia più tardi, successivamente. (Figura VII.4: Fase di editing della prima cedola annua corrisposta in favore del possessore del bond Mandatory Convertible) Il possessore del bond riceverà poi la seconda cedola annua e la terza cedola annua solo se non è stata effettuata nè richiesta la conversione volontaria (ovvero la clausola di callability che andremo a stilizzare attraverso Fairmat) . Infatti, sia la seconda che la terza payment date sono comprese nel periodo di conversione volontaria. Qualora il possessore del bond eserciti la clausola di callability, riceverà un prestabilito numero di azioni di compendio (ed esattamente pari a 14,286 azioni per ogni bond sottoscritto, nel caso specifico). Dopo di chè il bond verrà estinto, per cui nè le cedole periodiche nè i ratei di interessi verranno pagati. Il vettore C contiene le date alle quali la callability può essere esercitata dall'investitore. Il vettore C 222 TUTORIAL VII – CONVERTENDO BPM 2009/2013 - 6,75% with WARRANT deve contenere le date corrispondenti alle payment date della seconda cedola annua e della terza cedola annua (ovvero gli oggetti Pd[2] e Pd[3]). Se per una determinata data con indice #, C[#] corrisponde ad una delle payment date Pd[2] e Pd[3] e la callability non è ancora stata esercitata, l'investitore riceverà la cedola annua. In relazione alla clausola di callability, nella fase di editing dobbiamo specificare il payoff alternativo (compilando il campo "Alternative Payoff") dato, nel caso specifico, dal prodotto del rapporto minimo di conversione (pari a 14,286) per i valori delle azioni di compendio in corrispondenza della data corrispondente all'oggetto C[#]. Per cui il payoff alternativo sarà dato dalla seguente espressione: RcMin * V1[C[#]]. Attraverso la figura VII.5 mostriamo la fase di editing della seconda cedola annua e della terza cedola annua corrisposte in favore del possessore del bond. (Figura VII.5: Fase di editing della seconda cedola annua e della terza cedola annua corrisposte in favore del possessore del bond Mandatory Convertible) 223 TUTORIAL VII – CONVERTENDO BPM 2009/2013 - 6,75% with WARRANT Qualora la clausola di callability non venisse esercitata, il possessore del bond riceverà anche la quarta cedola annua (la cui fase di editing viene mostrata attraverso la figura VII.6) e il bond verrà automaticamente convertito in un certo ammontare di azioni. (Figura VII.6: Fase di editing della quarta, ed ultima, cedola annua corrisposta in favore del possessore del bond Mandatory Convertible) Possiamo modellare il payoff a scadenza utilizzando un'opzione di tipo Committed dal momento che la conversione è un evento certo. Alternativamente, possiamo stilizzare il payoff a scadenza come una combinazione di una posizione lunga sulla media a 20 giorni della variabile sottostante, con una posizione corta su un'opzione put di tipo europea con strike price pari a 6 euro e con una posizione lunga su un'opzione call di tipo europea con strike price pari a 7 euro. Con la figura VII.7 mostriamo la fase di editing del payoff a scadenza. (Figura VII.7: Fase di editing del payoff a scadenza corrisposto in favore del possessore del bond Mandatory Convertible) 224 TUTORIAL VII – CONVERTENDO BPM 2009/2013 - 6,75% with WARRANT Calcoliamo il rapporto di conversione come la media a 20 giorni dei rapporti di conversione giornalieri osservati dalla data di inizio del periodo di osservazione (ovvero a partire dalla data corrispondente all'oggetto sd) fino alla data di fine del periodo di osservazione (ovvero a partire dalla data corrispondente all'oggetto ed). Per calcolare tale media utilizzeremo la funzione di Fairmat IMean la quale valuta l'espressione compresa entro le parentesi (nel caso specifico verrà valutata la funzione f1) da sd fino a ed, e ne calcola la media. Modellazione del Warrant Possiamo modellare il warrant come un'opzione call di tipo americano scritta sul medesimo sottostante (ovvero sulle azioni di compendio BPM) con strike price indicato dalla costante strikeW (e quindi pari a 8) e con un periodo d'esercizio compreso fra la data del 01/05/2013 (corrispondente al valore della costante sdw) e la data del 01/06/2013 (corrispondente al valore della costante pda). Ciascun warrant conferisce la facoltà di ricevere 9 azioni di compendio, per cui il payoff dovrà essere moltiplicato per tale leva (rappresentata nello specifico dalla costante nw). Con la figura VII.8 mostriamo la fase di editing del payoff relativo al warrant. (Figura VII.8: Fase di editing del payoff relativo al warrant) Per stimare il valore del warrant nella maniera corretta dovremo tenere conto dell'effetto di diluizione del capitale causato dall'esercizio dei warrant e dalla conversione dei bond. Calcoliamo il fattore di aggiustamento X come il rapporto fra l'ammontare delle azioni outstanding (pari al caso specifico a 415.034.000) e la somma dell'ammontare delle azioni complessivamente in circolazione e le azioni emesse a seguito dell'esercizio dei warrant e dei bond convertibili con clausola di mandatory convertible (il cui ammontare minimo è pari a 159.973.096 mentre quello massimo è pari a 173.883.800). 225 TUTORIAL VII – CONVERTENDO BPM 2009/2013 - 6,75% with WARRANT Con la figura VII.8 mostriamo la fase di editing dell'operator Functional che, inserito, nell'ambiente Option Map, ci permette di tenere conto del fattore di aggiustamento X ai fini della valutazione del warrant. Nel caso specifico preso in esame il fattore di aggiustamento varia da un valore minimo di 0,7 fino ad un valore massimo di 0,72 in quanto la variabilità del rapporto di conversione del bond varia da un valore minimo di 14,286 fino ad un valore massimo di 16,667. (Figura VII.8: Modellazione del fattore di aggiustamento) 226 TUTORIAL VII – CONVERTENDO BPM 2009/2013 - 6,75% with WARRANT Stima del Mark to Market Una volta terminata la fase di modellazione del contratto in esame, possiamo procedere alla stima del suo valore assumendo il punto di vista dell'investitore, e quindi ottenere del Mark to Market dello stesso. Il valore totale del bond convertibile e dell'opzione warrant è pari a 96,69. I tabs Figure e Data descrivono la distribuzione di probabilità del Mark to Market (figura VII.9). (Figura VII.9: Mark to Market e statistica descrittiva) Possiamo anche prendere in considerazione il solo valore del bond convertibile cliccando sull'opzione First Coupon con il tasto destro del mouse e selezionando successivamente la voce Analysis e poi la voce Valuation. 227