1 - ISCTE



1. Funções

▪ Função B0

Descrição: calcula o valor actual de uma obrigação e o valor actual dos seus cash flows

Inputs:

n = nº de cash flows futuros da obrigação (integer);

rvec = array (nx1) de taxas de juro spot (real);

CFvec = array (nx1) de cash flows futuros da obrigação (real);

Matvec = array (nx1) de maturidades para cash flows futuros da obrigação (real).

Output: B0 (real); e PV_cash_flow (nx1).

Fórmula de cálculo (1):

[pic]

sendo

[pic] cash flow a gerar pela obrigação no momento [pic] ([pic]); e

[pic] taxa spot a [pic] anos.

Fórmula de cálculo (2):

B0:= 0.0;

FOR k:=1 TO n DO BEGIN

PV_cash_flow [k] := CFvec[k] * ((1+ rvec[k])^(- Matvec[k]);

B0:= B0 + PV_cash_flow [k];

END;

▪ Função DM

Descrição: calcula a duração de Macaulay de uma obrigação

Inputs:

n = nº de cash flows futuros da obrigação (integer);

VT = valor de transacção da obrigação (real);

ytm = yield-to-maturity da obrigação (real);

CFvec = array (nx1) de cash flows futuros da obrigação (real);

Matvec = array (nx1) de maturidades para cash flows futuros da obrigação (real).

Output: real

Fórmula de cálculo (1):

[pic][pic]

sendo,

[pic] k-ésimo cash flow futuro da obrigação; e

[pic] tempo em falta para o vencimento do k-ésimo cash flow futuro da obrigação.

Fórmula de cálculo (2):

DM:= 0.0;

FOR k:=1 TO n DO BEGIN

DM:= DM + Matvec[k] * CFvec[k] * ((1+ytm)^(- Matvec[k]);

END;

DM:= DM / VT;

▪ Função DFW

Descrição: calcula a duração de Fisher-Weil de uma obrigação

Inputs:

n = nº de cash flows futuros da obrigação (integer);

rvec = array (nx1) de taxas de juro spot (real);

CFvec = array (nx1) de cash flows futuros da obrigação (real);

Matvec = array (nx1) de maturidades para cash flows futuros da obrigação (real).

Output: real

Fórmula de cálculo (1):

[pic][pic]

sendo,

[pic] taxa spot a [pic] anos;

[pic] k-ésimo cash flow futuro da obrigação;

[pic] tempo em falta para o vencimento do k-ésimo cash flow futuro da obrigação;

[pic] valor actual da obrigação =[pic].

Fórmula de cálculo (2):

DFW:= 0.0;

FOR k:=1 TO n DO BEGIN

DFW:= DFW + Matvec[k] * CFvec[k] * ((1+ rvec[k])^(- Matvec[k]);

END;

DFW:= DFW / B0(n,rvec,CFvec,Matvec);

▪ Função Dp

Descrição: calcula a duração de um portfolio

Inputs:

p = nº de componentes do portfolio (integer);

B0vec = array (px1) de valores associados a cada componente do portfolio (real);

Dvec = array (px1) de durações associadas a cada componente do portfolio (real).

Output: real

Fórmula de cálculo (1):

[pic]

sendo,

p ( nº de obrigações que integram a carteira;

[pic] duração da j-ésima obrigação;

[pic] valor actual da j-ésima obrigação; e

[pic] valor actual da carteira = [pic]

Fórmula de cálculo (2):

Bp:= 0.0;

FOR k:=1 TO m DO BEGIN

Bp:= Bp + B0vec[k];

END;

Dp:= 0.0;

FOR k:=1 TO m DO BEGIN

Dp:= Dp + Dvec [k] * B0vec [k];

END;

Dp:= Dp / Bp;

▪ Função YTM

Descrição: calcula a yield-to-maturity de uma obrigação

Inputs:

n = nº de cash flows futuros da obrigação (integer);

VT = valor de transacção da obrigação (real);

CFvec = array (nx1) de cash flows futuros da obrigação (real);

Matvec = array (nx1) de maturidades para cash flows futuros da obrigação (real).

Output: real

Fórmula de cálculo (1):

[pic][pic]

sendo,

[pic] cash flow a gerar pela obrigação no momento [pic] ([pic]); e

[pic] tempo em falta para o vencimento do j-ésimo cash flow futuro da obrigação.

Fórmula de cálculo (2):

Função SOLVER do EXCEL

▪ Função CM

Descrição: calcula a convexidade de Macaulay de uma obrigação

Inputs:

n = nº de cash flows futuros da obrigação (integer);

VT = valor de transacção da obrigação (real);

ytm = yield-to-maturity da obrigação (real);

CFvec = array (nx1) de cash flows futuros da obrigação (real);

Matvec = array (nx1) de maturidades para cash flows futuros da obrigação (real).

Output: real

Fórmula de cálculo (1):

[pic][pic]

sendo,

[pic] k-ésimo cash flow futuro da obrigação; e

[pic] tempo em falta para o vencimento do k-ésimo cash flow futuro da obrigação.

Fórmula de cálculo (2):

CM:= 0.0;

FOR k:=1 TO n DO BEGIN

CM:= CM + Matvec[k] * (1+ Matvec[k] )* CFvec[k] * ((1+ytm)^(- Matvec[k]);

END;

CM:= CM / VT;

▪ Função CFW

Descrição: calcula a convexidade de Fisher-Weil de uma obrigação

Inputs:

n = nº de cash flows futuros da obrigação (integer);

rvec = array (nx1) de taxas de juro spot (real);

CFvec = array (nx1) de cash flows futuros da obrigação (real);

Matvec = array (nx1) de maturidades para cash flows futuros da obrigação (real).

Output: real

Fórmula de cálculo (1):

[pic][pic]

sendo,

[pic] taxa spot a [pic] anos;

[pic] k-ésimo cash flow futuro da obrigação;

[pic] tempo em falta para o vencimento do k-ésimo cash flow futuro da obrigação;

[pic] valor actual da obrigação =[pic].

Fórmula de cálculo (2):

CFW:= 0.0;

FOR k:=1 TO n DO BEGIN

CFW:= CFW+Matvec[k]*(1+ Matvec[k] )*CFvec[k]*((1+rvec[k])^(- Matvec[k]);

END;

CFW:= CFW / B0(n,rvec,CFvec,Matvec);

▪ Função Cp

Descrição: calcula a convexidade de um portfolio

Inputs:

p = nº de componentes do portfolio (integer);

B0vec = array (px1) de valores associados a cada componente do portfolio (real);

Cvec = array (px1) de convexidades associadas a cada componente do portfolio (real).

Output: real

Fórmula de cálculo (1):

[pic]

sendo,

p ( nº de obrigações que integram a carteira;

[pic] convexidade da j-ésima obrigação;

[pic] valor actual da j-ésima obrigação; e

[pic] valor actual da carteira = [pic]

Fórmula de cálculo (2):

Bp:= 0.0;

FOR k:=1 TO m DO BEGIN

Bp:= Bp + B0vec[k];

END;

Cp:= 0.0;

FOR k:=1 TO m DO BEGIN

Cp:= Cp + Cvec [k] * B0vec [k];

END;

Cp:= Cp / Bp;

▪ Procedure NSestimation

Descrição: estima os parâmetros da função de desconto de Nelson-Siegel com base numa amostra de obrigações.

Inputs:

m = nº de obrigações consideradas (integer);

VTvec = array (mx1) de valores de transacção das obrigações consideradas (real);

nvec = array (mx1) com nº de cash flows futuros gerados por cada obrigação considerada na amostra (integer);

nmax = nº máximo de cash flows futuros gerados pela amostra de obrigações consideradas (integer);

CFmatrix = array (m x nmax) de cash flows futuros gerados pela amostra de obrigações consideradas (real);

Matmatrix = array (m x nmax) de maturidades para cash flows gerados pela amostra de obrigações consideradas (real).

Outputs: [pic] (real)

Fórmula de cálculo:

Minimizar a seguinte função em ordem a [pic]:

[pic]

sendo:

[pic] valor de transacção da j-ésima obrigação da amostra;

[pic] valor actual da j-ésima obrigação =[pic];

[pic]nº de cash flows futuros a gerar pela j-ésima obrigação;

[pic] cash flow pago pela j-ésima obrigação no momento [pic];

[pic].

▪ Function NSrates

Descrição: calcula uma taxa de juro spot (efectiva anual) de Nelson-Siegel para uma determinada maturidade.

Inputs:

t = maturidade expressa em anos (real);

[pic]parâmetros de Nelson-Siegel (real).

Outputs: [pic] (real)

Fórmula de cálculo:

[pic].

▪ Procedure BCestimation

Descrição: estima os parâmetros da função de desconto de Bjork-Christensen com base numa amostra de obrigações.

Inputs:

m = nº de obrigações consideradas (integer);

VTvec = array (mx1) de valores de transacção das obrigações consideradas (real);

nvec = array (mx1) com nº de cash flows futuros gerados por cada obrigação considerada na amostra (integer);

nmax = nº máximo de cash flows futuros gerados pela amostra de obrigações consideradas (integer);

CFmatrix = array (m x nmax) de cash flows futuros gerados pela amostra de obrigações consideradas (real);

Matmatrix = array (m x nmax) de maturidades para cash flows gerados pela amostra de obrigações consideradas (real);

f = nº de factores do modelo HJM (integer).

Outputs: [pic] e [pic] (real)

Fórmula de cálculo:

Minimizar a seguinte função em ordem a [pic] e [pic]:

[pic]

sendo:

[pic] valor de transacção da j-ésima obrigação da amostra;

[pic] valor actual da j-ésima obrigação =[pic];

[pic]nº de cash flows futuros a gerar pela j-ésima obrigação;

[pic] cash flow pago pela j-ésima obrigação no momento [pic];

[pic].

▪ Function BCrates

Descrição: calcula uma taxa de juro spot (efectiva anual) de Bjork-Christensen para uma determinada maturidade.

Inputs:

t = maturidade expressa em anos (real);

f = nº de factores do modelo HJM (integer);

[pic] e [pic] = parâmetros de Bjork-Christensen (real).

Outputs: [pic] (real)

Fórmula de cálculo:

[pic].

▪ Procedure IRSrates

Descrição: calcula parâmetros de Nelson-Siegel com base em taxas de IRS.

Inputs:

m = nº de IRSs considerados (integer);

IRSvec = array (mx1) de taxas IRS (real);

MatIRSvec = array (mx1) com maturidade (em anos) de cada IRS (real);

delta = período de capitalização (em anos) do ramo fixo do IRS (real);

Libor3M, Libor6M, Libor1Y.

Outputs: [pic] (real)

Fórmula de cálculo:

Minimizar a seguinte função em ordem a [pic]:

[pic]

sendo:

[pic] cotação de mercado do j-ésimo IRS da amostra (com maturidade igual a [pic] anos);

[pic] cotação de Nelson-Siegel do j-ésimo IRS da amostra (com maturidade igual a [pic] anos) = [pic];

[pic] período de capitalização (em anos) do ramo fixo do IRS;

[pic];

[pic].

▪ Procedure IRSratesBC

Descrição: calcula parâmetros de Bjork-Christensen com base em taxas de IRS.

Inputs:

m = nº de IRSs considerados (integer);

IRSvec = array (mx1) de taxas IRS (real);

MatIRSvec = array (mx1) com maturidade (em anos) de cada IRS (real);

delta = período de capitalização (em anos) do ramo fixo do IRS (real);

f = nº de factores do modelo HJM (integer) );

Libor3M, Libor6M, Libor1Y.

Outputs: [pic] e [pic] (real)

Fórmula de cálculo:

Minimizar a seguinte função em ordem a [pic] e [pic]:

[pic]

sendo:

[pic] cotação de mercado do j-ésimo IRS da amostra (com maturidade igual a [pic] anos);

[pic] cotação de Bjork-Christensen do j-ésimo IRS da amostra (com maturidade igual a [pic] anos) = [pic];

[pic] período de capitalização (em anos) do ramo fixo do IRS;

[pic];

[pic].

Procedure GetIRSrates

Descrição: Obtém taxas de IRS para uma dada divisa, via leitura do file “dcot_reuters_index”.

Inputs:

divisa = código da divisa (char): EUR (euro); USD (dólar); GBP (libras); ou JPY (ienes).

Outputs:

m = nº de IRSs considerados (integer);

IRSvec = array (mx1) de taxas IRS (real);

MatIRSvec = array (mx1) com maturidade (em anos) de cada IRS (real);

delta = período de capitalização (em anos) do ramo fixo do IRS (real);

Libor3M, Libor6M, Libor1Y.

Fórmula de cálculo:

IF (divisa=EUR) THEN BEGIN

Libor3M:= (MM[1,2]+ MM[1,3])/2;

Libor6M:= (MM[2,2]+ MM[2,3])/2;

Libor1Y:= (MM[3,2]+ MM[3,3])/2;

END;

IF (divisa=USD) THEN BEGIN

Libor3M:= (MM[4,2]+ MM[4,3])/2;

Libor6M:= (MM[5,2]+ MM[5,3])/2;

Libor1Y:= (MM[6,2]+ MM[6,3])/2;

END;

IF (divisa=GBP) THEN BEGIN

Libor3M:= (MM[7,2]+ MM[7,3])/2;

Libor6M:= (MM[8,2]+ MM[8,3])/2;

Libor1Y:= (MM[9,2]+ MM[9,3])/2;

END;

IF (divisa=JPY) THEN BEGIN

Libor3M:= (MM[10,2]+ MM[10,3])/2;

Libor6M:= (MM[11,2]+ MM[11,3])/2;

Libor1Y:= (MM[12,2]+ MM[12,3])/2;

END;

m := 15;

IF (divisa=EUR) THEN BEGIN

j:=1;

delta:= 1.0;

END;

IF (divisa=USD) THEN BEGIN

j:=2;

delta:= 1.0;

END;

IF (divisa=GBP) THEN BEGIN

j:=3;

delta:= 0.5;

END;

IF (divisa=JPY) THEN BEGIN

j:=4;

delta:= 0.5;

END;

MatIRSvec[1]:= 1.0;

IRSvec[1]:= QuadroIRS[2,j]/100;

FOR k:=2 TO 10 DO BEGIN

MatIRSvec[k]:= k;

IRSvec[k]:= QuadroIRS[k+4,j]/100;

END;

MatIRSvec[11]:= 12.0;

IRSvec[11]:= QuadroIRS[15,j]/100;

MatIRSvec[12]:= 15.0;

IRSvec[12]:= QuadroIRS[16,j]/100;

MatIRSvec[13]:= 20.0;

IRSvec[13]:= QuadroIRS[17,j]/100;

MatIRSvec[14]:= 25.0;

IRSvec[14]:= QuadroIRS[18,j]/100;

MatIRSvec[15]:= 30.0;

IRSvec[15]:= QuadroIRS[19,j]/100;

▪ Function HJMcap

Descrição: calcula o valor de equilíbrio de um (forward-start) cap via modelo HJM.

Inputs:

f = nº de factores do modelo HJM (integer);

[pic] e [pic] = parâmetros de Bjork-Christensen (real);

[pic] = parâmetros do modelo HJM (real);

k = cap rate (real);

c = período de capitalização (real);

mc = nº de períodos de capitalização de vida do cap (integer).

Outputs: CapHJM (real)

Fórmula de cálculo:

[pic]

sendo:

[pic];

[pic];

[pic] é a função distribuição de uma normal estandartizada;

[pic];

[pic];

[pic];

[pic] é uma matriz identidade (fxf);

“a” é uma matriz diagonal (fxf) igual a [pic];

é um vector (1xf).

▪ Function Blackcap - Corrigida

Descrição: converte, via modelo de Black (1976), a flat yield volatility quote de um (forward-start) cap num valor monetário.

Inputs:

[pic] = cotação de mercado do cap, em volatilidade (real);

k = cap rate (real);

c = período de capitalização (real);

mc = nº de períodos de capitalização de vida do cap (integer);

[pic]parâmetros de Nelson-Siegel (real).

Outputs: CapB (real)

Fórmula de cálculo:

[pic]

sendo:

[pic];

[pic];

[pic] é a função distribuição de uma normal estandartizada;

[pic];

[pic].

(call função NSrates)

▪ Procedure HJMestimation - Corrigido

Descrição: estima os parâmetros [pic] e [pic] do modelo HJM com base numa amostra de caps.

Inputs:

m = nº de caps considerados (integer);

Capvec = array (mx1) de preços de mercado dos caps (real);

cvec = array (mx1) com período de capitalização (em anos) de cada cap (real);

mcvec = array (mx1) com nº. de períodos de capitalização de vida de cada cap (integer);

kvec = array (mx1) de cap rates (real);

f = nº de factores do modelo HJM (integer);

[pic]parâmetros de Nelson-Siegel (real).

Outputs: [pic] e [pic] (real)

Fórmula de cálculo:

Minimizar a seguinte função em ordem a [pic] e [pic]:

[pic]

sendo:

[pic] i-ésimo elemento do vector Capvec;

[pic] valor fornecido pela função HJMcap, com base nos seguintes inputs:

f = nº de factores do modelo HJM (integer);

[pic]parâmetros de Nelson-Siegel (real).

[pic] e [pic] = (trial) parâmetros do modelo HJM (real);

k = i-ésimo elemento do vector kvec (real);

c = i-ésimo elemento do vector cvec (real);

mc = i-ésimo elemento do vector mcvec (integer).

▪ Procedure GetCaps

Descrição: Obtém cotações de caps (em volatilidade) para uma dada divisa, via leitura do file “dcot_reuters_index”.

Inputs:

divisa = código da divisa (char): EUR (euro); USD (dólar); GBP (libras); ou JPY (ienes).

Outputs:

m = nº de caps considerados (integer);

[pic] = array (mx1) de cotações de mercado (em volatilidade) dos caps (real);

cvec = array (mx1) com período de capitalização (em anos) de cada cap (real);

mcvec = array (mx1) com nº. de períodos de capitalização de vida de cada cap (integer).

Fórmula de cálculo:

m := 7;

IF (divisa=EUR) THEN BEGIN

j:=1;

cvec[1]:= 0.25;

FOR k:=2 TO 7 DO BEGIN

cvec[k]:= 0.5;

END;

END;

IF (divisa=USD) THEN BEGIN

j:=3;

FOR k:=1 TO 7 DO BEGIN

cvec[k]:= 0.25;

END;

END;

IF (divisa=GBP) THEN BEGIN

j:=5;

FOR k:=1 TO 7 DO BEGIN

cvec[k]:= 0.25;

END;

END;

IF (divisa=JPY) THEN BEGIN

j:=7;

cvec[1]:= 0.25;

FOR k:=2 TO 7 DO BEGIN

cvec[k]:= 0.5;

END;

END;

FOR k:=1 TO 5 DO BEGIN

mcvec [k]:= k * (1/ cvec[k]);

[pic][k]:= QuadroCAPS[k,j]/100;

END;

mcvec [6]:= 7 * (1/ cvec[k]);

[pic][6]:= QuadroCAPS[6,j]/100;

mcvec [7]:= 10 * (1/ cvec[k]);

[pic][7]:= QuadroCAPS[7,j]/100;

▪ Procedure CapATMRate

Descrição: Calcula strike de um (ATM-forward) cap.

Inputs:

c = período de capitalização do cap (real);

mc = nº de períodos de capitalização de vida do cap (integer);

[pic]parâmetros de Nelson-Siegel (real).

Outputs:

k = cap rate (real).

Fórmula de cálculo:

[pic]

sendo:

[pic];

[pic].

(call função NSrates)

▪ Procedure HJMestimationRun - Corrigido

Descrição: corre o procedure HJMestimation para uma dada divisa.

Inputs:

divisa = código da divisa (char): EUR (euro); USD (dólar); GBP (libras); ou JPY (ienes);

f = nº de factores do modelo HJM (integer) – default = 3.

Outputs: [pic] (real)

Fórmula de cálculo:

i) Chamar procedure GetCaps(divisa) para obter: m; [pic] ; cvec; mcvec.

ii) Chamar procedure GetIRSrates(divisa) para obter: mirs; IRSvec ; MatIRSvec ; delta.

iii) Chamar procedure IRSrates(mirs,IRSvec,MatIRSvec,delta) para estimar parâmetros [pic].

iv) Forma vectores kvec e Capvec:

FOR k:=1 TO m DO BEGIN

kvec[k]:= CapATMRate(cvec[k],mcvec[k],[pic]);

Capvec[k]:= Blackcap([pic] [k],kvec[k], cvec[k], mcvec[k],[pic]);

END;

v) Chamar procedure IRSratesBC(mirs,IRSvec,MatIRSvec,delta,f) para estimar parâmetros [pic] e [pic].

v) Chamar procedure HJMestimation(m,Capvec,cvec,mcvec,kvec,f,[pic]) para estimar parâmetros [pic] e [pic].

▪ Function HJMcov - Corrigida

Descrição: Calcula a covariância, via modelo HJM, entre 2 HR de diferentes factores de desconto.

Inputs:

[pic] maturidade (em anos) dos 2 factores de desconto (real);

dt = período de capitalização, em anos; utilizar (1/260) por default; utilizar (1) para obter volatilidades anualizadas (real);

f = nº de factores do modelo HJM (integer);

[pic] = parâmetros do modelo HJM (real);

[pic] = parâmetros do modelo HJM (real).

Outputs:

HJMcov = [pic] (real).

Fórmula de cálculo:

[pic]

sendo:

[pic] é uma matriz identidade (fxf);

“a” é uma matriz diagonal (fxf) igual a [pic];

é um vector (1xf).

▪ Função rvecCALCNS

Descrição: calcula o vector rvec de taxas de actualização, via método Nelson-Siegel.

Inputs:

n = nº taxas a calcular (integer);

Matvec = array (nx1) de maturidades a considerar (real);

Spread = spread entre classe de rating e IRS (real);

[pic]parâmetros de Nelson-Siegel, calculados com base em IRSs, via procedure IRSrates (real);

Output: rvec = array (nx1) de taxas de juro spot (real).

Fórmula de cálculo:

FOR k:=1 TO n DO BEGIN

rvec[k]:= Function Nsrates(Matvec[k], [pic])

+ Spread;

END;

▪ Função rvecCALCBC

Descrição: calcula o vector rvec de taxas de actualização, via método Björk-Christensen.

Inputs:

n = nº taxas a calcular (integer);

Matvec = array (nx1) de maturidades a considerar (real);

Spread = spread entre classe de rating e IRS (real);

f = nº de factores do modelo HJM (integer);

[pic] e [pic] = parâmetros de Björk-Christensen, calculados com base em IRSs, via procedure IRSratesBC (real);

Output: rvec = array (nx1) de taxas de juro spot (real).

Fórmula de cálculo:

FOR k:=1 TO n DO BEGIN

rvec[k]:= Function BCrates(Matvec[k],f, [pic],[pic])

+ Spread;

END;

▪ Function HJMcovmatrix

Descrição: Calcula a matriz de variâncias-covariâncias, via modelo HJM e para SOMENTE uma dada divisa, para cálculo do VaR.

Esta função irá ser chamada pela função VaR_Bonds.

Esta função chama a função HJMcov.

Inputs:

t = horizon_date (real);

f = nº de factores do modelo HJM (integer);

[pic] = parâmetros do modelo HJM (real);

[pic] = parâmetros do modelo HJM (real).

Constantes:

Bucket[1] = 0.25;

Bucket[2] = 0.5;

FOR k:=1 TO 10 DO BEGIN

Bucket[2+k] = k;

END;

Bucket[13] = 15;

Bucket[14] = 20;

Bucket[15] = 25;

Bucket[16] = 30;

Outputs: HJMcovmatrix = matriz (16x16)

Fórmula de cálculo:

FOR k:=1 TO 16 DO BEGIN

FOR j:=1 TO 16 DO BEGIN

HJMcovmatrix[k,j]:= Function HJMcov( k, j, t, f, [pic],[pic] );

END;

END;

-----------------------

[pic]

[pic]

................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download