Quantlib for beginners (1 Viewer)

reef

...
Primo step:
ho scaricato da qui il pacchetto
QuantLib - Browse Files at SourceForge.net
l'ho installato su un vecchio PC linux ed l'ho compilato (ci ha messo un 40 minuti buoni).
Ho scaricato la versione 1.3.
La libreria Boost era gia' presente sul mio PC.

Ciao carissimo.

Alcuni utenti dei forum ci hanno "sbattuto la testa". Se cerchi, troverai un discreto campionario di esperienze.
Personalmente l'ho compilata per R (lo fa lui in ambiente Linux) e l'ho testata sulle opzioni, con buoni risultati.
Qualcuno l'ha utilizzata in Python e altri (tra cui io) hanno provato ad utilizzarla con Excel. Però qui, dopo le prime difficoltà, non ho insistito.

Il tuo approccio in C++ è sicuramente il migliore ma, sei vuoi utilizzarla in modo interattivo e semplice, ho il sospetto che l'ambiente R sia il più interessante.
Il problema (almeno fino a qualche tempo fa) è che i sorgenti per R non espongono tutte le funzionalità disponibili in C++. Speriamo che qualcuno ci metta mano e valuti un export completo su R.

In bocca al lupo :)
 

Cren

Forumer storico
Ciao volevo condividere con gli utenti interessati le esperienze sull'uso di QuantaLib. Personalmente sono agli albori. Ho una conoscenza media del C++ e conoscenza medio/bassa del dominio finanziario. Sono un "hobbista".
Ciao, onik.

Ti racconto la mia esperienza, sperando possa esserti di aiuto come indirizzo.

Sul C++ io sono sicuramente mooolto più indietro di te, e me lo suggerisce il fatto che tu già avessi Boost nel tuo ambiente indipendentemente da QuantLib ;)

La mia opinione ed esperienza è che, per prenderci un po' la mano, prima di lanciarsi kamikaze nel codice C++ sia molto utile cercare di capire un po' la logica dietro i vari pricing engine che si masturbano vicendevolmente passando per QuantLibXL.

I fogli di esempio sono un pelo più chiari dei corrispettivi esempi in C++ di QuantLib, e io ho trovato molto utile farmi la mano su QuantLibXL per capire la contorta logica "ad incastri" con cui combini le varie cose.

A confronto RQuantLib, che pure ho usato per un po' e che apprezzo molto per la semplicità d'uso, non ti aiuta molto a calarti nella logica perché ti "nasconde" tutta la parte più difficile: in pratica devi solo sbattere dentro i parametri che vuoi e lui ti restituisce i numerini magici, anche se va detto che la visibilità su tutta QuantLib è molto limitata (per capirci, non esiste metodo per estrarre uno Z-spread, anche se questo non ti impedisce di sfruttare tutta la potenza di R nel campo dell'ottimizzazione per ricavarti agevolmente il valore dandogli dentro una funzione con parametro z e una zero curve che restituisce il prezzo del titolo).

Comunque buona fortuna, ne avrai bisogno! :clap:
 
Ultima modifica:

onik

Forumer attivo
Vi ringrazio dei suggerimenti, che capisco e codivido.
Un paio di anni fa avevo gia fatto dei tentativi con QuantaLib (1.2) ed alla fine avevo abbandonato per
1 mancanza di tempo,
2 perche' effettivamente il C++ usato e' veramente da super-esperto di OO
3 la mie conoscenze del dominio "finanziario" erano ristrette (lo sono tutt'ora :()

Nel frattempo ho implementato tutto in VBA dentro excel (piu' qualche aiutino di matlab). Per intenderci lo Zspread, ASW, i FV etc li faccio calcolare dal codice VBA in excel mentre la curva forward la faccio calcolare a matlab e poi la "importo" in excel.
Pero' ora con il DB che cresce vedo dei limiti in questo approccio e per questo vorrei usare QuantaLib.

Avendo un backgroud da softwarista, mi piace sapere che ho tutto sotto controllo. Capisco e me ne sto rendendo conto, che rischio di passare il tempo a reinventare la ruota.

Accetto volentieri il consiglio di Cren e provero' QuanLibXL.

@reef: in ambiente R puoi ottenere le curve forward?


Probabilmente mi vado a schiantare una seconda volta.:wall:
Vediamo.
Grazie ancora dei vostri consigli. :bow:

Ciao
 

Cren

Forumer storico
@reef: in ambiente R puoi ottenere le curve forward?
Non sono reef ma ti rispondo io: sì, puoi molto facilmente... anzi, tra QuantLib, QuantLibXL e RQuantLib direi nel modo più facile in assoluto nell'ultimo.

Guarda la funzione DiscountCurve(params, tsQuotes, times): l'argomento interpWhat della lista params accetta come valore forward.

Di contro RQuantLib ha a disposizione solo l'interpolazione lineare, loglineare e la spline standard, QuantLibXL qualcosa in più (ma devi fare le PiecewiseYieldCurve) mentre QuantLib ha un vero & proprio arsenale atomico di strumenti per l'interpolazione grazie al lavoro strepitoso di Marco Bianchetti di Banca IMI.
 
Ultima modifica:

onik

Forumer attivo
ciao,
come consigliatomi da voi ho dato un sguardo prima ad R e RQuantLib.
Ho calcolato la DiscountCurve proposta nell'esempio del manuale (pag 32)

http://cran.r-project.org/web/packages/RQuantLib/RQuantLib.pdf

L'esempio cosi' com'e' non funziona, da l'errore!

Error: 1st iteration: failed at 11th alive instrument, maturity November 25th, 2019, reference date September 22nd, 2004: 1st leg: time (15.1746) is past max curve time (15.002)


Se invece cambio
setEvaluationDate(as.Date("2004-11-22"))
in
setEvaluationDate(as.Date("2004-09-20"))
allora funziona correttamente.

E' un errore di "riporto" o sono io che non ho capito qualcosa?
Penso sia un errore del manuale perche' se guardo il codice
nel file di quantlib che pare abbia ispirato R ./Swap/swapvaluation.cpp
allora vi e' una sola data.

Seconda domanda, R stampa delle matrici
$times (punti sull'asse delle x in anni)
$discounts
$forwards
$zerorates

e poi sul finale tre colonne
table
date zeroRates
1 2013-12-10 0.00124813
2 2013-12-11 0.00124813
3 2013-12-12 0.00124813
4 2013-12-13 0.00124813
....
Perche' nella terza colonna quelli che indica come zeroRates sono eguali per tutte le date?
Mentre la matrice $zerorates sembra corretta?

Comunque gli input possibili per DiscountCurve mi paiono limitati.
Per gli swap posso inserire solo 2,3,5,10 e 15 e non una sequanza piu' fitta. Infatti il grafico mostra delle discountinuita' intorno ai 5/6 anni.

grazie in anticipo
 

Cren

Forumer storico
Ciao onik,

per quanto riguarda setEvaluationDate(), a livello del codice C++ sottostante quell'osservatore globale va poco d'accordo con la reference date delle curve.

Veniamo al piatto forte: per come sono costruiti gli oggetti di classe YieldTermStructure in C++, la scelta degli sviluppatori è stata quella di far sì che fondamentalmente siano possibili due scelte:

1. se la settlement date è fissata ad una data precisa col suo costruttore, allora quando tu cambi setEvaluationDate() il motore in C++ cerca di spostare in avanti la curva alla data di valutazione. Avendo tu fissato la settlement date, però, il tenor a cui il discount factor è pari a 1 viene negativo, cosa che ovviamente il codice rifiuta. Quel messaggio di errore Error: 1st iteration: failed at 1st alive instrument, maturity December 1st, 2004, reference date September 22nd, 2004: root not bracketed: f[0.21646,1.01931] -> [2.548967e-003,2.548967e-003], infatti, è della libreria in C++, non di R;

2. se la settlement date è specificata come una variabile pari alla evaluation date + n giorni valuta, allora il cambio di evaluation date è gestito correttamente perchè anche il tenor del fattore di sconto = 1 viene spostato in avanti.​

Per quanto riguarda la zero curve piatta, controlla di non aver lanciato

tsQuotes <- list("flat" = 0.00124813)

nel codice, perchè l'esempio del manuale prima costruisce una zero curve attraverso la curva "piecewise" ma poi la sovrascrive con una curva piatta per farti vedere come si specifica.

Quando lancio l'esempio con curva non piatta a me i fattori di sconto, i tassi forward e gli zero vengono come in immagine, che mi sembra corretto.
 

Allegati

  • Rplot.png
    Rplot.png
    10,8 KB · Visite: 646

Il Conte Pedro

Not so easy
L'esempio cosi' com'e' non funziona, da l'errore!

Error: 1st iteration: failed at 11th alive instrument, maturity November 25th, 2019, reference date September 22nd, 2004: 1st leg: time (15.1746) is past max curve time (15.002)


Se invece cambio
setEvaluationDate(as.Date("2004-11-22"))
in
setEvaluationDate(as.Date("2004-09-20"))
allora funziona correttamente.

E' un errore di "riporto" o sono io che non ho capito qualcosa?
Penso sia un errore del manuale perche' se guardo il codice
nel file di quantlib che pare abbia ispirato R ./Swap/swapvaluation.cpp
allora vi e' una sola data.

Su questo ti dò una risposta "da programmatore": per evitare che QuantLib esploda, assicurati di avere sempre settlement date = evaluation date + settlement days.
Per cui, o costruisci la curva dando in pasto alla curva i settlement days (e la curva si calcola la settlement date per conto suo, come settlement date = evaluation date + settlement days, ma non so se in R hai il costruttore che lavora con i days invece che con la data fissa), oppure, se sposti la evaluation date, devi ricostruire la curva (non so se puoi cambiare la settlement date, una volta costruita).
 
Ultima modifica:

onik

Forumer attivo
vi ringrazio per i vostri commenti.
Giocando con l'esempio ho ottenuto i risultati voluti
Comunque l'esempio nel manuale di R e' un po' fuoriante... va be' , siamo grandi e vacinati.

Posso approfitarne per farvi una domanda, ma per bootstrappare la curva che input date?

Leggendo in giro ho capito che non e' una questione "banale".
Allego un documenti che ho trovato
https://groups.google.com/forum/#!topic/quantlib_mail_archive/PkcCwe_LaeQ
Ma per curiosita' voi cosa utilizzate?
Per un "hobbista" come e' difficile capire quali sono veramente gli strumenti usati nella realta per fare hedge sulla curva.
Il mio target e' valutare il FV dei bond.

grazie in anticipo
 

Allegati

  • 2011-01-18_rate-curves_slide_Banca_IMI.pdf
    872,8 KB · Visite: 508
  • BootstrappingTheIlliquidity-v1.0.pdf
    554,9 KB · Visite: 401

Users who are viewing this thread

Alto