Calcolare lo spread emittente (1 Viewer)

GiveMeLeverage

& I will remove the world
Ok, mi è chiaro: possimao usare IRS per corporate, ma è meglio utilizzare i governativi AAA BCE per i titoli di stato. Conosccevo già il link della BCE, ma non pensavo si potessero sacricare anche i dati della curva che viene mostrata graficamente. Ho provato quindi a scaricare il file .zip che contiene il .csv con (credo...) i dati. :eek::eek::eek: Non ci ho caipto nulla.
Fammi capire: tu gni giorno scarichi quel file, lo elabori e tiri fuori la curva free-risk per i governativi??? Se è così mi dai qualche dritta su come fare??
Un po' ostici 'sti file della BCE, ti do ragione.
Per ovviare, mi sono fatto una macro che mi scarica il file, lo dezippa e legge il contenuto (quello che mi serve) in un foglio excel.
Se arrivo questa sera vedo di essere più specifico...

Ok, anche questo mi è chiaro: e se provassimo a "zero couponizzare" gli IRS?? Se non ho capito male si fa con il Bootstrapping :)-?). O non vale la pena, e per corporate e bancari va bene così?

Per una valutazione veloce la curva IRS va bene così: hai un bond che scade nel 2020? calcoli il TIR, vai sull'IRS10 e hai il tuo spread.
Per una valutazione approfondita sarebbe proprio il caso di "zero couponizzare" tutto (e qui si tratta di trovare un metodo snello e rapido per farlo, al momento sto ancora cercando...).

Ok, chiarissimo anche qui, ma mi è venuto in mente questo: molti emittenti hanno anche emissioni ZC, per cui ha senso prendere in cosiderazione anche questi (e quindi non solo i TF) per la costruzione della struttura a termine dell'emittente??

Certo, vanno bene anche gli ZC.
 

sesp

Nuovo forumer
Anch'io inizialmente usavo la media.
Però poi l'ho scartata perché inadatta per il calcolo dei forward (la curva dei forward risulterà "a salti" invece che "liscia").
Spiegazione alla buona: i forward hanno una certa parentela con la derivata prima, la media fatta come sopra è una funzione continua (= non ci sono salti nella curva spot) ma la sua derivata prima è discontinua (= ci sono salti nella curva forward).
Scoperte le spline (che guarda caso hanno la proprietà di essere continue nella derivata prima), le ho applicate anche qui, il risultato è migliore, l'implementazione più semplice e c'è la possibilità di inserirle in altre formule, dove magari il valore di t (tempo) non è noto a priori.

Ottima indicazione GiveMe, grazie mille.
La sostituzione delle formule è semplice a questo punto, ma non ho capito la parte del tuo msg che ho evidenziato in grassetto.
E delle questioni che ho sollevato qualche post sopra che ne pensi? Qual'è secondo te il modo più corretto per tirare fuori questo benedetto spread emittente dai dati che abbiamo calcolato?? E' l'ultimo tassello di questo lavoro, che mi permetterà di censire (bene) a sporn battuto ilmaggior numero di bond trattati su MOT e TLX. :V
 

sesp

Nuovo forumer
Chiedo scusa, non avevo visto che avevi già risposto alle mie domande nel post seguente.
Grazie mille!!!

Ovviamente sono a disposizione per cercare insieme a te un metodo snello e veloce per zerocouponizzare tutti i dati.
Interessante infine il discorso della macro per i dati BCE. Se puoi approfondire te ne sono grato.
Grazie, grazie, grazie!!!
 

sesp

Nuovo forumer
Per una valutazione veloce la curva IRS va bene così: hai un bond che scade nel 2020? calcoli il TIR, vai sull'IRS10 e hai il tuo spread.

Rileggendo meglio, tu qui dici IRS a n anni rispetto al TIR del bond.
Ma così, essendo il TIR comunque espressione del prezzo del bond, ritorniamo al punto di partenza, cioè quello che avevo inizialmente pensato di fare io seppur usando REND.
Se ho capito bene, lo spread è dato sì da IRS n anni (nel tuo esempio IRS10), ma devo fare la differenza tra le due curve (cioè quella calcolata interpolando i dati di ogni bond, non il TIR del bond) e la curva IRS.
AIuto, mi sa che mi sono confuso le idee.... :specchio::specchio:
 

IceCube

Nuovo forumer
Rileggendo meglio, tu qui dici IRS a n anni rispetto al TIR del bond.
Ma così, essendo il TIR comunque espressione del prezzo del bond, ritorniamo al punto di partenza, cioè quello che avevo inizialmente pensato di fare io seppur usando REND.
Se ho capito bene, lo spread è dato sì da IRS n anni (nel tuo esempio IRS10), ma devo fare la differenza tra le due curve (cioè quella calcolata interpolando i dati di ogni bond, non il TIR del bond) e la curva IRS.
AIuto, mi sa che mi sono confuso le idee.... :specchio::specchio:

Da quanto si diceva (e mi permetto di riepilogare anche per capire se ho seguito correttamente il discorso), i due metodi differiscono per il grado di "sofisticazione" dei calcoli:

1) considero il TIR di un unico titolo (quello che voglio valutare), e calcolo lo spread emittente in base alla differenza con l'IRS pari durata.

2) considero tutte le (o quantomeno parecchie) emissioni, per costruire una curva dei rendimenti dell'emittente (interpolata) che andra' paragonata ad una analoga curva dei tassi IRS. Lo spread andra' calcolato (in un punto = una durata) come differenza tra le due curve, e non come differenza tra i due valori (TIR e IRS) in quel punto, assumendo che le due curve costituiscano una miglior approssimazione del valore "vero" (teorico) dello spread emittente, essendo costruite su piu' dati.

Nel secondo caso le complicazioni sono notevoli, e il rischio e' di... "usare il bisturi per tagliare le cosce di pollo" !
Ovvero: le differenze tra i risultati sono tali da giustificare la maggior complessità ?
 

sesp

Nuovo forumer
Da quanto si diceva (e mi permetto di riepilogare anche per capire se ho seguito correttamente il discorso), i due metodi differiscono per il grado di "sofisticazione" dei calcoli:

1) considero il TIR di un unico titolo (quello che voglio valutare), e calcolo lo spread emittente in base alla differenza con l'IRS pari durata.

2) considero tutte le (o quantomeno parecchie) emissioni, per costruire una curva dei rendimenti dell'emittente (interpolata) che andra' paragonata ad una analoga curva dei tassi IRS. Lo spread andra' calcolato (in un punto = una durata) come differenza tra le due curve, e non come differenza tra i due valori (TIR e IRS) in quel punto, assumendo che le due curve costituiscano una miglior approssimazione del valore "vero" (teorico) dello spread emittente, essendo costruite su piu' dati.

Nel secondo caso le complicazioni sono notevoli, e il rischio e' di... "usare il bisturi per tagliare le cosce di pollo" !
Ovvero: le differenze tra i risultati sono tali da giustificare la maggior complessità ?

IceCube, quanto dici al punto 1) è di fatto il punto di partenza di tutto l'argomento: quello del punto 1) è stato d'istinto il metodo che pensavo di usare per trovare lo spread dell'emittente. E' vero che io ho usato REND anzichè TIR.X (quindi ho calcolato il rendimento del titolo e non il suo tasso di rendimento interno), ma come è risultato dai calcoli iniziali questo metodo non è perseguibile poichè essendo sia REND sia TIR.X fortemente influenzate dal prezzo del bond su cui si fanno lavorare le due funzioni, è facile trovare che due titoli con scadenza più o meno simile restituiscano uno spread emittente molto diverso. Vai a rileggere il primo post del 3D dove risulta appunto questa "anomalia".
Pertanto è indispensabile procedere con il punto 2) che è proprio ciò che ho costruito con le indicazioni di GiveMeLeverage. In questo modo due titoli di scadenza simile avranno per forza uno spread emittente molto vicino, e in più in base al loro posizionamento sulla curva a termine dei rendimenti sarà visbile già a vista d'occhio una eventuale sopra/sotto valutazione dell'emissione in questione.
Questo è ciò che io ho capito e ho cercato di realizzare, sempre ovviamente sub judice in attesa di un parere conclusivo di GiveMe.
 

IceCube

Nuovo forumer
...è facile trovare che due titoli con scadenza più o meno simile restituiscano uno spread emittente molto diverso. Vai a rileggere il primo post del 3D dove risulta appunto questa "anomalia".
Pertanto è indispensabile procedere con il punto 2) che è proprio ciò che ho costruito con le indicazioni di GiveMeLeverage. In questo modo due titoli di scadenza simile avranno per forza uno spread emittente molto vicino...
No, qui non ti seguo...

Se hai due titoli dell'emittente che, a parità di durata, presentano rendimenti diversi, hai NECESSARIAMENTE un'incongruenza, che magari potrà essere solo temporanea, ma che nel momento esiste.

Il fatto poi che tu usi un qualunque artificio (semplice media dei rendimenti, interpolazione attraverso funzioni piu' o meno sofisticate, ecc..) NON ELIMINA l'incongruenza, solo la "smussa".

Poi, quando dici:
"..questo metodo non è perseguibile poichè essendo sia REND sia TIR.X fortemente influenzate dal prezzo del bond..."
tieni conto che per ottenere la curva dei rendimenti usi una serie di punti, le cui coordinate sono altrettantemente (come dice Albanese ! :D) ottenute in funzione dei prezzi dei titoli...
 

GiveMeLeverage

& I will remove the world
Scoperte le spline (che guarda caso hanno la proprietà di essere continue nella derivata prima), le ho applicate anche qui, il risultato è migliore, l'implementazione più semplice e c'è la possibilità di inserirle in altre formule, dove magari il valore di t (tempo) non è noto a priori.

La sostituzione delle formule è semplice a questo punto, ma non ho capito la parte del tuo msg che ho evidenziato in grassetto.

Una banalità: con la media ci calcoliamo il valore del tasso IRS anno per anno (13,14,16,17,18,19 ecc), poi magari abbiamo un bond con vita residua = 13,756 (sparo un numero qualsiasi) e ovviamente non abbiamo il valore diretto dell'IRS per quella durata, dobbiamo nuovamente riprendere in mano i calcoli.
Con le spline cubiche inserisci la durata (o la data di scadenza) nella formula e ti sputa fuori direttamente il valore. :)
 

GiveMeLeverage

& I will remove the world
Interessante infine il discorso della macro per i dati BCE. Se puoi approfondire te ne sono grato.

ti posto brutalmente le macro VBA che uso, vedi se sono comprensibili ed utili, semmai chiedi... ;)

Codice:
Option Explicit
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Private Declare Function InternetOpen Lib "wininet" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function InternetCloseHandle Lib "wininet" (ByVal hInet As Long) As Integer


'Purpose     :  Download file from a web site
'Inputs      :  sURLFileName            The URL and file name to download.
'               sSaveToFile             The filename to save the file to.
'               [bOverwriteExisting]    If True overwrites the file if it existings
'Outputs     :  Returns True on success.

Function InternetGetFile(sURLFileName As String, sSaveToFile As String, Optional bOverwriteExisting As Boolean = False) As Boolean
    Dim lRet As Long
    Const S_OK As Long = 0, E_OUTOFMEMORY = &H8007000E
    Const INTERNET_OPEN_TYPE_PRECONFIG = 0, INTERNET_FLAG_EXISTING_CONNECT = &H20000000
    Const INTERNET_OPEN_TYPE_DIRECT = 1, INTERNET_OPEN_TYPE_PROXY = 3
    Const INTERNET_FLAG_RELOAD = &H80000000
    
    On Error Resume Next
    'Create an internet connection
    lRet = InternetOpen("", INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
    
    If bOverwriteExisting Then
        If Len(Dir$(sSaveToFile)) Then
            VBA.Kill sSaveToFile
        End If
    End If
    'Check file doesn't already exist
    If Len(Dir$(sSaveToFile)) = 0 Then
        'Download file
        lRet = URLDownloadToFile(0&, sURLFileName, sSaveToFile, 0&, 0)
        If Len(Dir$(sSaveToFile)) Then
            'File successfully downloaded
            InternetGetFile = True
        Else
            'Failed to download file
            If lRet = E_OUTOFMEMORY Then
                Debug.Print "The buffer length is invalid or there was insufficient memory to complete the operation."
            Else
                Debug.Assert False
                Debug.Print "Error occurred " & lRet & " (this is probably a proxy server error)."
            End If
            InternetGetFile = False
        End If
    End If
    On Error GoTo 0
    
End Function

Sub Download_and_Unzip()
    Dim FSO As Object
    Dim oApp As Object
    Dim Fname As Variant
    Dim Fname1$
    Dim FileNameFolder As Variant
    Dim DefPath As String
    Dim strDate As String
    Const ecbURL = "http://www.ecb.int/stats/money/yc/data/fmd/download/yc_latest.zip?"

    Fname = ThisWorkbook.Path & "\yc_latest.zip"
    Fname1$ = Fname
    
    If Not InternetGetFile(ecbURL, Fname1$, True) Then
        MsgBox "Failed to download file!"
        Exit Sub
    End If
    
    On Error Resume Next
    Kill ThisWorkbook.Path & "\yc_latest.csv"
    Set oApp = CreateObject("Shell.Application")
    oApp.Namespace(ThisWorkbook.Path).CopyHere oApp.Namespace(Fname).items

    Set FSO = CreateObject("scripting.filesystemobject")
    FSO.deletefolder Environ("Temp") & "\Temporary Directory*", True
    
End Sub

Sub Extract_from_Csv()
    Const cerca = "Yields - All euro area central government bonds - Spot rate"
    Dim eu_gov_spot_rate As Single
    Dim i As Integer, filenumber As Integer
    Dim a$
    
    filenumber = FreeFile
    Open ThisWorkbook.Path & "\yc_latest.csv" For Input As #filenumber
    
    i = 1
    Do While Not EOF(filenumber)
        Input #filenumber, a$
        If InStr(1, a$, cerca) > 0 Then
            For i = 2 To 359
                Input #filenumber, a$, a$, eu_gov_spot_rate
                Worksheets("Foglio1").Cells(i, 9) = eu_gov_spot_rate / 100
            Next i
            Exit Do
        End If
    Loop

    Close #filenumber
End Sub

Una nota: queste macro leggono i dati relativi alla curva di tutti i bond governativi area euro.
All'interno dello stesso file la BCE inserisce anche i dati relativi alla curva AAA-gov.
Se ti fosse più utile quest'ultima, devi personalizzare leggermente la macro Extract_from_Csv.
 

Users who are viewing this thread

Alto