Você está na página 1de 228

1


PORTFOLIOS
EFICIENTES
~
INCLUINDO OPC
 OES

Cibele Dunder
~ APRESENTADA
DISSERTAC
 AO
AO

INSTITUTO DE MATEMATICA
E ESTATISTICA
DA
~ PAULO
UNIVERSIDADE DE SAO
~
PARA OBTENC
 AO DO GRAU DE MESTRE
EM

MATEMATICA
APLICADA


Area
de Con entra ~ao: Matem
ati a Apli ada
Orientador: Prof. Dr. J
ulio Mi hael Stern

Durante a elabora ~
ao deste trabalho, o autor re ebeu apoio
do CNPq (pro . 139188/96-7) e FAPESP (pro . 96/06565-2)

- S~ao Paulo, maio de 1998 -

Portfolios E ientes In luindo Op ~oes

Este exemplar orresponde a


reda ~ao nal da disserta ~ao
devidamente orrigida e defendida
por Cibele Dunder e aprovada
pela omiss~ao julgadora.
S~ao Paulo, 20 de junho de 1998

Ban a Examinadora:




Prof. Dr. Julio Mi hael Stern (Orientador) - IME-USP


Prof. Dr. Carlos Humes Jr. - IME-USP
Prof. Dr. Mar os Eug^enio da Silva - FEA-USP

Agrade imentos
Ao Prof. Julio M. Stern, pela pa i^en ia, amizade, on an a, orienta ~ao ...
Ao Prof. Carlos Humes Jr., pelas palavras de in entivo
Ao amigo Fabio Nakano, sempre me ajudando nas en ren as omputa ionais
A todos, que de uma forma ou de outra ajudaram na on retiza ~ao deste trabalho,

MUITO OBRIGADA.

Aos meus pais

Sumario
Lista de Figuras

Lista de Tabelas

vii

Resumo

ix

Abstra t

xi

1 Introdu ~ao

2 Criterio Media-Vari^an ia para Portfolios


2.1 Analise de Ativos e Derivativos . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1 Um Modelo de Pre os para A ~oes . . . . . . . . . . . . . . . . . . . . . .
2.1.2 O Mer ado de Op ~oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.3 Um Exemplo Didati o de Portfolio . . . . . . . . . . . . . . . . . . . . . .
2.2 O Modelo de Markowitz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.1 Prefer^en ias de Ris o e Fun ~ao Utilidade . . . . . . . . . . . . . . . . . .
2.2.2 Ris o e Retorno de Portfolios . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.3 Sele ~ao de Portfolios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.4 Express~oes do Valor Esperado das Taxas de Retorno e Covari^an ias de
A ~oes e Op ~oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3
4
4
6
8
11
11
15
16
17

3 Assimetria de Portfolios
31
3.1 Sele ~ao de Portfolios e Momentos de Ter eira Ordem . . . . . . . . . . . . . . . . 31
3.2 Express~oes de Co-assimetrias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4 Cal ulo Numeri o de Covari^an ias

51
ii


SUMARIO

4.1 Metodo de Quadratura Numeri a . .


4.2 Tratamento de Erros . . . . . . . . .
4.2.1 Formula de Euler-Ma laurin
4.2.2 Extrapola ~ao de Ri hardson .

iii

.
.
.
.

..
..
..
..

.
.
.
.

..
..
..
..

.
.
.
.

..
..
..
..

.
.
.
.

.
.
.
.

..
..
..
..

.
.
.
.

..
..
..
..

.
.
.
.

.
.
.
.

..
..
..
..

.
.
.
.

..
..
..
..

.
.
.
.

.
.
.
.

51
55
55
59

5 Cal ulo Exato de Assimetria e Co-assimetria


63
5.1 Cubatura Numeri a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.2 Compara ~ao entre metodos de integra ~ao . . . . . . . . . . . . . . . . . . . . . . 67
5.3 Efeitos do uso de diferentes metodos de integra ~ao sobre fronteiras e ientes . . . 69
6 Exemplos de Portfolios E ientes
6.1 Primeiro exemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.1 Otimiza ~ao de Portfolios pelo Criterio Media-Vari^an ia . . . . . .
6.1.2 Otimiza ~ao de Portfolios pelo Criterio Media-Vari^an ia-Assimetria
6.2 Segundo exemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7 Con lus~ao

..
..
..
..

.
.
.
.

.
.
.
.

71
71
73
74
75
87

A Implementa o~es em linguagem C


89
A.1 Rotinas de Covari^an ias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
A.2 Rotinas de Co-assimetrias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
B Implementa o~es em Matlab e Gams
201
B.1 Algoritmo para o al ulo de nos e pesos da Quadratura Gaussiana . . . . . . . . 201
B.2 Arquivo em GAMS - Sele ~ao de Portfolios usando Assimetria . . . . . . . . . . . 204
Refer^en ias Bibliogra as

211

iv


SUMARIO

Lista de Figuras
2.1 utilidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2 urvas (linhas) de indiferen a no espa o p2  Ep . . . . . . . . . . . . . . . . . . 14
3.1 taxa de retorno de uma all . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.1 parti ~oes para a regra do trapezio . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.2 regra do trapezio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
6.1 Assimetria  Retorno Esperado para  = 1 e 0 < < 1 . . . . . . . . . . . . . . 83
6.2 Retorno Esperado  Desvio Padr~ao  Assimetria para  = 1 e 0 < < 1 . . . . 84
6.3 Desvio Padr~ao  Retorno Esperado para  = 1 e 0 < < 1 . . . . . . . . . . . . 85

vi

LISTA DE FIGURAS

Lista de Tabelas
6.1
6.2
6.3
6.4
6.5
6.6
6.7
6.8
6.9
6.10
6.11
6.12
6.13
6.14
6.15

Retorno logartimi o e respe tivo desvio padr~ao das a ~oes. . . . . . . . . . . . . .


Coe ientes de orrela ~ao entre os retornos logartmi os das a ~oes . . . . . . . .
Dados das op ~oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Cota ~ao das a ~oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Taxa de retorno esperada e desvio-padr~ao das a ~oes e op ~oes. . . . . . . . . . . .
Coe ientes de orrela ~ao entre as taxas de retorno das a ~oes e op ~oes . . . . . .
Continua ~ao da tabela 6.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Portfolios e ientes pelo riterio media-vari^an ia para o exemplo 1 (C1) . . . . .
Portfolios e ientes pelo riterio media-vari^an ia para C2. . . . . . . . . . . . . .
Portfolios e ientes pelo riterio media-vari^an ia para C3. . . . . . . . . . . . . .
Portfolios e ientes pelo riterio media-vari^an ia-assimetria para o onjunto C1. .
Taxa de retorno esperada e desvio-padr~ao para os investimentos do segundo exemplo
Correla ~ao entre as taxas de retorno das a ~oes e op ~oes do segundo exemplo . . .
Continua ~ao da tabela 6.13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Co-assimetrias entre os retornos dos elementos do portfolio C1. . . . . . . . . . .

vii

76
76
76
77
77
77
78
78
79
79
80
80
81
81
82

viii

LISTA DE TABELAS

Resumo
Apresentamos um estudo sobre sele ~ao de portfolios e ientes baseado nos tr^es primeiros momentos estatsti os: media, vari^an ia e assimetria. Nossa abordagem e uniperiodi a e voltada a
portfolios formados por ativos fundamentais om retorno (quase) log-normal e op ~oes europeias
(\ alls" e \puts").
Nos primeiros aptulos fazemos uma revis~ao da teoria basi a de portfolios, omo o modelo
de Markowitz, e de ni ~oes de ativos e derivativos. Tambem deduzimos novas express~oes de ovari^an ia, ne essarias pela in orpora ~ao das op ~oes, e desenvolvemos algoritmos e implementa ~oes
para resolver os problemas de quadratura surgidos. Estes pro edimentos foram in orporados no
software de analise nan eira Criti al-Point.
Tambem aprofundamos o modelo padr~ao de analise de portfolios introduzindo assimetria,
dando express~oes de o-assimetrias e desenvolvendo algoritmos numeri os e ientes e implementa ~oes para resolver os problemas de ubatura que apare em.
No aptulo nal analisamos alguns exemplos de portfolios formados por ativos e derivativos
do mer ado nan eiro brasileiro.

ix

LISTA DE TABELAS

Abstra t
We study e ient portfolio sele tion based on the three rst statisti al moments: mean, varian e
and skewness. Our approa h is uniperiodi and limited to portfolios made of fundamental assets
with (quasi) log-normal return and plain vanilla option ( alls and puts).
The rst hapters are a review of standard portfolio theory like Markowitz model, and basi
derivative assets de nitions. We also give the expressions for the ovarian e omponents required
to in lude vanilla options, and develop e ient numeri al algorithms and implementations to
solve the required quadrature problems. Those pro edures have been in orporated the nan ial
analysis software Criti al-Point.
We also further extend the standard model introdu ing assimetry, give the expressions for
the oskewness omponents and develop e ient numeri al algorithms and implementations to
solve the required ubature problems.
In the nal hapter we analyze some real s enarios in the Brazilian sto k market.

xi

xii

LISTA DE TABELAS

Cap
tulo 1

Introdu ~ao
Todo problema de de is~ao tem alguns elementos em omum: des ri ~ao de alternativas, uma
sele ~ao de riterios de es olha dentre estas e, nalmente, a solu ~ao do problema. No mer ado
nan eiro as de is~oes n~ao s~ao fa eis para o investidor, pois ha uma gama enorme de ativos a
disposi a~o (por exemplo, ommodities, moedas, et ), assim omo derivativos sobre eles. Combina-los de forma a obter o maior retorno possvel, ou seja, montar um portfolio otimo, e o
objetivo de todo investidor.
Ha estudos na E onomia que auxiliam os investidores a estruturarem seus problemas de tal
forma a minimizar o numero de alternativas nestas situa ~oes. Parte destes estudos e auxiliado
pela analise de media e vari^an ia em portfolios, que delinea as propriedades de uma ombina ~ao
de ativos a partir do omportamento individual destes. Media e vari^an ia s~ao ferramentas basi as
na analise de ris o, assim omo medidas de omo os retornos de diferentes ativos movem-se juntos
( ovari^an ia). Mas momentos de ordem superior, omo assimetria, podem tambem nos auxiliar
na es olha de arteiras otimas.
No aptulo 2 familiarizamos o leitor om a teoria de portfolios. De nimos os ativos e derivativos om que trabalharemos, as rela ~oes entre os investimentos e omo estas rela ~oes afetam o ris o
e o retorno de portfolios. Trazemos algumas onsidera ~oes sobre analise de portfolios baseada
no modelo a dois par^ametros (media-vari^an ia), ini iado na modelo de Markowitz. Dis orremos
sobre as hipoteses basi as do uso desta analise E-S (expe ted return and standard-deviation)
baseadas em restri ~oes a fun ~ao utilidade e ao omportamento de investidores. Deduzimos as
express~oes do valor esperado do retorno de arteiras e tambem de ovari^an ias, partindo de um
modelo ontnuo para os pre os de a ~oes.
O aptulo 3 amplia as dis uss~oes do aptulo anterior introduzindo o ter eiro momento
entral do portfolio. A fun ~ao utilidade e expandida em termos ate ter eira ordem e prefer^en ia
por skewness e inserida no per l do investidor. Do mesmo modo omo para as ovari^an ias,
deduzimos as express~oes de o-assimetria dos retornos de a ~oes e op ~oes.
Os aptulos 4 e 5 p~oem em prati a a teoria vista nos aptulos anteriores. Cal ulamos numeri amente os momentos ate ter eira ordem de portfolios formados por a ~oes e op ~oes europeias.
Dis utimos o porqu^e de ertas te ni as de integra ~ao numeri a terem sido usadas nestes al ulos.
Por m, apresentamos exemplos de portfolios e ientes nos espa os retornoris o e retorno
1

2
ris o  assimetria, usando a ~oes e op ~oes da BOVESPA.

Introdu ~ao

Todas as rotinas numeri as foram feitas em linguagem C e en ontram-se no ap^endi e A.


Ex e ~ao e feita a rotina de al ulo de nos e pesos da integra ~ao gaussiana unidimensional, feita
em Matlab, e ao problema de programa a~o n~ao linear do aptulo 3, para o qual utilizamos o
solver MINOS do GAMS para resolv^e-lo (vide ap^endi e B).

Cap
tulo 2

Criterio Media-Vari^an ia para


Portfolios
Suponha que temos uma erta quantia W de dinheiro e desejamos invest-la no mer ado nan eiro (por exemplo, mer ado de a ~oes). Ha a possibilidade de investirmos todo o montante em
a ~oes de uma uni a ompanhia. Mas podemos tambem montar um portfolio, que e uma ole ~ao
de a ~oes de varias ompanhias e/ou outros investimentos, omo o mer ado de futuros, taxas de
juros, entre outros. Os elementos que omp~oem o portfolio hamaremos de ativos.
Podemos de nir um ativo omo uma oportunidade de investimento, ou seja, algo que gere
dividendos. Tambem trabalharemos om derivativos (espe i amente om ontratos de op ~oes1 ),
que s~ao instrumentos do mer ado ujos valores dependem dos valores de outros ativos. Por
exemplo, um ontrato futuro sobre o afe e um derivativo, ujo valor depende do pre o de seu
ativo fundamental, o afe.
Mas t~ao importante quanto saber quais s~ao as possibilidades de investimento e saber qual a
expe tativa de lu ro que estas podem ofere er. Se investirmos num ativo sem ris o, por exemplo
aderneta de poupan a, teremos um lu ro erto (a por entagem mensal de rendimento). Ja o
mer ado de a ~oes n~ao pode garantir lu ro erto para seu investidor, pois agora estamos falando
de ativos de ris o. Ha han es de queda e de alta nos pre os destes ativos. Por isso as predi ~oes
dos analistas destas \ han es" de queda ou de alta s~ao de fundamental import^an ia.
Nesta disserta ~ao usaremos predi ~oes probabilsti as, ou seja, aquelas que se baseiam nos
dados passados dos ativos para quanti ar suas possibilidades futuras. Neste aso, duas medidas
s~ao de grande interesse: a predi ~ao de taxas de retorno e uma medida da in erteza2 desta taxa
(o quanto ela pode afastar-se desde valor predito).
O pro esso que nos leva a es olha de um portfolio, dentre as inumeras possibilidades que o
mer ado ofere e, envolve tr^es fases prin ipais:
1.
1
2

Analise de ativos e derivativos:

aqui est~ao in ludas predi ~oes sobre as ara tersti as


futuras dos ativos, um modelo (dis reto ou ontnuo) para o omportamento dos pre os

ser~ao dados detalhes sobre estes ontratos nas proximas se ~oes
as palavras ris o e in erteza neste texto s~ao sin^onimas

Criterio Media-Vari^an ia para Portfolios

ou ota o~es, orrela ~oes entre os diferentes ativos e derivativos, as in ertezas envolvidas
nestes modelos. En m, riar um modelo teori o que represente t~ao bem quanto possvel
os dados empri os.
2. Analise de portfolios: o upa-se de predi ~oes sobre o omportamento dos portfolios baseados
inteiramente nos dados dos ativos da fase 1. Usamos os modelos obtidos para al ular, por
exemplo, retorno, vari^an ia e assimetria de portfolios.
3. Sele ~ao de portfolios: dentre o grande numero de portfolios a disposi ~ao, resta fazer uma
sele ~ao baseada no per l do investidor. Por exemplo, adaptar diferentes taxas de retorno
e de ris o de arteiras as diferentes toler^an ias ao ris o por parte do investidor.
Para a fase 1, vamos tratar de portfolios formados por a ~oes e ontratos de op ~oes europeias
sobre a ~oes nego iadas na Bolsa de Valores. Para abordar as fases 2 e 3, neste aptulo, usaremos
o modelo de Markowitz, que utiliza os dois primeiros momentos entrais do retorno do portfolio.
No proximo aptulo in luiremos o ter eiro momento entral (assimetria) em nossa analise.
2.1 Analise de Ativos e Derivativos
2.1.1 Um Modelo de Pre os para A ~
oes

Quando investimos num ativo de ris o, o que mais gostaramos de saber e a expe tativa do
retorno deste investimento, ja que n~ao sabemos qual sera a ota ~ao destes ativos daqui a um
perodo  qualquer.
Para podermos quanti ar esta expe tativa pre isamos adotar um modelo que represente o
omportamento dos pre os das a ~oes ao longo do tempo. E o modelo que adotaremos e o da
distribui ~ao log-normal dos pre os, e e om ele que trabalharemos daqui por diante.
Ha dois par^ametros have para des rever o omportamento dos pre os quando a hipotese de
log-normalidade e adotada: retorno esperado e desvio-padr~ao. As estimativas destes par^ametros
podem ser feitas om base em series histori as das ota ~oes dos ativos, atraves de uma ltragem
de dados.
Vamos ver em linhas gerais um exemplo deste pro esso.
Suponha que estamos na data t0 e queremos obter uma estimativa do retorno e do desvio
padr~ao do pre o do ativo i para daqui a  = T t0 dias (T > t0 ). Os retornos onsiderados no
modelo s~ao ontnuos.
Denotando por S (t; i) e r(t; i) o pre o e o retorno logartmi o do ativo em quest~ao, al ulamos
r(t; i) = ln

S (t + 1; i)
S (t; i)

(t < t0 )

para uma amostra de N pre os retroativos a data t0 . Em seguida vem o al ulo do retorno
medio

2.1 Analise de Ativos e Derivativos

med(i) =

1 X r(t; i)

e o desvio padr~ao
dp(i) =

1 X(r(t; i)

med(i))2 :

Vem ent~ao o pro esso de extrapola ~ao dos valores med(i) e dp(i) para a data T que estamos
interessados:
i =
i =

extrapola ~ao de med(i) = medp(i):T


extrapola ~ao de dp(i) = dp(i): T
Os valores i e i ser~ao os par^ametros da nossa distribui ~ao log-normal para o ativo i, isto e,
xi = ln

S (T; i)
S (t0 ; i)

= N (i ; i2 )

(xi, o retorno logartmi o para o perodo  , tem, aproximadamente, uma distribui ~ao normal
om media i e vari^an ia i2 ).
Uma outra grandeza essen ial e a ovari^an ia destes retornos logartmi os para dois ou mais
ativos diferentes.
Seja ov(i; j ) a ovari^an ia entre o logaritmo dos pre os dos ativos i e j e orr(i; j ) o oe iente
de orrela ~ao entre eles. Temos
1 X(r(t; i) med(i))  (r(t; j ) med(j ));
ov(i; j ) =
N

dp(i) =

ov(i; i)

e
orr(i; j ) =

ov(i; j )
dp(i)  dp(j )

A respe tiva fun ~ao densidade de probabilidade da variavel aleatoria xi, de distribui ~ao
normal, e dada por

Criterio Media-Vari^an ia para Portfolios



(
xi i )2
1
( 1 < xi < +1)
f (xi ) = p exp
2i2
i 2

Para o aso de estarmos trabalhando om dois ou mais ativos diferentes, tambem temos a
fun ~ao densidade de probabilidade onjunta
f (xi ; xj )

= 2  p11 orr(i;j) :




2
1
exp 2(1 orr(i;j) ) x  
2 orr(i; j ) x  
2

i j

xj j
j

xj j
j

2 

( 1 < xi; xj ; +1)


Todos estes dados de media, vari^an ia e oe ientes de orrela ~ao ser~ao de grande utilidade
nas analises da fase 2, pois e a partir deles que geraremos o retorno e o ris o de portfolios.
2.1.2 O Mer ado de Op ~oes

Um ontrato de op ~ao e um instrumento que da ao seu omprador (titular ou portador) o
direito futuro sobre algo, e n~ao uma obriga ~ao; e a seu vendedor uma obriga ~ao futura, se esta
for soli itada pelo omprador.
Nas op ~oes de ompra (ou \ all" ) o portador tem o direito de omprar algo, numa data
futura, pelo pre o estipulado no ontrato ( hamado pre o de exer  io). Nas op ~oes de venda
(ou \ put" ), o titular tem o direito de vender algo numa data futura, pelo pre o de exer  io do
ontrato.
Esse algo que o titular pode omprar ou vender pode ser, a priori, qualquer ativo ou derivativo
do mer ado; pode ser desde uma a ~ao da Telebras ate ontratos futuros ou mesmo um outro
ontrato de op ~ao.
A data futura em que se pode exer er os direitos de ompra e venda d~ao margem a dois tipos
de op ~oes: op ~ao europeia e op ~ao ameri ana.
Na op ~ao europeia o titular pode exer er o seu direito somente na data de expira ~ao do
ontrato. A op ~ao ameri ana ja da liberdade ao portador de exer er o seu direito em qualquer
data que ante eda a expira ~ao do ontrato.
Parti ularmente, trabalharemos nesta disserta ~ao somente om op ~oes europeias que tenham
omo ativos fundamentais a ~oes nego iadas na Bolsa (s~ao as a ~oes-objeto do ontrato).
Em resumo, uma op ~ao de ompra europeia onfere ao seu titular o direito de omprar as
a ~oes-objeto, ao pre o de exer  io, na data de expira ~ao do ontrato. O lan ador da op ~ao de
ompra assume a obriga ~ao de vender as a ~oes-objeto a que se refere a op ~ao, pelo pre o de
exer  io, se o omprador o requerer. Da mesma forma, uma op ~ao de venda europeia da ao seu

2.1 Analise de Ativos e Derivativos

titular o direito de vender as a ~oes-objeto, na data de ven imento, pelo pre o de exer  io do
ontrato. O lan ador assume o ompromisso de omprar as a ~oes aso seja exer ido o direito do
titular.
Em raz~ao dos direitos e obriga o~es do ontrato, o omprador paga ao lan ador uma quantia
denominada pr^emio, que e o pre o da op ~ao. Este pre o leva em onsidera ~ao a oferta e demanda
do ativo, a diferen a entre o pre o a vista e o pre o de exer  io da a ~ao-objeto, a volatilidade
dos pre os, et . Os ativos passveis de nego ia ~ao em op ~oes s~ao de nidos pela institui ~ao que
as nego ia, assim omo o m^es de expira ~ao do ontrato e os pre os de exer  io.
Como nota ~ao, usaremos:
T : data de expira ~ao do ontrato;
S (t) : pre o do ativo basi o na data t;
K (t); Kp (t) : pre o de exer  io de uma all e uma put, respe tivamente, na data t;
P (t); Pp (t) : pr^emio de uma all e uma put, respe tivamente, na data t.
Uma op ~ao de ompra europeia pode ser vista omo um derivativo que paga ao portador, na
data T , a quantia
X (T ) = max(S (T ) K (t0 ); 0)

( 0)

onde t0 e a data de assinatura do ontrato.


Se o pre o de mer ado do ativo basi o for maior que o pre o espe i ado no ontrato, ou
seja, S (T ) > K (t0), ent~ao o portador do ontrato pode omprar as a ~oes pelo pre o K (t0), em
exer  io do seu direito, e vend^e-la imediatamente no mer ado, lu rando S (T ) K (t0) > 0. Claro
que este \ lu ro" pode n~ao ompensar o valor pago pela aquisi ~ao da op ~ao, o que impli aria
numa taxa de retorno negativa.
Se S (T )  K (t0), perder-se-a S (T ) K (t0)  0 se o direito de ompra for exer ido. Neste
aso, deixa-se de exer er o direito na data T .
Analogamente, uma op ~ao de venda europeia pode ser vista omo um derivativo ujo valor
na data de ven imento e dado por
XT

= max(Kp(t0 )

S (T ); 0)

( 0)

Vamos agora espe i ar taxas de retorno para o aso de a ~oes e op ~oes europeias, om as
quais vamos trabalhar ate o nal desta disserta ~ao.
Daqui por diante omitiremos a palavra europeia quando falarmos de op ~oes, ando impl ito
que e sobre este tipo de ontrato que estamos falando.
Para uma a ~ao, uja ota ~ao na data t e dada por S (t), a taxa de retorno rs no perodo
 = T t (T > t) sera dada por
rs =

S (T ) S (t)
S (t)

(2.1)

Criterio Media-Vari^an ia para Portfolios

Para as op ~oes de ompra e venda, as taxas de retorno ser~ao dadas por
r =
rp =

max(S (T )

K (t0 ); 0) P (t0 )
P (t0 )

(\ all" )

(2.2)

max(Kp(t0 )

S (T ); 0) Pp (t0 )
Pp (t0 )

(\put" )

(2.3)

onde t0 e a data de assinatura dos ontratos.


2.1.3

Um Exemplo Didati o de Portf


olio

Vamos onsiderar um portfolio bem simples formado por dois ativos basi os, hamados de ativo
A e ativo B, e por op ~oes de ompra e venda que t^em omo a ~oes-objetos os proprios ativos A
e B. Vamos supor tambem que as datas de assinatura (t0 ) e as datas de expira ~ao (T ) s~ao as
mesmas para todas as op ~oes.
Denote por Sa e Sb os pre os dos ativos A e B, respe tivamente. Os retornos logartmi os
de A e B, extrapolados para a data T , s~ao dados por
x = ln

Sa (T )
Sa (t0 )

Sb (T )
Sb (t0 )

e
y = ln

= N (a ; a2 )

(2.4)

= N (b; b2 )

(2.5)

e as fun ~oes densidade de probabilidade dadas por


1
f (x) = p exp

(x

a )2
2a2

p1 exp

(y

b )2
2b2

a

f (y ) =

b

2
2

(2.6)
(2.7)

Sendo  o oe iente de orrela ~ao entre os ativos A e B, a fun ~ao distribui ~ao onjunta e
dada por
f (x; y)

= 2 

1p

a b

2

exp

2(1

2 )



x a
a

2

 x aa y bb

y b
b

2 

2.1 Analise de Ativos e Derivativos

( 1 < x; y < +1)


Pre isamos olo ar as taxas de retorno dadas em 2.1, 2.2 e 2.3 em fun ~ao das variaveis x
e y, pois e destas variaveis que temos informa ~oes sobre a densidade de probabilidade.
O motivo pelo qual n~ao trabalharemos om retornos logartmi os para op ~oes e a simpli a ~ao
dos al ulos das ovari^an ias entre estes retornos, omo veremos nas proximas se ~oes.
De 2.4 e 2.5 temos
Sa (T ) = Sa (t0 )exp(x)

Sb (T ) = Sb (t0 )exp(y)

(2.8)

Substituindo 2.8 em 2.1 teremos


rsa = exp(x)

1 e rs = exp(y) 1
(2.9)
onde rs e rs s~ao as taxas de retorno dos ativos A e B, respe tivamente.
Para as op ~oes xaremos a letra K para denotar pre o de exer  io do ontrato, olo ando
um ndi e superior a letra para diferen iar alls de puts, e um ndi e inferior para indi ar a
a ~ao-objeto a que se refere.
Por exemplo, Ka (t) denota o pre o de exer  io de uma all sobre o
p
ativo A, na data t, e Kb (t) indi a o pre o de exer  io de uma put sobre o ativo B, na data t.
Os pr^emios das op ~oes de ompra ser~ao denotados pela letra C , om um ndi e inferior
indi ando o ativo a que se refere. O mesmo vale para as op ~oes de venda, tro ando a letra C
pela letra P . Por exemplo, Ca (t) indi a o pr^emio de uma all sobre o ativo A na data t, e Pb (t)
indi a o pr^emio de uma put sobre o ativo B, na data t.
Portanto, as taxas de retorno das op ~oes de ompra (assinadas na data t0) que t^em A e B
omo a o~es-objeto ser~ao dadas por
a

r a =

(max(Sa(t0 )ex
= (max(Sb(t0 )ey

Ka (t0 ); 0) Ca (t0 ))=Ca (t0 )

r b

Kb (t0 ); 0) Cb (t0 ))=Cb (t0 )

(2.10)

Do mesmo modo para as puts,


rpa =

(max(Kap(t0 )
= (max(Kbp(t0 )

Sa (t0 )ex ; 0) Pa (t0 ))=Pa (t0 )

rpb

Sb (t0 )

ey ;

0)

Pb (t0 ))=Pb (t0 )

(2.11)

10

Criterio Media-Vari^an ia para Portfolios

Quando n~ao houver duvidas quanto as datas que estamos usando, omitiremos a letra t dos
pr^emios, dos pre os de exer  io e das ota ~oes dos ativos para n~ao sobre arregar a nota ~ao.
Uma outra forma de es rever as express~oes 2.10 e 2.11 e de nir os domnios das v.a. x e y
nos quais o termo max(S0 exp(x) K; 0) e positivo.
K; 0) > 0

() x > ln

K
S

S exp(x); 0) > 0

() x < ln

K
S

max(S exp(x)
max(K
por

(2.12)

Considerando 2.12 nas express~oes 2.10 e 2.11, rede nimos as taxas de retorno das op ~oes
r a =

r b =

rpa =

rpb =

8
1
>
< Ca (t0 )
>
:

Ka (t0 )
Sa (t0 )

< x < +1

. .
(Sb(t0 )ey

Kb (t0 ) Cb (t0 ))

se ln

Kb (t0 )
Sb (t0 )

< y < +1

. .

(Kap(t0 )

Sa (t0 )ex Pa (t0 ))

se

1 < x < ln

8
1
>
< Pb (t0 )
>
:

se ln

8
1
>
< Pa (t0 )
>
:

Ka (t0 ) Ca (t0 ))

8
1
>
< Cb (t0 )
>
:

(Sa (t0)ex

Kap (t0 )
Sa (t0 )

. .
( (t0 )

Sb (t0 )

Kbp

Pb (t0 ))

ey

se

1 < y < ln

Kbp (t0 )
Sb (t0 )

(2.13)

. .

Sendo  o oe iente de orrela ~ao entre os pre os dos ativos A e B,  6= 1, a fun ~ao
densidade de probabilidade onjunta de x e y e dada por
f (x; y)

= 2 

1p

a b

2

exp

2(1

2 )



x a
a

2

 x aa y bb

y b
b

2 

Nas proximas se ~oes derivaremos as express~oes dos valores esperados das taxas dadas em 2.13
e das ovari^an ias entre elas, para o aso deste portfolio exemplo. Isto sera usado no ^omputo
do retorno esperado (Rp) e da vari^an ia (p) do portfolio.
Mas, antes, vamos abordar o modelo de Markowitz para analise de portfolios e inserir Rp e
p neste ontexto.

2.2 O Modelo de Markowitz

11

2.2 O Modelo de Markowitz

Quanti ar uma medida para o ris o de um investimento e tarefa perseguida ha muito tempo,
mas foi nos anos 50 que Harry M. Markowitz de niu um retorno esperado e uma medida para o
ris o de um portfolio. Ele mostrou que a vari^an ia do retorno era uma medida signi ativa do
ris o do portfolio, sob determinadas hipoteses. Tambem de niu formulas para o al ulo desta
vari^an ia.
As hipoteses basi as nas quais o modelo esta baseado referem-se ao omportamento do investidor.
2.2.1 Prefer^en ias de Ris o e Fun ~ao Utilidade

Quando as pessoas investem em a ~oes ou outros ativos de ris o, elas esperam obter um retorno
maior do que elas teriam se tivessem investido num ativo livre de ris o.
Investimentos que ofere am uma alta taxa de retorno v^em sempre a ompanhados de uma
alta taxa de ris o. E nem todas as pessoas est~ao dispostos a orrer altos ris os.
De um modo geral, podemos ara terizar os nveis de propens~ao ao ris o por parte do investidor de tr^es formas:
 avers~ao ao ris o: o indivduo prefere um retorno menor, porem mais garantido do que
arris ar-se muito para ter han e de altos retornos;
 propens~ao ao ris o: o indivduo esta mais interessado em maximizar os lu ros, n~ao se
importando muito om as han es de perdas;
 neutralidade ao ris o: o indivduo n~ao se importa muito em obter um resultado erto ou
parti ipar de um jogo, desde que os dois ofere am o mesmo retorno.
O on eito de utilidade serve para des rever estas prefer^en ias dos indivduos. Utilidade e
o nvel de satisfa ~ao que uma pessoa (no aso o investidor) tem ao fazer um erto investimento
(ou onsumir um bem ou exer er uma atividade). Ja a fun a~o utilidade mede numeri amente
esta satisfa ~ao.
No aso das 3 ategorias itadas a ima, uma pessoa que tenha avers~ao ao ris o tera uma
fun ~ao utilidade ^on ava em rela ~ao a origem, no espa o utilidade  retorno ( g2.1 (a)). Ja
para o indivduo propenso ao ris o, a fun ~ao sera ^on ava em rela ~ao a origem ( g2.1 (b)). E
para o neutro ao ris o, a fun ~ao sera linear ( g2.1 ( )).
Uma hipotese importante na teoria de portfolios e esperar que o investidor queira maximizar
os retornos de seus investimentos, para uma dada taxa de ris o. E onsiderar tambem que os
ativos e derivativos formadores da arteira interagem entre si, para a partir da quanti armos
o ris o total do portfolio.
O modelo de Markowitz baseia-se ainda nas seguintes hipoteses:
1. investidores onsideram ada investimento representado por uma distribui ~ao de probabilidade dos retornos esperados para um uni o perodo;

12

Criterio Media-Vari^an ia para Portfolios


U

R
(a)

R
(b)

R
(c)

Figura 2.1: utilidade


2.
3.
4.
5.

investidores maximizam a fun ~ao utilidade esperada;


investidores estimam o ris o do portfolio baseados na variabilidade dos retornos;
as urvas utilidade s~ao fun ~oes do retorno esperado e da vari^an ia do portfolio;
para um dado nvel de ris o, investidores preferem altos retornos a baixos. Analogamente,
para um dado nvel de retorno esperado, ha prefer^en ias por menores ris os.

Sob estas onsidera ~oes, um portfolio e onsiderado e iente se n~ao ha outro que ofere a um
retorno esperado maior om a mesma taxa de ris o; ou se n~ao ha outro que ofere a menor ris o
a uma mesma taxa de retorno esperado.
N~ao espe i aremos qual a fun ~ao utilidade U do retorno a ser usada na sele ~ao de portfolios
(isto a a riterio do investidor). Mas omo partiremos do prin pio que estamos trabalhando
om investidores aversos ao ris o, podemos espe i ar algumas propriedades de U:
(a) U 0 (Rp) > 0 (utilidade marginal da riqueza3 e positiva)
(b) U 00 (Rp) < 0 (utilidade marginal da riqueza de res e om um res imento da riqueza)
( ) dRd [ U 00 (Rp)=U 0 (Rp)  0 (avers~ao ao ris o absoluta marginal de res endo om o res imento da riqueza)
p

Portanto, vamos onsiderar um investidor que pro ure maximizar o valor esperado de alguma
fun ~ao utilidade U = U (Rp), onde Rp e o retorno do portfolio no perodo onsiderado.
Markowitz usou uma aproxima ~ao quadrati a da fun ~ao utilidade para gerar um onjunto de
portfolios e ientes no espa o retorno esperado  ris o (E [Rp  p ). A aproxima ~ao e baseada
na expans~ao em serie de Taylor de U em torno do retorno esperado (Ep = E [Rp) do portfolio4:
3
4

Neste aso, a riqueza e o retorno obtido do portfolio


veremos adiante omo al ular a esperan a do retorno no aso do portfolio didati o.

2.2 O Modelo de Markowitz

13

1
2

U (R p ) 
= U (Ep) + U (Ep)(Rp Ep) + U (Ep )(Rp Ep)2

(2.14)

E [U (Rp ) 
= U (Ep) + 1 U 00 (Ep)p2

(2.15)

e portanto,
2

00

onde E e o operador esperan a.


Neste aso, a utilidade esperada do portfolio foi aproximada por uma fun ~ao que so depende
do retorno esperado e da vari^an ia do portfolio. Se onsiderarmos que a aproxima ~ao 2.15 e
razoavel 5, e mais onveniente determinar os portfolios e ientes no espa o E [Rp  p do que
no espa o U (Rp)  p. Passaremos a trabalhar om a fun ~ao
f (Ep ; p2 ) = Ep p2

(2.16)
Um portfolio e iente, obtido pela maximiza ~ao de f , que minimiza a vari^an ia para um dado
retorno esperado forne e uma boa aproxima ~ao para a maxima utilidade esperada E [U (Rp ).
A onstante  e interpretada omo um par^ametro de pondera ~ao entre o retorno esperado
e o ris o do portfolio. E um par^ametro de propens~ao ao ris o. Quanto mais alto o valor de ,
mais importante e o retorno esperado em ompara ~ao a vari^an ia do portfolio para o investidor.
Ha onvenientes em se trabalhar om a analise E [Rp  p no lugar de maximizar diretamente
a fun ~ao utilidade:
1. fa ilidade na obten ~ao de maximos e mnimos de fun ~oes onvexas;
2. generalidade do modelo, no sentido deste adaptar-se a mais de um tipo de fun ~ao utilidade (quando esta fun ~ao utilidade pode ser aproximada razoavelmente por uma fun ~ao
quadrati a).
A gura 2.2 ilustra diferentes graus de avers~ao ao ris o, mas todos os gra os referem-se a
indivduos aversos ao ris o.
As retas dos gra os (a), (b) e ( ) representam urvas6 de indiferen a, ao longo das quais
o mesmo nvel de utilidade (ou satisfa ~ao) e obtido. Mas quanto mais a esquerda esta a reta,
maior e a utilidade que ela representa. O gra o (a) representa uma avers~ao ao ris o maior
do que os gra os (b) e ( ). Mas em todos eles o objetivo do investidor e sempre maximizar a
utilidade, ou seja, minimizar os valores de i.
Para um ponto (e; v) 2 (Ep  p2 )
1 = j e (0 < j <  )
v i =
tan( j )
2
5
isto vai depender de qu~ao bem omportada for a fun ~ao utilidade para admitir uma aproxima ~ao quadrati a
su ientemente boa.
6
No espa o Ep  p2

14

Criterio Media-Vari^an ia para Portfolios


Ep

Ep

U1

U2

1
3

2
3
4

(a)

p2

(b)

Ep

U3

1
2
3
4

(c)

Figura 2.2: urvas (linhas) de indiferen a no espa o p2  Ep


ou ainda
i = v  j e

onde j = tan(1 ) (0 < j < +1) .


Portanto, o problema de en ontrar portfolios e ientes no espa o E [Rp  p2 resume-se a
minimizar os valores de , isto e,
j

minf

e + vg

ou
maxfEp

p2 g

2.2 O Modelo de Markowitz

15

2.2.2 Ris o e Retorno de Portf


olios

Seja P um portfolio formado por n ativos (aqui o ativo pode ser uma a ~ao, uma op ~ao,et ).
Denotemos por wi a fra ~ao do total do investimento W do portfolio atribuido ao ativo i. Temos,
ent~ao, a restri ~ao
n
X
i=1

wi = 1

(2.17)

Denote por Rp o retorno do portfolio e por Ri a taxa de retorno do i-esimo ativo.


Rp sera a media ponderada dos retornos dos ativos
Rp =

n
X
i=1

wi Ri

Denote por p2 a vari^an ia do portfolio P. Vamos supor que onhe emos as ovari^an ias (ij )
entre as taxas de retorno dos ativos i e j (i; j = 1::n).
Da mesma forma que al ulamos a vari^an ia dos ativos pela express~ao
i2 = E [(Ri E (Ri ))2

podemos al ular

p2 = E [(Rp E (Rp ))2

Denote E (Ri ) por Ri.


De 2.17 e das propriedades do operador E temos
p2 = E [(

n
X
i=1

wi Ri E (

n
X
i=1

n
X

wi Ri ))2 = E [(

i=1

n
X

wi Ri

i=1

wi R i )2 = E [(

n
X
i=1

wi (Ri R i ))2

Para o aso parti ular n = 2 temos


p2 =

2 X
2
X
wi2 i2 + 2
wi wj ij
i=1 j =1;j 6=i
i=1

2
X

Por indu ~ao, para um portfolio om n ativos, sua vari^an ia e dada por
n

X X
X
wi wj ij
p2 = wi2 i2 + 2
i=1 j =1;j 6=i
i=1

(2.18)

16

Criterio Media-Vari^an ia para Portfolios

Podemos expressar 2.18 de forma matri ial. Denote por w o vetor de pesos do portfolio, z o
vetor de retornos esperados de ada ativo do portfolio e  a matriz de ovari^an ia destes ativos.
Desta forma, o retorno esperado do portfolio e sua vari^an ia pode ser es rito omo
R p
p2

= w00 z
(2.19)
= w w
onde w; z 2 <n;  2 <nn e o smbolo (0) indi a opera ~ao de transposi ~ao.
Sendo 1 o vetor n  1 onde ada elemento do vetor e o numero 1, a restri ~ao 2.17 e dada
por
w0 1 = 1
2.2.3 Sele ~ao de Portfolios

Agora ja temos todas as informa ~oes ne essarias para que o investidor, de a ordo om o seu
per l, possa sele ionar um portfolio. Temos variaveis de de is~ao w1 ::wn, a fun ~ao objetivo a ser
minimizada, dada por


n
X
i=1

X X
wi wj ij
wi R i +

i=1 j =1;j

e a restri ~ao linear


n
X
i=1

wi = 1

Podemos ter outras restri ~oes lineares, por exemplo geradas por limita ~oes de aquisi ~ao de
ativos impostas pelo proprio mer ado nan eiro, da forma
Ew = e

e
Dw  d
onde d e e s~ao vetores de limita ~oes de investimento para determinadas ombina ~oes de
ativos, dadas pelas matrizes E e D.
Sem perda de generalidade, admitiremos sempre quantidades n~ao negativas de ada ativo.
Assim, o problema de programa ~ao matemati a que obtemos neste modelo e o seguinte:
8
>
>
>
>
<
>
>
>
>
:

min

s:a

w0 z + w0 w
Dw  d
Ew = e

w0 1 = 1
w0

(2.20)

2.2 O Modelo de Markowitz

17

Este e um problema quadrati o parametri o e ada solu 0~ao otima representa


um portfolio
0
2
ujo retorno esperado e vari^an ia s~ao dados por Rp() = w() z e p () = w() w(). A urva
R p() versus p() e denominada fronteira e iente do modelo.
Obter os valores z e p2 n~ao e tarefa fa il no aso de portfolios mistos (ativos e derivativos
quaisquer).
Mas para o nosso portfolio didati o formado por a ~oes e op ~oes europeias, al ularemos as
express~oes da esperan a das taxas dadas em 2.13 e suas respe tivas ovari^an ias. E o que
faremos a seguir.
2.2.4

Express~oes do Valor Esperado das Taxas de Retorno e Covari^an ias de


A ~oes e Op ~oes

Vamos voltar ao portfolio didati o da se ~ao 2.1.3, formado pelos ativos A e B e por op ~oes sobre
estes ativos. Manteremos a nota ~ao introduzida naquela se ~ao, om a ex e ~ao de que omitiremos
o termo t0 (data de assinatura das alls e das puts). Portanto os pre os das a ~oes ser~ao dados
por pSa e Sb, os pr^emios das op ~oes por Ca, Cb , Pa e Pb e os pre os de exer  io por Ka , Kap, Kb
e Kb . Re omenda-se voltar aquela se ~ao para rever as de ni ~oes e nota ~oes usadas .
Vale lembrar ainda que dada uma v.a ontnua x em < e sua respe tiva fun ~ao densidade de
probabilidade p(x), a esperan a de uma fun ~ao g(x) e dada por
E [g(x) =

+1
1

g(x)p(x) dx

Em virtude das repeti ~oes dos al ulos algebri os que envolvem a dedu ~ao das express~oes das
ovari^an ias, detalhamos esses al ulos em algumas delas. As demais usam ra io nio analogo.
Esperan a das taxas de retorno
Nota ~ao: erf(a) = Ra+1 exp(
sa

2) d

E [rsa =

+1

1
+1

exp(x)f (x) dx 1



Z
1
(
x a )2
=  p2
dx 1
exp x
2a2
1
a
Z
1=00 exp 21pa2 + a +1 exp t2  dt 1

1


1
= exp a + 2 a2 1

18

Criterio Media-Vari^an ia para Portfolios

 a

Z +1
1
= E [r = Ca  (Sa exp(x)
a

1=00

Ka )f (x) dx

ln KSaa
+1



Z
(
x a )2
Sa
p
  exp x
2a2 dx
Ca a 2 ln KSaa


Z +1
Ka
(
x  a )2
p
dx 1
  exp
2a2
Ca a 2 ln KSaa


Sa
1
exp
a + a2
2Ca
2

1 (K )  1
2C a



erf

erf

1p ln  Ka 
Sa
a 2

1p ln  Ka 
Sa
a 2

2



2

a



Mudan a de variavel usada:


8
>
<

=  1p2 (x

a a2 )

=  1p2 (x

a )

100 : >

pa

ln

p
Ka
Sa

E [rpa =

1=00

1 (K p)exp a + 1 2  1 + erf  1p ln  Kap 


2Pa a
2 a
Sa
 2
Sa
2Pa

Pa

1 + erf

(Kap

Sa exp(x))f (x) dx

1p ln  Kap 
Sa
a 2

2
a



a

2



Covari^an ias
No lugar de al ularmos as express~oes de ori^an ias para as taxas de retorno simples dadas
pre o nal ) de a ~oes e op ~oes,
em 2.13, deduziremos express~oes para o retorno simples (= pre
o ini ial
sendo a diferen a entre as duas grandezas apenas uma onstante, isto e,
Taxa de retorno simples = Retorno simples - 1.

2.2 O Modelo de Markowitz

19

O resultado numeri o de ovari^an ias n~ao muda, visto que para duas v.a. X e Y e onstantes
k1 e K2 vale a igualdade
ov(X + k1 ; Y + k2 ) = ov(X; Y ):
 Cov(rsa ; rsb )
ov(rsa ; rsa )

E2x

+1
1

=
=

var(rsa )
E2x Ex2

exp(2x)f (x) dx



Z +1
1
(
x a )2
=  p2
exp 2x
2a2 dx
1
a
Z
2=00 p1 exp 2 + 22  +1 exp( 2 ) d
a
a


2

= exp 2a + 2a


Ex

= exp


a + 0:5a2

onde 2" indi a a mudan a de variavel


=x

a 2a2
p
a 2

Logo,

var(rsa ) = exp 2a + a2

exp(a2 ) 1

 Cov(rsa ; rsb )
ov(rsa ; rsb )

=
=

E [rsa rsb E [rsa E [rsb


Exy Ex Ey

20

Criterio Media-Vari^an ia para Portfolios

sendo
Exy

=
=
3=00
4=00

5=00

=
Ex

+1 Z +1
1

f (x; y)exp(x + y) dy dx
Z

+1 Z +1

exp(x + y)
2ab 1 2 1 1

x a y b y b 2
x a 2
1
+ (  ) dy dx
 exp 2(1 2 ) (  ) 2 
b
a
a
b


Z +1 Z +1
1
exp(pa + b)
2
2
exp a u + bv 2(1 2 ) (u 2uv + v ) dv du
2 1 2 1 1
1p exp a +  + 1 2 (1 2)
b
b
2
 2 Z

Z +1
+1
2
exp( ) d exp( 21 (u2 2u(a + b))) du

1
1

 Z +1
1
1
1
2
2
2
p exp a + b + 2 b (1  ) + 2 (a + b )
exp( 2 ) d
1


exp a + b + 21 (b2 + a2) + ab 
p

+1 Z +1
1

f (x; y)exp(x) dy dx



Z +1 Z +1
exp(
a )
1
2
2
p
exp a u 2(1 2) (u uv + v ) dv du
2 1 2 1 1
1 exp(a ) Z +1 Z +1 exp( 2 ) d  exp( 1 (u2 2ua )) du
6=00 p
2
 2
1
1

 Z +1
7=00 p1 exp  + 1 2
2
a

2 a 1 exp( ) d


= exp a + 21 (a2 )

3=00

Ey

= exp(b + 12 b2)

Mudan as de variavel:

2.2 O Modelo de Markowitz

21

8
<

300 : :
400 :

= (x
= (y

u
v

= p2(11
500 :

2 )

a )=a
b )=b

p1 (u a b)

w=

= p2(11

600 :
700 :

u b (1 2 ))

(v

w=

2 )

(v

u)

p1 (u a )

Portanto,
ov(rsa ; rsb ) = exp(a + b +

1 (2 + 2))(exp(a  ) 1))


b
2 a v

 Cov(rsa ; r a )
ov(rsa ; r a )

= C1 fSaE2x
a

Ka Ex g sa  a

onde
E2x


1
2
= 2 exp(2a + 2a ) 1

Ex


1
1
2
= 2 exp(a + 2 a ) 1

erf
erf

1p ln  Ka 
Sa
a 2

1p ln  Ka 
Sa
a 2

a

2 2

a

2





22

Criterio Media-Vari^an ia para Portfolios

 Cov(rsa ; rpa )
ov(rsa ; rpa )

= P1 f
a

Sa E2x + KapEx g sa pa

onde
E2x



  p
1
1
2
= 2 exp(2a + 2a ) 1 + erf  p2 ln KS a
a
a

Ex



  p
1
1
1
2
= 2 exp(a + 2 a ) 1 + erf  p2 ln KS a
a
a

a

22

a

2





 Cov(rsa ; r b )
ov(rsa ; r b )

= C1 fSbExy
b

sa
fS E
Cb b y

Ex Kb g  b Ex

Kb E1 g + sa  b

onde
Rb
Exy

 
= 1 (ln KS b

b )


1
1
2
2
= 2 exp(a + b + 2 (a + b ) + a b) 1

Ex


1
1
2
= 2 exp(a + 2 a ) 1

Ey


1
1
2
= 2 exp(b + 2 b ) 1

Ex

= 12 exp(a + 12 a2 )

erf

erf

p1
2

Rb

p1 (Rb
2

erf


2



b )



p1 (Rb
2

b a )



2.2 O Modelo de Markowitz

E1


= 21 1

erf

23

p1 (Rb )



 Cov(rsa ; rpb )

= P1

ov(rsa ; rpb )

SbExy + Ex Kbp

sa
f SbEy + Kb E1 g + sapb
Pb

pb Ex

onde
Rbp
Exy

 p
1
=  (ln KSb

b )



1
1
2
2
= 2 exp(a + b + 2 (a + b ) + ab ) 1 + erf p12 (Rb

Ex



1
1
2
= 2 exp(a + 2 a ) 1 + erf p12

Rbp

Ey



= 12 exp(b + 12 b2 ) 1 + erf p12

Rbp b

Ex

= 12 exp(a + 12 a2 )

E1




1
1

p
= 2 1 + erf 2 (Rb )

a

b a )









 Cov(r a ; rpa )
ov(r a ; rpa ) =

onde

8 1 
< Ca Pa
:

Sa2 E2x + Sa Ex (Ka + Kap ) Ka KapE1

 a pa ;

 a pa ;

se

Ka > Kap

se

Ka  Kap

24

Criterio Media-Vari^an ia para Portfolios

E2x

= 12 exp(2a + 2a2 )


  p
1
 erf p ln KS a
 2
a

Ex

= 12 exp(a + 21 a2 )


  p
 erf 1p ln KS a
 2
a

E1

  p


1
1
= 2 erf  p2 ln KSaa
a

a

22

erf

a a2
a







erf

erf


1p ln  Ka 
Sa
a 2

1p ln  Ka 
Sa
a 2

1p ln  Ka 
Sa
a 2

a

a

a a2


 Cov(r a ; r b )
ov(r a ; r b )

fS S E SaExKb Sb Ey Ka g
Ca Cb a b xy
 b 
 a 
(S E Kb E 1 ) +  a b
(
Sa Ex Ka E1 )
Ca
Cb b y

onde
Ra

 
1
=  (ln KS a

a )

Rb

 
1
=  (ln KS b

b )

Exy

= 2p12 exp(a + b + 21 (a2 + b2 ) + a b)


"
Z +1 (
1 erf p2(11 2 ) (Rb b(1

R
exp( 12 (u a b)2 ) du

a

Ex

= 2p12 exp(a + 12 a2)

2 ) u)

#)

2 2





2.2 O Modelo de Markowitz

25

+1 (

"

1 erf p 1

2(1
R
 exp( 21 (u a )2) du
Z

Ey

= 2p12 exp(b + 21 b2 )


"
Z +1 (
1 erf p2(11

R
 exp( 12 (u b)2 ) du

a

E1

Z +1
1
1
= 2p2
R

a

"

erf


1
1
2
Ex = exp(a + a ) 1
2
2

E1


= 21 1

erf

erf

2 )

#)


Rb u b (1 2 )

1
p
2(1

erf

u)

(R u)
2 ) b

p1 (Ra
2

p1 (Rb
2

#)

exp( 12 u2) du



a )



Ra
p


E y = 1 exp(b + 1 b2 ) 1
2
2

E 1 = 1 1
2

2 )

#)

Rb

Rb

erf



b )



 Cov(r a ; rpb )
ov(r a ; rpb )

Sa Sb Exy + Sa Ex Kbp + Sb Ey Ka Ka KbpE1


Ca Pb
pb 
(S E Ka E1) P a ( SbE y + KbpE 1 ) +  apb
Ca a x
b

onde
Ra

 
1
=  (ln KS a

a )

26

Criterio Media-Vari^an ia para Portfolios

 p
1
=  (ln KS b

Rbp

b )

Os valores de Exy , Ex, Ey , E1 , Ex ,E1 ,E x e E 1 s~ao iguais pas express~oes de ov(r ; r ),
tro ando o sinal da fun ~ao erf e tro ando tambem Rb por Rb .
 Cov(rp ; rp )
a

ov(rpa ; rpb )

Sa Ex Kbp Sb Ey Kap + Kap KbpE1



KapE1 ) + pa (Sb E y Kbp E 1 ) + pa pb
Pb

Sa Sb Exy

Pa Pb
+ Ppba (Sa Ex

onde
Rap

 p
1
=  (ln KSaa

a )

Rbp

 p
1
=  (ln KSb

b )

Exy

= 2p12 exp(a + b + 21 (a2 + b2 ) + a b)


"
Z R (
1 + erf p 1 2 (Rbp b (1 2 )

2(1  )
1
exp( 12 (u a b)2 ) du
p
a

Ex

= 2p12 exp(a + 21 a2)


"
Z R (

1 + erf p2(11
1
 exp( 12 (u a )2) du
p
a

Ey

= 2p12 exp(b + 21 b2 )

2 )

Rbp u

#)


u)

#)

2.2 O Modelo de Markowitz

27

Z Rpa (

"

1 + erf p 1

2(1
1
 exp( 21 (u b)2 ) du
(

Z R
1
p
= 2 2
1 + erf
1
p
a

E1

"

2 )

u b (1

Rbp

1
p
2(1

2 )

Rbp



Ex = 1 exp(a + 1 a2 ) 1 + erf p1 (Rap
2
2
2

u

a )


2 )

#)

#)

exp( 21 u2 )

du




 p 
R
1
1
+
erf pa
E1 =
2
2


E y = 1 exp(b + 1 b2 ) 1 + erf p1
2
2
2

Rbp

b







E 1 = 1 1 + erf pRbp
2
2

 Cov(r a ; r a )
1

Neste aso, vamos al ular a ovari^an ia entre as taxas de retorno de duas op ~oes de
ompra sobre o mesmo ativo A, mesma data de expira ~ao, mas om pre os de exer  io
diferentes e, portanto, pr^emios diferentes.
Sejam K1 e K2 os pre os de exer  io e C1 e C2 os pr^emios das alls.
ov(r a ; r a
1

) =

C1 C2

Sa2 E2x Sa Ex (K1 + K2 ) + K1 K2 E1

 1  2

K = maxfK1 ; K2 g

onde
E 2x


1
2
= 2 exp(2a + 2a ) 1

erf

1p ln  K 
Sa
a 2

a

2 2
a



28

Criterio Media-Vari^an ia para Portfolios

Ex


= 21 exp(a + 12 a2) 1

E1


1
= 2 1

erf

erf

1p ln  K 
Sa
a 2

1p ln  K 
Sa
a 2

a

a a2





 Cov(rpa ; rpa )
1

Aqui al ulamos a ovari^an ia entre as taxas de retorno de duas op ~oes de venda sobre o
mesmo ativo A, mesma data de expira ~ao, mas om pre os de exer  io e pr^emios diferentes.
Sejam K1p e K2p os pre os de exer  io e P1 e P2 os pr^emios das alls.
ov(rpa ; rpa
1

) =

P1 P2

Sa2 E2x Sa Ex (K1p + K2p) + K1pK2p E1

p1 p2

K = minfK1p; K2p g

onde
E 2x



  
1
1
2
= 2 exp(2a + 2a ) 1 + erf  p2 ln SK
a
a

Ex



  
1
1
1
2
= 2 exp(a + 2 a ) 1 + erf  p2 ln SKa
a

E1



  
1
1
= 2 1 + erf  p2 ln SK
a
a

 Cov(r aT ; r a )

a

a

2 2

a

2







Neste aso al ulamos a ovari^an ia entre duas op ~oes de ompra sobre o mesmo ativo,
mas om datas de expira ~ao diferentes (dadas por T e  ,  < T ).
Suponha que temos a informa ~ao
S (T ) 
xT = ln a
= N (; 2 )
Sa (t0 )
Denote por x o retorno logartimi o do ativo no perodo t0 a  e xT  o retorno logartimi o
do ativo no perodo  a T . Ent~ao

2.2 O Modelo de Markowitz

29

x
xT

= ln SSa((t )) = N ( ; 2 )


a

= ln SaS(Ta( ) ) = N (T

 ; T 

onde

2

=
=

T

T2




T

T2
T
T
T
T
T
T2
T

T

t0
t0
t0
t0

t0

t0

E a orrela ~ao entre x e xT e dada por


orr(xT ; x ) =

T2 + 2 T2


2T 

Desta forma, podemos al ular a ovari^an ia entre as duas op ~oes usando a mesma express~ao da Cov(r ; r ), onsiderando x = xT , y = x e  = orr(xT ; x ).
 Cov(rp ; rp )
Idem ao aso anterior, onde a express~ao usada para o al ulo da ovari^an ia e a dada por
Cov(rp ; rp ).
 Cov(r ; rp )
Idem aos asos anteriores, usando a express~ao dada em Cov(r ; rp ) para o al ulo da
ovari^an ia.
a

a

aT

aT

a

Exemplos de portfolios e ientes gerados pela resolu ~ao do problema 2.20 ser~ao dados no
aptulo 6. O tratamento numeri o das integrais envolvidas nas express~oes de ovari^an ia, dadas
a ima, sera feito no aptulo 4.

30

Criterio Media-Vari^an ia para Portfolios

Cap
tulo 3

Assimetria de Portfolios
No aptulo anterior vimos omo otimizar portfolios om riterios baseados em media e vari^an ia,
onsiderando ertas hipoteses sobre o omportamento de um investidor que objetiva maximizar
o valor esperado de alguma fun ~ao utilidade U (R), onde R e a taxa de retorno do portfolio em
1 perodo. Tambem utilizamos uma aproxima ~ao quadrati a para a fun ~ao utilidade e supomos
um distribui ~ao lognormal para o retorno de a ~oes de ris o do mer ado.
Nosso objetivo agora e estender estes resultados usando, alem do valor esperado do retorno
do portfolio e de sua vari^an ia, o seu ter eiro momento entral, a assimetria do retorno do
portfolio em rela ~ao ao seu primeiro momento.
Veremos neste aptulo omo al ular assimetria e o-assimetria para o aso de portfolios
mistos de a ~oes e op ~oes europeias de forma exata, omo no aso das ovari^an ias do aptulo 2.
No aptulo 6 veremos exemplos de portfolios e ientes no espa o retorno  ris o  assimetria.
3.1 Sele ~ao de Portfolios e Momentos de Ter eira Ordem

Continuaremos a trabalhar om a teoria de utilidade sob in erteza (isto e, o omportamento do


investidor segue regras probabilsti as) e onsiderar que o indivduo queira maximizar a utilidade
esperada da riqueza.
Vamos ver omo assimetria enquadra-se no omportamento do investidor e qual a sua in u^en ia na utilidade esperada.
Para um portfolio formado por n ativos de ris o, os tr^es primeiros momentos do retorno Rp
do portfolio s~ao dados por:
R p = E [Rp =

n
X
i=1
n

wi R i
n

XX
wi wj ij
p2 = E [(Rp R p )2 =
i=1 j =1

31

32

Assimetria de Portfolios

XXX
wi wj wk mijk
m3p = E [(Rp R p )3 =
i=1 j =1 k=1

onde
R i

= retorno esperado do i-esimo ativo


ij = ovari^an ia entre o retorno do i-esimo e do j-esimo ativo
mijk = o-assimetria2 entre o retorno do i-esimo, j-esimo e o k-esimo ativo
wi = fra ~ao do total do investimento atribuido ao i-esimo ativo.
A expans~ao da fun ~ao utilidade U em serie de pot^en ias em torno do retorno esperado do
portfolio e dada por
U (Rp )

U 000 (R p )
U 00 (R p )
0
 3
(
Rp R p )2 +
U (R p ) + U (R p )(Rp R p) +
2!
3! (Rp Rp)
(n 1) 
+    + U (n (1)!Rp) (Rp R p)n 1 + rn

(3.1)

onde
rn =

U n ( )
(Rp R p)n
n!

 2 (Rp ; Rp )

Desta forma, a fun ~ao utilidade torna-se um polin^omio de grau n em Rp. Este numero n
pode variar ate obtermos pre is~ao su iente na aproxima ~ao. Como as fun ~oes utilidade que
melhor representam o omportamento de um investidor averso ao ris o s~ao fun ~oes do tipo
exponen ial negativa U (y) = K (1 e y ) e a logartmi a U (y) = log(y), que s~ao fun ~oes suaves,
usar aproxima ~oes om n  3 na expans~ao de Taylor e satisfatorio. Mas se n~ao restringirmos
o omportamento destas fun ~oes utilidade, aproxima ~oes mais pre isas s~ao ne essarias. Isto
envolve al ulos de momentos de ordem maior ou igual a 3, e omo veremos no al ulo de
assimetrias, esta tarefa pode ser bastante dif il.
Aproximando U por um polin^omio de ter eira ordem, a utilidade esperada do portfolio sera
dada por
U 00 (R p )
U 000 (R p )
2



 3
E [U (Rp ) = E [U (Rp ) +
2! E [(Rp Rp) + 3! E [(Rp Rp)
U 00 (R p ) 2 U 000 (R p ) 3


= U (Rp) + 2! p + 3! mp

Aqui assimetria (skewness) e de nido omo o ter eiro momento entral n~ao normalizado

(3.2)

3.1 Sele ~ao de Portfolios e Momentos de Ter eira Ordem

33

De a ordo om as hipoteses sobre o omportamento de um investidor averso ao ris o, a


propriedade ( ) ( aptulo 2) e satisfeita se
d
00 0
[
U =U
dRp

+ U 00 2)=U 0 2  0
() U 0 U 000 + U 00 2  0
() U 000  (U 00 2 = U 0 ) < 0
() U 000 > 0

= (

0 000

UU

Ou seja, para uma pessoa om de res ente ou onstante avers~ao absoluta ao ris o, U 000 deve
U > 0).
ser positivo, o que impli a numa prefer^en ia por skewness positivo ( m
A equa ~ao 3.2 mostra que a in u^en ia do skewness m3p sobre a utilidade esperada e positiva.
Logo, supondo que as prefer^en ias do investidor s~ao dadas pela fun ~ao utilidade U =
U (R p ; p2 ; m3p ), o onjunto de portfolios otimos devera
3

 maximizar m3p para Rp e p2 xos


 maximizar Rp para m3p e p2 xos
 minimizar p2 para Rp e m3p xos.

Para quanti ar as prefer^en ias de um investidor quanto a propens~ao ao ris o, nossa fun ~ao
objetivo a ser maximizada sera dada por
3
p p2 + m
max RP
P pP
P P P
= max P
 i wi zi
i j wi wj ij + i j k wi wj wk mijk
>
s:a
>
i wi = 1
:
wi  0
(i = 1::n)
8
>
>
<

(3.3)

Os par^ametros  e ponderam, respe tivamente, a taxa de retorno esperada e assimetria do


portfolio.
Agora nossa fun ~ao objetivo e um problema de programa ~ao n~ao linear. Para resolv^elo, xaremos  e usaremos o solver MINOS do GAMS, e ada solu ~ao otima representa um
portfolio ujo retorno esperado, vari^an ia e assimetria ser~ao dados por R p = w( )z , m3p =
P P P
2
i j k wi ( )wj ( )wk ( )mijk e p = w( )w( ). Observe que, variando  , teremos uma
superf ie e iente no espa o retorno  ris o  assimetria.
Podemos ainda defender o uso do ter eiro momento na otimiza ~ao de portfolios pelo fato
de que os ativos e derivativos que omp~oem as arteiras t^em retornos assimetri os. Para os
pre os das a ~oes supomos um omportamento log-normal e o retorno de op ~oes ( g3.1) tem um
omportamento assimetri o.

34

Assimetria de Portfolios
rc

kc (t0)

-1

Figura 3.1: taxa de retorno de uma all


Vamos agora deduzir as express~oes de o-assimetria para o aso de portfolios formados por
a ~oes e op ~oes.
3.2 Express~oes de Co-assimetrias

Vamos agora voltar ao exemplo didati o de portfolio da se ~ao 2.1.3 e amplia-lo para onter
tr^es tipos de ativos basi os, a ~oes A, B e C , e op ~oes europeias sobre estas a ~oes. Os retornos
logartmi os das a ~oes s~ao dados por
=

ln

S (T )
ln
S (t0 )

Sa (T )
Sa (t0 )

S (T )
ln b
Sb (t0 )





= N (a; a2 )
= N (b ; b2 )
= N ( ;  2 )

e fun ~ao densidade de probabilidade onjunta dada por


f (x; y; z )

1p



=    8 exp
h
exp 2 x   y  (a b
a b

2

2 ) +

(1 b
ab ) + 2 x  

x a
a

x b
b

z 


2

(ab b

( 1 < x; y; z < +1)


onde

(1

2a ) +

a ) + 2

x  2

y b z 
a b


2

(1 ab ) 
i
(a ab b )

3.2 Express~oes de Co-assimetrias


ab ; a ; b

= 1 + 2ab b a

35

2ab 2b 2a

= oe iente de orrela ~ao entre x e y, entre x e z e entre y e z, respe tivamente.

Vamos denotar assimetria pela letra m. Por exemplo,


m(rs ; rs ; rs ) = E [(rs E (rs ))(rs E (rs ))(rs
a

E (rs ))

e a o-assimetria entre os retornos rs ; rs e rs dos ativos A, B e C .


Aqui estamos supondo que os ativos A; B e C s~ao distintos entre si. Abaixo est~ao as express~oes de alguns asos de o-assimetria. Pela extensiva repeti ~ao de al ulos simboli os na
deriva ~ao das express~oes abaixo, os detalhes das mudan as de variaveis usadas foram expli itadas em alguns asos. Os outros seguem ra io nio analogo.
Do mesmo modo que zemos om as ovari^an ias, as express~oes de assimetria ser~ao feitas
usando-se retornos simples de a ~oes e op ~oes, e n~ao as taxas de retorno de nidadas em 2.13.
a

m(rsa ; rsa ; rsa )

 m(rsa ; rsa ; rsa )


m3sa = E3x

3E2xEx + 2Ex3

onde
E3x
E2x
Ex

= exp 3a + 4:5a2 


= exp 2a + 2a2 
= exp a + 0:5a2

 m(rsa ; rsa ; r a )
m(rsa ; rsa ; r a )

onde

= C1a (Sa E3x

Ka E2x )

2sa (Sa E2x


Ca

Ka Ex )  a I2x + 22sa  a

36

Assimetria de Portfolios

E3x

1p (ln Ka  )
a
a 2 Sa
= 0:5exp(3a + 4:5a2 )[1

E2x

= 0:5exp(2a + 2a2 )[1

erf (g

Ex

= 0:5exp(a + 0:5a2 )[1

erf (g

I2x

erf (g

3pa )
2
2pa )
2
pa )

exp(2a + 2a2 )

 m(rsa ; rsa ; rpa )


m(rsa ; rsa ; rpa )

= P1a (

Sa E3x + KapE2x ) +

2sa (S E
Pa

2x Kap Ex ) pa I2x + 22sa pa

onde
p
g = a1p2 (ln KSaa

a )

e as express~oes de E3x, E2x, Ex e I2x s~ao iguais as de m(rs ; rs ; r ), tro ando o sinal da
fun ~ao erf .
 m(rs ; r ; r )
a

a1

a2

m(rsa ; r a 1 ; r a2 )

onde
K = maxfK1 ; K2 g
g = a1p2 (ln SKa a )

1 (S 2E3x SaE2x(K + K 2) + K K Ex)


1

1 2
C1 C2 a
sa 2
(S E S E (K + K 2) + K1 K2 E1 )
C1 C2 a 2x a x 1
 a1 
 a2 
(
Sa E2x K1 Ex )
(S E K2 E x)
C2
C2 a 2x
+2sa a1 a2

3.2 Express~oes de Co-assimetrias

g1
g2
E2x

37

1p (ln K1
a 2 Sa

=  1p2 (ln KS 2
=

a )
a )

= 0:5exp(2a + 2a2 )[1

erf (g1

Ex

= 0:5exp(a + 0:5a2 )[1

erf (g1

E 2x

= 0:5exp(2a + 2a2 )[1

erf (g2

E x

= 0:5exp(a + 0:5a2 )[1

erf (g2

2pa )
2
pa )
2

2pa )
2
pa )
2

e as express~oes de E3x, E2x e Ex s~ao iguais as de m(rs ; rs ; r ).


 m(rs ; rp ; rp )
a

a1

a2

m(rsa ; rpa 1 ; rpa 2 )

1 (S 2 E S E (K p + K 2) + K pK pEx)
p
1 2
P1 P2 a 3x a 2x 1
sa 2
(S E S E (K p + Kp2) + K1pK2pE1)
P1 P2 a 2x a x 1
+ Ppa22 (SaE2x K1pEx) + Ppa21 (SaE 2x K2pE x)
+2sapa1pa2

onde
K = minfK1p ; K2p g
g =  1p2 (ln SK a )
a

g1
g2
E2x

1p (ln K1p a)


a 2 Sa
p
=  1p2 (ln KS 2 a)
a
a
= 0:5exp(2a + 2a2 )[1 + erf (g1 2p2a )
=

38

Assimetria de Portfolios
Ex
E 2x
E x

= 0:5exp(a + 0:5a2 )[1 + erf (g1 pa2 )


= 0:5exp(2a + 2a2 )[1 + erf (g2 2p2a )
= 0:5exp(a + 0:5a2 )[1 + erf (g2 pa2 )

e as express~oes de E3x , E2x e Ex s~ao iguais as de m(rs ; rs ; rp ).


 m(rs ; r ; rp )
a

m(rsa ; r a ; rpa )

= 2sa  apa + P aa (SaE2px KapExp)


pa
(S E Ka Ex ) + L
C a 2x
a

onde
L=

8 1
>
>
< Ca Pasa

Sa2 E3x + Sa E2x (Ka + Kap) KapKa Ex )


p
p

2
Ca Pa ( Sa E2x + Sa Ex (Ka + Ka ) Ka Ka E1 )

>
>
:

se

Ka < Kap

0
g

E3x
E2x
Ex
E1

. .
1p (ln Ka a )
a 2 Sa
= 0:5exp(3a + 4:5a2 )[erf (h 3p2a ) erf (g
= 0:5exp(2a + 2a2 )[erf (h 2p2a ) erf (g

= 0:5exp(a + 0:5a2 )[erf (h pa2 )


= 0:5[erf (g) erf (h)

erf (g

3pa )
2
2pa )
2
pa )

As express~oes de E2 x e Ex s~ao iguais as dadas em m(rsa; r a1 ; r a2 ), tro ando K1 em g1


por Ka .
O mesmo vale para E2px e Exp, tro ando K1 em g1 por Kap e tambem tro ando o sinal de
erf.

3.2 Express~oes de Co-assimetrias

39

 m(rsa ; rsa ; rsb )


m(rsa ; rsa ; rsb )

2saExy

E2xy

sb E2x + 2sa Ey + 22sa Ey

2sa sb

onde
E2xy
Exy
E2x

= exp

2a + b + 2a2 + 1 b2 + 2a bab


1
2
2
= exp a + b + 2 (a + b ) + a bab
= exp 2a + b + 2a2 

Ex

= exp


a + a2

Ey

= exp


b + b2

 m(rsa ; rsa ; r b )
m(rsa ; rsa ; r b )

= C1 (SbE2xy


= 1 (ln KS b

b )

E2x Kb )

2sa (S Exy

Ex Kb )
Cb b
22
 bI2x + 2sa  bIx + sa (Sb Ex E1 Kb ) 2sa  b
Cb
b

onde
Rb
E2xy

Exy

= 0:5exp

2a + b + 22 + 1 2 + 2a bab


a

[1 erf ( p1 (Rb b 2a ab ))


1
2
2
= 0:5exp a + b + 2 (a + b ) + a bab [1


1
2

erf ( p (Rb b a ab ))

40

Assimetria de Portfolios
E2x
Ex

1
2
= 0:5exp a + a2  [1 erf ( p12 (Rb

= 0:5exp 2a + 2a2  [1

= 0:5exp

E1

= 0:5[1

I2x

= exp 2a + 2a2 


= exp

2a ab ))
a ab ))


1
b + b2 [1 erf ( p (Rb b ))

Ey

Ix

erf ( p (Rb

1
2

erf ( p (Rb ))


a + 0:5a2

 m(rsa ; rsa ; rpb )


m(rsa ; rsa ; rpb )

1 (S E2xy

Pb

E2x Kbp) +

pb I2x + 2sa pb Ix

2sa (S Exy
b

Pb

22sa (S Ex
Pb

Ex Kbp)

E1 Kbp ) 2sa pb

As express~oes de E3x, E2x, Ex e E1 s~ao iguais as de m(rs ; rs ; r b), tro ando o sinal da
fun ~ao erf e tro ando tambem Rb por Rbp = 1 (ln KS b).
 m(rs ; r ; r )
b

m(rsa ; r a ; r b )

onde
Ra

p
b
b


= 1 (ln KS a
b

a )

1 (S S E S K E S K E + K K E )
a b 2x
b a xy
a b x
Ca Cb a b 2xy
sa
(S S E S K E S K E + Ka Kb E1)
Ca Cb a b xy a b x b a y
 a
 b
b
(
Sb Exy
Kb Exb )
(S E a Ka Exa )
Cb
Ca a 2x
+ saC a (SbEyb Kb E1b) + saC b (Sa Exa Ka E1a )
a
b
+ a bIx sa a b

3.2 Express~oes de Co-assimetrias

Rb
E2xy


= 1 (ln KS b
b

= exp

b )

2a + b + 22 + 1 2 + 2a bab

 1 erf

E2x

2(1

ab )

R a

= exp

2a + b + 22 
a

= exp

2(1


a + 2

= exp

R a

2(1
Z


b + b2 )
p

2(1

+1

R a

ab

))

ab )

!#

du

(Rab

(Rab

uab ))

du

a )2
!#

uab ))

du

b ab )2

uab b (1 2ab ))

"

Z +1
exp[ 0:5u2 1
= 2p12
R

a

a b ab )2

!#

Rab

exp[ 0:5(u
ab )

b ab )2

exp[ 0:5(u 2a )2

exp[ 0:5(u

+1

ab )

R a

"

 1 erf

+1

 1 erf

b
Exy

2

uab b (1

Rab

exp[ 0:5(u 2a

"

E1

+1

 Z +1
1
2
2
= exp a + b + 2 (a + b ) + ab ab
exp[ 0:5(u
R
"
!#
1
b
2
 1 erf p
2(1 ab ) (Ra uab b(1 ab )) du

 1 erf

Ey

Z

"

Ex

"

Exy

41

erf

2(1

ab )


1
2
2
= 0:5exp a + b + 2 (a + b ) + a bab (1

!#

du

Rab

erf

uab )

!#

p1 (Rb
2

du
b ab a )

42

Assimetria de Portfolios

Exb
E2ax
Exa
Eyb
Eb

= 0:5exp


a + 0:5a2 (1 erf

= 0:5exp

2a + 2a2  (1 erf

= 0:5exp


a + 0:5a2 (1 erf

= 0:5exp


b + 0:5b2 (1 erf

= 0:5(1

erf

p1 (Rb ab a) )


1

p (Ra 2a ) )
2

p1 (Ra
2

p1 (Rb
2

a )

b )


1

p (R b ) )
2


1
1 = 0:5(1 erf p2 (Ra ) )

Ea

Ix

= exp


a + 0:5a2

 m(r a ; r b ; r )
m(r a ; r b ; r )

1 (Sa S S Exyz Sa S K Exy Sa S K Exz S S K Eyz


b
b
b
a
b
Ca Cb C
+SaKb K Ex + SbKa K Ey + S Ka Kb Ez Ka Kb K E1)
 a
(S S E 1 S K E 1 S Kb Ez1 + Kb Kb E11 )
Ca Cb b yz b y
 b
(S S E 2 S K E 2 S K E 2 + Ka K E12 )
Ca C a xz a b x a z

(S S E 3 S K E 3 S K E 3 + Ka Kb E13 )
Ca Cb a b xy a b x b a x
+  aC b (S Ez K E1 ) +  aC (SbEyb Kb E1b )

b
 b 
a

a
+ C (SaEx KaE1 )  a b
a

Nota ~ao:

3.2 Express~oes de Co-assimetrias


= 1 (ln KS a

Ra

xy

E3

E3
y

= 2p12 exp
"
 1 erf
= 2p12 exp
"
 1 erf
= 2p12 exp
"
 1 erf

a )

a
K
ln b
b Sb
K
ln
 S

Rb

= 1(

b )

= 1(

 )

2ab
2a
2b

a
b

= 1
= 1
= 1

A
B
C

=
=
=

= 1 ( B

E3

43

a b ab
ab b a
ab a b
a + ab ( C

sigmab ))

= p12 (Ra + T )

Z
 +1
2
2
exp[ 0:5(u a b ab)2
a + b + 0:5(a + b ) + a b ab
p

2(1

R a

(Rb

ab )


a + 0:52

2(1

R a

2(1

Rb

ab )


b + 0:52

+1

ab )

+1

R a

(Rb

uab

b (1 2ab ))

exp[ 0:5(u
uab ))

du

a )2

!#

du

exp[ 0:5(u
uab

!#

a b ab )2

b (1 2ab ))

!#

du

44

Assimetria de Portfolios

E13

E1

yz

Ez1

E1
y

E13

2
Exz

E2
z

"

Z +1
exp[ 0:5u2 1
= 2p12
R

a

= exp 2p12
"
 1 erf
= 2p12 exp
"
 1 erf
= 2p12 exp
"
 1 erf

1
p
2(1


 + 0:5 2

1
p
2(1

(Rb

b )

(Rb

b )


b + 0:52
p

2(1

+1

+1

ab )

2(1

2(1


 + 0:52

2(1

a )

Ra

du

b b )2

1
p
2(1

+1

!#

du

"

a )

 b b )2

!#

exp[ 0:5(u

erf

du

 )2

exp[ 0:5(u
ub ))

uab ))

!#

exp[ 0:5(u

ub b (1 2b ))

ub b (1

Ra

+1

2b ))

b )


a +  + 0:5(a2 +  2 ) + a  a

Rb

ab )

Rb

= 2p12 exp
"
 1 erf


b +  + 0:5(2 + 2 ) + b  b

Z +1
1
= 2p2
exp[ 0:5u2 1
R

= 2p12 exp
"
 1 erf

erf

ua ))

+1

 )2

!#

du

du

(Rb

2a ))

ua a (1

exp[ 0:5(u

!#

ub ))

!#

exp[ 0:5(u

!#

du

du

 a a )2

3.2 Express~oes de Co-assimetrias


E2

E12

= 2p12 exp
"
 1 erf


a + 0:52
p

2(1

+1

a )

ua a (1

"

erf

2(1

= 0:5exp


 + 0:5 2 (1 erf

E1

= 0:5(1

erf

Eyb

= 0:5exp


b + 0:5b2 (1 erf

Exa

(Ra

du
!#

ua ))

du

p1 (R
2

p1 (Rb b ) )

 )

Rb

= 0:5exp

ln KSaa ln Sbb ln KS

a )

!#


a + 0:5a2 (1 erf

erf

2a ))

pR )

erf

+1 Z +1 Z +1

= 0:5(1

= 0:5(1

Ea

) =

Ez

ex+y+z

a a )2

exp[ 0:5(u

Ra

Z +1
1
= 2p2
exp[ 0:5u2 1
R

Eb

E(

45

p )

Ra

p1 (Ra
2

a )

p )

f (x; y; z )exp(x + y + z ) dz dy dx

Z
Z
Z
1=00 exp(pa + b +  ) +1 +1 +1 expf 1 [au2 + bv2 + w2
2R
8R3
R a
R
R b
+2uvA + 2uwB + 2vwC 2Ra u 2Rbv 2R wg dw dv du

46

Assimetria de Portfolios

2=00

Z +1 Z +1
1
exp(a + b +  +  2 R)
2
2 
R
R
2
2
expf 21R [u2(a B ) + v2 (b C ) + 2v(u(A
+2uR( B a)g dv du

p1

+1

F (u;v)

 2 d

BC
RC
)
Rb +
)

Z +1 Z +1
1
2
[1 erf (F (u; v))
= 4 exp(a + b +  + 2  R)
R
R
expf 21 [u2 + v2 + 2v( uab b + C ) + 2u( B a )g dv du

1p

3=00

1p

1
1
exp(a + b +  +  2 R + ( C b )2 )
2
2
2Z 2 Z
+1 +1
[1 erf (F (u; ))

G(u)
Ra
expf 21 [u2 + v2 + 2u( B a + ab ( C b )) 2g d du

= 21p2 exp(a + b +  + 21  2 R + 21 ( C b )2)


Z +1 Z +1

[1 erf (F (u; ))expf 12 (u2 + 2uT ) 2g d du
R a

1p

G(u)

1
1
exp(a + b +  +  2 R + ( C b )2 + 0:5T 2 )
2

2

2Z 2 Z
+1 +1

[1 erf (F ( ; ))expf 2 2 g d d
L
G( )
5=00 1 exp( +  +  + 0:5(2 + 2 + 2 ) +    +    +    L2 )
a b ab
a a
b b

a
b
2Z +1 a b

H1 (')exp( '2 ) d'
0
4=00

onde
H1 (')

exp( 2L')

G1 (')

= p12 (Rb

+1
G1 (')

[1

erf (F1 (';  ))exp(  2 ) d

b C ab (

2' + L) + ab T )

3.2 Express~oes de Co-assimetrias

F1 (';  )

47

p
1 p
[
R + (' 2(B + a C ) + ( 2L T )(B + Cab )
2R p
+C 2 + C b C 2 )  R

As mudan as de variaveis indi adas a ima s~ao as seguintes:


00

u = 1a (x a )
v = 1b (y b )
w = 1 (z  )

8
<
:

200

=

300

 = p12 (v b + C uab )

400

500

1
2R (w + (uB + vC  R))

= p12 (u + T )
'=


 Z +1
1
1
2
2
H2 (')exp(
E(
) = 2 exp a + b + 2 (a + b ) + a bab
0
onde

ex+y

H2 (')

exp( 2L2 ')

G2 (')

G1 (')

G2 (')

erf (F2 (';  ))exp(  2 ) d

C2

 (R + )
2R

T2

L2

= p12 (Ra + T2)

E(

F1 (';  ) +

ex+z

[1

p1  C

F2 (';  )

a

+1

'2 ) d'

b ab


 Z +1
1
1
2
2
H3 (')exp(
) = 2 exp a +  + 2 (a +  ) + a  a
0

'2 ) d'

48

Assimetria de Portfolios

onde
+1

H3 (')

exp( 2L2 ')

G3 (')

G1 (') + p b C
2

G3 (')

erf (F3 (';  ))exp(  2 ) d

[1


2R bC

F3 (';  )

F1 (';  ) +

T3

T1 + b ab

L3

= p12 (Ra + T3 )


 Z +1
1
1
2
2
E(
) = 2 exp b +  + 2 (b +  ) + b b
H4 (')exp(
0
onde

e y +z

H4 (')

exp( 2L4 ')

G4 (')

G1 (')

F4 (';  )

F1 (';  )

T4

T1 + a

L4

= p12 (Ra + T4 )

+1

G4 (')

erf (F4 (';  ))exp(  2 ) d

[1

1 exp( + 1 2
E( ) =
a
2
2 a
onde
ex

H5 (')

exp( 2L5 ')

G5 (')

G1 (')

+1
G5 (')

L25 )

[1

H5 (')exp( '2 ) d'

erf (F5 (';  ))exp(  2 ) d

p1 ( C b )

+1

'2 ) d'

3.2 Express~oes de Co-assimetrias

49
r

F1 (';  )

1
2
2R [ (b C C  ) R

F5 (';  )

T5

L5

= p12 (Ra + T5 )

a

1
1 2
E( ) =
2 exp(b + 2 b
onde
ey

H6 (')

exp( 2L6 ')

G6 (')

G1 (')

+1

G6 (')

F1 (';  ) +

T6

b ab

L6

= p12 (Ra + T6 )

1 exp( + 1 2
E( ) =

2
2
onde
ez

H7 (')

exp( 2L7 ')

G7 (')

G1 (')

T7
L7

H6 (')exp( '2 ) d'

erf (F6 (';  ))exp(  2 ) d

C2

 (
2R

[1

+1

p1  C

F6 (';  )

F7 (';  )

L26 )

+1

G7 (')

L27 )

[1

p1 bC

F1 (';  ) +

2R bC

= 1 ( B + C ab
= p12 (Ra + T7 )

R)

+1

H7 (')exp( '2 ) d'

erf (F7 (';  ))exp(  2 ) d

50

Assimetria de Portfolios

1
E (1) =
2 exp(
onde

L28 )

H8 (')

exp( 2L8 ')

G8 (')

G1 (')

F8 (';  )

F1 (';  )

T8

= 0

L8

= p12 (Ra )

+1

+1
G8 (')

H8 (')exp( '2 ) d'

[1

erf (F8 (';  ))exp(  2 ) d

p1 ( C b )

C2

(
Cb  (
2R

R))

Cap
tulo 4

Cal ulo Numeri o de Covari^an ias


De nidas as express~oes das ovari^an ias do aptulo 2, o trabalho agora e omputa-las de forma
e iente.
Generi amente, as integrais que apare eram nas express~oes de ovari^an ia s~ao do tipo
+1

exp (bx + )2 erf (g(x))dx

(4.1)

onde a, b, s~ao onstantes, g(x) e fun ~ao linear e


.

erf (g(x)) =

+1

g(x)

t2 dt

4.1 Metodo de Quadratura Numeri a

O metodo que usaremos para al ular integrais do tipo 4.1 onsiste em apli ar o metodo dos
trapezios em intervalos Ink  < de amplitudes onstantes, mas ada um om parti ~ao diferente.
Esta parti ~ao n~ao homog^enea e para favore er os intervalos que ne essitam de um maior numero
de pontos (nos quais o valor da fun ~ao a ser integrada ne essita ser al ulado).
Entenda-se por Ink o k-esimo subintervalo da n-esima aproxima ~ao da integral.
Posteriormente apli aremos extrapola ~ao de Ri hardson para a elerar a onverg^en ia das
integrais (adiante expli aremos o que e extrapola ~ao e metodo dos trapezios).
Estes subintervalos Ink 's ser~ao obtidos da seguinte forma:
 xa-se uma amplitude ini ial  2 <. Uma primeira aproxima ~ao da integral pode ser dada

pelo uso da regra do trapezio no intervalo I10 = [a; a + .


 a ada re namento de I0 aumenta-se de um o numero de intervalos Ink .
51

52

Cal ulo Numeri o de Covari^an ias

Na n-esima parti ~ao da integral, havera n subintervalos Ink , ada um om parti ~oes diferentes:
 n = 1 : [a; a + 
 n = 2 : [a; a + ; [a + ; a + 2

...

 n = k : [a; a + ; [a + ; a + 2;    ; [a + (k 1); a + k

n = 1:

a+

n = 2:

a+

a+2

n = 3:

a+

a+2

a+3

I3

I3

I3

Figura 4.1: parti ~oes para a regra do trapezio

4.1 Metodo de Quadratura Numeri a

53

Cada intervalo Ink possui as seguintes ara tersti as:


8
>
>
<
>
>
:

x0k = a + k
xk = a + (k + 1)
hk = 2n k
N = 2n k + 1

k=
n=

0; 1; 2;    ; n 1 
1; 2;   

onde
N e o numero de ab issas, x0k e xk s~ao extremos de intervalo em Ink .
 n = 1 : I10
 n = 2 : I20 ; I21

...

 n = k : Ik0; Ik1 ; Ik2 ;    ; Ikk 1

A gura 4.1 ilustra su essivas aproxima ~oes para a integral 4.1 e omo as parti ~oes a ima
s~ao feitas.
A n-esima aproxima ~ao da integral sera dada por
+1

f (x)dx

nX1 Z

k
k=0 In

f (x)dx

(4.2)

e ada integral desta somatoria sera al ulada pela regra do trapesio.


O metodo dos trapezios onsiste em aproximar a area abaixo de uma urva y = f (x) em
[a; b pela soma de N trapezoides de altura h,
b a
h = xi xi 1 =
N

e bases
.

f (xi )

e f (x i 1 )

Com esta nota ~ao, o metodo forne e-nos a aproxima ~ao


Z b

f (x) dx 
=h

onde fi = f (xi) (veja gura 4.2).

N
X
i=0

fi

0:5h(f0 + fN )

(4.3)

54

Cal ulo Numeri o de Covari^an ias


y

h
x
x 0 =a

x1

x2

x n-1

x n =b

Figura 4.2: regra do trapezio


O erro desta aproxima ~ao e dado por
1 (b a)h2 f 00 ()  2 (a; b)
12
A onverg^en ia e, portanto, lenta. Uma melhor aproxima ~ao e obtida ao usto de uma
diminui ~ao do valor de h, o que aumenta o numero de pontos xi usados.
Mas podemos melhorar este resultado.
Considere aproxima ~oes da integral 4.3 para 2 valores diferentes de N (N1 e N2):
E=

I
I

=
=

I1
I2

1
12 (b
1 (b
12

00
a)h21 f (1 )
00
a)h22 f (2 )

1 ; 2 2 (a; b).
Supondo f 00 (1 ) = f 00 (2 ) teremos

2
I
= I2 + h2 h2 h2 (I2 I1)
1 2

Este tipo de pro edimento, no qual geramos uma ter eira aproxima ~ao a partir de outras
duas, e que espera-se ser melhor, e hamado Extrapola a~o de Ri hardson.
Vamos supor que o erro de um pro edimento numeri o om passo xo h possa ser es rito na
forma
E=

1
X
j =k

aj hj

ak 6= 0

4.2 Tratamento de Erros

55

onde aj n~ao depende de h.


Sejam
I = I1 +
I = I2 +

1
X
j =k

1
X
j =k

aj hj1

(4.4)

aj hj2

(4.5)

Multiplique 4.4 por hk2 e 4.5 por hk1 e subtraia uma da outra. Assim teremos
I=

1 (I2hk
1
k
h hk
1

I1 hk2 ) +

1
X
j =k

aj

hk

1 (hj hk
hk 2 1
2

hj1 hk2 )

Se h1 = 2h2 e h2 = h
1
I = k (I2 2k
2 1

I1 ) +

1
X
j =k+1

aj hj (2k

2j )

(4.6)

O efeito do pro esso a ima foi aumentar a menor pot^en ia de h na formula do erro.
Veremos agora omo podemos usar estas ideias para a elerar a onverg^en ia das integrais
pelo metodo dos trapezios. O metodo que une regra do trapezios e extrapola ~ao de Ri hardson
e hamado Metodo de Romberg.
4.2 Tratamento de Erros

O objetivo aqui e expressar o erro ometido no pro esso de integra ~ao numeri a anterior (dado em 4.2) em termos de pot^en ia de h (a hamada formula de Euler-Ma laurin), a m de
posteriormente apli armos extrapola ~ao de Ri hardson e a elerar a onverg^en ia das integrais.
4.2.1 Formula de Euler-Ma laurin

1. De ni ~ao 4.2.1.

Os polin^omios de Bernoulli s~ao dados por

t(exp(xt)
exp(1)

+1
tk
1) = X
Bk (x)
1 k=0
k!
e

t
exp(t)

1=

+1
X
k=0

Bk

tk
k!

56

Cal ulo Numeri o de Covari^an ias

2. Propriedades:
(a) Bk (0) = 0 (k  0)
(b)

Bk (1) = 0

(k 6= 1)

( )

B2k+1 = 0

(k > 0)

(d)

B20 k (x) = 2kB2k 1 (x)

(e)

B20 k+1 (x) = (2k + 1)[B2k (x) + B2k

(k > 1)
(k  0)

dem de d) e e):


d t(exp(tx)
dx exp(t)

1)  =
1
=
=

t2 exp(tx)
exp(t) 1

=
=
=
=

t2 exp tx
exp(t) 1
+1 0 tk
X
Bk (x)
k!
k=0
+1 0
X
t 2k
B2k (x)
(2k)2
k=0

+1
X
k=0

B2k+1 (x)

t2k+1
(2k + 1)!

(4.7)

t2 (exp((tx) 1))
t2
+
exp(t) 1
exp(t) 1
+1 tk
+1
X
X
tk
t Bk (x) + t Bk
k! k=0 k!
k=0
+1
+1 t2k+1 X
+1
+1
X
X
t2k
t2k
t2k+1 X
+
+
+
B2k 1 (x)
B2k
B2k 1
B2k (x)
(2k)! k=1
(2k 1)! k=0 (2k)! k=1
(2k 1)!
k=0
+1
+1
2k+1
2k
X
X
(B2k (x) + B2k ) (2k + 1) (2tk + 1)! + 2k (B2k 1(x) + B2k 1 ) (2t k)!
k=0
k=1

(4.8)

Por 4.7 e 4.8 seguem as propriedades desejadas. 2


De namos agora

4.2 Tratamento de Erros

57

Z h
y
1
f (2k) (x + y)dy
B 2k
Xk =
(2k)! 0
h
onde f (x) e a fun ~ao integrando de 4.2.

(4.9)

Integrando por partes 4.9,


Xk

=
=
=
=
=
=

1 hB  y  f (2k 1)(x + y)ih 1 Z h B 0  y  f (2k 1) (x + y)dy


(2k)! 2k h
0 h(2k)! 0 2k h
Z h
y
2k
f (2k 1) (x + y)dy
B2k 1
h(2k)! 0
h
1 Z h B 0  y  f (2k 2)(x + y)dy
h2 (2k 1)! 0 2k 1 h
2k 1 Z h B  y  f (2k 2)(x + y)dy
h2 (2k 2)! 0 2k 2 h
1 Z h B2k 2  y  f (2k 2)(x + y)dy + hB f (2k 3) (x + y)ih
(2k 2)
h2 (2k 2)! 0
h
0


1 X + 1 B2k 2 f (2k 3) (x + h) f (2k 3)(x)
(k > 1)
h2 k 1 h2 (2k 2)!

Logo,
h2 Xk



B
Xk 1 = 2k 2 f (2k 3) (x + h) f (2k 3) (x)
(2k 2)!

(4.10)

Quando k = 1 temos,
X1

Z h
 
= 21 B2 hy f 00 (x + y)dy
0

Z h 2
1
y 00
y
= 2
f (x + y)dy
0 h2 h

h

 Z h 2
Z h 2
y 0
y 0
y
y
1
1
f (x + y)
= 2
2 0 h2 h f (x + y)dy
0 h2 h
0

h

Z h
1
1
y
f (x + y)dy
f (x + y) + 2
=
h2 2h
0Z h 0
x+h
= 21h [f (x + y) + f (x) + h12
f (y)dy

(4.11)

58

Cal ulo Numeri o de Covari^an ias

Usando 4.10 e 4.11 temos


1 [f (x + h)
2

Z x+h
1
f (x) =
f (y)dy + hX1
h 0
Z x+h
1
B h 0
= h
f (y)dy + h3 X2 + h 2 f (x + h)
2!
0
Z x+h
0 i
B h 0
= h1
f (y)dy + h 2 f (x + h) f (x)
2!
0 h
i
+h3 B4!4 f 000 (x + h) f 000 (x) h5X3

f (x)

= 
Z x+h
m
X
B2k 2k
f (y)dy +
= h1
(2k)! h

0
2
h m+1 Xm+1

k=1

1 f 2k 1(x + h) f 2k 1(x)

Podemos mudar os limites de integra ~ao em 4.9 para [jh; (j + 1)h.Repetindo a deriva ~ao
de 4.11 para j = 1; 2;    ; n 1 e substituindo x por x0 obtemos
n
X
j =0

f (x0 + jh)

Z x +nh
1
= h1
f (y)dy + (f (x0 + h)
2
0

x0

f (x0 ))

m
X

i
B2k 2k 1 h 2k 1
f
(
x0 + h) f 2k 1 (x0 ) + Em
h
(2k)!
k=1

onde
Em =

Z nh
y
h2m+1
f (2m+2) (x0 + y)dy
B2m+2
(2m + 2)! 0
h

Usando as propriedades dos polin^omios de Bernoulli, temos


Em = nh2m+2

B2m+2 (2m+2)
();
(2m + 2)! f

 2 (x0k ; xk )

Apli ando 4.12 obtemos a formula de integra ~ao numeri a

(4.12)

4.2 Tratamento de Erros

Ikn

f (y)dy

=
=

Z x0

59

f (y)dy

x0k
N
X1
f
hk
j =0

(x0k + jhk ) h2k [f (xk )

f (k0k ) + Ek

Logo,
Z

+1

f (y)dy

=
=

nX1 Z
k
k=0 8In
nX1 <

k=0

nX1 <
k=0

: n k
8

f (y)dy + Er

: n k

n k
2X

j =0
n k
2X

j =0

f (x0k + jhk )

hk

f (x0k + jhk )

hk

9
=

2 [f (x0k ) + f (xk ) + Ek ; + Er
9
=

2 [f (x0k ) + f (xk ); + Et

onde
Et

nX1 X
+1

B2l
(2l)!
k=0 l=1

2n

2l h

f (2l 1) (xk ) f (2l 1) (x0k )

+1

a+n

f (y)dy

4.2.2 Extrapola ~ao de Ri hardson

De na T0;i omo sendo a aproxima a~o da integral referente ao i-esimo passo do pro esso numeri o.
A m de a elerar a onverg^en ia da integral, queremos onstruir as aproxima ~oes Tk;j da integral,
referentes a k-esima aproxima ~ao do j-esimo passo, apli ando Extrapola a~o de Ri hardson.
n=1:
n=2:
n=3:
..
.
n=j:

T0;1
T0;2 T1;1
T0;3 T1;2
T2;1
..
..
..
...
.
.
.
T0;j T1;j 1 T2;j 2    Tj 1;1

60

Cal ulo Numeri o de Covari^an ias

Denotando

J=

temos,
+1
X

+1
X

T0;n

B2l
J+
(2l!)
l=1

T0;n+1

J+

B2l
(2
l!)
l=1

+1
X

+ (2Bl2!)l
l=1

+1

f (y)dy

 2l nX1 4kl hf (2l 1) (x )


k
2n k=0

f (2l 1) (x0k )

+1

a+n

f (y)dy

 2l 1 nX1 4kl hf (2l 1) (x ) f (2l 1) (x )i


k
0k
2n 22l k=0
 2l 4kl hf (2l 1)(x ) f (2l 1)(x )i

2n+1

0k

Z a+(n+1)
4
f (y)dy +
3 a+n f (y)dy
a+n

+1

De nindo

T1;n =

temos
T1;n

J+

+1
X

B2l
(2
l!)
l=2

+1
X

+ (2Bl2!)l
l=1
Z +1

4T0;n+1
3

T0;n

 2l  4 1 nX1 4kl hf (2l 1) (xk )


2n
22l
k=0
2l
 4nl hf (2l 1)(xk ) f (2l 1)(x0k )i

f (2l 1) (x0k )

2n+1

Z a+(n+1)
1
f (y)dy +
3 a+n f (y)dy
a+(n+1)

Observe que essa onverg^en ia pode n~ao existir dependendo do omportamento da fun ~ao
Mas no aso f (x) = exp( x2), f 2 C 1(<) e seu de aimento para zero quando jxj ! 1 e
rapido o su iente para ompensar o res imento dos numeros de Bernoulli.
Generi amente,
f (:).

Tj;n =

 j
T

4 1 4
j

1;n+1 Tj 1;n

4.2 Tratamento de Erros

61

Dessa forma, os primeiros termos da somatoria do erro que envolvem pot^en ias de h v~ao
sendo eliminados.
Exemplo
O metodo a ima nos gera as seguintes aproxima ~oes para a integral
Z

(1

erf (3x

2))exp(

x2 )dx

onde
2
erf (x) = p

Z x

 0

exp(

x2 )dx

A primeira aproxima ~ao da integral sem o uso da extrapola ~ao e dada por:
=1:
=2:
n = 3 :
n = 4 :
n = 5 :
n = 6 :
n = 7 :
n = 8 :
n

1:105380599
1:121862111
1:117203034
1:115603036
1:115176011
1:115067668
1:115040485
1:115033683

Observe que a onverg^en ia das aproxima ~oes da integral e lenta se utilizarmos somente a
regra do trapezio. Mas, extrapolando os valores a ima obtemos
1:127355948
1:115650007
1:115069704
1:115033669
1:115031553
1:115031424
1:115031415

#
1:114869611
1:115031017
1:115031266
1:115031412
1:115031415
1:115031415

1:115033579
1:115031270
1:115031414
1:115031415
1:115031415

1:115031261
1:115031415 1:115031415
1:115031415 1:115031415 1:115031415
1:115031415 1:115031415 1:115031415 1:115031415

Cada dgito sublinhadoe o ultimo algarismo orreto na aproxima ~ao. Neste aso, 1.115031415
e o valor aproximado da integral.
Podemos aqui xar uma toler^an ia  para a aproxima ~ao da integral e limitar o numero de
passos na extrapola ~ao, por exemplo de nindo um riterio de parada da forma jTj;n+1 Tj;nj < 
e jTj+1;n Tj;nj <  .
O exemplo anterior e de arater ilustrativo, visto que poderamos ter parado as itera ~oes ja
na segunda oluna (apontada pela e hinha), de a ordo om o riterio de parada estipulado.

62

Cal ulo Numeri o de Covari^an ias

Cap
tulo 5

Cal ulo Exato de Assimetria e


Co-assimetria
Observando as express~oes das assimetrias e o-assimetrias da se ~ao 3.2, deparamo-nos om o
problema de avaliar numeri amente integrais duplas e triplas em domnios ilimitados.
Nosso problema agora e avaliar express~oes do tipo:
Z

+1 Z +1

exp x2 y2F (x; y)dydx


a
g(x)
onde a; b e s~ao onstantes, g(x) e fun ~ao linear em y e
F (x; y) = erf (H (x; y)) =

+1

H (x;y)

(5.1)

exp( z 2 )dz

5.1 Cubatura Numeri a

Para resolver as integrais do tipo 5.1 pre isamos de um metodo que ofere a boa pre is~ao juntamente om o menor numero de nos possvel nas variaveis x e y.
Podemos rede nir 5.1 por
Z

onde

+1

H (t) =

H (t)exp( t2 )dt

+1

g(t)

F (t; u)exp( u2 )du

Usaremos o metodo de quadratura Gaussiana om fun ~ao peso exp(


para avaliar a integrai 5.2 e o metodo de Romberg para avaliar 5.3.
63

(5.2)
(5.3)
x2 ) no intervalo [a; +1)

64

Cal ulo Exato de Assimetria e Co-assimetria

O metodo de Gauss para avaliar integrais do tipo


Z b

f (x)w(x)dx

(5.4)

onsiste em en ontrar pesos A0is e nos x0is (xi 2 [a; b) espe  os para aproximar a integral
a ima pela soma
Z b

w(x) > 0 e hamada


em [a; b.

f (x)w(x)dx 
= Q(f ; w; a; b) =

Ai f (xi)

fun ~ao peso (no nosso aso, w(x) = exp(

x2 )),

(5.5)
e deve ser integravel

Vamos en ontrar (n+1) pontos (xi; yi = f (xi)) e pesos Ai, n arbitrario, impondo a restri ~ao
de que a aproxima ~ao 5.5 seja exata para polin^omios de grau menor ou igual a 2n-1. Isto e, que
seja exata nos asos em que f (x) e um polin^omio de grau menor ou igual a 2n 1.
Podemos determinar um polin^omio
Qn (x) = xn +

nX1
k=0

qk xk

(5.6)

tal que Qn e ortogonal1 a todos os mon^omios xj (0  j  n 1) em [a; b, isto e,


Z b

Qn (x)xj exp( x2 )dx = 0

(j = 0::n 1)

De 5.6, obtemos o seguinte sistema linear em qk :


nX1
k=0

qk

Z b

xk+j exp

x2 )dx =

Z b

xn+j exp( x2 )dx

(5.7)

Expressando P (x), grau(P (x))2n-1, por


P (x) = S (x)Qn (x) + R(x)

(5.8)
onde grau(S (x)) e grau(R(x)) s~ao menores ou iguais a n-1, teremos P (xi) = R(xi ) se xi
forem os zeros de Qn(x) .
Como grau(R(x)) n-1, por interpola ~ao Lagrangiana temos
R(x) =
1

Segundo o produto interno < f; g >=

Rb
a

n
X
i=1

R(xi )Li (x)

f (x)g (x)w(x) dx

5.1 Cubatura Numeri a

65

om
Li (x) =

n
Y

x xj
x xj
j =1;j 6=i i

Como tambem grau(S (x)) n-1, por ortogonalidade temos


Z b

nX1 Z b
2
S (x)Qn (x)exp( x )dx = sj xj Qn(x)exp( x2 )dx = 0
a
j =0

Ent~ao, de 5.8,
Z b

P (x)exp( x2 )dx =

Z b

R(x)exp( x2 )dx =

n
X
i=1

R (x i )

Z b

Li (x)exp( x2 )dx =

n
X
i=1

Ai P (xi )

onde
Ai =

Z b

Li (x)exp( x2 )dx

(5.9)

Com isso determinamos valores otimos de nos e pesos da quadratura Gaussiana.


Resumindo, os passos para en ontrar os valores dos nos e pesos otimos s~ao os seguintes:
1. Resolva o sistema linear 5.7 e a he os valores de qk
2. A he as razes xi (i=1..n) de Qn(x) dado em 5.6
3. Os pesos Ai (i=1..n) s~ao en ontrados por 5.9.
Observe que o intervalo [a; b so foi usado omo limites de integra ~ao e, portanto, nada impede
que todo o pro edimento a ima seja feito om a=+1 ou b= 1.
A tabela abaixo ontem os valores de nos e pesos para o aso a=0 e b=+1.

66

Cal ulo Exato de Assimetria e Co-assimetria

xi

n=16

3.375541041407145E-03
5.804615541291068E-02
1.820547674925986E-01
3.679542616521208E-01
6.067329515918165E-01
8.897071867487791E-01
1.209623943058248E+00
1.561080047413430E+00
1.940565510629326E+00
2.346403257792925E+00
2.778776657707638E+00
3.240017969804344E+00
3.735450317676748E+00
4.275562412865718E+00
4.882323348658508E+00
5.615285661142339E+00

Ai

1.869170292281806E-02
9.002873675900949E-02
1.513016842298416E-01
1.867836831554472E-01
1.814697491540716E-01
1.370740042987264E-01
7.788177757936561E-02
3.198902321781417E-02
9.092778869377570E-03
1.702422581625416E-03
1.977389463502662E-04
1.316842547890586E-05
4.489296733529744E-07
6.537390919551276E-09
2.904141450987963E-11
1.709992622046885E-14

Apli ando integra ~ao Gaussiana ao nosso problema ini ial 5.1 , a aproxima ~ao da integral
dupla, apos mudan as apropriadas de variaveis, sera dada por2:
Z

+1 Z +1
g(x)

exp( x2 y2 )F (x; y)dydx 


=

m
n X
X
i=1 j =1

Ai Bj F (xi ; yj )

onde xi; Ai s~ao os nos e os pesos na dire ~ao x e yi; Bi s~ao os nos e os pesos na dire ~ao y.
Uma estimativa do erro da integra ~ao Gaussiana e dada pelo teorema (ver [13):
Teorema 1. Se f 2 C 2n[a; b, ent~ao
Z b
n
X
f (2n) ( )
Ai f (xi ) =
w(x)f (x)dx
(2n)! < pn; pn >
a
i=1
para algum  2 (a; b) e

< pn; pn >=


pn (x) =

Z b

n
Y
i=1

w(x)p2n dx

(x

xi )

Esta express~ao n~ao orresponde, na prati a, ao metodo que usamos para avaliar integrais do tipo 5.1. Isto
sera expli ado mais adiante.
2

5.2 Compara ~ao entre metodos de integra ~ao

67

5.2 Compara ~ao entre metodos de integra ~ao

Outros tipos de quadratura Gaussiana poderiam ter sido usados para resolver integrais do tipo
4.1 e 5.1.
Por exemplo, os pesos e nos das quadraturas de Gauss-Hermite e Gauss-Laguerre, referentes,
respe tivamente, as integrais
Z

+1
1

f (x)e

x2 dx

+1

f (x)e x dx

est~ao tabelas para diversos valores de n (n e o numero de nos).


No nosso aso estamos interessados em integrais om fun ~ao peso w(x) = e x no domnio
(0; 1) (vide 4.1), para os quais n~ao temos valores tabelados. O pro edimento para gerar os nos
e os pesos para este aso, visto na se ~ao anterior, envolve al ulos om sistemas extremamente
mal ondi ionados. Isto impediu-nos de obter um numero de nos su ientemente bom que
propor ionasse um grau de pre is~ao da mesma ordem que o obtido om outros metodos (por
exemplo, om o metodo de Romberg do aptulo 4).
Certamente o ^omputo desses nos e pesos (vide ap^endi e B) pode ser melhorado. E onsequentemente um numero maior de nos (n > 16) e maior pre is~ao na aproxima ~ao das integrais
pode ser obtido. A tabela abaixo mostra o omportamento das aproxima ~oes da integral
2

I=

+1

(1

erf (3x

2))e

x x2 dx

para n res ente, ate o ponto em que onseguimos obter os nos (n=16):
n

2
4
8
12
14
15
16

0.892830244
0.820232479
0.824555848
0.824184939
0.824149912
0.824155619
0.824156806

A tabela a ima sugere que n=20, por exemplo,ja geraria um resultado satisfatorio.
Em vista das di uldades surgidas, o metodo que usamos para omputar integrais do tipo
5.1 onsiste em ombinar o metodo de Romberg (da se ~ao 4.1) om os dados do metodo de
Gauss para n=16, om fun ~ao peso w(x) = e x em (0; +1). Usamos Gauss para avaliar as
integrais iteradas do tipo 5.2 e Romberg para avaliar 5.3. Por isso, quando falarmos no metodo
Romberg+Gauss e sobre esta ombina ~ao de metodos que estamos falando.
Abaixo est~ao alguns exemplos de aproxima ~oes obtidas por alguns metodos de integra ~ao.
Observe que apesar do insatisfatorio numero de nos obtido pelo pro esso da se ~ao anterior
2

68

Cal ulo Exato de Assimetria e Co-assimetria

(n=16), o resultado ainda e melhor do que o obtido om quadratura de Gauss-Hermite e GaussLaguerre.


Nestes exemplos tambem testamos o omportamento do metodo de Romberg em um intervalo
om parti ~ao homog^enea [a,b. Quando falarmos de Romberg em (0; 1) signi a que usamos o
metodo da se a~o 4.2 ( om parti ~ao representada pela gura 4.1). E quando falarmos de Romberg
em (a; b) para al ular a integral R0+1 f (x)e x dx signi a que pegamos um erto valor de b,
b > a, e apli amos o metodo de Romberg usual em (a; b) para aproximar o valor da integral.
1.
2

+1

(1

erf (3x

2))e

x x2 dx

Metodo
Valor da Aproxima ~ao
Romberg em (a,b)
0.8241563130
Romberg em (0,+1)
0.8241563128
Gauss (n=16)
w(x) = e x em (0,+1)
0.8241568063
Gauss-Hermite (n=20)
0.8018970972
Gauss-Laguerre (n=24)
0.8189798236
Maple
0.8241563129
2

2.

+1 Z +1

(1

erf (3y x

2))exp(

x y x2 y2 ) dx dy

Metodo
Aproxima ~ao
Gauss + Romberg 0.4922038787
Maple
0.4922038788
3.

+1 Z +1
0

(1

erf (y + x + 2))exp( x y x2 y2 ) dx dy

Metodo
Aproxima ~ao
Gauss + Romberg 0.0001242206589
Maple
0.0001242206580

5.3 Efeitos do uso de diferentes metodos de integra ~ao sobre fronteiras e ientes69

4.

1 0

+1

(1

erf (y + x + 2))exp( x y x2 y2 ) dx dy

Metodo
Aproxima ~ao
Gauss + Romberg 0.08375908383
Maple
0.08375908378
Comparando as varias regras de integra ~ao numeri a, omo a de Romberg utilizada no
aptulo 4, vemos que para um mesmo esfor o omputa ional, a quadratura Gaussiana gera
melhores resultados. Como n~ao podemos prever exatamente qual o numero de nos usar para
obter uma estimativa da integral dentro de uma pre is~ao desejada, a quadratura Gaussiana tem
uma erta desvantagem om rela a~o aos metodos baseados em extrapola ~ao, visto que os nos e
os valores da fun ~ao integrando nestes nos na n-esima aproxima ~ao n~ao poder~ao ser aproveitados
numa n+1-esima aproxima ~ao.
5.3 Efeitos do uso de diferentes metodos de integra ~ao sobre
fronteiras e ientes

Ate agora analisamos a quest~ao de aproxima ~ao numeri a de integrais do tipo 5.3 sem onsiderarmos qual a in u^en ia destes resultados sobre o resultado nal do problema de otimiza ~ao,
isto e, sobre portfolios e ientes.
O que se observou pelos exemplos numeri os da se ~ao anterior foi um resultado melhor, em
termos de pre is~ao, para o metodo de Romberg, mas a um usto omputa ional maior. Ou seja,
ele aproxima o valor da integral usando um numero de nos muito maior do que o numero usado
na quadratura Gaussiana ( er a de 2n nos (n-esima aproxima ~ao), ontra os 16 em Gauss).
Mas alguns testes revelaram que a in u^en ia do uso destes dois metodos de aproxima ~ao
de integrais para gerar matrizes de ovari^an ia (no aso de portfolios om op ~oes) e pequena
e, portanto, a solu ~ao do problema de otimiza ~ao pela abordagem MV (media-vari^an ia) n~ao e
afetada neste aso.
Sejam INEC16 e INEC17 op o~es de ompra tendo omo a ~oes-objeto INEP4 e OTC19 e
OTC24 tambem op ~oes de ompra, mas sobre TEL4.
Abaixo seguem as ovari^an ias entre retornos das op ~oes a ima usando-se o metodo de Romberg e tambem os nos e pesos da Quadratura Gaussiana (n=16).
Cov-Gauss OT C 19
OT C 24
INEC 16 1.2406466672 1.3343696501
INEC 16 1.0490361321 1.1248742353

70

Cal ulo Exato de Assimetria e Co-assimetria

Cov-Romberg OT C 19
OT C 24
INEC 16
1.2406466541 1.3343696566
INEC 17
1.0490361115 1.1248742573
Os valores das ovari^an ias das tabelas a ima s~ao muito proximos, n~ao afetando o resultado
em termos de portfolios e ientes. Mais testes s~ao ne essarios a m de veri ar se este mesmo
omportamento vale para o aso de aproximarmos integrais duplas pelo metodo de gauss e
obtermos pou as mudan as em termos de assimetria e o-assimetria (para o aso de otimiza ~ao
de portfolios pelo riterio MVA media-vari^an ia-assimetria).

Cap
tulo 6

Exemplos de Portfolios E ientes


Vamos agora ver alguns exemplos de portfolios e ientes usando os riterios de es olha vistos
nos aptulos 2 e 3, baseados em media-vari^an ia (MV) e media-vari^an ia-assimetria (MVA).
6.1 Primeiro exemplo

Suponha que um investidor queira saber qual a melhor maneira de ombinar num portfolio os
oito ativos abaixo:
 BB4, PET4, TEL4, WHM3, VAL4
 Op ~oes de ompra europeias OTC16 e OTC171
 Op ~oes de venda europeias OTP19, OTP24

onde TEL4-PN e a a ~ao-objeto das op ~oes.


Aqui a uni a restri ~ao sobre o montante investido em ada ativo/derivativo e a restri ~ao
basi a das fra ~oes wi do montante total W a serem investidas em ada ativo, dada por Pi wi = 1.
Isto signi a que n~ao olo aremos restri ~oes de aquisi ~ao em nenhum dos ativos e derivativos
disponveis.
Portanto, nossos problemas de otimiza ~ao de arteiras mistas pelos riterios MV e MVA
ser~ao dados por
Estas siglas para nomear op ~oes s~ao de arater ilustrativo, n~ao sendo ne essariamente as mesmas usadas pela
BOVESPA.
1

71

72

Exemplos de Portfolios E ientes

8
>
>
>
>
<

(P MV )

(P MV A)

8
>
>
>
>
<
>
>
>
>
:

>
>
>
>
:

max

s:a

max

s:a

i wi zi

i wi zi

P P

j wi wj ij

=1
wi  0
(i = 1::n)
i wi

P P

j wi wj ij

+ Pi Pj Pk wi wj wk mijk

=1
wi  0
(i = 1::n)
i wi

onde n e o numero de elementos (ativos + derivativos) do portfolio.


Vamos onsiderar 3 exemplos de arteiras (C1, C2 e C3), formadas por:
1. C1 = f BB4, PET4, TEL4, VAL4, OTC16, OTC17, OTP19, OTP24 g
2. C2 = f BB4, PET4, VAL4, WHM3, OTC16, OTC17, OTP19, OTP24 g
3. C3 = f BB4, PET4, TEL4, VAL4 g
Para estes exemplos, os retornos logartmi os das a ~oes foram feitos baseados numa amostra
retroativa de 90 dias, om data nal para 03/06/96 e extrapolados para 55 dias (para o dia
19/08/96, data de expira ~ao das op ~oes).
Os retornos logartmi os das a ~oes e os respe tivos desvios padr~oes est~ao na tabela 6.1. Os
oe ientes de orrela ~ao entre estes retornos, obtidos pelo Criti al Point, est~ao na tabela 6.2.
Os dados referentes as op ~oes, pr^emios e pre os de exer  io, est~ao na tabela 6.3.
O pre o dos lotes das a ~oes nas datas de in io e de expira ~ao das op ~oes est~ao na tabela
6.4.
Observe que o numero de a ~oes por lote n~ao in uen ia os al ulos da taxa de retorno para
os ativos e derivativos (dadas pelas express~oes 2.9 e 2.13) por estas serem medidas per entuais
(adimensionais).
Para o exemplo 1 ( onjunto C1), sera feita a analise de otimiza ~ao pelos dois riterios (MV
e MVA). Para os outros dois portfolios, sera feita a analise usando somente o riterio mediavari^an ia.

6.1 Primeiro exemplo

73

Todas as express~oes de retorno, vari^an ia- ovari^an ia, assimetria e o-assimetria dos portfolios
foram omputadas usando os metodos vistos nos aptulos 4 e 5 ( ujas rotinas implementadas
est~ao listadas nos ap^endi es A e B).

6.1.1 Otimiza ~ao de Portfolios pelo Criterio Media-Vari^an ia

As taxas de retorno esperadas para os omponentes das arteiras dos exemplos (taxas estas
dadas pelas express~oes 2.9 e 2.13, aptulo 2) e os respe tivos desvios padr~oes est~ao na tabela
6.5.
Os oe ientes de orrela ~ao entre estas taxas est~ao na tabela 6.6 e 6.7.
As fronteiras e ientes obtidas pela resolu ~ao do sistema (PMV) est~ao no nal deste aptulo.
Observe que a in lus~ao de op ~oes no portfolio expandiu nosso horizonte de possibilidades de
investimento, omparando as fronteiras de C1, C2 e C3. Com op ~oes, temos uma grande gama
de portfolios e ientes para diferentes valores de vari^an ia e retorno esperado num domnio bem
maior do que o obtido om arteiras formados apenas por ativos basi os.
Os portfolios desta ados por bolinhas na gura da fronteira e iente, para o aso do exemplo
1 ( onj. C1), est~ao rela ionados na tabela 6.8. Nesta tabela, a letra \e" signi a retorno
esperado do portfolio e a letra \v" signi a vari^an ia.
As arteiras C1 e C2 diferem somente em um dos ativos fundamentais, sendo que C1 possui
o ativo TEL4 no lugar de WHM3, presente em C2. As taxas de retorno destes dois ativos e suas
volatilidades n~ao diferem muito ( om rela ~ao ao retorno, aproximadamente 11% para WHM3 e
12% para TEL4). Por isso os resultados das tabelas 6.8 e 6.9 s~ao bem proximos. Vale desta ar

74

Exemplos de Portfolios E ientes

que a presen a da TEL4 em C1 n~ao substitui a presen a das op ~oes plain vanilla sobre ela,
quando uma taxa de retorno maior e desejada no portfolio. Observe ainda a presen a das op ~oes
OTP19 e OTP24 nos portfolios A e B dessas tabelas, apesar destes derivativos ofere erem
uma expe tativa de retorno negativa, omo podemos ver pela tabela 6.5. Interpretamos a
presen a destas op ~oes nestes portfolios e ientes omo uma tentativa de hedge, em vista da alta
volatilidade do retorno das op ~oes de ompra e venda.
Observe que um portfolio e iente pode n~ao onter todos os ativos disponveis.

6.1.2 Otimiza ~ao de Portfolios pelo Criterio Media-Vari^an ia-Assimetria

Vamos agora rela ionar alguns portfolios e ientes pela resolu ~ao do problema 3.3 ( aptulo 3).
As o-assimetrias entre as taxas de retorno dos elementos do portfolio 2 (dado por C2) est~ao
des ritas na tabela 6.12. Observe que os valores das o-assimetrias que envolvem op ~oes s~ao bem
mais signi ativas do que as que envolvem somente as a ~oes. Isto devido a maior assimetria do
retorno de op ~oes, omo ja foi men ionado no aptulo 3.
A tabela 6.12 sugere-nos que a utiliza ~ao do riterio MVA para sele ~ao de arteiras e ientes
formadas somente por fundamentais (no aso do exemplo, a ~oes da BOVESPA) gerara resultados
muito proximos aos obtidos usando o riterio MV.Isto porque a par ela de ontribui ~ao dos
termos de assimetria das a ~oes n~ao e t~ao signi ativa para a fun ~ao utilidade esperada.
Agora vamos tomar os valores de  dos portfolios e ientes da tabela 6.9, rela ionados pelas
letras A, B, C, D, E e F (no gra o da fronteira e iente, estas letras orrespondem aos portfolios
desta ados por \bolinhas" da esquerda para a direita, em movimento as endente). Para ada
um destes valores de  vamos resolver o problema 3.3 para alguns valores de ( oe iente de
pondera ~ao do termo da assimetria na fun ~ao utilidade esperada do portfolio). Os portfolios
e ientes assim obtidos est~ao rela ionados na tabela 6.11.
Os gra os 6.1, 6.2 e 6.3 des revem o omportamento do skewness dos portfolios versus
retorno esperado, desvio padr~ao  retorno esperado e desvio padr~ao  retorno esperado 
assimetria para os valores  = 1 e 0 < < 1, para o exemplo C2.
Comparando os resultados obtidos pelos dois riterios, dados nas tabelas 6.9 e 6.11, e
onsiderando que o pre o do lote da TEL4 teve uma alta onsideravel no perodo de vig^en ia
do ontrato (03/06/96 a 19/08/96), as melhores arteiras foram obtidas levando-se em onta a
assimetria dos ativos. Mas isto o orreu devido a maior assimetria do retorno das op ~oes, isto e,
devido a estarmos otimizando portfolios mistos de a ~oes e op ~oes.
Por exemplo, para  = 0:105 e = 0:100 o modelo MV nos gerou um portfolio e iente
ontendo op ~oes de venda sobre TEL4, o que n~ao o orreu om o modelo MVA. Como era
previsto, a medida que aumentamos o valor do par^ametro , para um valor xo de , o modelo
MVA forne e-nos portfolios e ientes formados por per entuais res entes em op ~oes de ompra.
Esta ara tersti a deve-se a n~ao exist^en ia de restri ~oes de aquisi ~ao de derivativos e pela alta
taxa de retorno e assimetria que elas nos ofere em.

6.2 Segundo exemplo

75

Queremos ainda salientar que o estudo de estrutura ~ao otima de arteiras mistas, formadas
por ativos fundamentais e derivativos om retornos assimetri os, foi feito aqui a nvel exploratorio. A utilidade do ter eiro momento (assimetria) no aso destes portfolios mistos e ini ialmente defendida, ja que podemos estender o modelo MV in luindo na fun ~ao utilidade esperada
a assimetria do retorno de portfolios.
Pelas observa ~oes que zemos no aptulo 5 om rela ~ao a pre is~ao no al ulo numeri o do
tensor de ter eira ordem, e ne essario ainda um aperfei oamento das te ni as de integra ~ao
utilizadas. Com isto teremos ondi ~oes de aprimorar o modelo MVA para in lus~ao de outras
op ~oes ( omo as exoti as), ujas express~oes de rentabilidade s~ao mais ompli adas do que as
express~oes das op ~oes europeias. E tambem ampliar as te ni as de visualiza ~ao e analise de
portfolios para estes asos, ressaltando assim a import^an ia do skewness de portfolios formados
por op o~es.
6.2 Segundo exemplo

Queremos aqui obter arteiras e ientes onsiderando os seguintes investimentos:


 CGAS4, INEP4, MAKR3, PETR4, TELB4, TLSP4
 Op ~ao de ompra TELBH10
 Op ~ao de venda TELBT10

Foram analisadas 81 ota ~oes das a ~oes a ima, retroativas ao dia 30/06/98. Como as op ~oes
ven em em agosto, extrapolamos os retornos logartmi os para 36 dias de preg~ao apos esta data.
Tambem al ulamos as taxas de retorno simples esperadas (tabela 6.12) para as a ~oes e op ~oes,
assim omo o desvio padr~ao de ada taxa.
A tabela 6.13 ontem a matriz de orrela ~ao entre as taxas de retorno para todos os investimentos onsiderados a ima.
Para as op ~oes, temos
 pre os de exer  io: R$ 140,00 para TELBT10 e R$ 160,00 para TELBH10
 pr^emios: R$ 17,00 para TELBT10 e R$ 0,50 para TELBH10

Resolvemos o problema (PMV) para um portfolio formado por todos os ativos e op ~oes
a ima e tambem para um arteira formada so pelas a ~oes (sem in luir as op ~oes TELBH10 e
TELBT10).
Observando as fronteiras e ientes para os dois asos (veja adiante), xado um nvel de
ris o, ou desvio padr~ao, a fronteira e iente que onsidera as op ~oes forne e-nos um portfolio
om retorno esperado maior do que o obtido pela fronteira que onsidera so as a ~oes. Isso se da
pelo fato de as op ~oes servirem omo meio de prote ~ao a maiores os ila ~oes no pre o das a ~oes
(no aso, a ~oes da TELEBRA S).

76

Exemplos de Portfolios E ientes

ativo Retorno logartmi o desvio-padr~ao do retorno


BB4
-1.782941E-01
3.728419E-01
PET4
1.517448E-01
1.478579E-01
TEL4
1.064671E-01
1.368356E-01
VAL4
3.902896E-03
1.504271E-01
WHM3
9.710318E-02
1.481048E-01
Tabela 6.1: Retorno logartimi o e respe tivo desvio padr~ao das a ~oes.
orr
BB4
PET4
TEL4
VAL4
WHM3
BB4 1.00000E+00 1.88931E-01 1.63584E-01 9.22659E-02 1.78502E-01
PET4 1.88931E-01 1.00000E+00 5.17330E-01 6.31955E-01 2.22423E-01
TEL4 1.63584E-01 5.17330E-01 1.00000E+00 5.86087E-01 1.99405E-01
VAL4 9.22659E-02 6.31955E-01 5.86087E-01 1.00000E+00 1.63505E-01
WHM3 1.78502E-01 2.22423E-01 1.99405E-01 1.63505E-01 1.00000E+00
Tabela 6.2: Coe ientes de orrela ~ao entre os retornos logartmi os das a ~oes
op ~ao pre o-exer  io (R$) pr^emio (R$)
OTC16
56.00
10.90
OTC17
60.00
6.70
OTP19
64.00
6.70
OTP24
72.00
10.90
Tabela 6.3: Dados das op ~oes

6.2 Segundo exemplo

77

a ~ao

03/06/96 19/08/96 lote


R$
R$
BB4 903,00 1.020,00 100000
PET4 1.215,00 1.254,80 10000
VAL4 2.071,42 1.848,42 100
WHM3 1.266,29 1.361,72 100000
TEL4 63,20
75,60 1000
Tabela 6.4: Cota ~ao das a ~oes

ativo taxa de retorno desvio-padr~ao


BB4 -0.1030799567 0.3463747222
PET4 0.1766551319 0.1749329755
TEL4 0.1228039581 0.1543615526
VAL4 0.0153334211 0.1536017754
WHM3 0.1141265068 0.1659164932
OTC16 0.3859981177 0.8704101868
OTC17 0.7067222457 1.3475513486
OTP19 -0.8211298158 0.4213573091
OTP24 -0.5926258435 0.5133684347
Tabela 6.5: Taxa de retorno esperada e desvio-padr~ao das a ~oes e op ~oes.

orr
BB4
PET4
TEL4
VAL4
WHM3
BB4 1.0000000000 0.1823564539 0.1578521444 0.0888047461 0.1722390250
PET4 0.1823564539 1.0000000000 0.5147879950 0.6293648575 0.2205331658
TEL4 0.1578521444 0.5147879950 1.0000000000 0.5835617107 0.1977843120
VAL4 0.0888047461 0.6293648575 0.5835617107 1.0000000000 0.1619850356
WHM3 0.1722390250 0.2205331658 0.1977843120 0.1619850356 1.0000000000
OTC16 0.1568451573 0.5118030420 0.9963686397 0.5804297367 0.1962824088
OTC17 0.1547705883 0.5054410381 0.9869885907 0.5735589167 0.1933646829
OTP19 -0.1073096454 -0.3461757989 -0.6444407927 -0.3892180077 -0.1374425047
OTP24 -0.1383966747 -0.4485565937 -0.8502748970 -0.5061052322 -0.1755751299
Tabela 6.6: Coe ientes de orrela ~ao entre as taxas de retorno das a ~oes e op ~oes

78

Exemplos de Portfolios E ientes

orr
BB4
PET4
TEL4
VAL4
WHM3
OTC16
OTC17
OTP19
OTP24

OTC16
OTC17
OTP19
0.1568451573 0.1547705883 -0.1073096454
0.5118030420 0.5054410381 -0.3461757989
0.9963686397 0.9869885907 -0.6444407927
0.5804297367 0.5735589167 -0.3892180077
0.1962824088 0.1933646829 -0.1374425047
1.0000000000 0.9953744913 -0.5969581835
0.9953744913 1.0000000000 -0.5247821186
-0.5969581835 -0.5247821186 1.0000000000
-0.8280633925 -0.7875704685 0.8654714267
Tabela 6.7: Continua ~ao da tabela 6.6.

OTP24
-0.1383966747
-0.4485565937
-0.8502748970
-0.5061052322
-0.1755751299
-0.8280633925
-0.7875704685
0.8654714267
1.0000000000

Portfolio 
e
v omposi ~ao
A
0.023 0.014 0.005 0.184 PET4
0.651 TEL4
0.165 OTP24
B
0.096 0.151 0.002 0.564 PET4
0.433 TEL4
0.003 OTP24
C
0.467 0.229 0.064 0.901 PET4
0.099 OTC17
D
0.970 0.317 0.190 0.735 PET4
0.265 OTC17
E
1.380 0.388 0.357 0.601 PET4
0.399 OTC17
F
1.820 0.465 0.603 0.456 PET4
0.544 OTC17
.

Tabela 6.8: Portfolios e ientes pelo riterio media-vari^an ia para o exemplo 1 (C1)

6.2 Segundo exemplo

Portfolio 
e
v omposi ~ao
A
0.043 0.106 0.014 0.477 PET4
0.071 VAL4
0.409 WHM3
0.043 OTP24
B
0.206 0.171 0.025 0.704 PET4
0.274 WHM3
0.022 OTC17
C
0.467 0.229 0.064 0.899 PET4
0.002 WHM3
0.099 OTC17
D
0.970 0.317 0.190 0.682 PET4
0.318 OTC17
E
1.380 0.388 0.357 0.558 PET4
0.442 OTC17
F
1.820 0.466 0.606 0.454 PET4
0.546 OTC17
Tabela 6.9: Portfolios e ientes pelo riterio media-vari^an ia para C2.

Portfolio 
e
v omposi ~ao
A
0.042 0.147 0.020 0.457 PET4
0.542 TEL4
0.001 BB4
B
0.120 0.156 0.0217 0.616 PET4
0.384 TEL4
C
0.221 0.167 0.025 0.821 PET4
0.179 TEL4
D
0.304 0.176 0.030 0.988 PET4
0.012 TEL4
Tabela 6.10: Portfolios e ientes pelo riterio media-vari^an ia para C3.

79

80

Exemplos de Portfolios E ientes




omposi ~ao do portfolio utilidade esperada
0.0230 1.000 0.3636 PET4
-0.0056
0.4999 TEL4
0.1061 VAL4
2.800 0.4992 PET4
-0.0037
0.5008 TEL4
4.000 1.0000 OTC17
6.6346
0.0965 1.000 0.6312 PET4
0.0055
0.3688 TEL4
1.400 0.6721 PET4
0.0060
0.3279 TEL4
1.800 0.7314 PET4
0.0065
0.2686 TEL4
2.600 1.0000 OTC17
4.0524
0.4670 0.400 0.8494 PET4
0.0751
0.1506 OTC17
0.800 1.0000 OTC17
0.9274
0.9700 0.100 0.6969 PET4
0.2189
0.3031 OTC17
0.200 0.6244 PET4
0.2288
0.3756 OTC17
0.300 1.0000 OTC17
0.3420
1.3800 0.100 0.5122 PET4
0.3768
0.4878 OTC17
0.200 1.0000 OTC17
0.4436
1.8200 0.100 0.2726 PET4
0.5951
0.7274 OTC17
0.200 1.0000 OTC17
0.7546

Tabela 6.11: Portfolios e ientes pelo riterio media-vari^an ia-assimetria para o onjunto C1.
ativo taxa de retorno desvio-padr~ao
CGAS4
-0.03983
0.14406
INEP4
0.05236
0.17938
MAKR3
-0.04346
0.12435
PETR4
0.036153
0.11118
TELB4
-0.02251
0.12497
TLSP4
0.07066
0.13210
TELBH10
-0.80473
2.3380
TELBT10
0.15042
0.78972
Tabela 6.12: Taxa de retorno esperada e desvio-padr~ao para os investimentos do segundo exemplo

6.2 Segundo exemplo

orr
CGAS4 INEP4 MAKR3 PETR4 TELB4
CGAS4 1.00000 0.327278 0.0742597 0.293132 0.34164
INEP4 0.327278 1.000000 -0.0129062 0.601057 0.61465
MAKR3 0.0742597 -0.0129062 1.000000 -0.140435 -0.183826
PETR4 0.293132 0.601057 -0.140435 1.000000 0.784221
TELB4 0.34164 0.61465 -0.183826 0.784221 1.000000
TLSP4 0.374945 0.554344 -0.23277 0.618559 0.66399
TELBH10 0.0877064 0.168615 -0.0430102 0.211345 0.20723
TELBT10 -0.334617 -0.597389 0.181918 -0.763793 -0.741684
Tabela 6.13: Correla ~ao entre as taxas de retorno das a ~oes e op ~oes do segundo exemplo

orr
TLSP4 TELBH10 TELBT10
CGAS4 0.374945 0.0877064 -0.334617
INEP4 0.554344 0.168615 -0.597389
MAKR3 -0.23277 -0.0430102 0.181918
PETR4 0.618559 0.211345 -0.763793
TELB4 0.66399 0.20723 -0.741684
TLSP4 1.00000 0.177058 -0.647495
TELBH10 0.177058 1.000000 -0.121658
TELBT10 -0.647495 -0.121658 1.000000
Tabela 6.14: Continua ~ao da tabela 6.13.

81

82

Exemplos de Portfolios E ientes

BB4.BB4
BB4.PET4
BB4.TEL4
BB4.VAL4
BB4.OTC16
BB4.OTC17
BB4.OTP19
BB4.OTP24
PET4.BB4
PET4.PET4
PET4.TEL4
PET4.VAL4
PET4.OTC16
PET4.OTC17
PET4.OTP19
PET4.OTP24
TEL4.BB4
TEL4.PET4
TEL4.TEL4
TEL4.VAL4
TEL4.OTC16
TEL4.OTC17
TEL4.OTP19
TEL4.OTP24
VAL4.BB4
VAL4.PET4
VAL4.TEL4
VAL4.VAL4
VAL4.OTC16
VAL4.OTC17
VAL4.OTP19
VAL4.OTP24
OTC16.BB4
OTC16.PET4
OTC16.TEL4
OTC16.VAL4
OTC16.OTC16
OTC16.OTC17
OTC16.OTP19
OTC16.OTP24
OTC17.BB4
OTC17.PET4
OTC17.TEL4
OTC17.VAL4
OTC17.OTC16
OTC17.OTC17
OTC17.OTP19
OTC17.OTP24
OTP19.BB4
OTP19.PET4
OTP19.TEL4
OTP19.VAL4
OTP19.OTC16
OTP19.OTC17
OTP19.OTP19
OTP19.OTP24
OTP24.BB4
OTP24.PET4
OTP24.TEL4
OTP24.VAL4
OTP24.OTC16
OTP24.OTC17
OTP24.OTP19
OTP24.OTP24

BB4
0.0505385252
0.0030752561
0.0023308007
0.0012892656
0.0132785857
0.0207538627
-0.3311915830
-0.3386035243
0.0030752561
0.0007138585
0.0003400919
0.0002965267
0.0022198392
0.0040654380
0.0013325650
0.0008032973
0.0023308007
0.0003400919
0.0004391309
0.0002133898
0.0029733847
0.0056692507
0.0024797822
0.0018084445
0.0012892656
0.0002965267
0.0002133898
0.0002450382
0.0015037447
0.0029612989
0.0015394342
0.0011557139
0.0132785857
0.0022198392
0.0029733847
0.0015037447
0.0188913176
0.0347165842
0.0114986329
0.0081968353
0.0207538627
0.0040654380
0.0056692507
0.0029612989
0.0347165842
0.0609494097
0.0134423026
0.0087850325
-0.3311915830
0.0013325650
0.0024797822
0.0015394342
0.0114986329
0.0134423026
-0.0157566302
-0.0138419035
-0.3386035243
0.0008032973
0.0018084445
0.0011557139
0.0081968353
0.0087850325
-0.0138419035
-0.0127156809

PET4
0.0030752561
0.0007138585
0.0003400919
0.0002965267
0.0022198392
0.0040654380
0.0013325650
0.0008032973
0.0007138585
0.0024051754
0.0008989431
0.0011675090
0.0055552581
0.0096056800
-0.4871690301
-0.5089445838
0.0003400919
0.0008989431
0.0007573136
0.0006039625
0.0050792918
0.0096074894
0.0040030421
0.0028953468
0.0002965267
0.0011675090
0.0006039625
0.0010345408
0.0038907043
0.0070424573
0.0020847373
0.0012027831
0.0022198392
0.0055552581
0.0050792918
0.0038907043
0.0321063469
0.0586652091
0.0185536755
0.0130896705
0.0040654380
0.0096056800
0.0096074894
0.0070424573
0.0586652091
0.1026386252
0.0216346313
0.0139114253
0.0013325650
-0.4871690301
0.0040030421
0.0020847373
0.0185536755
0.0216346313
-0.0255747717
-0.0224587425
0.0008032973
-0.5089445838
0.0028953468
0.0012027831
0.0130896705
0.0139114253
-0.0224587425
-0.0206404453

TEL4
0.0023308007
0.0003400919
0.0004391309
0.0002133898
0.0029733847
0.0056692507
0.0024797822
0.0018084445
0.0003400919
0.0008989431
0.0007573136
0.0006039625
0.0050792918
0.0096074894
0.0040030421
0.0028953468
0.0004391309
0.0007573136
0.0015265161
0.0007793724
0.0099321075
0.0182933718
0.0063348778
0.0044177621
0.0002133898
0.0006039625
0.0007793724
0.0008174455
0.0051925756
0.0097663174
0.0039242142
0.0028199591
0.0029733847
0.0050792918
0.0099321075
0.0051925756
0.0617328400
0.1106294470
0.0293001546
0.0197347840
0.0056692507
0.0096074894
0.0182933718
0.0097663174
0.1106294470
0.1912471487
0.0337895302
0.0201606941
0.0024797822
0.0040030421
0.0063348778
0.0039242142
0.0293001546
0.0337895302
-0.0414146218
-0.0363098170
0.0018084445
0.0028953468
0.0044177621
0.0028199591
0.0197347840
0.0201606941
-0.0363098170
-0.0334200513

VAL4
0.0012892656
0.0002965267
0.0002133898
0.0002450382
0.0015037447
0.0029612989
0.0015394342
0.0011557139
0.0002965267
0.0011675090
0.0006039625
0.0010345408
0.0038907043
0.0070424573
0.0020847373
0.0012027831
0.0002133898
0.0006039625
0.0007793724
0.0008174455
0.0051925756
0.0097663174
0.0039242142
0.0028199591
0.0002450382
0.0010345408
0.0008174455
0.0016572883
0.0050854663
0.0088699060
-0.3547914660
-0.3784112515
0.0015037447
0.0038907043
0.0051925756
0.0050854663
0.0327037764
0.0595133146
0.0181822160
0.0127229373
0.0029612989
0.0070424573
0.0097663174
0.0088699060
0.0595133146
0.1038630354
0.0211585210
0.0134302029
0.0015394342
0.0020847373
0.0039242142
-0.3547914660
0.0181822160
0.0211585210
-0.0251774405
-0.0221034374
0.0011557139
0.0012027831
0.0028199591
-0.3784112515
0.0127229373
0.0134302029
-0.0221034374
-0.0203203229

OTC16
0.0132785857
0.0022198392
0.0029733847
0.0015037447
0.0188913176
0.0347165842
0.0114986329
0.0081968353
0.0022198392
0.0055552581
0.0050792918
0.0038907043
0.0321063469
0.0586652091
0.0185536755
0.0130896705
0.0029733847
0.0050792918
0.0099321075
0.0051925756
0.0617328400
0.1106294470
0.0293001546
0.0197347840
0.0015037447
0.0038907043
0.0051925756
0.0050854663
0.0327037764
0.0595133146
0.0181822160
0.0127229373
0.0188913176
0.0321063469
0.0617328400
0.0327037764
0.3735381203
0.6575132436
0.1394270743
0.0907463435
0.0347165842
0.0586652091
0.1106294470
0.0595133146
0.6575132436
1.1235934363
0.1587891402
0.0889325628
0.0114986329
0.0185536755
0.0293001546
0.0181822160
0.1394270743
0.1587891402
-0.1964613828
-0.1742178881
0.0081968353
0.0130896705
0.0197347840
0.0127229373
0.0907463435
0.0889325628
-0.1742178881
-0.1644250366

OTC17
0.0207538627
0.0040654380
0.0056692507
0.0029612989
0.0347165842
0.0609494097
0.0134423026
0.0087850325
0.0040654380
0.0096056800
0.0096074894
0.0070424573
0.0586652091
0.1026386252
0.0216346313
0.0139114253
0.0056692507
0.0096074894
0.0182933718
0.0097663174
0.1106294470
0.1912471487
0.0337895302
0.0201606941
0.0029612989
0.0070424573
0.0097663174
0.0088699060
0.0595133146
0.1038630354
0.0211585210
0.0134302029
0.0347165842
0.0586652091
0.1106294470
0.0595133146
0.6575132436
1.1235934363
0.1587891402
0.0889325628
0.0609494097
0.1026386252
0.1912471487
0.1038630354
1.1235934363
1.8815840333
0.1735543668
0.0738254268
0.0134423026
0.0216346313
0.0337895302
0.0211585210
0.1587891402
0.1735543668
-0.2489452686
-0.2183983394
0.0087850325
0.0139114253
0.0201606941
0.0134302029
0.0889325628
0.0738254268
-0.2183983394
-0.2098481702

OTP19
-0.3311915830
0.0013325650
0.0024797822
0.0015394342
0.0114986329
0.0134423026
-0.0157566302
-0.0138419035
0.0013325650
-0.4871690301
0.0040030421
0.0020847373
0.0185536755
0.0216346313
-0.0255747717
-0.0224587425
0.0024797822
0.0040030421
0.0063348778
0.0039242142
0.0293001546
0.0337895302
-0.0414146218
-0.0363098170
0.0015394342
0.0020847373
0.0039242142
-0.3547914660
0.0181822160
0.0211585210
-0.0251774405
-0.0221034374
0.0114986329
0.0185536755
0.0293001546
0.0181822160
0.1394270743
0.1587891402
-0.1964613828
-0.1742178881
0.0134423026
0.0216346313
0.0337895302
0.0211585210
0.1587891402
0.1735543668
-0.2489452686
-0.2183983394
-0.0157566302
-0.0255747717
-0.0414146218
-0.0251774405
-0.1964613828
-0.2489452686
0.2134013931
0.1947074869
-0.0138419035
-0.0224587425
-0.0363098170
-0.0221034374
-0.1742178881
-0.2183983394
0.1947074869
0.1748466011

Tabela 6.15: Co-assimetrias entre os retornos dos elementos do portfolio C1.

OTP24
-0.3386035243
0.0008032973
0.0018084445
0.0011557139
0.0081968353
0.0087850325
-0.0138419035
-0.0127156809
0.0008032973
-0.5089445838
0.0028953468
0.0012027831
0.0130896705
0.0139114253
-0.0224587425
-0.0206404453
0.0018084445
0.0028953468
0.0044177621
0.0028199591
0.0197347840
0.0201606941
-0.0363098170
-0.0334200513
0.0011557139
0.0012027831
0.0028199591
-0.3784112515
0.0127229373
0.0134302029
-0.0221034374
-0.0203203229
0.0081968353
0.0130896705
0.0197347840
0.0127229373
0.0907463435
0.0889325628
-0.1742178881
-0.1644250366
0.0087850325
0.0139114253
0.0201606941
0.0134302029
0.0889325628
0.0738254268
-0.2183983394
-0.2098481702
-0.0138419035
-0.0224587425
-0.0363098170
-0.0221034374
-0.1742178881
-0.2183983394
0.1947074869
0.1748466011
-0.0127156809
-0.0206404453
-0.0334200513
-0.0203203229
-0.1644250366
-0.2098481702
0.1748466011
0.1633187616

6.2 Segundo exemplo

83

0.85

0.8

Expected Return

0.75

0.7

0.65

0.6

0.55

0.5

0.45
0.1

0.2

0.3

0.4
Skewness

0.5

Figura 6.1: Assimetria  Retorno Esperado para  = 1 e 0 < < 1

0.6

0.7

84

Exemplos de Portfolios E ientes

0.7
0.6

Skewness

0.5
0.4
0.3
0.2
0.1
1.5
0.9

0.8
0.7

0.5

0.6
0.5

Standard Deviation

0.4

Expected Return

Figura 6.2: Retorno Esperado  Desvio Padr~ao  Assimetria para  = 1 e 0 < < 1

6.2 Segundo exemplo

85

0.85

0.8

Expected Return

0.75

0.7

0.65

0.6

0.55

0.5

0.45
0.2

0.4

0.6

0.8
1
Standard Deviation

1.2

Figura 6.3: Desvio Padr~ao  Retorno Esperado para  = 1 e 0 < < 1

1.4

1.6

86

Exemplos de Portfolios E ientes

Cap
tulo 7

Con lus~ao
Neste trabalho estudamos uma metodologia para al ulo de matrizes de ovari^an ia entre retornos de a ~oes-objetos e op ~oes europeias. A abordagem, em termos de representa ~ao de momentos
de segunda e ter eira ordem do retorno de portfolios atraves de operadores integrais, permite
uma avalia ~ao de retornos esperados de op ~oes baseada inteiramente no omportamento dos
ativos-objeto, e n~ao baseados em series histori as de pre os de op ~oes.
O metodo usado no mer ado para analise de op ~oes baseia-se em aproxima ~oes lineares e
formula de Bla k-S holes (gregos), o que di ulta a analise de portfolios mistos de a ~oes e op ~oes
uma vez que a sensibilidade da matriz de ovari^an ia frente a a ~oes e op ~oes sobre o mesmo
ativo-objeto n~ao e aptada usando-se aproxima ~oes lineares. O al ulo exato destas matrizes
permite que analisemos portfolios grandes sem orrer o ris o de obter orrela ~ao 1 entre op ~oes e
a ~oes-objeto, e possibilitando assim o uso de te ni as de otimiza ~ao para obten ~ao de fronteiras
e ientes.
A viabilidade do uso desta metologia em termos prati os depende de metodos omputa ionalmente e ientes para a aproxima ~ao numeri a das integrais em quest~ao. Este assunto foi
dis utido nos aptulos 4 e 5.
Inserimos tambem o uso do ter eiro momento entral do retorno de portfolios para obten ~ao de arteiras e ientes. O modelo de ter eira ordem e uma extens~ao natural do modelo
media-vari^an ia ja que estamos interessados em estudar portfolios formados por derivativos om
retornos assimetri os, omo e o aso das op ~oes europeias. O paralelo entre o modelo MV
(media-vari^an ia) e MVA (media-vari^an ia-assimetria) mostrou-nos a ne essidade do uso do
ter eiro momento quando trabalhamos om op ~oes, e tambem mostrou que a aproxima ~ao de
segunda ordem e bastante boa ( omparada om a de ter eira ordem) para portfolios formados
apenas por a ~oes-objeto.
O desenvolvimento de te ni as de visualiza ~ao de superf ies e ientes geradas pelo problema
de otimiza ~ao parametri o do modelo MVA s~ao ne essarias para melhor aproveitamento de
informa ~ao e interpreta ~ao de dados.

87

88

Con lus~ao

Ap^
endi e A

Implementa ~oes em linguagem C


A.1 Rotinas de Covari^an ias

As express~oes de ovari^an ia dadas a seguir est~ao des ritas no aptulo 2, onde as variaveis e
onstantes nelas inseridas est~ao de nidas.
double ov_riri(double medi, double stdi)
/***************************************************************************/
/* vari^an ia da taxa de retorno do ativo b
asi o i
*/
/* medi = retorno logartimi o esperado do ativo i
*/
/* stdi = desvio padr~
ao do retorno log. do ativo i.
*/
/***************************************************************************/
{
double resp;

resp=exp(2.0*medi+stdi*stdi)*(exp(stdi*stdi)-1.0);
return(resp);

double ov_rirj(double medi, double medj, double stdi, double stdj,


double orij)
/***************************************************************************/
/* ovari^an ia entre a taxa de retorno dos ativos basi os i e j;
*/
/* medi, medj = retorno logartimi o esperado dos ativos i e j;
*/
/* stdi, stdj = desvio padr~
ao do retorno log. dos ativos i e j;
*/
/* orij = oef. de orrela ao entre os retornos log. dos ativos i e j
*/
/***************************************************************************/
{
double resp;

89

90

Implementa o~es em linguagem C


resp=exp(medi+medj+0.5*(stdi*stdi+stdj*stdj))*
(exp( orij*stdi*stdj)-1.0);
return(resp);

double ov_ri i(double medi, double stdi, double Si, double K i, double Ci,
double ms, double m )
/***************************************************************************/
/* ovari^an ia entre a taxa de retorno do ativo basi o i e da all
*/
/* sobre o mesmo ativo i;
*/
/* medi = retorno logartimi o esperado do ativo i;
*/
/* stdi = desvio padr~
ao do retorno log. do ativo i;
*/
/* Si = ota ao do ativo basi o i na data de abertura do ontrato t;
*/
/* K i = pre o de exer i io da all na data de expira ao T;
*/
/* Ci = premio da all na data t;
*/
/* ms = esperan a da taxa de retorno do ativo fundamental;
*/
/* m = esperan a da taxa de retorno da all;
*/
/***************************************************************************/
{
double R, E2x, Ex, E1, resp;

R=(log(K i/Si)-medi)/stdi;
E2x=0.5*exp(2.0*medi+2.0*sqr(stdi))
*(1.0-erff((R-2.0*stdi)/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*sqr(stdi))
*(1.0-erff((R-stdi)/sqrt(2.0)));
resp=(Si*E2x-K i*Ex)/Ci-ms*m ;
return(resp);

double ov_ri j(double medi, double medj, double stdi, double stdj,
double orij, double Sj, double K j, double Cj, double ms,
double m )
/***************************************************************************/
/* ovari^an ia entre a taxa de retorno do ativo basi o i e da all sobre o */
/* ativo basi o j;
*/
/* medi, medj = retorno logartimi o esperado dos ativos i e j;
*/
/* stdi, stdj = desvio padr~
ao do retorno log. dos ativos i e j;
*/
/* orij = oef. de orrela ao entre os retornos log. dos ativos i e j;
*/
/* Sj = ota ao do ativo basi o j na data de abertura do ontrato t;
*/
/* K j = pre o de exer i io da all na data de expira ao T;
*/
/* Cj = premio da all na data t;
*/

A.1 Rotinas de Covari^an ias

91

/* ms = esperan a da taxa de retorno do ativo i;


*/
/* m = esperan a da taxa de retorno da all;
*/
/***************************************************************************/
{
double R, Exy, Ex, Ey, E1, resp;
R=(log(K j/Sj)-medj)/stdj;
Exy=0.5*exp(medi+medj+0.5*(sqr(stdi)+sqr(stdj))+ orij*stdi*stdj)
*(1.0-erff((R-stdj- orij*stdi)/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*sqr(stdi))
*(1.0-erff((R- orij*stdi)/sqrt(2.0)));
Ey=0.5*exp(medj+0.5*sqr(stdj))*(1.0-erff((R-stdj)/sqrt(2.0)));
E1=0.5*(1.0-erff(R/sqrt(2.0)));
Exi=exp(medi+0.5*stdi*stdi);
resp=(Sj*Exy-K j*Ex-ms*(Sj*Ey-K j*E1))/Cj;
resp+=ms*m -m *Exi;
return(resp);
}
double ov_ripi(double medi, double stdi, double Si, double Kpi, double Pi,
double ms, double mp)
/***************************************************************************/
/* ovari^an ia entre a taxa de retorno do ativo basi o i e da put sobre o */
/* mesmo ativo i;
*/
/* medi = retorno logartimi o esperado do ativo i;
*/
/* stdi = desvio padr~
ao do retorno log. do ativo i;
*/
/* Si = ota ao do ativo basi o i na data de abertura do ontrato t;
*/
/* Kpi = pre o de exer i io da put na data de expira ao T;
*/
/* Pi = premio da put na data t.
*/
/* ms = taxa de retorno esperada do ativo fundamental;
*/
/* mp = taxa de retorno esperada da put;
*/
/***************************************************************************/
{
double R, E2x, Ex, E1, resp;
R=(log(Kpi/Si)-medi)/stdi;
E2x=0.5*exp(2.0*medi+2.0*sqr(stdi))
*(1.0+erff((R-2.0*stdi)/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*sqr(stdi))*(1.0+erff((R-stdi)/sqrt(2.0)));
resp=(-Si*E2x+Kpi*Ex)/Pi-ms*mp;
return(resp);

92

Implementa o~es em linguagem C

}
double ov_ripj(double medi, double medj, double stdi, double stdj,
double orij, double Sj, double Kpj, double Pj,
double ms, double mp)
/***************************************************************************/
/* ovari^an ia entre a taxa de retorno do ativo basi o i e da put sobre o */
/* ativo basi o j;
*/
/* medi, medj = retorno logartimi o esperado dos ativos i e j;
*/
/* stdi, stdj = desvio padr~
ao do retorno log. dos ativos i e j;
*/
/* orij = oef. de orrela ao entre os retornos log. dos ativos i e j;
*/
/* Sj = ota ao do ativo basi o j na data de abertura do ontrato t;
*/
/* Kpj = pre o de exer i io da put na data de expira ao T;
*/
/* Pj = premio da put na data t;
*/
/* ms = taxa de retorno esperada do ativo;
*/
/* mp = taxa de retorno esperada da put;
*/
/***************************************************************************/
{
double R, Exy, Ex, Ey, E1, resp;;
R=(log(Kpj/Sj)-medj)/stdj;
Exy=0.5*exp(medi+medj+0.5*(sqr(stdi)+sqr(stdj))+ orij*stdi*stdj)
*(1.0+erff((R-stdj- orij*stdi)/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*sqr(stdi))
*(1.0+erff((R- orij*stdi)/sqrt(2.0)));
Ey=0.5*exp(medj+0.5*sqr(stdj))*(1.0+erff((R-stdj)/sqrt(2.0)));
E1=0.5*(1.0+erff(R/sqrt(2.0)));
Exi=exp(medi+0.5*stdi*stdi);
resp=(-Sj*Exy+Kpj*Ex-ms*(-Sj*Ey+Kpj*E1))/Pj;
resp+=ms*mp-mp*Exi;
return(resp);
}

double ov_ i i(double medi, double stdi, double Si, double K 1, double K 2,
double C1, double C2, double m 1, double m 2)
/***************************************************************************/
/* ovari^an ia da taxa de retorno de 2 alls sobre o mesmo ativo basi o i */
/* (mas podem ter strikes diferentes e, portanto, premios diferentes);
*/
/* medi = retorno logartimi o esperado do ativo i;
*/
/* stdi = desvio padr~
ao do retorno log. do ativo i;
*/
/* Si = ota ao do ativo basi o i na data de abertura do ontrato t;
*/

A.1 Rotinas de Covari^an ias

93

/* K 1,K 2 = pre os de exer i io das alls na data de expira ao T;


*/
/* C1,C2 = premios das alls na data t;
*/
/* m 1, m 2 = taxas de retorno esperadas das alls;
*/
/***************************************************************************/
{
double E2x, Ex, E1, resp, R, K;

K=dmax(K 1,K 2);


R=(log(K/Si)-medi)/stdi;
E2x=0.5*exp(2.0*medi+2.0*sqr(stdi))
*(1.0-erff((R-2.0*stdi)/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*sqr(stdi))
*(1.0-erff((R-stdi)/sqrt(2.0)));
E1=0.5*(1.0-erff(R/sqrt(2.0)));
resp=(Si*Si*E2x-Ex*Si*(K 1+K 2)+K 1*K 2*E1)/(C1*C2)-m 1*m 2;
return(resp);

double ov_pipi(double medi, double stdi, double Si, double Kp1, double Kp2,
double P1, double P2)
/***************************************************************************/
/* ovari^an ia da taxa de retorno de 2 puts sobre o mesmo ativo basi o i */
/* (mas podem ter strikes diferentes e, portanto, premios diferentes);
*/
/* medi = retorno logartimi o esperado do ativo i;
*/
/* stdi = desvio padr~
ao do retorno log. do ativo i;
*/
/* Si = ota ao do ativo basi o i na data de abertura do ontrato t;
*/
/* Kp1,Kp2 = pre os de exer i io das puts na data de expira ao T;
*/
/* P1,P2 = premios das puts na data t;
*/
/***************************************************************************/
{
double E2x, Ex, E1, resp, R, K;

K=dmin(Kp1,Kp2);
R=(log(K/Si)-medi)/stdi;
E2x=0.5*exp(2.0*medi+2.0*sqr(stdi))
*(1.0+erff((R-2.0*stdi)/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*sqr(stdi))
*(1.0+erff((R-stdi)/sqrt(2.0)));
E1=0.5*(1.0+erff(R/sqrt(2.0)));
resp=(Si*Si*E2x-Ex*Si*(Kp1+Kp2)+Kp1*Kp2*E1)/(P1*P2)-mp1*mp2;
return(resp);

double ov_ ipi(double medi, double stdi, double Si, double K i,

94

Implementa o~es em linguagem C

double Kpi, double Ci, double Pi, double m , double mp)


/***************************************************************************/
/* ovari^an ia entre uma all e uma put sobre o mesmo ativo basi o i;
*/
/* medi = retorno logartimi o esperado do ativo i;
*/
/* stdi = desvio padr~
ao do retorno log. do ativo i;
*/
/* Si = ota ao do ativo basi o i na data de abertura do ontrato t;
*/
/* K i,Kpi = pre os de exer i io da all e da put na data T;
*/
/* Ci, Pi = premios da all e da put na data t;
*/
/* m , mp = taxas de retorno esperadas da all e da put;
*/
/***************************************************************************/
{
double E2x, Ex, E1, resp, R , Rp;

if (K i < Kpi){
R =(log(K i/Si)-medi)/stdi;
Rp=(log(Kpi/Si)-medi)/stdi;
E2x=0.5*exp(2.0*(medi+stdi*stdi))*
(erff((Rp-2.0*stdi)/sqrt(2.0))
-erff((R -2.0*stdi)/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*stdi*stdi)*
(erff((Rp-stdi)/sqrt(2.0))
-erff((R -stdi)/sqrt(2.0)));
E1=0.5*(erff(Rp/sqrt(2.0))
-erff(R /sqrt(2.0)));
resp=(-Si*Si*E2x+Si*Ex*(K i+Kpi)-K i*Kpi*E1)/(Ci*Pi);
resp-=m *mp;
return(resp);
}
else return(-m *mp);

double ov_ i j(double medi, double medj, double stdi, double stdj,
double orij, double Si, double Sj, double K i,
double K j, double Ci, double Cj, double m i, double m j)
/***************************************************************************/
/* ovari^an ia entre 2 alls sobre ativos basi os diferentes (i e j);
*/
/* medi, medj = retorno logartimi o esperado dos ativos i e j;
*/
/* stdi, stdj = desvio padr~
ao do retorno log. dos ativos i e j;
*/
/* orij = oef. de orrela ao entre os retornos log. dos ativos i e j;
*/
/* Si,Sj = ota ao dos ativos basi os i e j na data de abertura dos
*/
/* ontratos;
*/
/* K i,K j = pre o de exer i io da all na data de expira ao dos ontratos;*/
/* Ci,Cj = premios das alls na data t;
*/
/* m i, m j = taxas de retorno esperadas das alls;
*/
/***************************************************************************/

A.1 Rotinas de Covari^an ias


{

95

double resp, Exy, Ex, Ey, E1, Ri, Rj, a;


Ri=(log(K i/Si)-medi)/stdi;
Rj=(log(K j/Sj)-medj)/stdj;
a=stdi+stdj* orij;
Exy=I_ ov(1,Ri,1.0,-1.0,a,medi,medj,stdi,stdj, orij,Rj);
Exy*=exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+ orij*stdi*stdj);
Exy/=(2.0*sqrt(2.0*pi));
a=stdi;
Ex=I_ ov(2,Ri,1.0,-1.0,a,medi,medj,stdi,stdj, orij,Rj);
Ex*=exp(medi+0.5*stdi*stdi)/(2.0*sqrt(2.0*pi));
a=stdj* orij;
Ey=I_ ov(3,Ri,1.0,-1.0,a,medi,medj,stdi,stdj, orij,Rj);
Ey*=exp(medj+0.5*stdj*stdj)/(2.0*sqrt(2.0*pi));
a=0.0;
E1=I_ ov(4,Ri,1.0,-1.0,a,medi,medj,stdi,stdj, orij,Rj);
E1/=(2.0*sqrt(2.0*pi));
Exa=0.5*exp(medi+0.5*stdi*stdi)
*(1.0-erff((Ri-stdi)/sqrt(2.0)));
E1a=(1.0-erff(Ri/sqrt(2.0)));
Eyb=0.5*exp(medj+0.5*stdj*stdj)
*(1.0-erff((Rj-stdj)/sqrt(2.0)));
E1b=(1.0-erff(Rj/sqrt(2.0)));
resp=(Si*Sj*Exy-Si*K j*Ex-Sj*K i*Ey+K i*K j*E1)/(Ci*Cj);
resp-=m j*(Exa*Si-K i*E1a)/Ci;
resp-=m i*(Eyb*Sj-K j*E1b)/Cj;
resp+=m i*m j;
return(resp);

double ov_ ipj(double medi, double medj, double stdi, double stdj,
double orij, double Si, double Sj, double K i,
double Kpj, double Ci, double Pj, double m , double mp)
/***************************************************************************/
/* ovari^an ia entre uma all sobre o ativo basi o i, e uma put sobre o
*/
/* ativo basi o j;
*/
/* medi, medj = retorno logartimi o esperado dos ativos i e j;
*/
/* stdi, stdj = desvio padr~
ao do retorno log. dos ativos i e j;
*/
/* orij = oef. de orrela ao entre os retornos log. dos ativos i e j;
*/
/* Si,Sj = ota ao dos ativos basi os i e j na data de abertura dos
*/
/* ontratos;
*/
/* K i,Kpj = pre os de exer i io da all e da put na data de expira ao dos */
/* ontratos;
*/
/* Ci,Pj = premios da all e da put na data t;
*/

96

Implementa o~es em linguagem C

/* m , mp = taxas de retorno esperada da all e da put;


*/
/***************************************************************************/
{
double resp, Exy, Ex, Ey, E1, Ri, Rj, a;

Ri=(log(K i/Si)-medi)/stdi;
Rj=(log(Kpj/Sj)-medj)/stdj;
a=stdi+stdj* orij;
Exy=I_ ov(1,Ri,1.0,1.0,a,medi,medj,stdi,stdj, orij,Rj);
Exy*=exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+ orij*stdi*stdj);
Exy/=(2.0*sqrt(2.0*pi));
a=stdi;
Ex=I_ ov(2,Ri,1.0,1.0,a,medi,medj,stdi,stdj, orij,Rj);
Ex*=exp(medi+0.5*stdi*stdi)/(2.0*sqrt(2.0*pi));
a=stdj* orij;
Ey=I_ ov(3,Ri,1.0,1.0,a,medi,medj,stdi,stdj, orij,Rj);
Ey*=exp(medj+0.5*stdj*stdj)/(2.0*sqrt(2.0*pi));
a=0.0;
E1=I_ ov(4,Ri,1.0,1.0,a,medi,medj,stdi,stdj, orij,Rj);
E1/=(2.0*sqrt(2.0*pi));
Exa=0.5*exp(medi+0.5*stdi*stdi)
*(1.0-erff((Ri-stdi)/sqrt(2.0)));
E1a=(1.0-erff(Ri/sqrt(2.0)));
Eyb=0.5*exp(medj+0.5*stdj*stdj)
*(1.0+erff((Rj-stdj)/sqrt(2.0)));
E1b=(1.0+erff(Rj/sqrt(2.0)));
resp=(-Si*Sj*Exy+Si*Kpj*Ex+Sj*K i*Ey-K i*Kpj*E1)/(Ci*Pj);
resp-=mp*(Exa*Si-K i*E1a)/Ci;
resp-=m *(-Eyb*Sj+Kpj*E1b)/Pj;
resp+=m *mp;
return(resp);

double ov_pipj(double medi, double medj, double stdi, double stdj,


double orij, double Si, double Sj, double Kpi,
double Kpj, double Pi, double Pj, double mpi,
double mpj)
/***************************************************************************/
/* ovari^an ia entre puts sobre ativos basi o diferentes ( i e j);
*/
/* medi, medj = retorno logartimi o esperado dos ativos i e j;
*/
/* stdi, stdj = desvio padr~
ao do retorno log. dos ativos i e j;
*/
/* orij = oef. de orrela ao entre os retornos log. dos ativos i e j;
*/
/* Si,Sj = ota ao dos ativos basi os i e j na data de abertura dos
*/
/* ontratos;
*/
/* Kpi,Kpj = pre os de exer i io das puts na data de expira ao dos
*/

A.1 Rotinas de Covari^an ias

97

/* ontratos;
*/
/* Pi,Pj = premios das puts na data t;
*/
/* mpi, mpj = taxas de retorno esperadas das puts;
*/
/***************************************************************************/
{
double resp, Exy, Ex, Ey, E1, Ri, Rj, a;

Ri=(log(Kpi/Si)-medi)/stdi;
Rj=(log(Kpj/Sj)-medj)/stdj;
a=stdi+stdj* orij;
Exy=I_ ov(1,Ri,-1.0,1.0,a,medi,medj,stdi,stdj, orij,Rj);
Exy*=exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+ orij*stdi*stdj);
Exy/=(2.0*sqrt(2.0*pi));
a=stdi;
Ex=I_ ov(2,Ri,-1.0,1.0,a,medi,medj,stdi,stdj, orij,Rj);
Ex*=exp(medi+0.5*stdi*stdi)/(2.0*sqrt(2.0*pi));
a=stdj* orij;
Ey=I_ ov(3,Ri,-1.0,1.0,a,medi,medj,stdi,stdj, orij,Rj);
Ey*=exp(medj+0.5*stdj*stdj)/(2.0*sqrt(2.0*pi));
a=0.0;
E1=I_ ov(4,Ri,-1.0,1.0,a,medi,medj,stdi,stdj, orij,Rj);
E1/=(2.0*sqrt(2.0*pi));
Exa=0.5*exp(medi+0.5*stdi*stdi)
*(1.0+erff((Ri-stdi)/sqrt(2.0)));
E1a=(1.0+erff(Ri/sqrt(2.0)));
Eyb=0.5*exp(medj+0.5*stdj*stdj)
*(1.0+erff((Rj-stdj)/sqrt(2.0)));
E1b=(1.0+erff(Rj/sqrt(2.0)));
resp=(Si*Sj*Exy-Si*Kpj*Ex-Sj*Kpi*Ey+Kpi*Kpj*E1)/(Pi*Pj);
resp+=mpj*(Exa*Si-Kpi*E1a)/Pi;
resp+=mpi*(Eyb*Sj-Kpj*E1b)/Pj;
resp+=mpi*mpj;
return(resp);

double E_ri(double medi, double stdi)


/* esperan a da taxa de retorno do ativo i. */
{
return(exp(medi+0.5*sqr(stdi)));
}
double E_ i(double medi, double stdi, double Si, double K i, double Ci)
/***************************************************************************/
/* experan a da taxa de retorno da all = (max(K i(T)-Si(t),0)-Ci(t))/Ci(t)*/

98

Implementa o~es em linguagem C

/* t = data do ini io do ontrato;


*/
/* T = data de expira ao do ontrato;
*/
/***************************************************************************/
{
double R, Ex, E1, resp;

R=(log(K i/Si)-medi)/(stdi);
Ex=(1.0-erff((R-stdi)/sqrt(2.0)))*exp(medi+0.5*sqr(stdi))*0.5;
E1=0.5*(1.0-erff(R/sqrt(2.0)));
resp=(Si*Ex-K i*E1)/Ci;
return(resp);

double E_pi(double medi, double stdi, double Si, double Kpi, double Pi)
/***************************************************************************/
/* experan a da taxa de retorno da put = (max(-Kpi(T)+Si(t),0)-Pi(t))/Pi(t)*/
/* t = data do ini io do ontrato;
*/
/* T = data de expira ao do ontrato;
*/
/***************************************************************************/
{
double R, Ex, E1, resp;

R=(log(Kpi/Si)-medi)/(stdi);
Ex=(1.0+erff((R-stdi)/sqrt(2.0)))*exp(medi+0.5*sqr(stdi))*0.5;
E1=0.5*(1.0+erff(R/sqrt(2.0)));
resp=(-Si*Ex+Kpi*E1)/Pi;
return(resp);

double ss(int i, int j, double *med, double *std, double ** or, int *atv)
/***************************************************************************/
/* hamada da ovari^an ia que envolve somente 2 ativos basi os;
*/
/* a fun ao de ovari^an ia apropriada vai depender se i e j referem-se
*/
/* ao mesmo ativo basi o.
*/
/***************************************************************************/
{
double resp=1.0E+308;
if (atv[i == atv[j){
resp= ov_riri(med[atv[i,std[atv[i);
}
else{
resp= ov_rirj(med[atv[i,med[atv[j,std[atv[i,

A.1 Rotinas de Covari^an ias

}
return(resp);

99
std[atv[j, or[atv[i[atv[j);

double s (int i, int j, double *med, double *std, double ** or, double *S,
double *K, double *P, int *atv, double *esp)
/***************************************************************************/
/* hamada da ovari^an ia que envolve um ativo basi o e uma all;
*/
/* a fun ao de ovari^an ia apropriada vai depender se i e j referem-se
*/
/* ao mesmo ativo basi o.
*/
/***************************************************************************/
{
double resp=1.0E+308;

if (atv[i == atv[j){
resp= ov_ri i(med[atv[i,std[atv[i,S[j,K[j,P[j,esp[i,
esp[j);
}
else{
resp= ov_ri j(med[atv[i,med[atv[j,std[atv[i,
std[atv[j, or[atv[i[atv[j,S[j,
K[j,P[j,esp[i,esp[j);
}
return(resp);

double sp(int i, int j, double *med, double *std, double ** or, double *S,
double *K, double *P, int *atv, double *esp)
/***************************************************************************/
/* hamada da ovari^an ia que envolve um ativo basi o e uma put;
*/
/* a fun ao de ovari^an ia apropriada vai depender se i e j referem-se
*/
/* ao mesmo ativo basi o.
*/
/***************************************************************************/
{
double resp=1.0E+308;
if (atv[i == atv[j){
resp= ov_ripi(med[atv[i,std[atv[i,S[j,K[j,P[j
esp[i,esp[j);
}
else{
resp= ov_ripj(med[atv[i,med[atv[j,std[atv[i,std[atv[j,
or[atv[i[atv[j,S[j,K[j,P[j,

100

Implementa o~es em linguagem C

}
return(resp);

esp[i,esp[j);

double (int i, int j, double *med, double *std, double ** or, double *S,
double *K, double *P, int *atv, double *esp)
/***************************************************************************/
/* hamada da ovari^an ia que envolve 2 alls;
*/
/* a fun ao de ovari^an ia apropriada vai depender se i e j referem-se
*/
/* ao mesmo ativo basi o.
*/
/***************************************************************************/
{
double resp=1.0E+308;

if (atv[i == atv[j){
resp= ov_ i i(med[atv[i,std[atv[i,S[i,K[i,K[j,P[i,P[j
esp[i,esp[j);
}
else{
resp= ov_ i j(med[atv[i,med[atv[j,std[atv[i,std[atv[j,
or[atv[i[atv[j,S[i,S[j,K[i,K[j,P[i,P[j,
esp[i,esp[j);
}
return(resp);

double p(int i, int j, double *med, double *std, double ** or, double *S,
double *K, double *P, int *atv, double *esp)
/***************************************************************************/
/* hamada da ovari^an ia que envolve uma all e uma put;
*/
/* a fun ao de ovari^an ia apropriada vai depender se i e j referem-se
*/
/* ao mesmo ativo basi o.
*/
/***************************************************************************/
{
double resp=1.0E+308;
if (atv[i == atv[j){
resp= ov_ ipi(med[atv[i,std[atv[i,S[i,K[i,K[j,P[i,P[j,
esp[i,esp[j);
}
else{
resp= ov_ ipj(med[atv[i,med[atv[j,std[atv[i,std[atv[j,
or[atv[i[atv[j,S[i,S[j,K[i,K[j,P[i,P[j,

A.1 Rotinas de Covari^an ias

}
return(resp);

101
esp[i,esp[j);

double pp(int i, int j, double *med, double *std, double ** or, double *S,
double *K, double *P, int *atv, double *esp)
/***************************************************************************/
/* hamada da ovari^an ia que envolve 2 puts;
*/
/* a fun ao de ovari^an ia apropriada vai depender se i e j referem-se
*/
/* ao mesmo ativo basi o.
*/
/***************************************************************************/
{
double resp=1.0E+308;

if (atv[i == atv[j){
resp= ov_pipi(med[atv[i,std[atv[i,S[i,K[i,K[j,P[i,P[j,
esp[i,esp[j);
}
else{
resp= ov_pipj(med[atv[i,med[atv[j,std[atv[i,std[atv[j,
or[atv[i[atv[j,S[i,S[j,K[i,K[j,P[i,P[j,
esp[i,esp[j);
}
return(resp);

/***************************************************************************/
/********
Rotinas para o al ulo numeri o das integrais
*******/
/***************************************************************************/
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define

EPS 3.0e-7
ITMAX 100
FPMIN 1.0e-30
FUNC(x) ((*fun )(x))
EPS1 1.0e-5
JMAX 20
NMAX 20
JMAx 40
MAXIT 40
UNUSED (-1.11e30)
SIGN(a,b) ((b) >=0.0 ? fabs(a) : -fabs(a))
pi 3.141592653589793

102

Implementa o~es em linguagem C

void nrerror( har error_text[)


{

fprintf(stderr,"Numeri al Re ipes run-time error...\n");


fprintf(stderr,"%s\n",error_text);
fprintf(stderr,"...now exiting to system...\n");
exit(1);

double gammln(double xx)


{
double x,y,tmp,ser;
stati double of[6={76.18009172947146,-86.50532032941677,
24.01409824083091,-1.231739572450155,
0.1208650973866179e-2,-0.5395239384953e-5};
int j;

y=x=xx;
tmp=x+5.5;
tmp-=(x+0.5)*log(tmp);
ser=1.000000000190015;
for (j=0;j<=5;j++) ser+= of[j/++y;
return -tmp+log(2.5066282746310005*ser/x);

void gser(double *gamser, double a, double x, double *gln)


{
double gammln(double xx);
void nrerror( har error_text[);
int n;
double sum,del,ap;
*gln=gammln(a);
if (x <= 0.0){
if (x < 0.0) nrerror(" x less than 0 in routine gser ");
*gamser=0.0;
return;
}
else{
ap=a;
del=sum=1.0/a;
for (n=1;n<=ITMAX;n++){
++ap;

A.1 Rotinas de Covari^an ias


del*=x/ap;
sum+=del;
if (fabs(del) < fabs(sum)*EPS){
*gamser=sum*exp(-x+a*log(x)-(*gln));
return;
}

}
nrerror("a too large, ITMAX too small in routine gser");
return;

void g f(double *gamm f, double a, double x, double *gln)


{
double gammln(double xx);
void nrerror( har error_text[);
int i;
double an,b, ,d,del,h;

*gln=gammln(a);
b=x+1.0-a;
=1.0/FPMIN;
d=1.0/b;
h=d;
for (i=1;i<=ITMAX; i++){
an=-i*(i-a);
b+=2.0;
d=an*d+b;
if (fabs(d) < FPMIN) d=FPMIN;
=b+an/ ;
if (fabs( ) < FPMIN) =FPMIN;
d=1.0/d;
del=d* ;
h*=del;
if (fabs(del-1.0) < EPS) break;
}
if (i > ITMAX) nrerror("a too large, ITMAX too small in g f");
*gamm f=exp(-x+a*log(x)-(*gln))*h;

double gammp(double a, double x)


{
void g f(double *gamm f, double a, double x, double *gln);
void gser(double *gamser, double a, double x, double *gln);
void nerror( har error_text[);
double gamser, gamm f, gln;

103

104

Implementa o~es em linguagem C

if (x < 0.0 || a <= 0.0) nrerror("Invalid arguments in routine gammp");


if (x < (a+1.0)){
gser(&gamser,a,x,&gln);
return gamser;
}
else{
g f(&gamm f,a,x,&gln);
return 1.0-gamm f;
}

double gammq(double a, double x)


{
void g f(double *gamm f, double a, double x, double *gln);
void gser(double *gamser, double a, double x, double *gln);
void nrerror( har error_text[);
double gamser, gamm f, gln;

if (x < 0.0 || a <= 0.0) nrerror("Invalid arguments in routine gammq");


if (x < (a+1.0)){
gser(&gamser,a,x,&gln);
return 1.0-gamser;
}
else{
g f(&gamm f,a,x,&gln);
return gamm f;
}

double erff(double x)
{
double gammp(double a, double x);
return x < 0.0 ? -gammp(0.5,x*x) : gammp(0.5,x*x);
}
double erff (double x)
{
double gammp(double a, double x);
double gammq(double a, double x);
}

return x < 0.0 ? 1.0+gammp(0.5,x*x) : gammq(0.5,x*x);

A.1 Rotinas de Covari^an ias

105

double fun ( har op ao, double y, double sgn, double a, double medi,
double medj, double stdi, double stdj, double orij, double Rj)
/***************************************************************************/
/* a = elemento do termo "exp{(y-a)^2}"
*/
/* y = no'da integra ao numeri a
*/
/* sgn = sinal de erff
*/
/***************************************************************************/
{
double resp;
swit h(op ao){
ase 1:
resp=(Rj-y* orij-stdj*(1.0- orij* orij))/
sqrt(2.0*(1.0- orij* orij));
resp=(1.0+sgn*erff(resp))*exp(-0.5*sqr(y-a));
return(resp);
ase 2: /* relativo a Ex */
resp=(Rj-y* orij)/sqrt(2.0*(1.0- orij* orij));
resp=(1.0+sgn*erff(resp))*exp(-0.5*sqr(y-a));
return(resp);
ase 3: /* relativo a Ey */
resp=(Rj-y* orij-stdj*(1.0- orij* orij))/
sqrt(2.0*(1.0- orij* orij));
resp=(1.0+sgn*erff(resp))*exp(-0.5*sqr(y-a));
return(resp);
ase 4: /* relativo a E1 */
resp=(Rj-y* orij)/sqrt(2.0*(1.0- orij* orij));
resp=(1.0+sgn*erff(resp))*exp(-0.5*sqr(y-a));
return(resp);
ase 9:

return((1.0-erff(3.0*y-2.0))*exp(-y-y*y));
/* esta e' para testes... */

}
printf(" \n deu erro !! ");
return(1.0E308);

double trapezio(double *F, int n, double delta)


{

106

Implementa o~es em linguagem C


int i,k,l,ini, fim;
double s;

ini=0;
s=0.0;
for (k=0;k<n;k++){
for (l=1,i=1;i<=n-k;i++) l<<=1;
fim=ini+l;
for (i=ini; i<=fim; i++) s+=F[i*delta/l;
s-=delta*(F[ini+F[fim)/(2*l);
ini=fim;
}
return s;

double extrap(double *T, int n)


/***************************************************************************/
/* faz o pro esso de extrapola
~ao no vetor T[1..n, onde T[i e' a
*/
/* i-
esima aproxima ~ao da integral.
*/
/***************************************************************************/
{
int j,k,m;

T[0=-1.0;
for (k=1;k<n;k++){
for (m=4,j=1;j<k;j++) m<<=2;
for (j=1;j<=(n-k);j++){
T[j=(m*T[j+1-T[j)/(m-1);
if (fabs(T[j-T[j-1)<0.000000001)
return(T[j); /* riterio de parada */
}
}
return(T[1);

double integral( har op ao, double lim, double sgn, double L, double a,
double medi, double medj, double stdi, double stdj,
double orij, double Rj)
/***************************************************************************/
/* al ula a integral pelo metodo do trapezio e apli a extrapola ao de
*/
/* Ri hardson
*/
/* op ao = indi a qual fun ao a ser usada omo integrando na hamada de
*/
/*
"fun ";
*/
/* lim = +1 se estivermos integrando de L ate' +infinito
*/

A.1 Rotinas de Covari^an ias

107

/*
-1 se estivermos integrando de -infinito ate' L
*/
/* sgn = sinal da fun ao erff na hamada de "fun ";
*/
/* a : faz parte do orpo da fun ao a ser integrada (exp[-(x-a)^2)...
*/
/* medi,medj,stdi,stdj, orij,Rj = onstantes ne essarias para montar a
*/
/* fun ao
*/
/* integrando na hamada de "fun ".
*/
/***************************************************************************/
{
double *F=NULL, *X=NULL, *T=NULL;
double quad, delta, erro;
int nf,k, n;
long m, Nf,i, j,l,N;
delta=2.0;
X=alo _vet(3);
F=alo _vet(3);
T=alo _vet(3);
N=3;
n=1;
erro=1.0;
while (( (erro > 0.0001) | (erro < -0.0001)) | (n <= 8)){
if (n>1){
for (m=2,j=1;j<n;j++) m<<=1;
Nf=(m-1)*2+1;
X=realo a(X,Nf);
F=realo a(F,Nf);
T=realo a(T,n);
for (i=N-1;i>0;i--){
X[2*i=X[i;
F[2*i=F[i;
}
m=0;
j=0;
for (k=0;k<n-1;k++){
for (l=1,i=1;i<=n-k;i++) l<<=1;
m+=l;
for (i=j;i< m/2;i++){
X[2*i+1=X[2*i+lim*delta/l;
F[2*i+1=fun (op ao,X[2*i+1,sgn,a,
medi,medj,stdi,stdj,
orij,Rj);
}
j=i;
}
for (i=Nf-2;i<Nf;i++){

108

Implementa o~es em linguagem C

}
N=Nf;

X[i=X[i-1+lim*delta/2;
F[i=fun (op ao,X[i,sgn,a,medi,medj,stdi,
stdj, orij,Rj);

}
else for (i=0;i<=2;i++){
X[i=L+lim*i*delta/2;
F[i=fun (op ao,X[i,sgn,a,medi,medj,stdi,
stdj, orij,Rj);
}
T[n=trapezio(F,n,delta);
if (n > 1) erro = T[n-T[n-1;
n++;

}
n--;
nf=n;
quad=extrap(T,nf);
free(X);
free(F);
free(T);
return(quad);

double romb_ ov( har op ao, double a, double b, double sgn, double medi,
double medj, double stdi, double stdj, double orij,
double x0, double Rj)
/***************************************************************************/
/* metodo de romberg para integra ao em dominios finitos (a,b)
*/
/* x0 = termo da fun ao que leva a exponen ial : exp[(x-L)^2/2
*/
/***************************************************************************/
{
double *T=NULL, *F=NULL, *X=NULL;
double h,resp;
int i,j,n,fim,l;
X=alo _vet(1);
T=alo _vet(1);
F=alo _vet(1);
n=1;
fim=0;
T[0=-1;
while ((!fim) && (n<9)){
for (l=2,j=1;j<n;j++) l<<=1;
T=realo a(T,n+1);

/* l=2^n */

A.1 Rotinas de Covari^an ias

109

F=realo a(F,l+1);
X=realo a(X,l+1);
T[n=0.0;
h=(b-a)/l;
if (n>1){
for (j=l/2;j>=1;j--){
X[2*j=X[j;
F[2*j=F[j;
}
for (j=1;j<=l/2;j++){
i=2*j-1;
X[i=X[i-1+h;
F[i=fun (op ao,X[i,sgn,x0,medi,medj,stdi,
stdj, orij,Rj);
}
for (i=0;i<l;i++) T[n+=F[i+F[i+1;
T[n*=0.5*h;
if ((fabs(T[n-T[n-1) < 0.00001) | n==8) fim=1;
else n++;
}
else{
for (i=0;i<=l;i++){
X[i=a+i*h;
F[i=fun (op ao,X[i,sgn,x0,medi,medj,stdi,
stdj, orij,Rj);
}
for (i=0;i<l;i++) T[n+=F[i+F[i+1;
T[n*=0.5*h;
n++;
}

}
resp=extrap(T,n);
free(T);
free(X);
free(F);
return(resp);

double I_ ov( har op ao, double L, double lim, double sgn, double a,
double medi, double medj, double stdi, double stdj,
double orij, double Rj)
/***************************************************************************/
/* al ulo da integral de f(x)*exp{(x-a)^2} (o orpo de f(x) e'dado pela */
/* "op ao"),
*/
/* de L ate' (+-) infinito;
*/
/* lim = +1 se estamos integrando de L ate' +infinito;
*/

110

Implementa o~es em linguagem C

/*
-1 se
"
de -infinito ate' L;
*/
/* sgn = sinal multipli ando a fun ao erff na "op ao";
*/
/***************************************************************************/
{
double I, delta;

delta=1.0;
if (fabs(a-L) < 0.5*delta){
I=integral(op ao,lim,sgn,L,a,medi,medj,stdi,stdj, orij,Rj);
return(I);
}
else{
if ((L-a)*lim > 0.0){
I=integral(op ao,lim,sgn,L,a,medi,medj,stdi,stdj,
orij,Rj);
return(I);
}
else{
I=integral(op ao,lim,sgn,a,a,medi,medj,stdi,stdj,
orij,Rj);
if (L > a)
I+=romb_ ov(op ao,a,L,sgn,medi,medj,stdi,stdj,
orij,a,Rj);
else
I+=romb_ ov(op ao,L,a,sgn,medi,medj,stdi,stdj,
orij,a,Rj);
return(I);
}
}

/***************************************************************************/
/***** Fun ~oes de alo a ~ao, leitura e es rita de vetores e matrizes *****/
/***************************************************************************/
double dmax(double a, double b)
{
if (a >= b) return(a);
else return(b);
}
double dmin(double a, double b)
{
if (a >= b) return(b);
else return(a);

A.1 Rotinas de Covari^an ias


}
double sqr(double y)
{
return(y*y);
}
double **alo _mat(int n)
/* alo a uma matriz */
{
double **R=NULL;
int i;

if ((R = (double**)mallo (sizeof(double*)*(n))) == NULL){


printf(" memoria insufi iente!");
exit(1);
}
for (i=0;i<n;i++)
if ((R[i = (double*)mallo (sizeof(double)*(n))) == NULL){
printf(" memoria insufi iente!");
exit(1);
}
return(R);

double *alo _vet(int n)


/* alo a um vetor */
{
double *R=NULL;

if ((R=(double*)mallo (sizeof(double)*(n)))==NULL){
printf("Memoria Insufi iente para alo ar X!!");
exit(1);
}
return(R);

int *alo _vet_int(int n)


/* alo a um vetor de inteiros */
{
int *R=NULL;
if ((R=(int*)mallo (sizeof(int)*(n)))==NULL){

111

112

Implementa o~es em linguagem C


printf("Memoria Insufi iente para alo ar X!!");
exit(1);

}
return(R);

int *le_vet_int( har *arq, int n)


/*
leitura de um arquivo que ont
em os dados do vetor de media,desvio padr~
ao, et .
*/
{
int i;
int *R;
FILE *fp;

if ((fp = fopen(arq,"r")) == NULL){


printf(" Erro na abertura do arquivo ");
exit(1);
}
R=alo _vet_int(n);
i=0;
while (!feof(fp) && (i<n)){
fs anf(fp,"%d ", &R[i);
i++;
}
f lose(fp);
return(R);

double *le_vet( har *arq, int n)


/*
leitura de um arquivo que ont
em os dados do vetor de media,desvio padr~
ao,et .
*/
{
int i;
double *R;
FILE *fp;
if ((fp = fopen(arq,"r")) == NULL){
printf(" Erro na abertura do arquivo ");
exit(1);
}
R=alo _vet(n);

A.1 Rotinas de Covari^an ias

i=0;
while (!feof(fp) && (i<n)){
fs anf(fp,"%lf ", &R[i);
i++;
}
f lose(fp);
return(R);

double **le_mat( har *arq, int *n)


/* fun ao de leitura da matriz dos oef. de orrela ao */
{
int i,j;
double **R;
FILE *fp;

if ((fp = fopen(arq,"r")) == NULL){


printf(" Erro na abertura do arquivo ");
exit(1);
}
fs anf(fp," %d ",n);
R=alo _mat(*n);
i=0;
while (!feof(fp) && (i<*n)){
for (j=0;j<*n;j++) fs anf(fp,"%lf ", &R[i[j);
i++;
}
f lose(fp);
return(R);

double *realo a(double *Y, int Nf)


/* realo a um vetor */
{
double *R=NULL;

if ((R=(double*)reallo (Y,sizeof(double)*(Nf+3)))==NULL){
printf("Memoria Insufi iente para alo ar X!!");
exit(1);
}
return(R);

void es reve_vet( har *arq, double *v, har *str[, int n)

113

114

Implementa o~es em linguagem C

/* es reve em arquivo o onteudo do vetor v */


{
int i;
FILE *fp=NULL;
if ((fp=fopen(arq,"w+")) == NULL){
printf(" erro na abertura do arquivo %s",arq);
exit(1);
}
fprintf(fp," vet={");
for (i=0;i<n-1;i++) fprintf(fp," %.10lf%s, ",v[i,str[i);
fprintf(fp," %.10lf%s };",v[i,str[i);
f lose(fp);
}
void es reve_mat( har *arq,double **m, int n)
/* es reve em arquivo o onteudo da matriz m */
{
int i,j;
FILE *fp=NULL;

if ((fp=fopen(arq,"w+")) == NULL){
printf("Erro na abertura do arquivo %s",arq);
exit(1);
}
fprintf(fp, " mat = [ \n");
for (i=0;i<n;i++){
for (j=0;j<n-1;j++){
fprintf(fp," %.10lf, ",m[i[j);
}
fprintf(fp," %.10lf;\n ",m[i[j);
}
fprintf(fp," \n");
f lose(fp);

void es reve_mat3d( har *arq,double ***m, int n)


/* es reve em arquivo o onteudo da matriz m */
{
int i,j,k;
FILE *fp=NULL;
if ((fp=fopen(arq,"w+")) == NULL){

A.1 Rotinas de Covari^an ias


printf("Erro na abertura do arquivo %s",arq);
exit(1);

}
for (k=0;k<n;k++){
fprintf(fp, " k=%d : [ \n",k);
for (i=0;i<n;i++){
for (j=0;j<n-1;j++){
fprintf(fp," %.10f, ",m[i[j[k);
}
fprintf(fp," %.10f;\n ",m[i[j[k);
}
fprintf(fp," \n");
}
f lose(fp);

double ***alo _mat3d(int n)


/* alo a uma matriz tri-dimensional nxnxn*/
{
double ***R=NULL;
int i,j;

if ((R = (double***)mallo (sizeof(double*)*(n))) == NULL){


printf(" memoria insufi iente!");
exit(1);
}
for (i=0;i<n;i++){
if ((R[i = (double**)mallo (sizeof(double)*(n))) == NULL){
printf(" memoria insufi iente!");
exit(1);
}
for (j=0;j<n;j++){
if ((R[i[j =
(double*)mallo (sizeof(double)*(n))) == NULL){
printf(" memoria insufi iente!");
exit(1);
}
}
}
return(R);

115

116

Implementa o~es em linguagem C

A.2 Rotinas de Co-assimetrias

117

A.2 Rotinas de Co-assimetrias


/***************************************************************************/
/* express~
oes de assimetria que so envolvem integral simples (fun
~ao erff) */
/***************************************************************************/
double m_ririri(double medi, double stdi)
/* ter eiro momento da taxa de retorno ri */
{
double Ex,E2x,E3x,resp;

Ex=exp(medi+0.5*stdi*stdi);
E2x=exp(2.0*(medi+stdi*stdi));
E3x=exp(0.5*(6.0*medi+9.0*stdi*stdi));
resp=E3x-3.0*E2x*Ex+2.0*Ex*Ex*Ex;
return(resp);

double m_riri i(double medi, double stdi, double Si, double K i, double Ci,
double ms, double m )
/***************************************************************************/
/* oskewnes entre a taxa de retorno da all (sobre o i-
esimo ativo) om o */
/* proprio ativo;
*/
/* medi, stdi = media e desvio p. do ativo i;
*/
/* K i = strike pri e da all;
*/
/* Ci = premio da all;
*/
/* Si = ota ao do ativo i na data t=0.
*/
/* ms = taxa de retorno esperada do ativo objeto;
*/
/* mp = taxa de retorno esperada da put;
*/
/***************************************************************************/
{
double Ex, E2x, E3x,E2xi,resp,f;

f=(log(K i/Si)-medi)/stdi);
E3x=0.5*exp(3.0*medi+4.5*stdi*stdi)*(1.0-erff((f-3.0*stdi)/sqrt(2.0)));
E2x=0.5*exp(2.0*medi+2.0*stdi*stdi)*(1.0-erff((f-2.0*stdi)/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*stdi*stdi)*(1.0-erff((f-stdi)/sqrt(2.0)));
E2xi=exp(2.0*medi+2.0*stdi*stdi);
resp=(Si*E3x-K i*E2x)/Ci-2.0*ms*(Si*E2x-K i*Ex)/Ci;
resp+=-ms*E2xi+2.0*ms*ms*m
return(resp);

118

Implementa o~es em linguagem C

double m_riripi(double medi, double stdi, double Si, double Kpi, double Pi
double ms, double mp)
/***************************************************************************/
/* oskewnes entre a taxa de retorno da put (sobre o i-
esimo ativo) om o */
/* proprio ativo;
*/
/* medi, stdi = media e desvio p. do ativo i;
*/
/* Kpi = strike pri e da put;
*/
/* Pi = premio da put;
*/
/* Si = ota ao do ativo i na data t=0.
*/
/* ms = taxa de retorno esperada do ativo objeto;
*/
/* mp = taxa de retorno esperada da put;
*/
/***************************************************************************/
{
double Ex, E2x, E3x,E2xi,resp,f;
f=(log(Kpi/Si)-medi)/stdi);
E3x=0.5*exp(3.0*medi+4.5*stdi*stdi)*(1.0+erff((f-3.0*stdi)/sqrt(2.0)));
E2x=0.5*exp(2.0*medi+2.0*stdi*stdi)*(1.0+erff((f-2.0*stdi)/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*stdi*stdi)*(1.0+erff((f-stdi)/sqrt(2.0)));
E2xi=exp(2.0*medi+2.0*stdi*stdi);
resp=(-Si*E3x+Kpi*E2x)/Pi-2.0*ms*(-Si*E2x+Kpi*Ex)/Pi;
resp+=-mp*E2xi+2.0*ms*ms*mp
return(resp);
}

double m_ri i i(double medi, double stdi, double Si, double K 1, double K 2,
double C1, double C2, double ms, double m 1, double m 2)
/***************************************************************************/
/* oskewnes entre a taxa de retorno das alls sobre o i-
esimo ativo om o */
/* proprio ativo;
*/
/* medi, stdi = media e desvio p. do ativo i;
*/
/* K 1,K 2 = strike pri e das alls;
*/
/* C1,C2 = premios das alls;
*/
/* Si = ota ao do ativo i na data t=0.
*/
/* ms = taxa de retorno esperada do ativo objeto;
*/
/* m 1, m 2 = taxas de retorno esperadas das alls;
*/
/***************************************************************************/
{
double Ex, E2x, E3x,E1,E2x1,Ex1,E2x2,Ex2,resp,K,f;
K=dmax(K 1,K 2);

A.2 Rotinas de Co-assimetrias

119

f=(log(K/Si)-medi)/stdi);
E3x=0.5*exp(3.0*medi+4.5*stdi*stdi)*(1.0-erff((f-3.0*stdi)/sqrt(2.0)));
E2x=0.5*exp(2.0*medi+2.0*stdi*stdi)*(1.0-erff((f-2.0*stdi)/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*stdi*stdi)*(1.0-erff((f-stdi)/sqrt(2.0)));
E1=0.5*(1.0-erff(f));
f=(log(K 1/Si)-medi)/stdi);
E2x1=0.5*exp(2.0*medi+2.0*stdi*stdi)*(1.0-erff((f-2.0*stdi)/sqrt(2.0)));
Ex1=0.5*exp(medi+0.5*stdi*stdi)*(1.0-erff((f-stdi)/sqrt(2.0)));
f=(log(K 2/Si)-medi)/stdi);
E2x2=0.5*exp(2.0*medi+2.0*stdi*stdi)*(1.0-erff((f-2.0*stdi)/sqrt(2.0)));
Ex2=0.5*exp(medi+0.5*stdi*stdi)*(1.0-erff((f-stdi)/sqrt(2.0)));
resp=(Si*Si*E3x-Si*E2x*(K 1+K 2)+K 1*K 2*Ex)/(C1*C2);
resp-=ms*(Si*Si*E2x-Si*Ex*(K 1+K 2)+K 1*K 2*E1)/(C1*C2);
resp-=m 1*(Si*E2x2-K 2*Ex2)/C2;
resp-=m 2*(Si*E2x1-K 1*Ex1)/C1;
resp+=2.0*ms*m 2*m 1;
return(resp);

double m_ripipi(double medi, double stdi, double Si, double Kp1, double Kp2,
double P1, double P2, double ms, double mp1, double mp2)
/***************************************************************************/
/* oskewnes entre a taxa de retorno das puts sobre o i-
esimo ativo om o */
/* proprio ativo;
*/
/* medi, stdi = media e desvio p. do ativo i;
*/
/* Kp1,Kp2 = strike pri e das puts;
*/
/* P1,P2 = premios das puts;
*/
/* Si = ota ao do ativo i na data t=0.
*/
/* ms = taxa de retorno esperada do ativo objeto
*/
/* mp1, mp2 = taxas de retorno esperadas das puts
*/
/***************************************************************************/
{
double Ex, E2x, E3x,E1,E2x1,Ex1,E2x2,Ex2,resp,K,f;
K=dmin(Kp1,Kp2);
f=(log(K/Si)-medi)/stdi;
E3x=0.5*exp(3.0*medi+4.5*stdi*stdi)*(1.0+erff((f-3.0*stdi)/sqrt(2.0)));
E2x=0.5*exp(2.0*medi+2.0*stdi*stdi)*(1.0+erff((f-2.0*stdi)/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*stdi*stdi)*(1.0+erff((f-stdi)/sqrt(2.0)));
E1=0.5*(1.0+erff(f));
f=(log(Kp1/Si)-medi)/stdi);
E2x1=0.5*exp(2.0*medi+2.0*stdi*stdi)*(1.0+erff((f-2.0*stdi)/sqrt(2.0)));
Ex1=0.5*exp(medi+0.5*stdi*stdi)*(1.0+erff((f-stdi)/sqrt(2.0)));
f=(log(Kp2/Si)-medi)/stdi);
E2x2=0.5*exp(2.0*medi+2.0*stdi*stdi)*(1.0+erff((f-2.0*stdi)/sqrt(2.0)));

120

Implementa o~es em linguagem C


Ex2=0.5*exp(medi+0.5*stdi*stdi)*(1.0+erff((f-stdi)/sqrt(2.0)));
resp=(Si*Si*E3x-Si*E2x*(Kp1+Kp2)+Kp1*Kp2*Ex)/(P1*P2);
resp-=ms*(Si*Si*E2x-Si*Ex*(Kp1+Kp2)+Kp1*Kp2*E1)/(P1*P2);
resp-=mp1*(-Si*E2x2+Kp2*Ex2)/P2;
resp-=mp2*(-Si*E2x1+Kp1*Ex1)/P1;
resp+=2.0*ms*mp2*mp1;
return(resp);

double m_ri ipi(double medi, double stdi, double Si, double K i, double Kpi,
double Ci, double Pi, double ms, double m , double mp)
/***************************************************************************/
/* oskewnes entre a taxa de retorno da put e da all sobre o i-
esimo ativo*/
/* om o proprio ativo;
*/
/* medi, stdi = media e desvio p. do ativo i;
*/
/* K i,Kpi = strike pri e da all e da put;
*/
/* Ci,Pi = premios da all e da put;
*/
/* Si = ota ao do ativo i na data t=0.
*/
/* ms = taxa de retorno esperada do ativo objeto
*/
/* m , mp = taxas de retorno esperadas da all e da put
*/
/***************************************************************************/
{
double Ex, E2x, E3x,E1,resp,f ,fp;
f =(log(K i/Si)-medi)/stdi;
E2x =0.5*exp(2.0*medi+2.0*stdi*stdi)*
(1.0-erff((f -2.0*stdi)/sqrt(2.0));
Ex =0.5*exp(medi+0.5*stdi*stdi)*
(1.0-erff((f -2.0*stdi)/sqrt(2.0)));
fp=(log(Kpi/Si)-medi)/stdi;
E2xp=0.5*exp(2.0*medi+2.0*stdi*stdi)*
(1.0+erff((fp-2.0*stdi)/sqrt(2.0));
Exp=0.5*exp(medi+0.5*stdi*stdi)*
(1.0+erff((fp-stdi)/sqrt(2.0)));
resp=-m *(-Si*E2xp+Kpi*Exp)/Pi-mp*(Si*E2x -K i*Ex )/Ci;
if (K i < Kpi){
E3x=0.5*exp(3.0*medi+4.5*stdi*stdi)*
(erff((fp-3.0*stdi)/sqrt(2.0))erff((f -3.0*stdi)/sqrt(2.0)));
E2x=0.5*exp(2.0*medi+2.0*stdi*stdi)*
(erff((fp-2.0*stdi)/sqrt(2.0))erff((f -2.0*stdi)/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*stdi*stdi)*
(erff((fp-stdi)/sqrt(2.0))erff((f -stdi)/sqrt(2.0)));

A.2 Rotinas de Co-assimetrias

121

E1=0.5*(erff(fp)-erff(f ));
resp+=(-Si*Si*E3x+Si*E2x*(K i+Kpi)-K i*Kpi*Ex)/(Ci*Pi);
resp-=ms*(-Si*Si*E2x+Si*Ex*(K i+Kpi)-K i*Kpi*E1)/(Ci*Pi);
return(resp);

}
resp+=2.0*ms*m *mp;
return(resp);

double m_ i i i(double medi, double stdi, double Si, double K 1, double K 2,


double K 3, double C1, double C2, double C3, double m 1,
double m 2, double m 3)
/***************************************************************************/
/* oskewnes entre a taxa de retorno das alls sobre o i-
esimo ativo
*/
/* medi, stdi = media e desvio p. do ativo i
*/
/* K 1,K 2,K 3 = strike pri e das alls
*/
/* C1,C2,C3 = premios das alls
*/
/* Si = ota ao do ativo i na data t=0
*/
/* m 1, m 2, m 3 = taxas de retorno esperadas das alls
*/
/***************************************************************************/
{
double Ex, E2x, E3x,E1,resp,K,f,
E2x12,Ex12,E112, E2x13,Ex13,E113, E2x23,Ex23,E123;
K=dmax(K 1,K 2);
K=dmax(K,K 3);
f=(log(K/Si)-medi)/stdi);
E3x=0.5*exp(3.0*medi+4.5*stdi*stdi)*(1.0-erff((f-3.0*stdi)/sqrt(2.0)));
E2x=0.5*exp(2.0*medi+2.0*stdi*stdi)*(1.0-erff((f-2.0*stdi)/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*stdi*stdi)*(1.0-erff((f-stdi)/sqrt(2.0)));
E1=0.5*(1.0-erff(f));
K=dmax(K 1,K 2);
f=(log(K/Si)-medi)/stdi);
E2x12=0.5*exp(2.0*medi+2.0*stdi*stdi)*(1.0-erff((f-2.0*stdi)/sqrt(2.0)));
Ex12=0.5*exp(medi+0.5*stdi*stdi)*(1.0-erff((f-stdi)/sqrt(2.0)));
E112=0.5*(1.0-erff(f));
K=dmax(K 1,K 3);
f=(log(K/Si)-medi)/stdi);
E2x13=0.5*exp(2.0*medi+2.0*stdi*stdi)*(1.0-erff((f-2.0*stdi)/sqrt(2.0)));
Ex13=0.5*exp(medi+0.5*stdi*stdi)*(1.0-erff((f-stdi)/sqrt(2.0)));
E113=0.5*(1.0-erff(f));
K=dmax(K 3,K 2);

122

Implementa o~es em linguagem C


f=(log(K/Si)-medi)/stdi);
E2x23=0.5*exp(2.0*medi+2.0*stdi*stdi)*(1.0-erff((f-2.0*stdi)/sqrt(2.0)));
Ex23=0.5*exp(medi+0.5*stdi*stdi)*(1.0-erff((f-stdi)/sqrt(2.0)));
E123=0.5*(1.0-erff(f));

resp=(Si*Si*Si*E3x-Si*Si*E2x*(K 1+K 2+K 3)


+Si*Ex*(K 1*K 2+K 1*K 3+K 2*K 3)-K 1*K 2*K 3*E1)/(C1*C2*C3);
resp-=m 1*(Si*Si*E2x23-Si*Ex23*(K 2+K 3)+K 2*K 3*E123)/(C3*C2);
resp-=m 2*(Si*Si*E2x13-Si*Ex13*(K 1+K 3)+K 1*K 3*E113)/(C3*C1);
resp-=m 3*(Si*Si*E2x12-Si*Ex12*(K 2+K 1)+K 2*K 1*E112)/(C1*C2);
resp+=2.0*m 1*m 2*m 3;
return(resp);

double m_pipipi(double medi, double stdi, double Si, double Kp1, double Kp2,
double Kp3, double P1, double P2, double P3, double mp1,
double mp2, double mp3)
/***************************************************************************/
/* oskewnes entre a taxa de retorno das puts sobre o i-
esimo ativo
*/
/* medi, stdi = media e desvio p. do ativo i
*/
/* Kp1,Kp2,Kp3 = strike pri e das puts
*/
/* C1,C2,C3 = premios das puts
*/
/* Si = ota ao do ativo i na data t=0
*/
/* mp1, mp2, mp3 = taxas de retorno esperadas das puts
*/
/***************************************************************************/
{
double Ex, E2x, E3x,E1,resp,K,f,
E2x12,Ex12,E112, E2x13,Ex13,E113, E2x23,Ex23,E123;
K=dmin(Kp1,Kp2);
K=dmin(K,Kp3);
f=(log(K/Si)-medi)/stdi);
E3x=0.5*exp(3.0*medi+4.5*stdi*stdi)*(1.0+erff((f-3.0*stdi)/sqrt(2.0)));
E2x=0.5*exp(2.0*medi+2.0*stdi*stdi)*(1.0+erff((f-2.0*stdi)/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*stdi*stdi)*(1.0+erff((f-stdi)/sqrt(2.0)));
E1=0.5*(1.0+erff(f));
K=dmin(Kp1,Kp2);
f=(log(K/Si)-medi)/stdi);
E2x12=0.5*exp(2.0*medi+2.0*stdi*stdi)*(1.0+erff((f-2.0*stdi)/sqrt(2.0)));
Ex12=0.5*exp(medi+0.5*stdi*stdi)*(1.0+erff((f-stdi)/sqrt(2.0)));
E112=0.5*(1.0+erff(f));
K=dmin(Kp1,Kp3);
f=(log(K/Si)-medi)/stdi);

A.2 Rotinas de Co-assimetrias

123

E2x13=0.5*exp(2.0*medi+2.0*stdi*stdi)*(1.0+erff((f-2.0*stdi)/sqrt(2.0)));
Ex13=0.5*exp(medi+0.5*stdi*stdi)*(1.0+erff((f-stdi)/sqrt(2.0)));
E113=0.5*(1.0+erff(f));
K=dmin(Kp3,Kp2);
f=(log(K/Si)-medi)/stdi);
E2x=0.5*exp(2.0*medi+2.0*stdi*stdi)*(1.0+erff((f-2.0*stdi)/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*stdi*stdi)*(1.0+erff((f-stdi)/sqrt(2.0)));
E1=0.5*(1.0+erff(f));
resp=-(Si*Si*Si*E3x-Si*Si*E2x*(Kp1+Kp2+Kp3)
+Si*Ex*(Kp1*Kp2+Kp1*Kp3+Kp2*Kp3)-Kp1*Kp2*Kp3*E1)/(P1*P2*P3);
resp-=mp1*(Si*Si*E2x23-Si*Ex23*(Kp2+Kp3)+Kp2*Kp3*E123)/(P3*P2);
resp-=mp2*(Si*Si*E2x13-Si*Ex13*(Kp1+Kp3)+Kp1*Kp3*E113)/(P3*P1);
resp-=mp3*(Si*Si*E2x12-Si*Ex12*(Kp2+Kp1)+Kp2*Kp1*E112)/(P1*P2);
resp+=2.0*mp1*mp2*mp3;
return(resp);
}
double m_ i ipi(double medi, double stdi, double Si, double K 1, double K 2,
double Kpi, double C1, double C2, double Pi, double m 1,
double m 2, double mp)
/***************************************************************************/
/* oskewnes entre a taxa de retorno das alls e put sobre o i-
esimo ativo */
/* medi, stdi = media e desvio p. do ativo i
*/
/* K 1,K 2 = strike pri e das alls
*/
/* Kpi = strike da put
*/
/* C1,C2,Pi = premios das alss e da put
*/
/* Si = ota ao do ativo i na data t=0
*/
/***************************************************************************/
{
double Ex, E2x, E3x,E1,resp,K,f ,fp;
resp=0.0;
fp=(log(Kpi/Si)-medi)/(sqrt(2.0)*stdi);
K=dmax(K 1,K 2);
if (K < Kpi){
f =(log(K/Si)-medi)/(sqrt(2.0)*stdi);
E3x=0.5*exp(3.0*medi+4.5*stdi*stdi)*
(erff(fp-3.0*stdi/sqrt(2.0))erff(f -3.0*stdi/sqrt(2.0)));
E2x=0.5*exp(2.0*medi+2.0*stdi*stdi)*
(erff(fp-2.0*stdi/sqrt(2.0))-

124

Implementa o~es em linguagem C


erff(f -2.0*stdi/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*stdi*stdi)*
(erff(fp-stdi/sqrt(2.0))erff(f -stdi/sqrt(2.0)));
E1=0.5*(erff(fp)-erff(f ));
resp+=(-Si*Si*Si*E3x+Si*Si*E2x*(K 1+K 2+Kp)
-Si*Ex*(K 1*K 2+K 1*Kpi+K 2*Kpi)+K 1*K 2*Kpi*E1)/(C1*C2*Pi);
}
if (K 2 < Kpi){
f =(log(K 2/Si)-medi)/(sqrt(2.0)*stdi);
E2x=0.5*exp(2.0*medi+2.0*stdi*stdi)*
(erff(fp-2.0*stdi/sqrt(2.0))erff(f -2.0*stdi/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*stdi*stdi)*
(erff(fp-stdi/sqrt(2.0))erff(f -stdi/sqrt(2.0)));
E1=0.5*(erff(fp)-erff(f ));
resp-=m 1*(-Si*Si*E2x+Si*Ex*(K 2+Kpi)-E1*K 2*Kpi)/(C2*Pi);
}
if (K 1 < Kpi){
f =(log(K 1/Si)-medi)/(sqrt(2.0)*stdi);
fp=(log(Kpi/Si)-medi)/(sqrt(2.0)*stdi);
E2x=0.5*exp(2.0*medi+2.0*stdi*stdi)*
(erff(fp-2.0*stdi/sqrt(2.0))erff(f -2.0*stdi/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*stdi*stdi)*
(erff(fp-stdi/sqrt(2.0))erff(f -stdi/sqrt(2.0)));
E1=0.5*(erff(fp)-erff(f ));
resp-=m 2*(-Si*Si*E2x+Si*Ex*(K 1+Kpi)-E1*K 1*Kpi)/(C1*Pi);

}
K=dmax(K 1,K 2);
f =(log(K/Si)-medi)/(sqrt(2.0)*stdi);
E2x=0.5*exp(2.0*medi+2.0*stdi*stdi)*
(1.0-erff(f -2.0*stdi/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*stdi*stdi)*
(1.0-erff(f -stdi/sqrt(2.0)));
E1=0.5*(1.0-erff(f ));
resp-=mp*(Si*Si*E2x-Si*Ex*(K 1+K 2)+E1*K 1*K 2)/(C1*C2);
resp+=2.0*m 1*m 2*mp;
return(resp);

A.2 Rotinas de Co-assimetrias

125

double m_ ipipi(double medi, double stdi, double Si, double K i, double Kp1,
double Kp2, double Ci, double P1, double P2, double m ,
double mp1, double mp2)
/***************************************************************************/
/* oskewnes entre a taxa de retorno da all e das puts sobre o i-
esimo
*/
/* ativo;
*/
/* medi, stdi = media e desvio p. do ativo i;
*/
/* Kp1,Kp2 = strike pri e das puts;
*/
/* K i = strike da all;
*/
/* P1,P2,Ci = premios das puts e da all;
*/
/* Si = ota ao do ativo i na data t=0
*/
/***************************************************************************/
{
double Ex, E2x, E3x,E1,resp,K,f ,fp;
resp=0.0;
K=dmin(Kp1,Kp2);
f =(log(K i/Si)-medi)/(sqrt(2.0)*stdi);
if (K i < K){
fp=(log(K/Si)-medi)/(sqrt(2.0)*stdi);
E3x=0.5*exp(3.0*medi+4.5*stdi*stdi)*
(erff(fp-3.0*stdi/sqrt(2.0))erff(f -3.0*stdi/sqrt(2.0)));
E2x=0.5*exp(2.0*medi+2.0*stdi*stdi)*
(erff(fp-2.0*stdi/sqrt(2.0))erff(f -2.0*stdi/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*stdi*stdi)*
(erff(fp-stdi/sqrt(2.0))erff(f -stdi/sqrt(2.0)));
E1=0.5*(erff(fp)-erff(f ));
resp+=(Si*Si*Si*E3x-Si*Si*E2x*(Kp1+Kp2+K i)
+Si*Ex*(Kp1*Kp2+K i*Kp1+Kp2*K i)-Kp1*Kp2*K i*E1)/(P1*P2*Ci);
}
f =(log(K i/Si)-medi)/(sqrt(2.0)*stdi);
if (K i < Kp2){
fp=(log(Kp2/Si)-medi)/(sqrt(2.0)*stdi);
E2x=0.5*exp(2.0*medi+2.0*stdi*stdi)*
(erff(fp-2.0*stdi/sqrt(2.0))erff(f -2.0*stdi/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*stdi*stdi)*
(erff(fp-stdi/sqrt(2.0))erff(f -stdi/sqrt(2.0)));
E1=0.5*(erff(fp)-erff(f ));

126

Implementa o~es em linguagem C


resp-=mp1*(-Si*Si*E2x+Si*Ex*(Kp2+K i)-E1*Kp2*K i)/(Ci*P2);
}
if (K i < Kp1){
fp=(log(Kp1/Si)-medi)/(sqrt(2.0)*stdi);
E2x=0.5*exp(2.0*medi+2.0*stdi*stdi)*
(erff(fp-2.0*stdi/sqrt(2.0))erff(f -2.0*stdi/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*stdi*stdi)*
(erff(fp-stdi/sqrt(2.0))erff(f -stdi/sqrt(2.0)));
E1=0.5*(erff(fp)-erff(f ));
resp-=mp2*(-Si*Si*E2x+Si*Ex*(K i+Kp1)-E1*K i*Kp1)/(Ci*P1);
}
K=dmin(Kp1,Kp2);
fp=(log(K/Si)-medi)/(sqrt(2.0)*stdi);
E2x=0.5*exp(2.0*medi+2.0*stdi*stdi)*
(1.0+erff(fp-2.0*stdi/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*stdi*stdi)*
(1.0+erff(fp-stdi/sqrt(2.0)));
E1=0.5*(1.0+erff(fp));
resp-=m *(Si*Si*E2x-Si*Ex*(Kp1+Kp2)+E1*Kp1*Kp2)/(P1*P2);
resp+=2.0*mp1*mp2*m ;
return(resp);

}
double m_ririrj(double medi, double medj, double stdi, double stdj,
double orij)
/***************************************************************************/
/* oskewness entre as taxas de retorno de 2 ativos basi os
*/
/* orij = oef. de orrela ao entre os ativos i e j.
*/
/***************************************************************************/
{
double Exy, Ex, E2xy, Ey, E2x, resp;
E2xy=exp(2.0*medi+medj+2.0*stdi*stdi+0.5*stdj*stdj+
2.0*stdi*stdj* orij);
Exy=exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+stdi*stdj* orij);
E2x=exp(2.0*(medi+stdi*stdi));
Ex=exp(medi+0.5*stdi*stdi);
Ey=exp(medj+0.5*stdj*stdj);
resp=E2xy-2.0*Exy*Ex-Ey*E2x+2.0*Ex*Ey*Ex;
return(resp);

A.2 Rotinas de Co-assimetrias

127

}
double m_riri j(double medi, double medj, double stdi, double stdj,
double orij, double Sj, double K j, double Cj, double ms,
double m )
/***************************************************************************/
/* oskewness entre uma all sobre um ativo j e ativo basi o i
*/
/* orij = oef. de orrela ao entre os ativos i e j.
*/
/* Sj = ota ao do ativo j em t=0;
*/
/* Cj = premio da all
*/
/* orij = orrel. entre os ativos i e j
*/
/* K j = strike da all
*/
/* ms = taxa de retorno esperada do ativo objeto
*/
/* m = taxa de retorno esperada da all
*/
/***************************************************************************/
{
double Exy, E2xy, Ex, Ey, E1, E2x, E2xi, Exi, R, resp;

R=(log(K j/Sj)-medj)/stdj;
Exy=0.5*exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)
+stdi*stdj* orij)*
(1.0-erff((R-stdi* orij-stdj)/sqrt(2.0)));
E2xy=0.5*exp(2.0*medi+medj+2.0*stdi*stdi+0.5*stdj*stdj+
2.0*stdi*stdj* orij)*
(1.0-erff((R-2.0*stdi* orij-stdj)/sqrt(2.0)));
E2x=0.5*exp(2.0*medi+2.0*stdi*stdi)*
(1.0-erff((R-2.0*stdi* orij)/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*stdi*stdi)*
(1.0-erff((R-stdi* orij)/sqrt(2.0)));
Ey=0.5*exp(medj+0.5*stdj*stdj)*
(1.0-erff((R-stdj)/sqrt(2.0)));
E1=0.5*(1.0-erff(R/sqrt(2.0)));
E2xi=exp(2.0*medi+2.0*stdi*stdi);
Exi=exp(medi+0.5*stdi*stdi);
resp=(Sj*E2xy-E2x*K j)/Cj-2.0*ms*(Sj*Exy-K j*Ex)/Cj-m *E2xi
+2.0*ms*m *Exi+ms*ms*(Sj*Ey-K j*E1)/Cj-ms*ms*m ;
return(resp);

double m_riripj(double medi, double medj, double stdi, double stdj,


double orij, double Sj, double Kpj, double Pj,
double ms, double mp)
/***************************************************************************/
/* oskewness entre uma put sobre um ativo j e o ativo basi o i
*/

128

Implementa o~es em linguagem C

/* orij = oef. de orrela ao entre os ativos i e j.


*/
/* Sj = ota ao do ativo j em t=0;
*/
/* Pj = premio da put
*/
/* Kpj = strike da put
*/
/***************************************************************************/
{
double Exy, E2xy, Ex, E2x, Ey, E1, E2xi, Exi, R, resp;

R=(log(Kpj/Sj)-medj)/stdj;
Exy=0.5*exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)
+stdi*stdj* orij)*
(1.0+erff((R-stdi* orij-stdj)/sqrt(2.0)));
E2xy=0.5*exp(2.0*medi+medj+2.0*stdi*stdi+0.5*stdj*stdj+
2.0*stdi*stdj* orij)*
(1.0+erff((R-2.0*stdi* orij-stdj)/sqrt(2.0)));
E2x=0.5*exp(2.0*medi+2.0*stdi*stdi)*
(1.0+erff((R-2.0*stdi* orij-stdj)/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*stdi*stdi)*
(1.0+erff((R-stdi* orij)/sqrt(2.0)));
Ey=0.5*exp(medj+0.5*stdj*stdj)*
(1.0+erff((R-stdj)/sqrt(2.0)));
E1=0.5*(1.0+erff(R/sqrt(2.0)));
E2xi=exp(2.0*medi+2.0*stdi*stdi);
Exi=exp(medi+0.5*stdi*stdi);
resp=(-Sj*E2xy+E2x*Kpj)/Pj-2.0*ms*(-Sj*Exy+K j*Ex)/Pj;
resp+=-mp*E2xi+2.0*ms*mp*Exi+ms*ms*(-Sj*Ey+K j*E1)/Pj-ms*ms*mp;
return(resp);

double m_ri irj(double medi, double medj, double stdi, double stdj,
double orij, double Si, double K i, double Ci,
double msi, double m , double msj)
/***************************************************************************/
/* oskewness entre uma all sobre um ativo i e os ativos basi os i e j
*/
/* orij = oef. de orrela ao entre os ativos i e j.
*/
/* S = ota ao do ativo j em t=0;
*/
/* C = premio da all
*/
/* /* orij = orrel. entre os ativos i e j
*/
K = strike da all
*/
/***************************************************************************/
{
double Exy, E2xy, Ex, E2x, Ey, E1, Exyi, Exi, Eyi, R, resp;
R=(log(K i/Si)-medi)/stdi;
Exy=0.5*exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)

A.2 Rotinas de Co-assimetrias

129

+stdi*stdj* orij)*
(1.0-erff((R-stdi- orij*stdj)/sqrt(2.0)));
E2xy=0.5*exp(2.0*medi+medj+2.0*stdi*stdi+0.5*stdj*stdj+
2.0*stdi*stdj* orij)*
(1.0-erff((R-2.0*stdi- orij*stdj)/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*stdi*stdi)*
(1.0-erff((R-stdi)/sqrt(2.0)));
Ey=0.5*exp(medj+0.5*stdj*stdj)*
(1.0-erff((R-stdj* orij)/sqrt(2.0)));
E1=0.5*(1.0-erff(R/sqrt(2.0)));
E2x=0.5*exp(2.0*(medi+stdi*stdi))*
(1.0-erff((R-2.0*stdi)/sqrt(2.0)));
Exyi=exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+ orij*stdi*stdj);
Exi=exp(medi+0.5*stdi*stdi);
Eyi=exp(medj+0.5*stdj*stdj);
resp=(Si*E2xy-K i*Exy)/Ci-msi*(Si*Exy-K i*Ey)/Ci-m *Exyi;
resp+=-msj*(Si*E2x-K i*Ex)/Ci+msi*m *Eyi+m *msj*Exi;
resp+=msi*msj*(Si*Ex-K i*E1)/Ci-msi*msj*m ;
return(resp);

double m_ripirj(double medi, double medj, double stdi, double stdj,


double orij, double Si, double Kpi, double Pi,
double msi, double mp, double msj)
/***************************************************************************/
/* oskewness entre uma put sobre o i-
esimo ativo e os ativos basi os i e j*/
/* orij = oef. de orrela ao entre os ativos i e j.
*/
/* Si = ota ao do ativo j em t=0;
*/
/* Pi = premio da put
*/
/* orij = orrel. entre os ativos i e j
*/
/* Kpi = strike da put
*/
/***************************************************************************/
{
double Exy, E2xy, Ex, E2x, Ey, E1, Exyi, Exi, Eyi, R, resp;
R=(log(Kpi/Si)-medi)/stdi;
Exy=0.5*exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)
+stdi*stdj* orij)*
(1.0+erff((R-stdi- orij*stdj)/sqrt(2.0)));
E2xy=0.5*exp(2.0*medi+medj+2.0*stdi*stdi+0.5*stdj*stdj+
2.0*stdi*stdj* orij)*
(1.0+erff((R-2.0*stdi- orij*stdj)/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*stdi*stdi)*
(1.0+erff((R-stdi)/sqrt(2.0)));
Ey=0.5*exp(medj+0.5*stdj*stdj)*

130

Implementa o~es em linguagem C


(1.0+erff((R-stdj* orij)/sqrt(2.0)));
E1=0.5*(1.0+erff(R/sqrt(2.0)));
E2x=0.5*exp(2.0*(medi+stdi*stdi))*
(1.0+erff((R-2.0*stdi)/sqrt(2.0)));
Exyi=exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+ orij*stdi*stdj);
Exi=exp(medi+0.5*stdi*stdi);
Eyi=exp(medj+0.5*stdj*stdj);
resp=(-Si*E2xy+Kpi*Exy)/Pi-msi*(-Si*Exy+Kpi*Ey)/Pi-mp*Exyi;
resp+=-msj*(-Si*E2x+Kpi*Ex)/Pi+msi*mp*Eyi+mp*msj*Exi;
resp+=msi*msj*(-Si*Ex+Kpi*E1)/Pi-msi*msj*mp;
return(resp);

double m_ i irj(double medi, double medj, double stdi, double stdj,


double orij, double Si, double K 1, double K 2, double C1,
double C2, double m 1, double m 2, double ms)
/***************************************************************************/
/* oskewness entre alls sobre um ativo i e o ativo basi o j
*/
/* orij = oef. de orrela ao entre os ativos i e j.
*/
/* Si = ota ao do ativo i em t=0;
*/
/* C1,C2 = premio das alls
*/
/* K 1,K 2 = strike das alls
*/
/***************************************************************************/
{
double E2x, Exy, E2xy, Ex, Ey, E1, R, Exy2b, Ey2b, Ex2b, E12b,
Exy1b, Ey1b, Ex1b, E11b, Eyi, resp,K;
K=dmax(K 1,K 2);
R=(log(K/Si)-medi)/stdi;
Exy=0.5*exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij)*
(1.0-erff((R-stdi- orij*stdj)/sqrt(2.0)));
E2xy=0.5*exp(2.0*medi+medj+2.0*stdi*stdi+0.5*stdj*stdj+
2.0*stdi*stdj* orij)*
(1.0-erff((R-2.0*stdi- orij*stdj)/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*stdi*stdi)*
(1.0-erff((R-stdi)/sqrt(2.0)));
Ey=0.5*exp(medj+0.5*stdj*stdj)*
(1.0-erff((R-stdj* orij)/sqrt(2.0)));
E1=0.5*(1.0-erff(R/sqrt(2.0)));
E2x=0.5*exp(2.0*(medi+stdi*stdi))*
(1.0-erff((R-2.0*stdi)/sqrt(2.0)));
R=(log(K 2/Si)-medi)/stdi;
Exy2b=0.5*exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij)*

A.2 Rotinas de Co-assimetrias

131

(1.0-erff((R-stdi- orij*stdj)/sqrt(2.0)));
Ex2b=0.5*exp(medi+0.5*stdi*stdi)*
(1.0-erff((R-stdi)/sqrt(2.0)));
Ey2b=0.5*exp(medj+0.5*stdj*stdj)*
(1.0-erff((R-stdj* orij)/sqrt(2.0)));
E12b=0.5*(1.0-erff(R/sqrt(2.0)));
R=(log(K 1/Si)-medi)/stdi;
Exy1b=0.5*exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij)*
(1.0-erff((R-stdi- orij*stdj)/sqrt(2.0)));
Ex1b=0.5*exp(medi+0.5*stdi*stdi)*
(1.0-erff((R-stdi)/sqrt(2.0)));
Ey1b=0.5*exp(medj+0.5*stdj*stdj)*
(1.0-erff((R-stdj* orij)/sqrt(2.0)));
E11b=0.5*(1.0-erff(R/sqrt(2.0)));
Eyi=exp(medi+0.5*stdi*stdi);
resp=(Si*Si*E2xy-Si*Exy*(K 1+K 2)+K 1*K 2*Ey)/(C1*C2);
resp+=-m 1*(Si*Exy2b-K 2*Ey2b)/C2-m 2*(Si*Exy1b-K 1*Ey1b)/C1;
resp+=-ms*(Si*Si*E2x-Si*Ex*(K 1+K 2)+K 1*K 2*E1);
resp+=m 1*m 2*Eyi+m 1*ms*(Si*Ex2b-K 2*E12b);
resp+=m 2*ms*(Si*Ex1b-K 1*E11b)/C1-ms*m 1*m 2;
return(resp);

double m_ ipirj(double medi, double medj, double stdi, double stdj,


double orij, double Si, double K i, double Kpi, double Ci,
double Pi, double m , double mp, double ms)
/***************************************************************************/
/* oskewness entre all e put sobre o ativo i e o ativo basi o j
*/
/* orij = oef. de orrela ao entre os ativos i e j.
*/
/* Si = ota ao do ativo i em t=0;
*/
/* Ci,Pi = premio da all e da put
*/
/* K i,Kpi = strike das alls
*/
/***************************************************************************/
{
double Exy, E2xy, Ex, E2x, Ey, E1, Exypb, Eypb, Expb, E1pb,
Exy b, Ey b, Ex b, E1 b, Eyi, R , Rp, R, resp;
R=(log(Kpi/Si)-medi)/stdi;
Exypb=0.5*exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)
+stdi*stdj* orij)*
(1.0+erff((R-stdi- orij*stdj)/sqrt(2.0)));
Expb=0.5*exp(medi+0.5*stdi*stdi)*
(1.0+erff((R-stdi)/sqrt(2.0)));

132

Implementa o~es em linguagem C


Eypb=0.5*exp(medj+0.5*stdj*stdj)*
(1.0+erff((R-stdj* orij)/sqrt(2.0)));
E1pb=0.5*(1.0+erff(R/sqrt(2.0)));
R=(log(K i/Si)-medi)/stdi;
Exy b=0.5*exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)
+stdi*stdj* orij)*
(1.0-erff((R-stdi- orij*stdj)/sqrt(2.0)));
Ex b=0.5*exp(medi+0.5*stdi*stdi)*
(1.0-erff((R-stdi)/sqrt(2.0)));
Ey b=0.5*exp(medj+0.5*stdj*stdj)*
(1.0-erff((R-stdj* orij)/sqrt(2.0)));
E1 b=0.5*(1.0-erff(R/sqrt(2.0)));
Eyi=exp(medi+0.5*stdi*stdi);
resp=-m *(-Si*Exypb+Kpi*Eypb)/Pi-mp*(Si*Exy b-K i*Ey b)/Ci;
resp+=m *mp*Eyi+m *ms*(-Si*Expb+Kpi*E1pb)/Pi
+mp*ms*(Si*Ex b-K i*E1 b)/Ci - m *mp*ms;
if (K i < Kpi){
R =(log(K i/Si)-medi)/stdi;
Rp=(log(Kpi/Si)-medi)/stdi;
Exy=0.5*exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij)*
(erff((Rp-stdi- orij*stdj)/sqrt(2.0))erff((R -stdi- orij*stdj)/sqrt(2.0)));
E2xy=0.5*exp(2.0*medi+medj+2.0*stdi*stdi+0.5*stdj*stdj+
2.0*stdi*stdj* orij)*
(erff((Rp-2.0*stdi- orij*stdj)/sqrt(2.0))erff((R -2.0*stdi- orij*stdj)/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*stdi*stdi)*
(erff((Rp-stdi)/sqrt(2.0))erff((R -stdi)/sqrt(2.0)));
Ey=0.5*exp(medj+0.5*stdj*stdj)*
(erff((Rp-stdj* orij)/sqrt(2.0))erff((R -stdj* orij)/sqrt(2.0)));
E1=0.5*(erff(Rp/sqrt(2.0))-erff(R /sqrt(2.0)));
E2x=0.5*exp(2.0*(medi+stdi*stdi))*
(erff((Rp-2.0*stdi)/sqrt(2.0))erff((R -2.0*stdi)/sqrt(2.0)));
resp+=(-Si*Si*E2xy+Si*Exy*(K i+Kpi)-K i*Kpi*Ey)/(Ci*Pi);
resp+=-ms*(-Si*Si*E2x+Si*Ex*(K i+Kpi)-K i*Kpi*E1)/(Ci*Pi);

}
return(resp);

A.2 Rotinas de Co-assimetrias

133

double m_pipirj(double medi, double medj, double stdi, double stdj,


double orij, double Si, double Kp1, double Kp2,
double P1, double P2, double mp1, double mp2, double ms)
/***************************************************************************/
/* oskewness entre puts sobre o ativo i e o ativo basi o j
*/
/* orij = oef. de orrela ao entre os ativos i e j.
*/
/* Si = ota ao do ativo i em t=0;
*/
/* P1,P2 = premio das puts
*/
/* Kp1,Kp2 = strike das puts
*/
/***************************************************************************/
{
double K, Exy, E2xy, Ex, E2x, Ey, E1, R, resp;
K=dmin(Kp1,Kp2);
R=(log(K/Si)-medi)/stdi;
Exy=0.5*exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij)*
(1.0+erff((R-stdi- orij*stdj)/sqrt(2.0)));
E2xy=0.5*exp(2.0*medi+medj+2.0*stdi*stdi+0.5*stdj*stdj+
2.0*stdi*stdj* orij)*
(1.0+erff((R-2.0*stdi- orij*stdj)/sqrt(2.0)));
Ex=0.5*exp(medi+0.5*stdi*stdi)*
(1.0+erff((R-stdi)/sqrt(2.0)));
Ey=0.5*exp(medj+0.5*stdj*stdj)*
(1.0+erff((R-stdj* orij)/sqrt(2.0)));
E1=0.5*(1.0+erff(R/sqrt(2.0)));
E2x=0.5*exp(2.0*(medi+stdi*stdi))*
(1.0+erff((R-2.0*stdi)/sqrt(2.0)));
R=(log(Kp2/Si)-medi)/stdi;
Exy2b=0.5*exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij)*
(1.0+erff((R-stdi- orij*stdj)/sqrt(2.0)));
Ex2b=0.5*exp(medi+0.5*stdi*stdi)*
(1.0+erff((R-stdi)/sqrt(2.0)));
Ey2b=0.5*exp(medj+0.5*stdj*stdj)*
(1.0+erff((R-stdj* orij)/sqrt(2.0)));
E12b=0.5*(1.0+erff(R/sqrt(2.0)));
R=(log(Kp1/Si)-medi)/stdi;
Exy1b=0.5*exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij)*
(1.0+erff((R-stdi- orij*stdj)/sqrt(2.0)));
Ex1b=0.5*exp(medi+0.5*stdi*stdi)*
(1.0+erff((R-stdi)/sqrt(2.0)));
Ey1b=0.5*exp(medj+0.5*stdj*stdj)*

134

Implementa o~es em linguagem C


(1.0+erff((R-stdj* orij)/sqrt(2.0)));
E11b=0.5*(1.0+erff(R/sqrt(2.0)));
Eyi=exp(medi+0.5*stdi*stdi);
resp=(Si*Si*E2xy-Si*Exy*(Kp1+Kp2)+Kp1*Kp2*Ey)/(P1*P2);
resp+=-mp1*(-Si*Exy2b+Kp2*Ey2b)/P2-mp2*(-Si*Exy1b+Kp1*Ey1b)/P1;
resp+=-ms*(Si*Si*E2x-Si*Ex*(Kp1+Kp2)+Kp1*Kp2*E1);
resp+=mp1*mp2*Eyi+mp1*ms*(-Si*Ex2b+Kp2*E12b);
resp+=mp2*ms*(-Si*Ex1b+Kp1*E11b)/P1-ms*mp1*mp2;

double m_rirjrk(double medi, double medj, double medk,


double stdi, double stdj, double stdk,
double orij, double orik, double orjk)
/***************************************************************************/
/* oskewness entre os ativos basi os i,j,k;
*/
/* orij = oef. de orrela ao entre os ativos i e j.
*/
/***************************************************************************/
{
double Exyz, Exy, Exz, Eyz, Ex, Ey, Ez,resp;

Exyz=exp(medi+medj+medk+
0.5*(stdi*stdi+stdj*stdj+stdk*stdk)
+stdi*stdj* orij+stdi*stdk* orik
+stdj*stdk* orjk);
Exy=exp(medi+medj+
0.5*(stdi*stdi+stdj*stdj)+stdi*stdj* orij);
Exz=exp(medi+medk+
0.5*(stdi*stdi+stdk*stdk)+stdi*stdk* orik);
Eyz=exp(medj+medk+
0.5*(stdj*stdj+stdk*stdk)+stdj*stdk* orjk);
Ex=exp(medi+0.5*stdi*stdi);
Ey=exp(medj+0.5*stdj*stdj);
Ez=exp(medk+0.5*stdk*stdk);
resp=Exyz-Ex*Eyz-Ey*Exz-Ez*Exy+2.0*Ex*Ey*Ez;
return(resp);

double m_rirj k(double


double
double
double
double

medi, double medj, double medk,


stdi, double stdj, double stdk,
orij, double orik, double orjk,
Sk, double K k, double Ck,
msi, double msj, double m )

A.2 Rotinas de Co-assimetrias

135

/***************************************************************************/
/* medi,medj,medk=media do ativo i,j e k;
*/
/* stdi,stdj,stdk=desvio do ativo i,j e k;
*/
/* Ck,K k=premio e strike da all ;
*/
/* Sk= ota ao do ativo basi o k em t=0.
*/
/* orij= orrela ao entre i e j;
*/
/***************************************************************************/
{
double Exyz,Exy,Exz,Eyz,Ez,Ex,Ey,E1,Exyi,Eyi,Exi,resp,
R,a,A,B;

R=(log(K k/Sk)-medk)/stdk;
a=1.0- orjk* orjk;
A= orik* orjk- orij;
B= orij* orjk- orik;
Exyz=exp(medi+medj+medk+
0.5*(stdi*stdi+stdj*stdj+stdk*stdk)+
stdi*stdj* orij+stdi*stdk* orik+
stdj*stdk* orjk)/(2.0*sqrt(2.0));
Exyz*=(1.0-erff((1.0/sqrt(2.0))*
(R-stdi* orik-stdk-stdj* orjk)));
Exy=exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij)/(2.0*sqrt(2.0));
Exy*=(1.0-erff((1.0/sqrt(2.0))*
(R-stdi* orik-stdj* orjk)));
Exz=exp(medi+medk+0.5*(stdi*stdi+stdk*stdk)+
stdi*stdk* orik)/(2.0*sqrt(2.0));
Exz*=(1.0-erff((1.0/sqrt(2.0))*(R-stdi* orik-stdk)));
Eyz=exp(medj+medk+0.5*(stdj*stdj+stdk*stdk)+
stdj*stdk* orjk)/(2.0*sqrt(2.0));
Eyz*=(1.0-erff((1.0/sqrt(2.0))*(R-stdk-stdj* orjk)));
Ex=exp(medi+0.5*(stdi*stdi))/(2.0*sqrt(2.0));
Ex*=(1.0-erff((1.0/sqrt(2.0))*(R- orik*stdi)));
Ey=exp(medj+0.5*stdj*stdj)/(2.0*sqrt(2.0));
Ey*=(1.0-erff((1.0/sqrt(2.0))*(R-stdj* orjk)));
Ez=exp(medk+0.5*stdk*stdk)/(2.0*sqrt(2.0));
Ez*=(1.0-erff((1.0/sqrt(2.0))*(R-stdk)));
E1=(1.0-erff(R/sqrt(2.0)))/(2.0*sqrt(2.0));
Exyi=exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+ orij*stdi*stdj);
Eyi=exp(medj+0.5*stdj*stdj);
Exi=exp(medi+0.5*stdi*stdi);
resp=(Sk*Exyz-K k*Exy)/Ck-msi*(Sk*Eyz-K k*Ey)/Ck;
resp+=-msj*(Sk*Exz-K k*Ex)-m *Exyi+msi*msj*(Sk*Ez-K k*E1)/Ck;
resp+=msi*m *Eyi+msj*m *Exi-msi*msj*m ;
return(resp);

136

Implementa o~es em linguagem C

double m_rirjpk(double medi, double medj, double medk,


double stdi, double stdj, double stdk,
double orij, double orik, double orjk,
double Sk, double Kpk, double Pk,
double msi, double msj, double mp)
/***************************************************************************/
/* medi,medj,medk=media do ativo i,j e k;
*/
/* stdi,stdj,stdk=desvio do ativo i,j e k;
*/
/* Pk,Kpk=premio e strike da put ;
*/
/* Sk= ota ao do ativo basi o k em t=0.
*/
/* orij= orrela ao entre i e j;
*/
/***************************************************************************/
{
double Exyz,Exy,Exz,Eyz,Ez,Ex,Ey,E1,Exyi,Exi,Eyi,resp,
R,a,A,B;
R=(log(Kpk/Sk)-medk)/stdk;
a=1.0- orjk* orjk;
A= orik* orjk- orij;
B= orij* orjk- orik;
Exyz=exp(medi+medj+medk+
0.5*(stdi*stdi+stdj*stdj+stdk*stdk)+
stdi*stdj* orij+stdi*stdk* orik+
stdj*stdk* orjk)/(2.0*sqrt(2.0));
Exyz*=(1.0+erff((1.0/sqrt(2.0))*(R-stdi* orik-stdk
-stdj* orjk)));
Exy=exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij)/(2.0*sqrt(2.0));
Exy*=(1.0+erff((1.0/sqrt(2.0))*(R-stdi* orik-stdj* orjk)));
Exz=exp(medi+medk+0.5*(stdi*stdi+stdk*stdk)+
stdi*stdk* orik)/(2.0*sqrt(2.0));
Exz*=(1.0+erff((1.0/sqrt(2.0))*(R-stdi* orik-stdk)));
Eyz=exp(medj+medk+0.5*(stdj*stdj+stdk*stdk)+
stdj*stdk* orjk)/(2.0*sqrt(2.0));
Eyz*=(1.0+erff((1.0/sqrt(2.0))*(R-stdk-stdj* orjk)));
Ex=exp(medi+0.5*(stdi*stdi))/(2.0*sqrt(2.0));
Ex*=(1.0+erff((1.0/sqrt(2.0))*(R-stdi* orik)));
Ey=exp(medj+0.5*stdj*stdj)/(2.0*sqrt(2.0));
Ey*=(1.0+erff((1.0/sqrt(2.0))*(R-stdj* orjk)));
Ez=exp(medk+0.5*stdk*stdk)/(2.0*sqrt(2.0));
Ez*=(1.0+erff((1.0/sqrt(2.0))*(R-stdk)));
E1=(1.0+erff(R/sqrt(2.0)))/(2.0*sqrt(2.0));
Exyi=exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+ orij*stdi*stdj);

A.2 Rotinas de Co-assimetrias

137

Eyi=exp(medj+0.5*stdj*stdj);
Exi=exp(medi+0.5*stdi*stdi);
resp=(-Sk*Exyz+Kpk*Exy)/Pk-msi*(-Sk*Eyz+Kpk*Ey)/Pk;
resp+=-msj*(-Sk*Exz+Kpk*Ex)-mp*Exyi+msi*msj*(-Sk*Ez+Kpk*E1)/Pk;
resp+=msi*mp*Eyi+msj*mp*Exi-msi*msj*mp;
return(resp);
}

/**************************************************************************/
/******
expressoes de assimetria que envolvem integrais duplas ******/
/**************************************************************************/
double m_ri i j(double medi, double medj, double stdi, double stdj,
double orij, double Si, double Sj, double K i, double K j,
double Ci, double Cj, double ms, double m i, double m j)
/***************************************************************************/
/* oskewness entre uma all sobre um ativo i, uma all sobre o ativo j
*/
/* e o ativo basi o i;
*/
/* orij = oef. de orrela ao entre os ativos i e j.
*/
/* Si,Sj = ota ao do ativo i,j em t=0;
*/
/* Ci, Cj = premio da all sobre i e j
*/
/* K i,K j = strikes das alls
*/
/***************************************************************************/
{
double Exy, E2xy, Ex, E2x, Ey, Exyb, Exb, E2xa, Exa, Eyb, E1b,
E1a, Exi, E1, Ri,Rj, resp, L;
Ri=(log(K i/Si)-medi)/stdi;
Rj=(log(K j/Sj)-medj)/stdj;
E2xy=(0.5/sqrt(2.0*pi))*
exp(2.0*medi+medj+2.0*stdi*stdi
+0.5*stdj*stdj+2.0*stdi*stdj* orij);
L=2.0*stdi+stdj* orij;
E2xy*=I_skew(9,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Exy=(0.5/sqrt(2.0*pi))*
exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij);
L=stdi+stdj* orij;
Exy*=I_skew(9,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ex=(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);

138

Implementa o~es em linguagem C


L=stdi;
Ex*=I_skew(10,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ey=(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orij;
Ey*=I_skew(9,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E1=(0.5/sqrt(2.0*pi));
L=0.0;
E1*=I_skew(10,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E2x=(0.5/sqrt(2.0*pi))*exp(2.0*(medi+stdi*stdi));
L=2.0*stdi;
E2x*=I_skew(10,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Exyb=0.5*exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+stdi*stdj* orij)*
(1.0-erff((Rj-stdj- orij*stdi)/sqrt(2.0)));
Exb=0.5*exp(medi+0.5*stdi*stdi)*
(1.0-erff((Rj- orij*stdi)/sqrt(2.0)));
E2xa=0.5*exp(2.0*medi+2.0*stdi*stdi)*
(1.0-erff((Ri-2.0*stdi)/sqrt(2.0)));
Exa=0.5*exp(medi+0.5*stdi*stdi)*
(1.0-erff((Ri-stdi)/sqrt(2.0)));
Eyb=0.5*exp(medj+0.5*stdj*stdj)*
(1.0-erff((Rj-stdj)/sqrt(2.0)));
E1b=0.5*(1.0-erff(Rj/sqrt(2.0)));
E1a=0.5*(1.0-erff(Ri/sqrt(2.0)));
Exi=exp(medi+0.5*stdi*stdi);
resp=(Si*Sj*E2xy-Si*E2x*K j-Sj*Exy*K i+K i*K j*Ex)/(Ci*Cj);
resp+=-ms*(Si*Sj*Exy-Si*Ex*K j-Sj*Ey*K i+K i*K j*E1)/(Ci*Cj);
resp+=-m i*(Sj*Exyb-K j*Exb)/Cj-m j*(Si*E2xa-K i*Exa)/Ci;
resp+=ms*m i*(Sj*Eyb-K j*E1b)/Cj+ms*m j*(Si*Exa-K i*E1a)/Ci;
resp+=m i*m j*Exi-ms*m i*m j;
return(resp);

double m_ri ipj(double medi, double medj, double stdi, double stdj,
double orij, double Si, double Sj, double K i, double Kpj,
double Ci, double Pj, double ms, double m , double mp)
/***************************************************************************/
/* oskewness entre uma all sobre um ativo i, uma put sobre o ativo j
*/
/* e o ativo basi o i;
*/
/* orij = oef. de orrela ao entre os ativos i e j.
*/
/* Si,Sj = ota ao do ativo i,j em t=0;
*/
/* Ci = premio da all sobre i
*/

A.2 Rotinas de Co-assimetrias

139

/* Pj = premio da put sobre j


*/
/* K i,Kpj = strikes da all e da put
*/
/***************************************************************************/
{
double Exy, E2xy, Ex, E2x, Ey, E1, Exyb, Exb, E2xa, Exa, Eyb, E1b,
E1a, Exi, Ri, Rj, resp, L;
Ri=(log(K i/Si)-medi)/stdi;
Rj=(log(Kpj/Sj)-medj)/stdj;
E2xy=(0.5/sqrt(2.0*pi))*
exp(2.0*medi+medj+2.0*stdi*stdi+
0.5*stdj*stdj+2.0*stdi*stdj* orij);
L=2.0*stdi+stdj* orij;
E2xy*=I_skew(9,Ri,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Exy=(0.5/sqrt(2.0*pi))*
exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij);
L=stdi+stdj* orij;
Exy*=I_skew(9,Ri,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ex=(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi;
Ex*=I_skew(10,Ri,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ey=(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orij;
Ey*=I_skew(9,Ri,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E1=(0.5/sqrt(2.0*pi));
L=0.0;
E1*=I_skew(10,Ri,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E2x=(0.5/sqrt(2.0*pi))*exp(2.0*(medi+stdi*stdi));
L=2.0*stdi;
E2x*=I_skew(10,Ri,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Exyb=0.5*exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+stdi*stdj* orij)*
(1.0+erff((Rj-stdj- orij*stdi)/sqrt(2.0)));
Exb=0.5*exp(medi+0.5*stdi*stdi)*
(1.0+erff((Rj- orij*stdi)/sqrt(2.0)));
E2xa=0.5*exp(2.0*medi+2.0*stdi*stdi)*
(1.0-erff((Ri-2.0*stdi)/sqrt(2.0)));
Exa=0.5*exp(medi+0.5*stdi*stdi)*
(1.0-erff((Ri-stdi)/sqrt(2.0)));
Eyb=0.5*exp(medj+0.5*stdj*stdj)*

140

Implementa o~es em linguagem C


(1.0+erff((Rj-stdj)/sqrt(2.0)));
E1b=0.5*(1.0+erff(Rj/sqrt(2.0)));
E1a=0.5*(1.0-erff(Ri/sqrt(2.0)));
Exi=exp(medi+0.5*stdi*stdi);
resp=(-Si*Sj*E2xy+Si*E2x*K j+Sj*Exy*K i-K i*Kpj*Ex)/(Ci*Pj);
resp+=-ms*(-Si*Sj*Exy+Si*Ex*Kpj+Sj*Ey*K i-K i*Kpj*E1)/(Ci*Pj);
resp+=-m *(-Sj*Exyb+Kpj*Exb)/Pj-mp*(Si*E2xa-K i*Exa)/Ci;
resp+=ms*m *(-Sj*Eyb+Kpj*E1b)/Pj+ms*mp*(Si*Exa-K i*E1a)/Ci;
resp+=m *mp*Exi-ms*m *mp;
return(resp);

double m_ripi j(double medi, double medj, double stdi, double stdj,
double orij, double Si, double Sj, double Kpi,
double K j, double Pi, double Cj,
double ms, double mp, double m )
/***************************************************************************/
/* oskewness entre uma all sobre um ativo j, uma put sobre o ativo i
*/
/* e o ativo basi o i;
*/
/* orij = oef. de orrela ao entre os ativos i e j.
*/
/* Si,Sj = ota ao do ativo i,j em t=0;
*/
/* Cj = premio da all sobre j
*/
/* Pi = premio da put sobre i
*/
/* Kpi,K j = strikes da all e da put
*/
/***************************************************************************/
{
double Exy, E2xy, Ex, E2x, Ey, E1, Ri, Rj, resp, L,
Exyb, Exb, E2xa, Exa, E1a, Eyb, E1b, Exi;
Ri=(log(Kpi/Si)-medi)/stdi;
Rj=(log(K j/Sj)-medj)/stdj;
E2xy=(0.5/sqrt(2.0*pi))*
exp(2.0*medi+medj+2.0*stdi*stdi+0.5*stdj*stdj+
2.0*stdi*stdj* orij);
L=2.0*stdi+stdj* orij;
E2xy*=I_skew(9,Ri,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Exy=(0.5/sqrt(2.0*pi))*
exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij);
L=stdi+stdj* orij;
Exy*=I_skew(9,Ri,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ex=(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi;

A.2 Rotinas de Co-assimetrias

141

Ex*=I_skew(10,Ri,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ey=(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orij;
Ey*=I_skew(9,Ri,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E1=(0.5/sqrt(2.0*pi));
L=0.0;
E1*=I_skew(10,Ri,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E2x=(0.5/sqrt(2.0*pi))*exp(2.0*(medi+stdi*stdi));
L=2.0*stdi;
E2x*=I_skew(10,Ri,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Exyb=0.5*exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+stdi*stdj* orij)*
(1.0-erff((Rj-stdj- orij*stdi)/sqrt(2.0)));
Exb=0.5*exp(medi+0.5*stdi*stdi)*
(1.0-erff((Rj- orij*stdi)/sqrt(2.0)));
E2xa=0.5*exp(2.0*medi+2.0*stdi*stdi)*
(1.0+erff((Ri-2.0*stdi)/sqrt(2.0)));
Exa=0.5*exp(medi+0.5*stdi*stdi)*
(1.0+erff((Ri-stdi)/sqrt(2.0)));
Eyb=0.5*exp(medj+0.5*stdj*stdj)*
(1.0-erff((Rj-stdj)/sqrt(2.0)));
E1b=0.5*(1.0-erff(Rj/sqrt(2.0)));
E1a=0.5*(1.0+erff(Ri/sqrt(2.0)));
Exi=exp(medi+0.5*stdi*stdi);
resp=(-Si*Sj*E2xy+Si*E2x*K j+Sj*Exy*Kpi-Kpi*K j*Ex)/(Pi*Cj);
resp+=-ms*(-Si*Sj*Exy+Si*Ex*K j+Sj*Ey*Kpi-Kpi*K j*E1)/(Pi*Cj);
resp+=-mp*(Sj*Exyb-K j*Exb)/Cj-m *(-Si*E2xa+Kpi*Exa)/Pi;
resp+=ms*mp*(Sj*Eyb-K j*E1b)/Cj+ms*m *(-Si*Exa+Kpi*E1a)/Pi;
resp+=m *mp*Exi-ms*m *mp;
return(resp);

double m_ripipj(double medi, double medj, double stdi, double stdj,


double orij, double Si, double Sj, double Kpi,
double Kpj, double Pi, double Pj,
double ms, double mpi, double mpj)
/***************************************************************************/
/* oskewness entre puts sobre ativos i e j e o ativo basi o i;
*/
/* orij = oef. de orrela ao entre os ativos i e j.
*/
/* Si,Sj = ota ao do ativo i,j em t=0;
*/
/* Cj = premio da all sobre j
*/
/* Pi = premio da put sobre i
*/

142

Implementa o~es em linguagem C

/* Kpi,Kpj = strikes da all e da put


*/
/***************************************************************************/
{
double Exy, E2xy, Ex, E2x, Ey, E1, Ri, Rj, resp, L,
Exyb, Exb, E2xa, Exa, Eyb, E1b, Exa, E1a, Exi;
Ri=(log(Kpi/Si)-medi)/stdi;
Rj=(log(Kpj/Sj)-medj)/stdj;
E2xy=(0.5/sqrt(2.0*pi))*
exp(2.0*medi+medj+2.0*stdi*stdi+0.5*stdj*stdj+
2.0*stdi*stdj* orij);
L=2.0*stdi+stdj* orij;
E2xy*=I_skew(9,Ri,sqrt(2.0),-1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Exy=(0.5/sqrt(2.0*pi))*
exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij);
L=stdi+stdj* orij;
Exy*=I_skew(9,Ri,sqrt(2.0),-1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ex=(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi;
Ex*=I_skew(10,Ri,sqrt(2.0),-1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ey=(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orij;
Ey*=I_skew(9,Ri,sqrt(2.0),-1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E1=(0.5/sqrt(2.0*pi));
L=0.0;
E1*=I_skew(10,Ri,sqrt(2.0),-1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E2x=(0.5/sqrt(2.0*pi))*exp(2.0*(medi+stdi*stdi));
L=2.0*stdi;
E2x*=I_skew(10,Ri,sqrt(2.0),-1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Exyb=0.5*exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+stdi*stdj* orij)*
(1.0+erff((Rj-stdj- orij*stdi)/sqrt(2.0)));
Exb=0.5*exp(medi+0.5*stdi*stdi)*
(1.0+erff((Rj- orij*stdi)/sqrt(2.0)));
E2xa=0.5*exp(2.0*medi+2.0*stdi*stdi)*
(1.0+erff((Ri-2.0*stdi)/sqrt(2.0)));
Exa=0.5*exp(medi+0.5*stdi*stdi)*
(1.0+erff((Ri-stdi)/sqrt(2.0)));
Eyb=0.5*exp(medj+0.5*stdj*stdj)*
(1.0+erff((Rj-stdj)/sqrt(2.0)));

A.2 Rotinas de Co-assimetrias

143

E1b=0.5*(1.0+erff(Rj/sqrt(2.0)));
E1a=0.5*(1.0+erff(Ri/sqrt(2.0)));
Exi=exp(medi+0.5*stdi*stdi);
resp=(Si*Sj*E2xy-Si*E2x*Kpj-Sj*Exy*Kpi+Kpi*Kpj*Ex)/(Pi*Pj);
resp+=-ms*(Si*Sj*Exy-Si*Ex*Kpj-Sj*Ey*Kpi+Kpi*Kpj*E1)/(Pi*Pj);
resp+=-mpi*(-Sj*Exyb+Kpj*Exb)/Pj-mpj*(-Si*E2xa+Kpi*Exa)/Pi;
resp+=ms*mpi*(-Sj*Eyb+Kpj*E1b)/Pj+ms*mpj*(-Si*Exa+Kpi*E1a)/Pi;
resp+=mpi*mpj*Exi-ms*mpi*mpj;
return(resp);

double m_ i i j(double medi, double medj, double stdi, double stdj,


double orij, double Si, double Sj, double K 1, double K 2,
double K j, double C1, double C2, double Cj,
double m 1, double m 2, double m j)
/***************************************************************************/
/* oskewness entre alls sobre ativos i e j ;
*/
/* orij = oef. de orrela ao entre os ativos i e j.
*/
/* Si,Sj = ota ao do ativo i,j em t=0;
*/
/* Cj,C1,C2 = premio da all sobre j e i.
*/
/* K 1,K 2,Kj = strikes das alls;
*/
/***************************************************************************/
{
double L, Exy, E2xy, Ex, E2x, Ey, E1, Ri, Rj, resp, K,
Exy2b, Ex2b, Ey2b, E12b, Exy1b, Ex1b, Ey1b, E11b,
E2xa, Exa, E1a, Eyb, E1b, Ex2, E12, Ex1, E11;
K=dmax(K 1,K 2);
Ri=(log(K/Si)-medi)/stdi;
Rj=(log(K j/Sj)-medj)/stdj;
E2xy=(0.5/sqrt(2.0*pi))*
exp(2.0*medi+medj+2.0*stdi*stdi+0.5*stdj*stdj+
2.0*stdi*stdj* orij);
L=2.0*stdi+stdj* orij;
E2xy*=I_skew(9,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Exy=(0.5/sqrt(2.0*pi))*
exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij);
L=stdi+stdj* orij;
Exy*=I_skew(9,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ex=(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi;
Ex*=I_skew(10,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,

144

Implementa o~es em linguagem C


0.0,Ri,Rj,0.0,L);
Ey=(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orij;
Ey*=I_skew(9,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E1=(0.5/sqrt(2.0*pi));
L=0.0;
E1*=I_skew(10,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E2x=(0.5/sqrt(2.0*pi))*exp(2.0*(medi+stdi*stdi));
L=2.0*stdi;
E2x*=I_skew(10,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E2xa=0.5*exp(2.0*medi+2.0*stdi*stdi)*(1.0-erff((Ri-stdi)/sqrt(2.0)));
Exa=0.5*exp(medi+0.5*stdi*stdi)*(1.0-erff((Ri-stdi)/sqrt(2.0)));
E1a=0.5*(1.0-erff(Ri/sqrt(2.0)));
Eyb=0.5*exp(medj+0.5*stdj*stdj)*(1.0-erff((Rj-stdj)/sqrt(2.0)));
E1b=0.5*(1.0-erff(Rj/sqrt(2.0)));
Ri=(log(K 2/Si)-medi)/stdi;
Exy2b=(0.5/sqrt(2.0*pi))*
exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
L=stdi+stdj* orij;
Exy2b*=I_skew(9,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ex2b=(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi;
Ex2b*=I_skew(10,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ey2b=(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orij;
Ey2b*=I_skew(9,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E12b=(0.5/sqrt(2.0*pi));
L=0.0;
E12b*=I_skew(10,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ex2=0.5*exp(medi+0.5*stdi*stdi)*(1.0-erff((Ri-stdi)/sqrt(2.0)));
E12=0.5*(1.0-erff(Ri/sqrt(2.0)));
Ri=(log(K 1/Si)-medi)/stdi;
Exy1b=(0.5/sqrt(2.0*pi))*
exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+

A.2 Rotinas de Co-assimetrias

145

L=stdi+stdj* orij;
Exy1b*=I_skew(9,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ex1b=(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi;
Ex1b*=I_skew(10,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ey1b=(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orij;
Ey1b*=I_skew(9,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E11b=(0.5/sqrt(2.0*pi));
L=0.0;
E11b*=I_skew(10,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ex1=0.5*exp(medi+0.5*stdi*stdi)*(1.0-erff((Ri-stdi)/sqrt(2.0)));
E11=0.5*(1.0-erff(Ri/sqrt(2.0)));

resp=(Si*Si*Sj*E2xy-Si*Si*E2x*K j-Si*Sj*(K 1+K 2)*Exy


+Si*K j*(K 1+K 2)*Ex+Sj*K 1*K 2*Ey-K 1*K 2*K j*E1)/(C1*C2*Cj);
resp+=-m 1*(Si*Sj*Exy2b-Si*K j*Ex2b-K 2*Sj*Ey2b+K 2*K j*E12b)/(C2*Cj);
resp+=-m 2*(Si*Sj*Exy1b-Si*K j*Ex1b-K 1*Sj*Ey1b+K 1*K j*E11b)/(C1*Cj);
resp+=-m j*(Si*Si*E2xa-Si*(K 1+K 2)*Exa+K 1*K 2*E1a)/(C1*C2);
resp+=m 1*m 2*(Sj*Eyb-K j*E1b)/Cb+m 1*m j*(Si*Ex2-K 2*E12)/C2;
resp+=m 2*m j*(Si*Ex1-K 1*E11)/C1-m 1*m 2*m j;
return(resp);

double m_ i ipj(double medi, double medj, double stdi, double stdj,


double orij, double Si, double Sj, double K 1, double K 2,
double Kpj, double C1, double C2, double Pj,
double m 1, double m 2, double mp)
/***************************************************************************/
/* oskewness entre alls sobre o ativo i e put sobre o ativo j ;
*/
/* orij = oef. de orrela ao entre os ativos i e j.
*/
/* Si,Sj = ota ao do ativo i,j em t=0;
*/
/* C2,C1,Pj = premio das alls e da put.
*/
/* K 1,K 2,Kpj = strikes das alls e da put;
*/
/***************************************************************************/
{
double L, E2x, Exy, E2xy, Ex, Ey, E1, Ri, Rj, resp, K;

146

Implementa o~es em linguagem C

K=dmax(K 1,K 2);


Ri=(log(K/Si)-medi)/stdi;
Rj=(log(Kpj/Sj)-medj)/stdj;
E2xy=(0.5/sqrt(2.0*pi))*
exp(2.0*medi+medj+2.0*stdi*stdi+0.5*stdj*stdj+
2.0*stdi*stdj* orij);
L=2.0*stdi+stdj* orij;
E2xy*=I_skew(9,Ri,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Exy=(0.5/sqrt(2.0*pi))*
exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij);
L=stdi+stdj* orij;
Exy*=I_skew(9,Ri,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ex=(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi;
Ex*=I_skew(10,Ri,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ey=(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orij;
Ey*=I_skew(9,Ri,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E1=(0.5/sqrt(2.0*pi));
L=0.0;
E1*=I_skew(10,Ri,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E2x=(0.5/sqrt(2.0*pi))*exp(2.0*(medi+stdi*stdi));
L=2.0*stdi;
E2x*=I_skew(10,Ri,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E2xa=0.5*exp(2.0*medi+2.0*stdi*stdi)*(1.0-erff((Ri-stdi)/sqrt(2.0)));
Exa=0.5*exp(medi+0.5*stdi*stdi)*(1.0-erff((Ri-stdi)/sqrt(2.0)));
E1a=0.5*(1.0-erff(Ri/sqrt(2.0)));
Eyb=0.5*exp(medj+0.5*stdj*stdj)*(1.0-erff((Rj-stdj)/sqrt(2.0)));
E1b=0.5*(1.0+erff(Rj/sqrt(2.0)));
Ri=(log(K 2/Si)-medi)/stdi;
Exy2b=(0.5/sqrt(2.0*pi))*
exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
L=stdi+stdj* orij;
Exy2b*=I_skew(9,Ri,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);

A.2 Rotinas de Co-assimetrias

147

Ex2b=(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi;
Ex2b*=I_skew(10,Ri,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ey2b=(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orij;
Ey2b*=I_skew(9,Ri,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E12b=(0.5/sqrt(2.0*pi));
L=0.0;
E12b*=I_skew(10,Ri,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ex2=0.5*exp(medi+0.5*stdi*stdi)*(1.0-erff((Ri-stdi)/sqrt(2.0)));
E12=0.5*(1.0-erff(Ri/sqrt(2.0)));
Ri=(log(K 1/Si)-medi)/stdi;
Exy1b=(0.5/sqrt(2.0*pi))*
exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
L=stdi+stdj* orij;
Exy1b*=I_skew(9,Ri,sqrt(2.0),1,1.0,0.0,stddi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ex1b=(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi;
Ex1b*=I_skew(10,Ri,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ey1b=(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orij;
Ey1b*=I_skew(9,Ri,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E11b=(0.5/sqrt(2.0*pi));
L=0.0;
E11b*=I_skew(10,Ri,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ex1=0.5*exp(medi+0.5*stdi*stdi)*(1.0-erff((Ri-stdi)/sqrt(2.0)));
E11=0.5*(1.0-erff(Ri/sqrt(2.0)));
resp=(-Si*Si*Sj*E2xy+Si*Si*E2x*Kpj+Si*Sj*(K 1+K 2)*Exy
-Si*Kpj*(K 1+K 2)*Ex-Sj*K 1*K 2*Ey+K 1*K 2*Kpj*E1)/(C1*C2*Pj);

148

Implementa o~es em linguagem C


resp+=m 1*(Si*Sj*Exy2b-Si*Kpj*Ex2b-K 2*Sj*Ey2b+K 2*Kpj*E12b)/(C2*Pj);
resp+=m 2*(Si*Sj*Exy1b-Si*Kpj*Ex1b-K 1*Sj*Ey1b+K 1*Kpj*E11b)/(C1*Pj);
resp+=-mp*(Si*Si*E2xa-Si*(K 1+K 2)*Exa+K 1*K 2*E1a)/(C1*C2);
resp+=m 1*m 2*(-Sj*Eyb+Kpj*E1b)/Pj+m 1*mp*(Si*Ex2-K 2*E12)/C2;
resp+=m 2*mp*(Si*Ex1-K 1*E11)/C1-m 1*m 2*mp;

return(resp);

double m_ ipi j(double medi, double medj, double stdi, double stdj,
double orij, double Si, double Sj, double K i, double Kpi,
double K j, double Ci, double Pi, double Cj,
double m i, double mp, double m j)
/***************************************************************************/
/* oskewness entre alls sobre os ativos i e j e put sobre o ativo i ;
*/
/* orij = oef. de orrela ao entre os ativos i e j.
*/
/* Si,Sj = ota ao do ativo i,j em t=0;
*/
/* Ci,Cj,Pi = premio das alls e da put.
*/
/* K i,K j,Kpi = strikes das alls e da put;
*/
/***************************************************************************/
{
double L,Exy, E2xy, Ex, E2x, Ey, E1, Rj, resp,R ,Rp,
Exyp , Exp ,Eyp ,E1p ,Exy ,Ex ,Ey ,E1 ,
Eyb,E1b,Exp,E1p,Ex ,E1 ;
resp=0.0;
R =(log(K i/Si)-medi)/stdi;
Rp=(log(Kpi/Si)-medi)/stdi;
Rj=(log(K j/Sj)-medj)/stdj;
if (K i < Kpi){
E2xy=(0.5/sqrt(2.0*pi))*
exp(2.0*medi+medj+2.0*stdi*stdi+0.5*stdj*stdj+
2.0*stdi*stdj* orij);
L=2.0*stdi+stdj* orij;
E2xy*=(I_skew(9,R ,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L)
-I_skew(9,Rp,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Rp,Rj,0.0,L));
Exy=(0.5/sqrt(2.0*pi))*
exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij);
L=stdi+stdj* orij;
Exy*=(I_skew(9,R ,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L)
-I_skew(9,Rp,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,

A.2 Rotinas de Co-assimetrias

149

0.0,Rp,Rj,0.0,L));
Ex=(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi;
Ex*=(I_skew(10,R ,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L)
-I_skew(10,Rp,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Rp,Rj,0.0,L));
Ey=(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orij;
Ey*=(I_skew(9,R ,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L)
-I_skew(9,Rp,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Rp,Rj,0.0,L));
E1=(0.5/sqrt(2.0*pi));
L=0.0;
E1*=(I_skew(9,R ,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L)
-I_skew(9,Rp,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Rp,Rj,0.0,L));
E2x=(0.5/sqrt(2.0*pi))*exp(2.0*(medi+stdi*stdi));
L=2.0*stdi;
E2x*=(I_skew(10,R ,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L)
-I_skew(10,Rp,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Rp,Rj,0.0,L));
E2xaa=0.5*exp(2.0*medi+2.0*stdi*stdi)*
(erff((R -2.0*stdi)/sqrt(2.0))-erf((Rp-2.0*stdi)/sqrt(2.0)));
Exaa=0.5*exp(medi+0.5*stdi*stdi)*
(erff((R -stdi)/sqrt(2.0))-erf((Rp-stdi)/sqrt(2.0)));
E1aa=0.5*(erff(R /sqrt(2.0))-erf(Rp/sqrt(2.0)));
resp+=(-Si*Si*Sj*E2xy+Si*Si*E2x*K j+Si*Sj*(K i+Kpi)*Exy
-Si*(K i+Kpi)*K j*Ex-K i*Kpi*Sj*Ey+K i*Kpi*K j*E1)/(Ci*Cj*Pi);
resp+=-m j*(-Si*Si*E2xaa+Si*(K i+Kpi)*Exaa-K i*Kpi*E1aa)/(Pi*Ci);

Exyp =(0.5/sqrt(2.0*pi))*
exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij);
L=stdi+stdj* orij;
Exyp *=I_skew(9,Rp,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L);
Exp =(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi;
Exp *=I_skew(10,Rp,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L);
Eyp =(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);

150

Implementa o~es em linguagem C


L=stdj* orij;
Eyp *=I_skew(9,Rp,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L);
E1p =(0.5/sqrt(2.0*pi));
L=0.0;
E1p *=I_skew(10,Rp,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L);
Exy =(0.5/sqrt(2.0*pi))*
exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij);
L=stdi+stdj* orij;
Exy *=I_skew(9,R ,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L);
Ex =(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi;
Ex *=I_skew(10,R ,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L);
Ey =(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orij;
Ey *=I_skew(9,R ,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L);
E1 =(0.5/sqrt(2.0*pi));
L=0.0;
E1 *=I_skew(10,R ,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L);
Eyb=0.5*exp(medj+0.5*stdj*stdj)*(1.0-erff((Rj-stdj)/sqrt(2.0)));
E1b=0.5*(1.0-erff(Rj/sqrt(2.0)));
Exp=0.5*exp(medi+0.5*stdi*stdi)*(1.0+erff((Rp-stdi)/sqrt(2.0)));
E1p=0.5*(1.0+erff(Rp/sqrt(2.0)));
Ex =0.5*exp(medi+0.5*stdi*stdi)*(1.0-erff((R -stdi)/sqrt(2.0)));
E1p=0.5*(1.0-erff(R /sqrt(2.0)));
resp+=-mp*(Si*Sj*Exy -Si*K j*Ex -Sj*k i*Ey +K i*K j*E1 )/(Ci*Cj);
resp+=m i*(Si*Sj*Exyp -Si*K j*Exp -Sj*kpi*Eyp +Kpi*K j*E1p )/(Pi*Cj);
resp+=m i*mp*(Sj*Eyb-K j*E1b)/Cj+m i*m j*(-Si*Exp+Kpi*E1p)/Pi;
resp+=mp*m j*(Si*Ex -K i*E1 )/Ci-m i*m j*mp;

return(resp);

A.2 Rotinas de Co-assimetrias

151

double m_ ipipj(double medi, double medj, double stdi, double stdj,


double orij, double Si, double Sj, double K i, double Kpi,
double Kpj, double Ci, double Pi, double Pj,
double m , double mpi, double mpj)
/***************************************************************************/
/* oskewness entre puts sobre ativos i e j e all sobre o ativo i ;
*/
/* orij = oef. de orrela ao entre os ativos i e j.
*/
/* Si,Sj = ota ao do ativo i,j em t=0;
*/
/* Ci,Pi,Pj = premio da all e das puts.
*/
/* Kpi,Kpj,K i = strikes das puts e da all;
*/
/***************************************************************************/
{
double L,Exy, E2xy, Ex, E2x, Ey, E1, resp,Rp,R ,Rj,
Exypp, Expp, Eypp, E1pp, Exy p, Ex p, Ey p, E1 p,
E2xaa, Exaa, E1aa, Eyb, E1b, Exp, E1p, Ex , E1 ;

resp=0.0;
R =(log(K i/Si)-medi)/stdi;
Rp=(log(Kpi/Si)-medi)/stdi;
Rj=(log(Kpj/Sj)-medj)/stdj;
if (K i < Kpi){
E2xy=(0.5/sqrt(2.0*pi))*
exp(2.0*medi+medj+2.0*stdi*stdi+0.5*stdj*stdj+
2.0*stdi*stdj* orij);
L=2.0*stdi+stdj* orij;
E2xy*=(I_skew(9,R ,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L)
-I_skew(9,Rp,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Rp,Rj,0.0,L));
Exy=(0.5/sqrt(2.0*pi))*
exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij);
L=stdi+stdj* orij;
Exy*=(I_skew(9,R ,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L)
-I_skew(9,Rp,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Rp,Rj,0.0,L));
Ex=(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi;
Ex*=(I_skew(10,R ,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L)
-I_skew(10,Rp,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Rp,Rj,0.0,L));
Ey=(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);

152

Implementa o~es em linguagem C


L=stdj* orij;
Ey*=(I_skew(9,R ,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L)
-I_skew(9,Rp,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Rp,Rj,0.0,L));
E1=(0.5/sqrt(2.0*pi));
L=0.0;
E1*=(I_skew(10,R ,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L)
-I_skew(10,Rp,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Rp,Rj,0.0,L));
E2x=(0.5/sqrt(2.0*pi))*exp(2.0*(medi+stdi*stdi));
L=2.0*stdi;
E2x*=(I_skew(10,R ,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L)
-I_skew(10,Rp,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Rp,Rj,0.0,L));
E2xaa=0.5*exp(2.0*medi+2.0*stdi*stdi)*
(erff((R -2.0*stdi)/sqrt(2.0))-erf((Rp-2.0*stdi)/sqrt(2.0)));
Exaa=0.5*exp(medi+0.5*stdi*stdi)*
(erff((R -stdi)/sqrt(2.0))-erf((Rp-stdi)/sqrt(2.0)));
E1aa=0.5*(erff(R /sqrt(2.0))-erf(Rp/sqrt(2.0)));
resp+=(Si*Si*Sj*E2xy-Si*Si*E2x*Kpj-Si*Sj*(K i+Kpi)*Exy
+Si*(K i+Kpi)*Kpj*Ex+K i*Kpi*Sj*Ey-K i*Kpi*Kpj*E1)/(Ci*Pj*Pi);
resp+=-mpj*(-Si*Si*E2xaa+Si*(K i+Kpi)*Exaa-K i*Kpi*E1aa)/(Pi*Ci);
}
Exy p=(0.5/sqrt(2.0*pi))*
exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij);
L=stdi+stdj* orij;
Exy p*=I_skew(9,R ,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L);
Ex p=(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi;
Ex p*=I_skew(10,R ,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L);
Ey p=(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orij;
Ey p*=I_skew(9,R ,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L);
E1 p=(0.5/sqrt(2.0*pi));
L=0.0;
E1 p*=I_skew(10,R ,sqrt(2.0),1,1.0,0.0,stdi,stdj,0.0, orij,0.0,

A.2 Rotinas de Co-assimetrias

153

0.0,R ,Rj,0.0,L);
Exypp=(0.5/sqrt(2.0*pi))*
exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij);
L=stdi+stdj* orij;
Exypp*=I_skew(9,Rp,sqrt(2.0),-1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L);
Expp=(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi;
Expp*=I_skew(10,Rp,sqrt(2.0),-1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L);
Eypp=(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orij;
Eypp*=I_skew(9,Rp,sqrt(2.0),-1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L);
E1pp=(0.5/sqrt(2.0*pi));
L=0.0;
E1pp*=I_skew(10,Rp,sqrt(2.0),-1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,R ,Rj,0.0,L);

Eyb=0.5*exp(medj+0.5*stdj*stdj)*(1.0+erff((Rj-stdj)/sqrt(2.0)));
E1b=0.5*(1.0+erff(Rj/sqrt(2.0)));
Exp=0.5*exp(medi+0.5*stdi*stdi)*(1.0+erff((Rp-stdi)/sqrt(2.0)));
E1p=0.5*(1.0+erff(Rp/sqrt(2.0)));
Ex =0.5*exp(medi+0.5*stdi*stdi)*(1.0-erff((R -stdi)/sqrt(2.0)));
E1p=0.5*(1.0-erff(R /sqrt(2.0)));
resp+=mpi*(Si*Sj*Exy p-Si*Kpj*Ex p-Sj*k i*Ey p+Kpi*Kpj*E1 p)/(Ci*Pj);
resp+=-m *(Si*Sj*Exypp-Si*Kpj*Expp-Sj*kpi*Eypp+Kpi*Kpj*E1pp)/(Pi*Pj);
resp+=m *mpi*(-Sj*Eyb+Kpj*E1b)/Pj+m *mpj*(-Si*Exp+Kpi*E1p)/Pi;
resp+=mpi*mpj*(Si*Ex -K i*E1 )/Ci-m *mpi*mpj;
}

return(resp);

double m_pipi j(double medi, double medj, double stdi, double stdj,
double orij, double Si, double Sj, double Kp1, double Kp2,
double K j, double P1, double P2, double Cj,
double mp1, double mp2, double m )
/***************************************************************************/

154

Implementa o~es em linguagem C

/* oskewness entre uma all sobre um ativo j e puts sobre o ativo i;


*/
/* orij = oef. de orrela ao entre os ativos i e j.
*/
/* Si,Sj = ota ao do ativo i,j em t=0;
*/
/* Cj = premio da all sobre j
*/
/* P1,P2 = premio das puts
*/
/* Kp1,Kp2,K j = strikes da put e da all
*/
/***************************************************************************/
{
double L, E2x, Exy, E2xy, Ex, Ey, E1, Ri, Rj, resp, K,
Exy2b, Ex2b, Ey2b, E12b, Exy1b, Ex1b, Ey1b, E11b,
E2xpp, Expp, E1pp, Eyb, E1b, Ex2, E12, Ex1, E11;
K=dmin(Kp1,Kp2);
Ri=(log(K/Si)-medi)/stdi;
Rj=(log(K j/Sj)-medj)/stdj;
E2xy=(0.5/sqrt(2.0*pi))*
exp(2.0*medi+medj+2.0*stdi*stdi+0.5*stdj*stdj+
2.0*stdi*stdj* orij);
L=2.0*stdi+stdj* orij;
E2xy*=I_skew(9,Ri,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Exy=(0.5/sqrt(2.0*pi))*
exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij);
L=stdi+stdj* orij;
Exy*=I_skew(9,Ri,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ex=(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi;
Ex*=I_skew(10,Ri,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ey=(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orij;
Ey*=I_skew(9,Ri,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E1=(0.5/sqrt(2.0*pi));
L=0.0;
E1*=I_skew(10,Ri,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E2x=(0.5/sqrt(2.0*pi))*exp(2.0*(medi+stdi*stdi));
L=2.0*stdi;
E2x*=I_skew(10,Ri,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E2xpp=0.5*exp(2.0*medi+2.0*stdi*stdi)*(1.0+erff((Ri-2.0*stdi)/sqrt(2.0)));
Expp=0.5*exp(medi+0.5*stdi*stdi)*(1.0+erff((Ri-stdi)/sqrt(2.0)));
Expp=0.5*(1.0+erff(Ri/sqrt(2.0)));

A.2 Rotinas de Co-assimetrias

Ri=(log(Kp2/Si)-medi)/stdi;
Exy2b=(0.5/sqrt(2.0*pi))*
exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij);
L=stdi+stdj* orij;
Exy2b*=I_skew(9,Ri,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ex2b=(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi;
Ex2b*=I_skew(10,Ri,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ey2b=(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orij;
Ey2b*=I_skew(9,Ri,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E12b=(0.5/sqrt(2.0*pi));
L=0.0;
E12b*=I_skew(10,Ri,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ex2=0.5*exp(medi+0.5*stdi*stdi)*(1.0-erff((Ri-stdj)/sqrt(2.0)));
E12=0.5*(1.0-erff(Ri/sqrt(2.0)));
Ri=(log(Kp1/Si)-medi)/stdi;
Exy1b=(0.5/sqrt(2.0*pi))*
exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij);
L=stdi+stdj* orij;
Exy1b*=I_skew(9,Ri,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ex1b=(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi;
Ex1b*=I_skew(10,Ri,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ey1b=(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orij;
Ey1b*=I_skew(9,Ri,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E11b=(0.5/sqrt(2.0*pi));
L=0.0;
E11b*=I_skew(10,Ri,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Eyb=0.5*exp(medj+0.5*stdj*stdj)*(1.0-erff((Rj-stdj)/sqrt(2.0)));

155

156

Implementa o~es em linguagem C


E1b=0.5*(1.0-erff(Rj/sqrt(2.0)));
Ex1=0.5*exp(medi+0.5*stdi*stdi)*(1.0-erff((Ri-stdj)/sqrt(2.0)));
E11=0.5*(1.0-erff(Ri/sqrt(2.0)));

resp=(Si*Si*Sj*E2xy-Si*Si*E2x*K j-Si*Sj*Exy*(Kp1+Kp2)+
Si*Ex*K j*(Kp1+Kp2)+Kp1*Kp2*Sj*Ey-Kp1*Kp2*K j*E1)/(P1*P2*Cj);
resp+=-mp1*(-Si*Sj*Exy2b+Si*K j*Ex2b+Sj*Ey2b*Kp2-Kp2*K j*E12b)/(P2*Cj);
resp+=-mp2*(-Si*Sj*Exy1b+Si*K j*Ex1b+Sj*Ey1b*Kp1-Kp1*K j*E11b)/(P1*Cj);
resp+=-m *(Si*Si*E2xpp-Si*Expp*(Kp1+Kp2)+Kp1*Kp2*E1pp)/(P1*P2);
resp+=mp1*mp2*(Sj*Eyb-K j*E1b)/Cj+mp1*m j*(-Si*Ex2+Kp2*E12)/P2;
resp+=mp2*m j*(-Si*Ex1+Kp1*E11)/P1-mp1*mp2*m ;
return(resp);

double m_pipipj(double medi, double medj, double stdi, double stdj,


double orij, double Si, double Sj, double Kp1, double Kp2,
double Kpj, double P1, double P2, double Pj,
double mp1, double mp2, double mpj)
/***************************************************************************/
/* oskewness entre puts sobre ativos i e j ;
*/
/* orij = oef. de orrela ao entre os ativos i e j.
*/
/* Si,Sj = ota ao do ativo i,j em t=0;
*/
/* Pj,P1,P2 = premio das puts sobre os ativos j e i.
*/
/* Kp1,Kp2,Kpj = strikes das puts;
*/
/***************************************************************************/
{
double L, E2x, Exy, E2xy, Ex, Ey, E1, Ri, Rj, resp,K,
Exy2b, Ex2b, Ey2b, E12b, Exy1b, Ex1b, Ey1b, E11b,
E2xpp, Expp, E1pp, Eyb, E1b, Ex2, E12, Ex1, E11;
K=dmin(Kp1,Kp2);
Ri=(log(K/Si)-medi)/stdi;
Rj=(log(Kpj/Sj)-medj)/stdj;
E2xy=(0.5/sqrt(2.0*pi))*
exp(2.0*medi+medj+2.0*stdi*stdi+0.5*stdj*stdj+
2.0*stdi*stdj* orij);
L=2.0*stdi+stdj* orij;
E2xy*=I_skew(9,Ri,sqrt(2.0),-1,1.0,0.0,stdi,stdj,0.0, orij,
0.0,0.0,Ri,Rj,0.0,L);
Exy=(0.5/sqrt(2.0*pi))*
exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij);
L=stdi+stdj* orij;

A.2 Rotinas de Co-assimetrias

157

Exy*=I_skew(9,Ri,sqrt(2.0),-1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ex=(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi;
Ex*=I_skew(10,Ri,sqrt(2.0),-1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ey=(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orij;
Ey*=I_skew(9,Ri,sqrt(2.0),-1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E1=(0.5/sqrt(2.0*pi));
L=0.0;
E1*=I_skew(10,Ri,sqrt(2.0),-1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E2x=(0.5/sqrt(2.0*pi))*exp(2.0*(medi+stdi*stdi));
L=2.0*stdi;
E2x*=I_skew(10,Ri,sqrt(2.0),-1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E2xpp=0.5*exp(2.0*medi+2.0*stdi*stdi)*(1.0+erff((Ri-2.0*stdi)/sqrt(2.0)));
Expp=0.5*exp(medi+0.5*stdi*stdi)*(1.0+erff((Ri-stdi)/sqrt(2.0)));
Expp=0.5*(1.0+erff(Ri/sqrt(2.0)));
Ri=(log(Kp2/Si)-medi)/stdi;
Exy2b=(0.5/sqrt(2.0*pi))*
exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij);
L=stdi+stdj* orij;
Exy2b*=I_skew(9,Ri,sqrt(2.0),-1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ex2b=(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi;
Ex2b*=I_skew(10,Ri,sqrt(2.0),-1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ey2b=(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orij;
Ey2b*=I_skew(9,Ri,sqrt(2.0),-1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E12b=(0.5/sqrt(2.0*pi));
L=0.0;
E12b*=I_skew(10,Ri,sqrt(2.0),-1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ex2=0.5*exp(medi+0.5*stdi*stdi)*(1.0+erff((Ri-stdj)/sqrt(2.0)));
E12=0.5*(1.0+erff(Ri/sqrt(2.0)));

158

Implementa o~es em linguagem C


Ri=(log(Kp1/Si)-medi)/stdi;
Exy1b=(0.5/sqrt(2.0*pi))*
exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij);
L=stdi+stdj* orij;
Exy1b*=I_skew(9,Ri,sqrt(2.0),-1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ex1b=(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi;
Ex1b*=I_skew(10,Ri,sqrt(2.0),-1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Ey1b=(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orij;
Ey1b*=I_skew(9,Ri,sqrt(2.0),-1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E11b=(0.5/sqrt(2.0*pi));
L=0.0;
E11b*=I_skew(10,Ri,sqrt(2.0),-1,1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Eyb=0.5*exp(medj+0.5*stdj*stdj)*(1.0+erff((Rj-stdj)/sqrt(2.0)));
E1b=0.5*(1.0+erff(Rj/sqrt(2.0)));
Ex1=0.5*exp(medi+0.5*stdi*stdi)*(1.0-erff((Ri-stdj)/sqrt(2.0)));
E11=0.5*(1.0-erff(Ri/sqrt(2.0)));
resp=-(Si*Si*Sj*E2xy-Si*Si*E2x*Kpj-Si*Sj*Exy*(Kp1+Kp2)+
Si*Ex*Kpj*(Kp1+Kp2)+Kp1*Kp2*Sj*Ey-Kp1*Kp2*Kpj*E1)/(P1*P2*Pj);
resp+=mp1*(-Si*Sj*Exy2b+Si*Kpj*Ex2b+Sj*Ey2b*Kp2-Kp2*Kpj*E12b)/(P2*Pj);
resp+=mp2*(-Si*Sj*Exy1b+Si*Kpj*Ex1b+Sj*Ey1b*Kp1-Kp1*Kpj*E11b)/(P1*Pj);
resp+=-mpj*(Si*Si*E2xpp-Si*Expp*(Kp1+Kp2)+Kp1*Kp2*E1pp)/(P1*P2);
resp+=mp1*mp2*(-Sj*Eyb+Kpj*E1b)/Pj+mp1*mpj*(-Si*Ex2+Kp2*E12)/P2;
resp+=mp2*mpj*(-Si*Ex1+Kp1*E11)/P1-mp1*mp2*mpj;
return(resp);

}
double m_ri j k(double medi, double medj, double medk,
double stdi, double stdj, double stdk,
double orij, double orik, double orjk,
double Sj, double Sk, double K j, double K k,
double Cj, double Ck, double ms, double m j,
double m k)
/***************************************************************************/

A.2 Rotinas de Co-assimetrias

159

/* oskewness entre ativo basi o i e alls sobre ativos j e k;


*/
/* medi,medj,medk=media do ativo i,j e k;
*/
/* stdi,stdj,stdk=desvio do ativo i,j e k;
*/
/* Cj,Ck,K j,K k= ota aos e strikes das alls ;
*/
/* Sj,Sk= ota ao dos ativos basi os j e k em t=0.
*/
/* orij= orrela ao entre i e j;
*/
/***************************************************************************/
{
double Exyz,Exy,Exz,Eyz,Ez,Ex,Ey,E1,resp,
L,A,B,Rj,Rk,a,Exza ,Exa ,Exyab,Exab,Ez ,E1 ,Eyb,E1b,Exi;
Rj=(log(K j/Sj)-medj)/stdj;
Rk=(log(K k/Sk)-medk)/stdk;
a=1.0- orjk* orjk;
A= orik* orjk- orij;
B= orij* orjk- orik;
Exyz=exp(medi+medj+medk+
0.5*(stdi*stdi+stdj*stdj+stdk*stdk)+
stdi*stdj* orij+stdi*stdk* orik+
stdj*stdk* orjk)/(2.0*sqrt(2.0*pi));
L=-stdi*(B+A* orjk)/a+stdj* orjk+stdk;
Exyz*=I_skew(11,Rk,sqrt(2.0),1,-1.0,0.0,stdi,stdj,stdk, orij, orik,
orjk,0.0,Rj,Rk,L);
Exy=exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij)/(2.0*sqrt(2.0*pi));
L=-stdi*(B+A* orjk)/a+stdj* orjk;
Exy*=I_skew(11,Rk,sqrt(2.0),1,-1.0,0.0,stdi,stdj,stdk, orij, orik,
orjk,0.0,Rj,Rk,L);
Exz=exp(medi+medk+0.5*(stdi*stdi+stdk*stdk)+
stdi*stdk* orik)/(2.0*sqrt(2.0*pi));
L=-stdi*(B+A* orjk)/a+stdk;
Exz*=I_skew(12,Rk,sqrt(2.0),1,-1.0,0.0,stdi,stdj,stdk, orij, orik,
orjk,0.0,Rj,Rk,L);
Eyz=exp(medj+medk+0.5*(stdj*stdj+stdk*stdk)+
stdj*stdk* orjk)/(2.0*sqrt(2.0*pi));
L=stdj* orjk+stdk;
Eyz*=I_skew(13,Rk,sqrt(2.0),1,-1.0,0.0,stdi,stdj,stdk, orij, orik,
orjk,0.0,Rj,Rk,L);
Ex=exp(medi+0.5*(stdi*stdi))/(2.0*sqrt(2.0*pi));
L=-stdi*(B+A* orjk)/a;
Ex*=I_skew(12,Rk,sqrt(2.0),1,-1.0,0.0,stdi,stdj,stdk, orij, orik,
orjk,0.0,Rj,Rk,L);
Ey=exp(medj+0.5*stdj*stdj)/(2.0*sqrt(2.0*pi));
L=stdj* orjk;
Ey*=I_skew(13,Rk,sqrt(2.0),1,-1.0,0.0,stdi,stdj,stdk, orij, orik,
orjk,0.0,Rj,Rk,L);

160

Implementa o~es em linguagem C


Ez=exp(medk+0.5*stdk*stdk)/(2.0*sqrt(2.0*pi));
L=stdk;
Ez*=I_skew(14,Rk,sqrt(2.0),1,-1.0,0.0,stdi,stdj,stdk, orij, orik,
orjk,0.0,Rj,Rk,L);
L=0.0;
E1=I_skew(14,Rk,sqrt(2.0),1,-1.0,0.0,stdi,stdj,stdk, orij, orik,
orjk,0.0,Rj,Rk,L)/(2.0*sqrt(2.0*pi));
Exza =exp(medi+medk+0.5*(stdi*stdi+stdk*stdk)+
stdi*stdk* orik)/(2.0*sqrt(2.0))*
(1.0-erff((Rk- orik*stdi-stdj)/sqrt(2.0)));
Exa =exp(medi+0.5*stdi*stdi)/(2.0*sqrt(2.0))*
(1.0-erff((Rk- orik*stdi)/sqrt(2.0)));
Exyab=exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij)/(2.0*sqrt(2.0))*
(1.0-erff((Rj- orij*stdi-stdj)/sqrt(2.0)));
Exab=exp(medi+0.5*stdi*stdi)/(2.0*sqrt(2.0))*
(1.0-erff((Rj- orij*stdi)/sqrt(2.0)));
Ez =exp(medk+0.5*stdk*stdk)/(2.0*sqrt(2.0))*
(1.0-erff((Rk-stdk)/sqrt(2.0)));
E1 =(1.0-erff(Rk/sqrt(2.0)))/(2.0*sqrt(2.0));
Eyb=exp(medj+0.5*stdj*stdj)/(2.0*sqrt(2.0))*
(1.0-erff((Rj-stdj)/sqrt(2.0)));
E1b=(1.0-erff(Rj/sqrt(2.0)))/(2.0*sqrt(2.0));
Exi=exp(medi+0.5*stdi*stdi);

resp=(Sj*Sk*Exyz-Sj*Exy*K k-K j*Sj*Exz+K j*K k*Ex)/(Cj*Ck);


resp+=-ms*(Sj*Sk*Eyz-Sj*K k*Ey-K j*Sk*Ez+K j*K k*E1)/(Cj*Ck);
resp+=-m j*(Sk*Exza -K k*Exa )/Ck;
resp+=-m k*(Sj*Exyab-K j*Exab)/Cj;
resp+=ms*m j*(Sk*Ez -K k*E1 )/Ck;
resp+=ms*m k*(Sj*Eyb-K j*E1b)/Cj;
resp+=m j*m k*Exi-ms*m j*m k;
return(resp);

double m_ri jpk(double


double
double
double
double
double

medi, double medj, double medk,


stdi, double stdj, double stdk,
orij, double orik, double orjk,
Sj, double Sk, double K j, double Kpk,
Cj, double Pk, double ms, double m ,
mp)

A.2 Rotinas de Co-assimetrias

161

/***************************************************************************/
/* oskewness entre ativo basi o i, all sobre ativo j e put sobre ativo k;*/
/* medi,medj,medk=media do ativo i,j e k;
*/
/* stdi,stdj,stdk=desvio do ativo i,j e k;
*/
/* Cj,Pk,K j,Kpk= ota aos e strikes das all e put ;
*/
/* Sj,Sk= ota ao dos ativos basi os i,j e k em t=0.
*/
/* orij= orrela ao entre i e j;
*/
/***************************************************************************/
{
double Exyz,Exy,Exz,Eyz,Ez,Ex,Ey,E1,resp,
Rj,Rk,a,L,A,B,Exza ,Exa ,Exyab,Exab,Ez ,E1 ,Eyb,E1b,Exi;
Rj=(log(K j/Sj)-medj)/stdj;
Rk=(log(Kpk/Sk)-medk)/stdk;
a=1.0- orjk* orjk;
A= orik* orjk- orij;
B= orij* orjk- orik;
Exyz=exp(medi+medj+medk+
0.5*(stdi*stdi+stdj*stdj+stdk*stdk)+
stdi*stdj* orij+stdi*stdk* orik+
stdj*stdk* orjk)/(2.0*sqrt(2.0*pi));
L=-stdi*(B+A* orjk)/a+stdj* orjk+stdk;
Exyz*=I_skew(11,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,stdk, orij, orik,
orjk,0.0,Rj,Rk,L);
Exy=exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij)/(2.0*sqrt(2.0*pi));
L=-stdi*(B+A* orjk)/a+stdj* orjk;
Exy*=I_skew(11,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,stdk, orij, orik,
orjk,0.0,Rj,Rk,L);
Exz=exp(medi+medk+0.5*(stdi*stdi+stdk*stdk)+
stdi*stdk* orik)/(2.0*sqrt(2.0*pi));
L=-stdi*(B+A* orjk)/a+stdk;
Exz*=I_skew(12,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,stdk, orij, orik,
orjk,0.0,Rj,Rk,L);
Eyz=exp(medj+medk+0.5*(stdj*stdj+stdk*stdk)+
stdj*stdk* orjk)/(2.0*sqrt(2.0*pi));
L=stdj* orjk+stdk;
Eyz*=I_skew(13,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,stdk, orij, orik,
orjk,0.0,Rj,Rk,L);
Ex=exp(medi+0.5*(stdi*stdi))/(2.0*sqrt(2.0*pi));
L=-stdi*(B+A* orjk)/a;
Ex*=I_skew(12,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,stdk, orij, orik,
orjk,0.0,Rj,Rk,L);
Ey=exp(medj+0.5*stdj*stdj)/(2.0*sqrt(2.0*pi));
L=stdj* orjk;
Ey*=I_skew(13,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,stdk, orij, orik,

162

Implementa o~es em linguagem C


orjk,0.0,Rj,Rk,L);
Ez=exp(medk+0.5*stdk*stdk)/(2.0*sqrt(2.0*pi));
L=stdk;
Ez*=I_skew(14,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,stdk, orij, orik,
orjk,0.0,Rj,Rk,L);
L=0.0;
E1=I_skew(14,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,stdk, orij, orik,
orjk,0.0,Rj,Rk,L)/(2.0*sqrt(2.0*pi));
Exza =exp(medi+medk+0.5*(stdi*stdi+stdk*stdk)+
stdi*stdk* orik)/(2.0*sqrt(2.0))*
(1.0+erff((Rk- orik*stdi-stdj)/sqrt(2.0)));
Exa =exp(medi+0.5*stdi*stdi)/(2.0*sqrt(2.0))*
(1.0+erff((Rk- orik*stdi)/sqrt(2.0)));
Exyab=exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij)/(2.0*sqrt(2.0))*
(1.0-erff((Rj- orij*stdi-stdj)/sqrt(2.0)));
Exab=exp(medi+0.5*stdi*stdi)/(2.0*sqrt(2.0))*
(1.0-erff((Rj- orij*stdi)/sqrt(2.0)));
Ez =exp(medk+0.5*stdk*stdk)/(2.0*sqrt(2.0))*
(1.0+erff((Rk-stdk)/sqrt(2.0)));
E1 =(1.0+erff(Rk/sqrt(2.0)))/(2.0*sqrt(2.0));
Eyb=exp(medj+0.5*stdj*stdj)/(2.0*sqrt(2.0))*
(1.0-erff((Rj-stdj)/sqrt(2.0)));
E1b=(1.0-erff(Rj/sqrt(2.0)))/(2.0*sqrt(2.0));
Exi=exp(medi+0.5*stdi*stdi);

resp=-(Sj*Sk*Exyz-Sj*Exy*Kpk-K j*Sj*Exz+K j*Kpk*Ex)/(Cj*Pk);


resp+=ms*(Sj*Sk*Eyz-Sj*Kpk*Ey-K j*Sk*Ez+K j*Kpk*E1)/(Cj*Pk);
resp+=m *(Sk*Exza -Kpk*Exa )/Pk;
resp+=-mp*(Sj*Exyab-K j*Exab)/Cj;
resp+=ms*m *(-Sk*Ez +Kpk*E1 )/Pk;
resp+=ms*mp*(Sj*Eyb-K j*E1b)/Cj;
resp+=m *mp*Exi-ms*m *mp;
return(resp);

double m_ripjpk(double
double
double
double
double

medi, double medj, double medk,


stdi, double stdj, double stdk,
orij, double orik, double orjk,
Sj, double Sk, double Kpj, double Kpk,
Pj, double Pk, double ms, double mpj,

A.2 Rotinas de Co-assimetrias

163

double mpk)
/***************************************************************************/
/* oskewness entre ativo basi o i, all sobre ativo j e put sobre ativo k;*/
/* medi,medj,medk=media do ativo i,j e k;
*/
/* stdi,stdj,stdk=desvio do ativo i,j e k;
*/
/* Pj,Pk,Kpj,Kpk= ota aos e strikes das puts ;
*/
/* Sj,Sk= ota ao dos ativos basi os j e k em t=0.
*/
/* orij= orrela ao entre i e j;
*/
/***************************************************************************/
{
double Exyz,Exy,Exz,Eyz,Ez,Ex,Ey,E1,resp,
Rj,Rk,a,L,A,B,Exza ,Exa ,Exyab,Exab,Ez ,E1 ,Eyb,E1b,Exi;
Rj=(log(Kpj/Sj)-medj)/stdj;
Rk=(log(Kpk/Sk)-medk)/stdk;
a=1.0- orjk* orjk;
A= orik* orjk- orij;
B= orij* orjk- orik;
Exyz=exp(medi+medj+medk+
0.5*(stdi*stdi+stdj*stdj+stdk*stdk)+
stdi*stdj* orij+stdi*stdk* orik+
stdj*stdk* orjk)/(2.0*sqrt(2.0*pi));
L=-stdi*(B+A* orjk)/a+stdj* orjk+stdk;
Exyz*=I_skew(11,Rk,sqrt(2.0),-1,1.0,0.0,stdi,stdj,stdk, orij, orik,
orjk,0.0,Rj,Rk,L);
Exy=exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij)/(2.0*sqrt(2.0*pi));
L=-stdi*(B+A* orjk)/a+stdj* orjk;
Exy*=I_skew(11,Rk,sqrt(2.0),-1,1.0,0.0,stdi,stdj,stdk, orij, orik,
orjk,0.0,Rj,Rk,L);
Exz=exp(medi+medk+0.5*(stdi*stdi+stdk*stdk)+
stdi*stdk* orik)/(2.0*sqrt(2.0*pi));
L=-stdi*(B+A* orjk)/a+stdk;
Exz*=I_skew(12,Rk,sqrt(2.0),-1,1.0,0.0,stdi,stdj,stdk, orij, orik,
orjk,0.0,Rj,Rk,L);
Eyz=exp(medj+medk+0.5*(stdj*stdj+stdk*stdk)+
stdj*stdk* orjk)/(2.0*sqrt(2.0*pi));
L=stdj* orjk+stdk;
Eyz*=I_skew(13,Rk,sqrt(2.0),-1,1.0,0.0,stdi,stdj,stdk, orij, orik,
orjk,0.0,Rj,Rk,L);
Ex=exp(medi+0.5*(stdi*stdi))/(2.0*sqrt(2.0*pi));
L=-stdi*(B+A* orjk)/a;
Ex*=I_skew(12,Rk,sqrt(2.0),-1,1.0,0.0,stdi,stdj,stdk, orij, orik,
orjk,0.0,Rj,Rk,L);
Ey=exp(medj+0.5*stdj*stdj)/(2.0*sqrt(2.0*pi));
L=stdj* orjk;

164

Implementa o~es em linguagem C


Ey*=I_skew(13,Rk,sqrt(2.0),-1,1.0,0.0,stdi,stdj,stdk, orij, orik,
orjk,0.0,Rj,Rk,L);
Ez=exp(medk+0.5*stdk*stdk)/(2.0*sqrt(2.0*pi));
L=stdk;
Ez*=I_skew(14,Rk,sqrt(2.0),-1,1.0,0.0,stdi,stdj,stdk, orij, orik,
orjk,0.0,Rj,Rk,L);
L=0.0;
E1=I_skew(14,Rk,sqrt(2.0),-1,1.0,0.0,stdi,stdj,stdk, orij, orik,
orjk,0.0,Rj,Rk,L)/(2.0*sqrt(2.0*pi));
Exza =exp(medi+medk+0.5*(stdi*stdi+stdk*stdk)+
stdi*stdk* orik)/(2.0*sqrt(2.0))*
(1.0+erff((Rk- orik*stdi-stdj)/sqrt(2.0)));
Exa =exp(medi+0.5*stdi*stdi)/(2.0*sqrt(2.0))*
(1.0+erff((Rk- orik*stdi)/sqrt(2.0)));
Exyab=exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij)/(2.0*sqrt(2.0))*
(1.0+erff((Rj- orij*stdi-stdj)/sqrt(2.0)));
Exab=exp(medi+0.5*stdi*stdi)/(2.0*sqrt(2.0))*
(1.0+erff((Rj- orij*stdi)/sqrt(2.0)));
Ez =exp(medk+0.5*stdk*stdk)/(2.0*sqrt(2.0))*
(1.0+erff((Rk-stdk)/sqrt(2.0)));
E1 =(1.0+erff(Rk/sqrt(2.0)))/(2.0*sqrt(2.0));
Eyb=exp(medj+0.5*stdj*stdj)/(2.0*sqrt(2.0))*
(1.0+erff((Rj-stdj)/sqrt(2.0)));
E1b=(1.0+erff(Rj/sqrt(2.0)))/(2.0*sqrt(2.0));
Exi=exp(medi+0.5*stdi*stdi);

resp=(Sj*Sk*Exyz-Sj*Exy*Kpk-Kpj*Sj*Exz+Kpj*Kpk*Ex)/(Pj*Pk);
resp+=-ms*(Sj*Sk*Eyz-Sj*Kpk*Ey-Kpj*Sk*Ez+Kpj*Kpk*E1)/(Pj*Pk);
resp+=mpj*(Sk*Exza -Kpk*Exa )/Pk;
resp+=mpk*(Sj*Exyab-Kpj*Exab)/Pj;
resp+=ms*mpj*(-Sk*Ez +Kpk*E1 )/Pk;
resp+=ms*mpk*(-Sj*Eyb+Kpj*E1b)/Pj;
resp+=mpj*mpk*Exi-ms*mpj*mpk;
return(resp);

/***************************************************************************/

A.2 Rotinas de Co-assimetrias

165

/******
expressoes de assimetria que envolvem integrais triplas
*****/
/***************************************************************************/
double m_ i j k(double medi, double medj, double medk,
double stdi, double stdj, double stdk,
double orij, double orik, double orjk,
double Si, double Sj, double Sk,
double K i, double K j, double K k,
double Ci, double Cj, double Ck, double *x, double *w,
double m i, double m j, double m k )
/***************************************************************************/
/* medi,medj,medk=media dos ativos i,j e k;
*/
/* stdi,stdj,stdk=desvio dos ativos i,j e k;
*/
/* Ci,Cj,Ck,K i,K j,K k=premios e strikes das alls ;
*/
/* Si,Sj,Sk= ota ao dos ativos basi os i,j e k em t=0.
*/
/* orij= orrela ao entre i e j;
*/
/* x=vetor que ont
em os nos do grid gaussiano;
*/
/* w=vetor de pesos do grid gaussiano;
*/
/***************************************************************************/
{
double Exyz,Exy,Exz,Eyz,Ez,Ex,Ey,E1,resp,
Ri,Rj,Rk, ,Gb,G, L, T, B, C,
Eyzb ,Eyb ,Ezb ,E1b ,
Exza ,Exa ,Eza ,E1a ,
Exyab,Exab,Eyab,E1ab,
Ez ,E1 ,Eyb,E1b,Exa,E1a;
int l;
Exyz=0.0;
=1.0- orij* orij;
C= orij* orik- orjk;
B= orij* orjk- orik;
Ri=(log(K i/Si)-medi)/stdi;
Rj=(log(K j/Sj)-medj)/stdj;
Rk=(log(K k/Sk)-medk)/stdk;
T=(stdk*B-stdi* + orij*(-stdj* +stdk*C))/ ;
L=(Ri+T)/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj-stdj* +stdk*C- orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Exyz+=w[l*exp(-2.0*x[l*L)*
I_skew(15,G,1.0,+1,-1.0,x[l,stdi,stdj,stdk,
orij, orik, orjk,Ri,Rj,Rk,0.0);
/* I al ula a integral de G ate' +(-)infinito da fun ao
fun , que depende de phi (x[i e'um ponto do grid de phi

166

Implementa o~es em linguagem C


indiretamente e de psi. */

}
Exyz*=exp(medi+medj+medk
+0.5*(stdi*stdi+stdj*stdj+stdk*stdk)
+stdi*stdj* orij+stdi*stdk* orik
+stdj*stdk* orjk-sqr(L))/(2.0*pi);
Exy=0.0;
T=-stdi+ orij*-stdj;
L=(Ri+T)/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj-stdj* - orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Exy+=w[l*exp(-2.0*x[l*L)
*I_skew(16,G,1.0,+1,-1.0,x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);
}
Exy*=exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)
+stdi*stdj* orij-sqr(L))/(2.0*pi);
Exz=0.0;
T=(stdk*B-stdi* + orij*stdk*C)/ ;
L=(Ri+T)/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj+stdk*C- orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Exz+=w[l*exp(-2.0*x[l*L)
*I_skew(17,G,1.0,+1,-1.0,x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);
}
Exz*=exp(medi+medk+0.5*(stdi*stdi+stdk*stdk)
+stdi*stdk* orik-sqr(L))/(2.0*pi);
Eyz=0.0;
T=(stdk*B+ orij*(-stdj* +stdk*C))/ ;
L=(Ri+T)/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj-stdj* +stdk*C- orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Eyz+=w[l*exp(-2.0*x[l*L)
*I_skew(18,G,1.0,+1,-1.0,x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);
}
Eyz*=exp(medj+medk+0.5*(stdj*stdj+stdk*stdk)+
stdj*stdk* orjk-sqr(L))/(2.0*pi);
Ex=0.0;
T=-stdi;
L=(Ri+T)/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj- orij*sqrt(2.0)*L+ orij*T);

A.2 Rotinas de Co-assimetrias


for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Ex+=w[l*exp(-2.0*x[l*L)
*I_skew(19,G,1.0,+1,-1.0,x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);
}
Ex*=exp(medi+0.5*(stdi*stdi)-sqr(L))/(2.0*pi);
Ey=0.0;
T= orij*-stdj;
L=(Ri+T)/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj-stdj* - orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Ey+=w[l*exp(-2.0*x[l*L)
*I_skew(20,G,1.0,+1,-1.0,x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);
}
Ey*=exp(medj+0.5*stdj*stdj-sqr(L))/(2.0*pi);
Ez=0.0;
T=(stdk*B+ orij*stdk*C)/ ;
L=(Ri+T)/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj+stdk*C- orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Ez+=w[l*exp(-2.0*x[l*L)
*I_skew(21,G,1.0,+1,-1.0,x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);
}
Ez*=exp(medk+0.5*stdk*stdk-sqr(L))/(2.0*pi);
E1=0.0;
T=0.0;
L=Ri/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj- orij*sqrt(2.0)*L);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
E1+=w[l*exp(-2.0*x[l*L)
*I_skew(22,G,1.0,+1,-1.0,x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);
}
E1*=exp(-sqr(L))/(2.0*pi);
Exyab=(0.5/sqrt(2.0*pi))*
exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij);
L=stdi+stdj* orij;
Exyab*=I_skew(9,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,

167

168

Implementa o~es em linguagem C


0.0,Ri,Rj,0.0,L);
Exab=(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi;
Exab*=I_skew(10,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Eyab=(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orij;
Eyab*=I_skew(9,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E1ab=(0.5/sqrt(2.0*pi));
L=0.0;
E1ab*=I_skew(10,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Eyzb =(0.5/sqrt(2.0*pi))*
exp(medk+medj+0.5*(stdk*stdk+stdj*stdj)+
stdk*stdj* orjk);
L=stdk+stdj* orjk;
Eyzb *=I_skew(9,Rk,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0,0.0,0.0,
orjk,Ri,Rj,0.0,L);
Ezb =(0.5/sqrt(2.0*pi))*exp(medk+0.5*stdk*stdk);
L=stdk;
Ezb *=I_skew(10,Rk,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0,0.0,0.0,
orjk,Ri,Rj,0.0,L);
Eyb =(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orjk;
Eyb *=I_skew(9,Rk,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0,0.0,0.0,
orjk,Ri,Rj,0.0,L);
E1b =(0.5/sqrt(2.0*pi));
L=0.0;
E1b *=I_skew(10,Rk,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0,0.0,0.0,
orjk,Ri,Rj,0.0,L);
Exza =(0.5/sqrt(2.0*pi))*
exp(medk+medi+0.5*(stdk*stdk+stdi*stdi)+
stdk*stdi* orik);
L=stdk+stdi* orik;
Exza *=I_skew(9,Rk,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0,0.0, orik,
0.0,Ri,Rj,0.0,L);
Eza =(0.5/sqrt(2.0*pi))*exp(medk+0.5*stdk*stdk);
L=stdk;
Eza *=I_skew(10,Rk,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0,0.0, orik,
0.0,Ri,Rj,0.0,L);
Exa =(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi* orik;
Exa *=I_skew(9,Rk,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0,0.0, orik,

A.2 Rotinas de Co-assimetrias

169

0.0,Ri,Rj,0.0,L);
E1a =(0.5/sqrt(2.0*pi));
L=0.0;
E1a *=I_skew(10,Rk,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0,0.0, orik,
0.0,Ri,Rj,0.0,L);
Ez =0.5*exp(medk+0.5*stdk*stdk)*(1.0-erff((Rk-stdk)/sqrt(2.0)));
Ez =0.5*(1.0-erff(Rk/sqrt(2.0)));
Eyb=0.5*exp(medj+0.5*stdj*stdj)*(1.0-erff((Rj-stdj)/sqrt(2.0)));
E1b=0.5*(1.0-erff(Rj/sqrt(2.0)));
Exa=0.5*exp(medi+0.5*stdi*stdi)*(1.0-erff((Ri-stdi)/sqrt(2.0)));
E1a=0.5*(1.0-erff(Ri/sqrt(2.0)));

resp=(Si*Sj*Sk*Exyz-Si*Sj*Exy*K k-Si*Sk*Exz*K j+Si*Ex*K j*K k


+Sj*Ey*K i*K k+Sk*Ez*K j*K i-K i*K j*K k*E1)/(Ci*Cj*Ck);
resp+=-m i*(Sj*Sk*Eyzb -Sj*K k*Eyb -K j*Sk*Ezb +K j*K k*E1b )/(Cj*Ck);
resp+=-m j*(Si*Sk*Exza -Si*K k*Exa -K i*Sk*Eza +K i*K k*E1a )/(Ci*Ck);
resp+=-m k*(Si*Sj*Exyab-Si*K j*Exab-K i*Sj*Eyab+K i*K j*E1ab)/(Ci*Cj);
resp+=m i*m j*(Sk*Ez -K k*E1 )/Ck+m i*m k*(Sj*Eyb-K j*E1b)/Cj;
resp+=m j*m k*(Si*Exa-K i*E1a)/Ci-m i*m j*m k;
return(resp);

double m_ i jpk(double medi, double medj, double medk,


double stdi, double stdj, double stdk,
double orij, double orik, double orjk,
double Si, double Sj, double Sk,
double K i, double K j, double Kpk,
double Ci, double Cj, double Pk, double *x, double *w,
double m i, double m j, double mp)
/***************************************************************************/
/* medi,medj,medk=media do ativo i,j e k;
*/
/* stdi,stdj,stdk=desvio do ativo i,j e k;
*/
/* Ci,Cj,K i,K j=premios e strikes das alls ;
*/
/* Pk,Kpk= ota ao e strike da put;
*/
/* Si,Sj,Sk= ota ao dos ativos basi os i,j e k em t=0.
*/
/* orij= orrela ao entre i e j;
*/
/***************************************************************************/
{
double Exyz,Exy,Exz,Eyz,Ez,Ex,Ey,E1,resp,
Ri,Rj,Rk, ,G, Gb, C, B, L, T;
int l;

170

Implementa o~es em linguagem C

Exyz=0.0;
=1.0- orij* orij;
C= orij* orik- orjk;
B= orij* orjk- orik;
Ri=(log(K i/Si)-medi)/stdi;
Rj=(log(K j/Sj)-medj)/stdj;
Rk=(log(Kpk/Sk)-medk)/stdk;
T=(stdk*B-stdi* + orij*(-stdj* +stdk*C))/ ;
L=(Ri+T)/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj-stdj* +stdk*C- orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Exyz+=w[l*exp(-2.0*x[l*L)
*I_skew(15,G,1.0,+1,1.0,x[l,stdi,stdj,stdk,
orij, orik, orjk,Ri,Rj,Rk,0.0);
/* I al ula a integral de G ate' +(-)infinito da fun ao
fun , que depende de phi (x[i e'um ponto do grid de phi
indiretamente e de psi. */
}
Exyz*=exp(medi+medj+medk
+0.5*(stdi*stdi+stdj*stdj+stdk*stdk)
+stdi*stdj* orij+stdi*stdk* orik
+stdj*stdk* orjk-sqr(L))/(2.0*pi);
Exy=0.0;
T=-stdi+ orij*-stdj;
L=(Ri+T)/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj-stdj* - orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Exy+=w[l*exp(-2.0*x[l*L)
*I_skew(16,G,1.0,+1,1.0,x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);
}
Exy*=exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)
+stdi*stdj* orij-sqr(L))/(2.0*pi);
Exz=0.0;
T=(stdk*B-stdi* + orij*stdk*C)/ ;
L=(Ri+T)/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj+stdk*C- orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Exz+=w[l*exp(-2.0*x[l*L)
*I_skew(17,G,1.0,+1,1.0,x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);
}

A.2 Rotinas de Co-assimetrias


Exz*=exp(medi+medk+0.5*(stdi*stdi+stdk*stdk)
+stdi*stdk* orik-sqr(L))/(2.0*pi);
Eyz=0.0;
T=(stdk*B+ orij*(-stdj* +stdk*C))/ ;
L=(Ri+T)/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj-stdj* +stdk*C- orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Eyz+=w[l*exp(-2.0*x[l*L)
*I_skew(18,G,1.0,+1,1.0,x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);
}
Eyz*=exp(medj+medk+0.5*(stdj*stdj+stdk*stdk)+
stdj*stdk* orjk-sqr(L))/(2.0*pi);
Ex=0.0;
T=-stdi;
L=(Ri+T)/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj- orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Ex+=w[l*exp(-2.0*x[l*L)
*I_skew(19,G,1.0,+1,1.0,x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);
}
Ex*=exp(medi+0.5*(stdi*stdi)-sqr(L))/(2.0*pi);
Ey=0.0;
T= orij*-stdj;
L=(Ri+T)/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj-stdj* - orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Ey+=w[l*exp(-2.0*x[l*L)
*I_skew(20,G,1.0,+1,1.0,x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);
}
Ey*=exp(medj+0.5*stdj*stdj-sqr(L))/(2.0*pi);
Ez=0.0;
T=(stdk*B+ orij*stdk*C)/ ;
L=(Ri+T)/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj+stdk*C- orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Ez+=w[l*exp(-2.0*x[l*L)
*I_skew(21,G,1.0,+1,1.0,x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);
}

171

172

Implementa o~es em linguagem C


Ez*=exp(medk+0.5*stdk*stdk-sqr(L))/(2.0*pi);
E1=0.0;
T=0.0;
L=Ri/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj- orij*sqrt(2.0)*L);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
E1+=w[l*exp(-2.0*x[l*L)
*I_skew(22,G,1.0,+1,1.0,x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);
}
E1*=exp(-sqr(L))/(2.0*pi);
Exyab=(0.5/sqrt(2.0*pi))*
exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij);
L=stdi+stdj* orij;
Exyab*=I_skew(9,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Exab=(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi;
Exab*=I_skew(10,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Eyab=(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orij;
Eyab*=I_skew(9,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E1ab=(0.5/sqrt(2.0*pi));
L=0.0;
E1ab*=I_skew(10,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Eyzb =(0.5/sqrt(2.0*pi))*
exp(medk+medj+0.5*(stdk*stdk+stdj*stdj)+
stdk*stdj* orjk);
L=stdk+stdj* orjk;
Eyzb *=I_skew(9,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0,0.0,0.0,
orjk,Ri,Rj,0.0,L);
Ezb =(0.5/sqrt(2.0*pi))*exp(medk+0.5*stdk*stdk);
L=stdk;
Ezb *=I_skew(10,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0,0.0,0.0,
orjk,Ri,Rj,0.0,L);
Eyb =(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orjk;
Eyb *=I_skew(9,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0,0.0,0.0,
orjk,Ri,Rj,0.0,L);
E1b =(0.5/sqrt(2.0*pi));

A.2 Rotinas de Co-assimetrias

173

L=0.0;
E1b *=I_skew(10,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0,0.0,0.0,
orjk,Ri,Rj,0.0,L);
Exza =(0.5/sqrt(2.0*pi))*
exp(medk+medi+0.5*(stdk*stdk+stdi*stdi)+
stdk*stdi* orik);
L=stdk+stdi* orik;
Exza *=I_skew(9,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0,0.0, orik,
0.0,Ri,Rj,0.0,L);
Eza =(0.5/sqrt(2.0*pi))*exp(medk+0.5*stdk*stdk);
L=stdk;
Eza *=I_skew(10,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0,0.0, orik,
0.0,Ri,Rj,0.0,L);
Exa =(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi* orik;
Exa *=I_skew(9,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0,0.0, orik,
0.0,Ri,Rj,0.0,L);
E1a =(0.5/sqrt(2.0*pi));
L=0.0;
E1a *=I_skew(10,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0,0.0, orik,
0.0,Ri,Rj,0.0,L);
Ez =0.5*exp(medk+0.5*stdk*stdk)*(1.0+erff((Rk-stdk)/sqrt(2.0)));
E1 =0.5*(1.0+erff(Rk/sqrt(2.0)));
Eyb=0.5*exp(medj+0.5*stdj*stdj)*(1.0-erff((Rj-stdj)/sqrt(2.0)));
E1b=0.5*(1.0-erff(Rj/sqrt(2.0)));
Exa=0.5*exp(medi+0.5*stdi*stdi)*(1.0-erff((Ri-stdi)/sqrt(2.0)));
E1a=0.5*(1.0-erff(Ri/sqrt(2.0)));
resp=-(Si*Sj*Sk*Exyz-Si*Sj*Exy*Kpk-Si*Sk*Exz*K j+Si*Ex*K j*Kpk
+Sj*Ey*K i*Kpk+Sk*Ez*K j*K i-K i*K j*Kpk*E1)/(Ci*Cj*Pk);
resp+=m i*(Sj*Sk*Eyzb -Sj*Kpk*Eyb -K j*Sk*Ezb +K j*Kpk*E1b )/(Cj*Pk);
resp+=m j*(Si*Sk*Exza -Si*Kpk*Exa -K i*Sk*Eza +K i*Kpk*E1a )/(Ci*Pk);
resp+=-mpk*(Si*Sj*Exyab-Si*K j*Exab-K i*Sj*Eyab+K i*K j*E1ab)/(Ci*Cj);
resp+=m i*m j*(-Sk*Ez +Kpk*E1 )/Pk+m i*mpk*(Sj*Eyb-K j*E1b)/Cj;
resp+=m j*mpk*(Si*Exa-K i*E1a)/Ci-m i*m j*mpk;
return(resp);
}

double m_ ipjpk(double medi, double medj, double medk,

174

Implementa o~es em linguagem C

double stdi, double stdj, double stdk,


double orij, double orik, double orjk,
double Si, double Sj, double Sk,
double K i, double Kpj, double Kpk,
double Ci, double Pj, double Pk, double *x, double *w,
double m , double mpj, double mpk)
/***************************************************************************/
/* medi,medj,medk=media do ativo i,j e k;
*/
/* stdi,stdj,stdk=desvio do ativo i,j e k;
*/
/* Ci,K i= ota ao e strike da all ;
*/
/* Pj,Pk,Kpj,Kpk= ota ao e strike das puts;
*/
/* Si,Sj,Sk= ota ao dos ativos basi os i,j e k em t=0.
*/
/* orij= orrela ao entre i e j;
*/
/***************************************************************************/
{
double Exyz,Exy,Exz,Eyz,Ez,Ex,Ey,E1,resp,
Ri,Rj,Rk, ,G, Gb, L, T, B, C;
int l;
Exyz=0.0;
=1.0- orij* orij;
C= orij* orik- orjk;
B= orij* orjk- orik;
Ri=(log(K i/Si)-medi)/stdi;
Rj=(log(Kpj/Sj)-medj)/stdj;
Rk=(log(Kpk/Sk)-medk)/stdk;
T=(stdk*B-stdi* + orij*(-stdj* +stdk*C))/ ;
L=(Ri+T)/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj-stdj* +stdk*C- orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Exyz+=w[l*exp(-2.0*x[l*L)
*I_skew(15,G,1.0,-1,1.0,x[l,stdi,stdj,stdk,
orij, orik, orjk,Ri,Rj,Rk,0.0);
/* I al ula a integral de G ate' +(-)infinito da fun ao
fun , que depende de phi (x[i e'um ponto do grid de phi
indiretamente e de psi. */
}
Exyz*=exp(medi+medj+medk
+0.5*(stdi*stdi+stdj*stdj+stdk*stdk)
+stdi*stdj* orij+stdi*stdk* orik
+stdj*stdk* orjk-sqr(L))/(2.0*pi);
Exy=0.0;
T=-stdi+ orij*-stdj;
L=(Ri+T)/sqrt(2.0);

A.2 Rotinas de Co-assimetrias


Gb=(1.0/sqrt(2.0* ))*(Rj-stdj* - orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Exy+=w[l*exp(-2.0*x[l*L)
*I_skew(16,G,1.0,-1,1.0,x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);
}
Exy*=exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)
+stdi*stdj* orij-sqr(L))/(2.0*pi);
Exz=0.0;
T=(stdk*B-stdi* + orij*stdk*C)/ ;
L=(Ri+T)/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj+stdk*C- orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Exz+=w[l*exp(-2.0*x[l*L)
*I_skew(17,G,1.0,-1,1.0,x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);
}
Exz*=exp(medi+medk+0.5*(stdi*stdi+stdk*stdk)
+stdi*stdk* orik-sqr(L))/(2.0*pi);
Eyz=0.0;
T=(stdk*B+ orij*(-stdj* +stdk*C))/ ;
L=(Ri+T)/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj-stdj* +stdk*C- orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Eyz+=w[l*exp(-2.0*x[l*L)
*I_skew(18,G,1.0,-1,1.0,x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);
}
Eyz*=exp(medj+medk+0.5*(stdj*stdj+stdk*stdk)+
stdj*stdk* orjk-sqr(L))/(2.0*pi);
Ex=0.0;
T=-stdi;
L=(Ri+T)/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj- orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Ex+=w[l*exp(-2.0*x[l*L)
*I_skew(19,G,1.0,-1,1.0,x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);
}
Ex*=exp(medi+0.5*(stdi*stdi)-sqr(L))/(2.0*pi);
Ey=0.0;
T= orij*-stdj;

175

176

Implementa o~es em linguagem C


L=(Ri+T)/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj-stdj* - orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Ey+=w[l*exp(-2.0*x[l*L)
*I_skew(20,G,1.0,-1,1.0,x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);
}
Ey*=exp(medj+0.5*stdj*stdj-sqr(L))/(2.0*pi);
Ez=0.0;
T=(stdk*B+ orij*stdk*C)/ ;
L=(Ri+T)/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj+stdk*C- orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Ez+=w[l*exp(-2.0*x[l*L)
*I_skew(21,G,1.0,-1,1.0,x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);
}
Ez*=exp(medk+0.5*stdk*stdk-sqr(L))/(2.0*pi);
E1=0.0;
T=0.0;
L=Ri/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj- orij*sqrt(2.0)*L);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
E1+=w[l*exp(-2.0*x[l*L)
*I_skew(22,G,1.0,-1,1.0,x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);
}
E1*=exp(-sqr(L))/(2.0*pi);
Exyab=(0.5/sqrt(2.0*pi))*
exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij);
L=stdi+stdj* orij;
Exyab*=I_skew(9,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Exab=(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi;
Exab*=I_skew(10,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Eyab=(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orij;
Eyab*=I_skew(9,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E1ab=(0.5/sqrt(2.0*pi));

A.2 Rotinas de Co-assimetrias


L=0.0;
E1ab*=I_skew(10,Ri,sqrt(2.0),1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Eyzb =(0.5/sqrt(2.0*pi))*
exp(medk+medj+0.5*(stdk*stdk+stdj*stdj)+
stdk*stdj* orjk);
L=stdk+stdj* orjk;
Eyzb *=I_skew(9,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0,0.0,0.0,
orjk,Ri,Rj,0.0,L);
Ezb =(0.5/sqrt(2.0*pi))*exp(medk+0.5*stdk*stdk);
L=stdk;
Ezb *=I_skew(10,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0,0.0,0.0,
orjk,Ri,Rj,0.0,L);
Eyb =(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orjk;
Eyb *=I_skew(9,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0,0.0,0.0,
orjk,Ri,Rj,0.0,L);
E1b =(0.5/sqrt(2.0*pi));
L=0.0;
E1b *=I_skew(10,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0,0.0,0.0,
orjk,Ri,Rj,0.0,L);
Exza =(0.5/sqrt(2.0*pi))*
exp(medk+medi+0.5*(stdk*stdk+stdi*stdi)+
stdk*stdi* orik);
L=stdk+stdi* orik;
Exza *=I_skew(9,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0,0.0, orik,
0.0,Ri,Rj,0.0,L);
Eza =(0.5/sqrt(2.0*pi))*exp(medk+0.5*stdk*stdk);
L=stdk;
Eza *=I_skew(10,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0,0.0, orik,
0.0,Ri,Rj,0.0,L);
Exa =(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi* orik;
Exa *=I_skew(9,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0,0.0, orik,
0.0,Ri,Rj,0.0,L);
E1a =(0.5/sqrt(2.0*pi));
L=0.0;
E1a *=I_skew(10,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0,0.0, orik,
0.0,Ri,Rj,0.0,L);
Ez =0.5*exp(medk+0.5*stdk*stdk)*(1.0+erff((Rk-stdk)/sqrt(2.0)));
E1 =0.5*(1.0+erff(Rk/sqrt(2.0)));
Eyb=0.5*exp(medj+0.5*stdj*stdj)*(1.0+erff((Rj-stdj)/sqrt(2.0)));

177

178

Implementa o~es em linguagem C


E1b=0.5*(1.0+erff(Rj/sqrt(2.0)));
Exa=0.5*exp(medi+0.5*stdi*stdi)*(1.0-erff((Ri-stdi)/sqrt(2.0)));
E1a=0.5*(1.0-erff(Ri/sqrt(2.0)));
resp=(Si*Sj*Sk*Exyz-Si*Sj*Exy*Kpk-Si*Sk*Exz*Kpj+Si*Ex*Kpj*Kpk
+Sj*Ey*K i*Kpk+Sk*Ez*Kpj*K i-K i*Kpj*Kpk*E1)/(Ci*Pj*Pk);
resp+=-m i*(Sj*Sk*Eyzb -Sj*Kpk*Eyb -Kpj*Sk*Ezb +Kpj*Kpk*E1b )/(Pj*Pk);
resp+=mpj*(Si*Sk*Exza -Si*Kpk*Exa -K i*Sk*Eza +K i*Kpk*E1a )/(Ci*Pk);
resp+=mpk*(Si*Sj*Exyab-Si*Kpj*Exab-K i*Sj*Eyab+K i*Kpj*E1ab)/(Ci*Pj);
resp+=m i*mpj*(-Sk*Ez +Kpk*E1 )/Pk+m i*mpk*(-Sj*Eyb+Kpj*E1b)/Pj;
resp+=mpj*mpk*(Si*Exa-K i*E1a)/Ci-m i*mpj*mpk;
return(resp);

double m_pipjpk(double medi, double medj, double medk,


double stdi, double stdj, double stdk,
double orij, double orik, double orjk,
double Si, double Sj, double Sk,
double Kpi, double Kpj, double Kpk,
double Pi, double Pj, double Pk, double *x, double *w,
double mpi, double mpj, double mpk)
/***************************************************************************/
/* medi,medj,medk=media do ativo i,j e k;
*/
/* stdi,stdj,stdk=desvio do ativo i,j e k;
*/
/* Pi,Pj,Pk,Kpi,Kpj,Kpk=premios e strikes das puts ;
*/
/* Si,Sj,Sk= ota ao dos ativos basi os i,j e k em t=0.
*/
/* orij= orrela ao entre i e j;
*/
/***************************************************************************/
{
double Exyz,Exy,Exz,Eyz,Ez,Ex,Ey,E1,resp,
Ri,Rj,Rk, ,G, Gb, L, T, B, C;
int l;
Exyz=0.0;
=1.0- orij* orij;
C= orij* orik- orjk;
B= orij* orjk- orik;
Ri=(log(Kpi/Si)-medi)/stdi;
Rj=(log(Kpj/Sj)-medj)/stdj;
Rk=(log(Kpk/Sk)-medk)/stdk;
T=(stdk*B-stdi* + orij*(-stdj* +stdk*C))/ ;
L=(Ri+T)/sqrt(2.0);

A.2 Rotinas de Co-assimetrias


Gb=(1.0/sqrt(2.0* ))*(Rj-stdj* +stdk*C- orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(-x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Exyz+=w[l*exp(-2.0*-x[l*L)
*I_skew(15,G,1.0,-1,1.0,-x[l,stdi,stdj,stdk,
orij, orik, orjk,Ri,Rj,Rk,0.0);
/* I al ula a integral de G ate' +(-)infinito da fun ao
fun , que depende de phi (x[i e'um ponto do grid de phi
indiretamente e de psi. */
}
Exyz*=exp(medi+medj+medk
+0.5*(stdi*stdi+stdj*stdj+stdk*stdk)
+stdi*stdj* orij+stdi*stdk* orik
+stdj*stdk* orjk-sqr(L))/(2.0*pi);
Exy=0.0;
T=-stdi+ orij*-stdj;
L=(Ri+T)/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj-stdj* - orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(-x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Exy+=w[l*exp(-2.0*-x[l*L)
*I_skew(16,G,1.0,-1,1.0,-x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);
}
Exy*=exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)
+stdi*stdj* orij-sqr(L))/(2.0*pi);
Exz=0.0;
T=(stdk*B-stdi* + orij*stdk*C)/ ;
L=(Ri+T)/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj+stdk*C- orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(-x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Exz+=w[l*exp(-2.0*-x[l*L)
*I_skew(17,G,1.0,-1,1.0,-x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);
}
Exz*=exp(medi+medk+0.5*(stdi*stdi+stdk*stdk)
+stdi*stdk* orik-sqr(L))/(2.0*pi);
Eyz=0.0;
T=(stdk*B+ orij*(-stdj* +stdk*C))/ ;
L=(Ri+T)/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj-stdj* +stdk*C- orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(-x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Eyz+=w[l*exp(-2.0*-x[l*L)
*I_skew(18,G,1.0,-1,1.0,-x[l,stdi,stdj,stdk, orij,

179

180

Implementa o~es em linguagem C


orik, orjk,Ri,Rj,Rk,0.0);

}
Eyz*=exp(medj+medk+0.5*(stdj*stdj+stdk*stdk)+
stdj*stdk* orjk-sqr(L))/(2.0*pi);
Ex=0.0;
T=-stdi;
L=(Ri+T)/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj- orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(-x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Ex+=w[l*exp(-2.0*-x[l*L)
*I_skew(19,G,1.0,-1,1.0,-x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);
}
Ex*=exp(medi+0.5*(stdi*stdi)-sqr(L))/(2.0*pi);
Ey=0.0;
T= orij*-stdj;
L=(Ri+T)/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj-stdj* - orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(-x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Ey+=w[l*exp(-2.0*-x[l*L)
*I_skew(20,G,1.0,-1,1.0,-x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);
}
Ey*=exp(medj+0.5*stdj*stdj-sqr(L))/(2.0*pi);
Ez=0.0;
T=(stdk*B+ orij*stdk*C)/ ;
L=(Ri+T)/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj+stdk*C- orij*sqrt(2.0)*L+ orij*T);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(-x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
Ez+=w[l*exp(-2.0*-x[l*L)
*I_skew(21,G,1.0,-1,1.0,-x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);
}
Ez*=exp(medk+0.5*stdk*stdk-sqr(L))/(2.0*pi);
E1=0.0;
T=0.0;
L=Ri/sqrt(2.0);
Gb=(1.0/sqrt(2.0* ))*(Rj- orij*sqrt(2.0)*L);
for (l=0;l<16;l++){
/* 16 e'o numero de pontos de gauss */
G=Gb-(-x[l*sqrt(2.0)* orij)*(1.0/sqrt(2.0* ));
E1+=w[l*exp(-2.0*-x[l*L)
*I_skew(22,G,1.0,-1,1.0,-x[l,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,0.0);

A.2 Rotinas de Co-assimetrias


}
E1*=exp(-sqr(L))/(2.0*pi);
Exyab=(0.5/sqrt(2.0*pi))*
exp(medi+medj+0.5*(stdi*stdi+stdj*stdj)+
stdi*stdj* orij);
L=stdi+stdj* orij;
Exyab*=I_skew(9,Ri,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Exab=(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi;
Exab*=I_skew(10,Ri,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Eyab=(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orij;
Eyab*=I_skew(9,Ri,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
E1ab=(0.5/sqrt(2.0*pi));
L=0.0;
E1ab*=I_skew(10,Ri,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0, orij,0.0,
0.0,Ri,Rj,0.0,L);
Eyzb =(0.5/sqrt(2.0*pi))*
exp(medk+medj+0.5*(stdk*stdk+stdj*stdj)+
stdk*stdj* orjk);
L=stdk+stdj* orjk;
Eyzb *=I_skew(9,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0,0.0,0.0,
orjk,Ri,Rj,0.0,L);
Ezb =(0.5/sqrt(2.0*pi))*exp(medk+0.5*stdk*stdk);
L=stdk;
Ezb *=I_skew(10,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0,0.0,0.0,
orjk,Ri,Rj,0.0,L);
Eyb =(0.5/sqrt(2.0*pi))*exp(medj+0.5*stdj*stdj);
L=stdj* orjk;
Eyb *=I_skew(9,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0,0.0,0.0,
orjk,Ri,Rj,0.0,L);
E1b =(0.5/sqrt(2.0*pi));
L=0.0;
E1b *=I_skew(10,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0,0.0,0.0,
orjk,Ri,Rj,0.0,L);
Exza =(0.5/sqrt(2.0*pi))*
exp(medk+medi+0.5*(stdk*stdk+stdi*stdi)+
stdk*stdi* orik);
L=stdk+stdi* orik;
Exza *=I_skew(9,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0,0.0, orik,
0.0,Ri,Rj,0.0,L);

181

182

Implementa o~es em linguagem C


Eza =(0.5/sqrt(2.0*pi))*exp(medk+0.5*stdk*stdk);
L=stdk;
Eza *=I_skew(10,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0,0.0, orik,
0.0,Ri,Rj,0.0,L);
Exa =(0.5/sqrt(2.0*pi))*exp(medi+0.5*stdi*stdi);
L=stdi* orik;
Exa *=I_skew(9,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0,0.0, orik,
0.0,Ri,Rj,0.0,L);
E1a =(0.5/sqrt(2.0*pi));
L=0.0;
E1a *=I_skew(10,Rk,sqrt(2.0),-1,-1.0,0.0,stdi,stdj,0.0,0.0, orik,
0.0,Ri,Rj,0.0,L);
Ez =0.5*exp(medk+0.5*stdk*stdk)*(1.0+erff((Rk-stdk)/sqrt(2.0)));
E1 =0.5*(1.0+erff(Rk/sqrt(2.0)));
Eyb=0.5*exp(medj+0.5*stdj*stdj)*(1.0+erff((Rj-stdj)/sqrt(2.0)));
E1b=0.5*(1.0+erff(Rj/sqrt(2.0)));
Exa=0.5*exp(medi+0.5*stdi*stdi)*(1.0-erff((Ri-stdi)/sqrt(2.0)));
E1a=0.5*(1.0-erff(Ri/sqrt(2.0)));
resp=-(Si*Sj*Sk*Exyz-Si*Sj*Exy*Kpk-Si*Sk*Exz*Kpj+Si*Ex*Kpj*Kpk
+Sj*Ey*Kpi*Kpk+Sk*Ez*Kpj*K i-Kpi*Kpj*Kpk*E1)/(Pi*Pj*Pk);
resp+=mpi*(Sj*Sk*Eyzb -Sj*Kpk*Eyb -Kpj*Sk*Ezb +Kpj*Kpk*E1b )/(Pj*Pk);
resp+=mpj*(Si*Sk*Exza -Si*Kpk*Exa -Kpi*Sk*Eza +K i*Kpk*E1a )/(Pi*Pk);
resp+=mpk*(Si*Sj*Exyab-Si*Kpj*Exab-Kpi*Sj*Eyab+K i*Kpj*E1ab)/(Pi*Pj);
resp+=mpi*mpj*(-Sk*Ez +Kpk*E1 )/Pk+mpi*mpk*(-Sj*Eyb+Kpj*E1b)/Pj;
resp+=mpj*mpk*(-Si*Exa+Kpi*E1a)/Pi-mpi*mpj*mpk;
return(resp);

}
double sss(int i, int j, int k, double *med, double *std, double ** or,
int *atv)
/***************************************************************************/
/* rotina de hamada das fun oes de oskewness somente entre ativos
*/
/* basi os;
*/
/* aqui sera' hamada a fun ao que al ula o oskewness entre o i-
esimo, */
/* j-esimo
*/
/* e k-esimo ativo basi o;
*/
/* dependendo se i,j e k sao iguais ou nao, sera' hamada uma fun ao
*/
/* diferente;
*/
/* no vetor atv, atv[i ont
em o respe tivo ativo basi o referente ao
*/
/* i-
esimo elemento do portfolio.
*/

A.2 Rotinas de Co-assimetrias

183

/***************************************************************************/
{
double resp=1.0E+308;

if ((atv[i == atv[j) && (atv[i == atv[k)){


resp=m_ririri(med[atv[i,std[atv[i);
}
if ((atv[i == atv[j) && (atv[j != atv[k)){
resp=m_ririrj(med[atv[i,med[atv[k,std[atv[i,std[atv[k,
or[atv[i[atv[k);
}
if ((atv[i != atv[j) && (atv[j == atv[k)){
resp=m_ririrj(med[atv[j,med[atv[i,std[atv[j,std[atv[i,
or[atv[i[atv[j);
}
if ((atv[i == atv[k) && (atv[j != atv[k)){
resp=m_ririrj(med[atv[i,med[atv[j,std[atv[i,std[atv[j,
or[atv[i[atv[j);
}
if ((atv[i != atv[j) && (atv[i != atv[k) && (atv[j != atv[k)){
resp=m_rirjrk(med[atv[i,med[atv[j,med[atv[k,std[atv[i,
std[atv[j,std[atv[k, or[atv[i[atv[j,
or[atv[i[atv[k, or[atv[j[atv[k);
}
return(resp);

double ss (int i, int j, int k, double *med, double *std, double ** or,
double *S, double *K, double *P, int *atv, double *esp)
/***************************************************************************/
/* rotina de hamada das fun oes de oskewness entre ativos basi os e all;*/
/* dependendo se i,j e k sao iguais ou nao, sera' hamada uma fun ao
*/
/* diferente;
*/
/* no vetor atv, atv[i ont
em o respe tivo ativo basi o referente ao
*/
/* i-
esimo elemento do portfolio.
*/
/***************************************************************************/
{
double resp=1.0E+308;
if ((atv[i == atv[j) && (atv[i == atv[k)){
resp=m_riri i(med[atv[i,std[atv[i,S[k,K[k,P[k,esp[i,
esp[k);
}
if ((atv[i == atv[j) && (atv[j != atv[k)){
resp=m_riri j(med[atv[i,med[atv[k,std[atv[i,std[atv[k,

184

Implementa o~es em linguagem C


or[atv[i[atv[k,S[k,K[k,P[k,esp[i,esp[k);

}
if ((atv[i != atv[j) && (atv[j == atv[k)){
resp=m_ri irj(med[atv[j,med[atv[i,std[atv[j,std[atv[i,
or[atv[i[atv[j,S[k,K[k,P[k,esp[i,esp[k);
}
if ((atv[i == atv[k) && (atv[j != atv[k)){
resp=m_ri irj(med[atv[i,med[atv[j,std[atv[i,std[atv[j,
or[atv[i[atv[j,S[k,K[k,P[k,esp[i,esp[j,
esp[k);
}
if ((atv[i != atv[j) && (atv[i != atv[k) && (atv[j != atv[k)){
resp=m_rirj k(med[atv[i,med[atv[j,med[atv[k,std[atv[i,
std[atv[j,std[atv[k, or[atv[i[atv[j,
or[atv[i[atv[k, or[atv[j[atv[k,
S[k,K[k,P[k,esp[i,esp[j,esp[k);
}
return(resp);

double ssp(int i, int j, int k, double *med, double *std, double ** or,
double *S, double *K, double *P, int *atv, double *esp)
/***************************************************************************/
/* rotina de hamada das fun oes de oskewness entre ativos basi os e put; */
/* dependendo se i,j e k sao iguais ou nao, sera' hamada uma fun ao
*/
/* diferente.
*/
/***************************************************************************/
{
double resp=1.0E+308;
if ((atv[i == atv[j) && (atv[i == atv[k)){
resp=m_riripi(med[atv[i,std[atv[i,S[k,K[k,P[k,esp[i,
esp[k);
}
if ((atv[i == atv[j) && (atv[j != atv[k)){
resp=m_riripj(med[atv[i,med[atv[k,std[atv[i,std[atv[k,
or[atv[i[atv[k,S[k,K[k,P[k,esp[i,esp[k);
}
if ((atv[i != atv[j) && (atv[j == atv[k)){
resp=m_ripirj(med[atv[j,med[atv[i,std[atv[j,std[atv[i,
or[atv[i[atv[j,S[k,K[k,P[k,esp[i,
esp[j,esp[k);
}
if ((atv[i == atv[k) && (atv[j != atv[k)){
resp=m_ripirj(med[atv[i,med[atv[j,std[atv[i,std[atv[j,

A.2 Rotinas de Co-assimetrias

185
or[atv[i[atv[j,S[k,K[k,P[k,esp[i,
esp[j,esp[k);

}
if ((atv[i != atv[j) && (atv[i != atv[k) && (atv[j != atv[k)){
resp=m_rirjpk(med[atv[i,med[atv[j,med[atv[k,std[atv[i,
std[atv[j,std[atv[k, or[atv[i[atv[j,
or[atv[i[atv[k, or[atv[j[atv[k,
S[k,K[k,P[k,esp[i,esp[j,esp[k);
}
return(resp);

double s (int i, int j, int k, double *med, double *std, double ** or,
double *S, double *K, double *P, int *atv, double *esp)
/***************************************************************************/
/* rotina de hamada das fun oes de oskewness entre ativos basi os e all;*/
/* dependendo se i,j e k sao iguais ou nao, sera' hamada uma fun ao
*/
/* diferente.
*/
/***************************************************************************/
{
double resp=1.0E+308;
if ((atv[i == atv[j) && (atv[i == atv[k)){
resp=m_ri i i(med[atv[i,std[atv[i,S[k,K[j,K[k,P[j,P[k,
esp[i,esp[j,esp[k);
}
if ((atv[i == atv[j) && (atv[j != atv[k)){
resp=m_ri i j(med[atv[i,med[atv[k,std[atv[i,std[atv[k,
or[atv[i[atv[k,S[j,S[k,K[j,K[k,P[j,P[k,
esp[i,esp[j,esp[k);
}
if ((atv[i != atv[j) && (atv[j == atv[k)){ //j=k i
resp=m_ i irj(med[atv[j,med[atv[i,std[atv[j,std[atv[i,
or[atv[i[atv[j,S[j,K[j,K[k,P[j,P[k,
esp[i,esp[j,esp[k);
}
if ((atv[i == atv[k) && (atv[j != atv[k)){
resp=m_ri i j(med[atv[i,med[atv[j,std[atv[i,std[atv[j,
or[atv[i[atv[j,S[k,S[j,K[k,K[j,P[k,P[j,
esp[i,esp[j,esp[k);
}
if ((atv[i != atv[j) && (atv[i != atv[k) && (atv[j != atv[k)){
resp=m_ri j k(med[atv[i,med[atv[j,med[atv[k,std[atv[i,
std[atv[j,std[atv[k, or[atv[i[atv[j,
or[atv[i[atv[k, or[atv[j[atv[k,

186

Implementa o~es em linguagem C

}
return(resp);

S[j,S[k,K[j,K[k,P[j,P[k,esp[i,esp[j,esp[k);

double s p(int i, int j, int k, double *med, double *std, double ** or,
double *S, double *K, double *P, int *atv, double *esp)
/***************************************************************************/
/* rotina de hamada das fun oes de oskewness entre 1 ativo basi o,
*/
/* 1 all e 1 put; dependendo se i,j e k sao iguais ou nao, sera' hamada */
/* uma fun ao diferente; no vetor atv, atv[i ont
em o respe tivo ativo
*/
/* basi o referente ao i-
esimo elemento do portfolio.
*/
/***************************************************************************/
{
double resp=1.0E+308;

if ((atv[i == atv[j) && (atv[i == atv[k)){


resp=m_ri ipi(med[atv[i,std[atv[i,S[k,K[j,K[k,P[j,P[k,
esp[i,esp[j,esp[k);
}
if ((atv[i == atv[j) && (atv[j != atv[k)){
resp=m_ri ipj(med[atv[i,med[atv[k,std[atv[i,std[atv[k,
or[atv[i[atv[k,S[j,S[k,K[j,K[k,P[j,P[k,
esp[i,esp[j,esp[k);
}
if ((atv[i != atv[j) && (atv[j == atv[k)){
resp=m_ ipirj(med[atv[j,med[atv[i,std[atv[j,std[atv[i,
or[atv[i[atv[j,S[j,K[j,K[k,P[j,P[k,
esp[i,esp[j,esp[k);
}
if ((atv[i == atv[k) && (atv[j != atv[k)){
resp=m_ripi j(med[atv[i,med[atv[j,std[atv[i,std[atv[j,
or[atv[i[atv[j,S[k,S[j,K[k,K[j,P[k,P[j,
esp[i,esp[j,esp[k);
}
if ((atv[i != atv[j) && (atv[i != atv[k) && (atv[j != atv[k)){
resp=m_ri jpk(med[atv[i,med[atv[j,med[atv[k,std[atv[i,
std[atv[j,std[atv[k, or[atv[i[atv[j,
or[atv[i[atv[k, or[atv[j[atv[k,
S[j,S[k,K[j,K[k,P[j,P[k,esp[i,esp[j,
esp[k);
}
return(resp);

A.2 Rotinas de Co-assimetrias

187

double spp(int i, int j, int k, double *med, double *std, double ** or,
double *S, double *K, double *P, int *atv, double *esp)
/****************************************************************************/
/* rotina de hamada das fun oes de oskewness entre 1 ativo basi o e 2 puts*/
/****************************************************************************/
{
double resp=1.0E+308;

if ((atv[i == atv[j) && (atv[i == atv[k)){


resp=m_ripipi(med[atv[i,std[atv[i,S[k,K[j,K[k,P[j,P[k,
esp[i,esp[j,esp[k);
}
if ((atv[i == atv[j) && (atv[j != atv[k)){
resp=m_ripipj(med[atv[i,med[atv[k,std[atv[i,std[atv[k,
or[atv[i[atv[k,S[j,S[k,K[j,K[k,P[j,P[k,
esp[i,esp[j,esp[k);
}
if ((atv[i != atv[j) && (atv[j == atv[k)){
resp=m_pipirj(med[atv[j,med[atv[i,std[atv[j,std[atv[i,
or[atv[i[atv[j,S[j,K[j,K[k,P[j,P[k,esp[i,
esp[j,esp[k);
}
if ((atv[i == atv[k) && (atv[j != atv[k)){
resp=m_ripipj(med[atv[i,med[atv[j,std[atv[i,std[atv[j,
or[atv[i[atv[j,S[k,S[j,K[k,K[j,P[k,P[j,
esp[i,esp[j,esp[k);
}
if ((atv[i != atv[j) && (atv[i != atv[k) && (atv[j != atv[k)){
resp=m_ripjpk(med[atv[i,med[atv[j,med[atv[k,std[atv[i,
std[atv[j,std[atv[k, or[atv[i[atv[j,
or[atv[i[atv[k, or[atv[j[atv[k,
S[j,S[k,K[j,K[k,P[j,P[k,esp[i,esp[j,
esp[k);
}
return(resp);

double (int i, int j, int k, double *med, double *std, double ** or,
double *S, double *K, double *P, int *atv, double *x, double *w,
double *esp)
/***************************************************************************/
/* rotina de hamada das fun oes de oskewness somente entre alls
*/
/***************************************************************************/
{

188

Implementa o~es em linguagem C


double resp=1.0E+308;

if ((atv[i == atv[j) && (atv[i == atv[k)){


resp=m_ i i i(med[atv[i,std[atv[i,S[k,K[i,K[j,K[k,
P[i,P[j,P[k,esp[i,esp[j,esp[k);
}
if ((atv[i == atv[j) && (atv[j != atv[k)){
resp=m_ i i j(med[atv[i,med[atv[k,std[atv[i,std[atv[k,
or[atv[i[atv[k,S[j,S[k,K[i,K[j,K[k,
P[i,P[j,P[k,esp[i,esp[j,esp[k);
}
if ((atv[i != atv[j) && (atv[j == atv[k)){
resp=m_ i i j(med[atv[j,med[atv[i,std[atv[j,std[atv[i,
or[atv[i[atv[j,S[j,S[i,K[j,K[k,K[i,
P[j,P[k,P[i,esp[i,esp[j,esp[k);
}
if ((atv[i == atv[k) && (atv[j != atv[k)){
resp=m_ i i j(med[atv[i,med[atv[j,std[atv[i,std[atv[j,
or[atv[i[atv[j,S[k,S[j,K[i,K[k,K[j,
P[i,P[k,P[j,esp[i,esp[j,esp[k);
}
if ((atv[i != atv[j) && (atv[i != atv[k) && (atv[j != atv[k)){
resp=m_ i j k(med[atv[i,med[atv[j,med[atv[k,std[atv[i,
std[atv[j,std[atv[k, or[atv[i[atv[j,
or[atv[i[atv[k, or[atv[j[atv[k,
S[i,S[j,S[k,K[i,K[j,K[k,P[i,P[j,P[k,x,w,
esp[i,esp[j,esp[k);
}
return(resp);

double p(int i, int j, int k, double *med, double *std, double ** or,
double *S, double *K, double *P, int *atv, double *x, double *w,
double *esp )
/***************************************************************************/
/* rotina de hamada das fun oes de oskewness entre 2 alls e 1 put.
*/
/***************************************************************************/
{
double resp=1.0E+308;
if ((atv[i == atv[j) && (atv[i == atv[k)){
resp=m_ i ipi(med[atv[i,std[atv[i,S[i,K[i,K[j,K[k,
P[i,P[j,P[k,esp[i,esp[j,esp[k);
}
if ((atv[i == atv[j) && (atv[j != atv[k)){

A.2 Rotinas de Co-assimetrias

189

resp=m_ i ipj(med[atv[i,med[atv[k,std[atv[i,std[atv[k,
or[atv[i[atv[k,S[j,S[k,K[i,K[j,K[k,P[i,
P[j,P[k,esp[i,esp[j,esp[k);

}
if ((atv[i != atv[j) && (atv[j == atv[k)){
resp=m_ ipi j(med[atv[j,med[atv[i,std[atv[j,std[atv[i,
or[atv[i[atv[j,S[j,S[i,K[j,K[k,K[i,
P[j,P[k,P[i,esp[i,esp[j,esp[k);
}
if ((atv[i == atv[k) && (atv[j != atv[k)){
resp=m_ ipi j(med[atv[i,med[atv[j,std[atv[i,std[atv[j,
or[atv[i[atv[j,S[k,S[j,K[i,K[k,K[j,P[i,
P[k,P[j,esp[i,esp[j,esp[k);
}
if ((atv[i != atv[j) && (atv[i != atv[k) && (atv[j != atv[k)){
resp=m_ i jpk(med[atv[i,med[atv[j,med[atv[k,std[atv[i,
std[atv[j,std[atv[k, or[atv[i[atv[j,
or[atv[i[atv[k, or[atv[j[atv[k,
S[i,S[j,S[k,K[i,K[j,K[k,P[i,P[j,P[k,x,w,
esp[i,esp[j,esp[k);
}
return(resp);

double pp(int i, int j, int k, double *med, double *std, double ** or,
double *S, double *K, double *P, int *atv, double *x, double *w,
double *esp)
/***************************************************************************/
/* rotina de hamada das fun oes de oskewness entre 1 all e 2 puts.
*/
/***************************************************************************/
{
double resp=1.0E+308;
if ((atv[i == atv[j) && (atv[i == atv[k)){
resp=m_ ipipi(med[atv[i,std[atv[i,S[i,K[i,K[j,K[k,
P[i,P[j,P[k,esp[i,esp[j,esp[k);
}
if ((atv[i == atv[j) && (atv[j != atv[k)){
resp=m_ ipipj(med[atv[i,med[atv[k,std[atv[i,std[atv[k,
or[atv[i[atv[k,S[j,S[k,K[i,K[j,K[k,
P[i,P[j,P[k,esp[i,esp[j,esp[k);
}
if ((atv[i != atv[j) && (atv[j == atv[k)){
resp=m_pipi j(med[atv[j,med[atv[i,std[atv[j,std[atv[i,
or[atv[i[atv[j,S[j,S[i,K[j,K[k,K[i,

190

Implementa o~es em linguagem C


P[j,P[k,P[i,esp[i,esp[j,esp[k);

}
if ((atv[i == atv[k) && (atv[j != atv[k)){
resp=m_ ipipj(med[atv[i,med[atv[j,std[atv[i,std[atv[j,
or[atv[i[atv[j,S[k,S[j,K[i,K[k,K[j,P[i,
P[k,P[j,esp[i,esp[j,esp[k);
}
if ((atv[i != atv[j) && (atv[i != atv[k) && (atv[j != atv[k)){
resp=m_ ipjpk(med[atv[i,med[atv[j,med[atv[k,std[atv[i,
std[atv[j,std[atv[k, or[atv[i[atv[j,
or[atv[i[atv[k, or[atv[j[atv[k,
S[i,S[j,S[k,K[i,K[j,K[k,P[i,P[j,P[k,x,w,
esp[i,esp[j,esp[k);
}
return(resp);

double ppp(int i, int j, int k, double *med, double *std, double ** or,
double *S, double *K, double *P, int *atv, double *x, double *w,
double *esp)
/***************************************************************************/
/* rotina de hamada das fun oes de oskewness somente entre puts.
*/
/***************************************************************************/
{
double resp=1.0E+308;
if ((atv[i == atv[j) && (atv[i == atv[k)){
resp=m_pipipi(med[atv[i,std[atv[i,S[i,K[i,K[j,K[k,
P[i,P[j,P[k,esp[i,esp[j,esp[k);
}
if ((atv[i == atv[j) && (atv[j != atv[k)){
resp=m_pipipj(med[atv[i,med[atv[k,std[atv[i,std[atv[k,
or[atv[i[atv[k,S[i,S[k,K[i,K[j,K[k,
P[i,P[j,P[k,esp[i,esp[j,esp[k);
}
if ((atv[i != atv[j) && (atv[j == atv[k)){
resp=m_pipipj(med[atv[j,med[atv[i,std[atv[j,std[atv[i,
or[atv[i[atv[j,S[j,S[i,K[j,K[k,K[i,P[j,
P[k,P[i,esp[i,esp[j,esp[k);
}
if ((atv[i == atv[k) && (atv[j != atv[k)){
resp=m_pipipj(med[atv[i,med[atv[j,std[atv[i,std[atv[j,
or[atv[i[atv[j,S[k,S[j,K[i,K[k,K[j,P[i,
P[k,P[j,esp[i,esp[j,esp[k);
}

A.2 Rotinas de Co-assimetrias

191

if ((atv[i != atv[j) && (atv[i != atv[k) && (atv[j != atv[k)){


resp=m_pipjpk(med[atv[i,med[atv[j,med[atv[k,std[atv[i,
std[atv[j,std[atv[k, or[atv[i[atv[j,
or[atv[i[atv[k, or[atv[j[atv[k,S[i,S[j,
S[k,K[i,K[j,K[k,P[i,P[j,P[k,x,w,esp[i,
esp[j,esp[k);
}
return(resp);

double f_skew( har op ao, double sgn, double x, double y, double stdi,
double stdj, double stdk, double orij, double orik,
double orjk, double Ri, double Rj, double Rk, double a)
/***************************************************************************/
/* ont
em o orpo das fun oes integrando das integrais envolvidas nas
*/
/* expressoes de assimetria entre derivativos.
*/
/* x, y = sao ab issas na integra ao gaussiana e de romberg,respe tivamente*/
/* sgn = sinal da fun ao erff abaixo.
*/
/* Ri,Rk = onstantes.
*/
/***************************************************************************/
{
double resp, , C, R, B, T, L;
=1.0- orij* orij;
C= orij* orik- orjk;
B= orij* orjk- orik;
R=1.0- orij* orij- orik* orik- orjk* orjk+2.0* orij* orik* orjk;
swit h(op ao)
{
ase 9: /* relativo a E2xy,Exy,Ey*/
resp=Rj-y* orij-stdj*(1.0- orij* orij);
resp/=sqrt(2.0*(1.0- orij* orij));
resp=(1.0+sgn*erff(resp))*exp(-sqr(y-a)/2.0);
return(resp);
ase 10: /* relativo a Ex,E2x,E1*/
resp=Rj-y* orij;
resp/=sqrt(2.0*(1.0- orij* orij));
resp=(1.0+sgn*erff(resp))*exp(-sqr(y-a)/2.0);
return(resp);
ase 11: /* relativo a Exyz*/
resp=Rj-y* orjk+stdi*( orik* orjk- orij)
-stdj*(1.0- orjk* orjk);

192

Implementa o~es em linguagem C


resp/=sqrt(2.0*(1.0- orjk* orjk));
resp=(1.0+sgn*erff(resp))*exp(-sqr(y-a)/2.0);
return(resp);
ase 12: /* relativo a Exy,Exz,Ex*/
resp=Rj-y* orjk+stdi*( orik* orjk- orij);
resp/=sqrt(2.0*(1.0- orjk* orjk));
resp=(1.0+sgn*erff(resp))*exp(-sqr(y-a)/2.0);
return(resp);
ase 13: /* relativo a Eyz,Ey*/
resp=Rj-y* orjk-stdj*(1.0- orjk* orjk);
resp/=sqrt(2.0*(1.0- orjk* orjk));
resp=(1.0+sgn*erff(resp))*exp(-sqr(y-a)/2.0);
return(resp);
ase 14: /* relativo a Ez,E1*/
resp=Rj-y* orjk;
resp/=sqrt(2.0*(1.0- orjk* orjk));
resp=(1.0+sgn*erff(resp))*exp(-sqr(y-a)/2.0);
return(resp);
ase 15: /* relativo a Exyz*/
T=(stdk*B-stdi* + orij*(-stdj* +stdk*C))/ ;
L=(Ri+T)/sqrt(2.0);
resp=Rk+(x*(B*sqrt(2.0)+C* orij*sqrt(2.0))+B*L*sqrt(2.0)
-B*T+C*sqrt(2.0* )*y+C* *stdj-C*C*stdk
+C* orij*sqrt(2.0)*L-C* orij*T)/ -stdk*R;
resp*=sqrt( /(2.0*R));
resp=(1.0+sgn*erff(resp))*exp(-sqr(y-a));
return(resp);
ase 16: /* relativo a Exy*/
T=(-stdi* + orij*(-stdj* ))/ ;
L=(Ri+T)/sqrt(2.0);
resp=Rk+(x*(B*sqrt(2.0)+C* orij*sqrt(2.0))+B*L*sqrt(2.0)
-B*T+C*sqrt(2.0* )*y+C* *stdj+C* orij*sqrt(2.0)*L
-C* orij*T)/ ;
resp*=sqrt( /(2.0*R));
resp=(1.0+sgn*erff(resp))*exp(-sqr(y-a));
return(resp);
ase 17: /* relativo a Exz*/
T=(stdk*B-stdi* + orij*(stdk*C))/ ;
L=(Ri+T)/sqrt(2.0);

A.2 Rotinas de Co-assimetrias

193

resp=Rk+(x*(B*sqrt(2.0)+C* orij*sqrt(2.0))+B*L*sqrt(2.0)
-B*T+C*sqrt(2.0* )*y-C*C*stdk+C* orij*sqrt(2.0)*L
-C* orij*T)/ -stdk*R;
resp*=sqrt( /(2.0*R));
resp=(1.0+sgn*erff(resp))*exp(-sqr(y-a));
return(resp);
ase 18: /* relativo a Eyz*/
T=(stdk*B+ orij*(-stdj* +stdk*C))/ ;
L=(Ri+T)/sqrt(2.0);
resp=Rk+(x*(B*sqrt(2.0)+C* orij*sqrt(2.0))+B*L*sqrt(2.0)
-B*T+C*sqrt(2.0* )*y+C* *stdj-C*C*stdk
+C* orij*sqrt(2.0)*L-C* orij*T)/ -stdk*R;
resp*=sqrt( /(2.0*R));
resp=(1.0+sgn*erff(resp))*exp(-sqr(y-a));
return(resp);
ase 19: /* relativo a Ex*/
T=-stdi;
L=(Ri+T)/sqrt(2.0);
resp=Rk+(x*(B*sqrt(2.0)+C* orij*sqrt(2.0))+B*L*sqrt(2.0)
-B*T+C*sqrt(2.0* )*y+C* orij*sqrt(2.0)*L
-C* orij*T)/ ;
resp*=sqrt( /(2.0*R));
resp=(1.0+sgn*erff(resp))*exp(-sqr(y-a));
return(resp);
ase 20: /* relativo a Ey*/
T= orij*-stdj;
L=(Ri+T)/sqrt(2.0);
resp=Rk+(x*(B*sqrt(2.0)+C* orij*sqrt(2.0))+B*L*sqrt(2.0)
-B*T+C*sqrt(2.0* )*y+C* *stdj+C* orij*sqrt(2.0)*L
-C* orij*T)/ ;
resp*=sqrt( /(2.0*R));
resp=(1.0+sgn*erff(resp))*exp(-sqr(y-a));
return(resp); //-2.0*x*Ri
ase 21: /* relativo a Ez*/
T=(stdk*B+ orij*stdk*C)/ ;
L=(Ri+T)/sqrt(2.0);
resp=Rk+(x*(B*sqrt(2.0)+C* orij*sqrt(2.0))+B*L*sqrt(2.0)
-B*T+C*sqrt(2.0* )*y-C*C*stdk+C* orij*sqrt(2.0)*L
-C* orij*T)/ -stdk*R;
resp*=sqrt( /(2.0*R));
resp=(1.0+sgn*erff(resp))*exp(-sqr(y-a));

194

Implementa o~es em linguagem C


return(resp);
ase 22: /* relativo a E1*/
T=0.0;
L=Ri/sqrt(2.0);
resp=Rk+(x*(B*sqrt(2.0)+C* orij*sqrt(2.0))+B*L*sqrt(2.0)
-B*T+C*sqrt(2.0* )*y+C* orij*sqrt(2.0)*L
-C* orij*T)/ ;
resp*=sqrt( /(2.0*R));
resp=(1.0+sgn*erff(resp))*exp(-sqr(y-a));
return(resp);
ase 41: // teste
resp=(1-erff(y+x+2))*exp(-y*y-y);
//resp=(1-erff(3*y-x-2))*exp(-y*y-y);
return(resp);

}
printf(" \n deu erro !! ");
return(1.0E308);

/***************************************************************************/
/**
rotinas de integra
~ao para o al ulo das assimetrias
**/
/***************************************************************************/
double romb_skew( har op ao, double a, double b, double sgn, double phi,
double stdi, double stdj, double stdk, double orij,
double orik, double orjk, double Ri, double Rj,
double Rk, double L)
/***************************************************************************/
/* metodo de romberg para integra ao em intervalos fe hados (a,b)
*/
/* L = termo da fun ao que leva a exponen ial : exp[(x-L)^2/2
*/
/***************************************************************************/
{
double *T=NULL, *F=NULL, *X=NULL;
double h,resp;
int i,j,n,fim,l;
X=alo _vet(1);
T=alo _vet(1);
F=alo _vet(1);
n=1;
fim=0;

A.2 Rotinas de Co-assimetrias

T[0=-1;
while ((!fim) && (n<9)){
for (l=2,j=1;j<n;j++) l<<=1; /* l=2^n */
T=realo a(T,n+1);
F=realo a(F,l+1);
X=realo a(X,l+1);
T[n=0.0;
h=(b-a)/l;
if (n>1){
for (j=l/2;j>=1;j--){
X[2*j=X[j;
F[2*j=F[j;
}
for (j=1;j<=l/2;j++){
i=2*j-1;
X[i=X[i-1+h;
F[i=f_skew(op ao,sgn,phi,X[i,stdi,stdj,
stdk, orij, orik, orjk,Ri,Rj,
Rk,L);
}
for (i=0;i<l;i++) T[n+=F[i+F[i+1;
T[n*=0.5*h;
if ((fabs(T[n-T[n-1) < 0.00001) | n==8) fim=1;
else n++;
}
else{
for (i=0;i<=l;i++){
X[i=a+i*h;
F[i=f_skew(op ao,sgn,phi,X[i,stdi,stdj,
stdk, orij, orik, orjk,Ri,Rj,
Rk,L);
}
for (i=0;i<l;i++) T[n+=F[i+F[i+1;
T[n*=0.5*h;
n++;
}
}
resp=extrap(T,n);
free(T);
free(X);
free(F);
return(resp);

195

196

Implementa o~es em linguagem C

double trap_skew( har op ao, double a, double delta, double lim, double sgn,
double phi, double stdi, double stdj, double stdk,
double orij, double orik, double orjk, double Ri,
double Rj, double Rk, double L)
/***************************************************************************/
/* pro edimento que apli a o metodo do trapezio + extrapol. de Ri hardson */
/* para al ular uma integral.
*/
/* phi = no'da integra ao gaussiana;
*/
/* a = limite finito da integral ( a integral e'de "a" ate' +infinito ou de*/
/* -infinito ate' "a".
*/
/* op ao = indi e da fun ao integrando na rotina f_skew(...);
*/
/* L=termo da exponen ial f(x)*exp[((x-L)/delta)^2;
*/
/* lim=+1 se estiver integrando de "a" ate' +infinito e -1 se de
*/
/* -infinito ate' "a";
*/
/* sgn=+1 se na fun ao integrando temos (1+erf(..)) e e' -1 se for
*/
/* (1-erf(..));
*/
/* Ri,Rj,Rk = onstantes.
*/
/* delta : vem da expressao f(x) = exp{-[(x-a)/delta^2}
*/
/***************************************************************************/
{
double *F=NULL, *X=NULL, *T=NULL;
double quad, erro;
int nf,k, n;
long m, Nf,i, j,l,N;
X=alo _vet(3);
F=alo _vet(3);
T=alo _vet(3);
N=3;
n=1;
erro=1.0;
while (( (erro > 0.0001) | (erro < -0.0001)) | (n <= 8))
{
if (n>1)
{
for (m=2,j=1;j<n;j++) m<<=1;
Nf=(m-1)*2+1;
X=realo a(X,Nf);
F=realo a(F,Nf);
T=realo a(T,n);
for (i=N-1;i>0;i--)
{
X[2*i=X[i;

A.2 Rotinas de Co-assimetrias

197
F[2*i=F[i;

}
m=0;
j=0;
for (k=0;k<n-1;k++)
{
for (l=1,i=1;i<=n-k;i++) l<<=1;
m+=l;
for (i=j;i< m/2;i++)
{
X[2*i+1=X[2*i+lim*delta/l;
F[2*i+1=f_skew(op ao,sgn,phi,X[2*i+1,
stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,L);
}
j=i;
}
for (i=Nf-2;i<Nf;i++)
{
X[i=X[i-1+lim*delta/2;
F[i=f_skew(op ao,sgn,phi,X[i,stdi,stdj,stdk,
orij, orik, orjk,Ri,Rj,Rk,L);
}
N=Nf;

}
else for (i=0;i<=2;i++)
{
X[i=a+lim*i*delta/2;
F[i=f_skew(op ao,sgn,phi,X[i,stdi,stdj,
stdk, orij, orik, orjk,Ri,Rj,
Rk,L);
}
T[n=trapezio(F,n,delta);
if (n > 1) erro = T[n-T[n-1;
n++;

}
n--;
nf=n;
for (k=1;k<nf;k++)
{
for (m=4,j=1;j<k;j++) m<<=2;
for (n=1;n<=(nf-k);n++)
{
quad=(m*T[n+1-T[n)/(m-1);
T[n=quad;
}

198

Implementa o~es em linguagem C


}
free(X);
free(F);
free(T);
return(quad);

double I_skew( har op ao, double G, double delta, double lim,


double sgn, double phi, double stdi, double stdj, double stdk,
double orij, double orik, double orjk, double Ri, double Rj,
double Rk, double L)
/***************************************************************************/
/* esta fun ao hama as rotinas de integra ao numeri a apropriadas para o */
/* al ulo da integral desejada;
*/
/* op ao = indi e da fun ao integrando na rotina f_skew(...);
*/
/* G=extremo finito da integral;
*/
/* L=termo da exponen ial f(x)*exp[((x-L)/delta)^2;
*/
/* lim=+1 se estiver integrando de G ate' +infinito e -1 se de -infinity */
/*
ate' G;
*/
/* sgn=+1 se na fun ao integrando temos (1+erf(..)) e e' -1 se for
*/
/* (1-erf(..));
*/
/* phi = no' da integra ao gaussiana.
*/
/* Ri,Rj,Rk = onstantes.
*/
/* delta : vem da expressao f(x) = exp{-[(x-L)/delta^2}
*/
/***************************************************************************/
{
double I;
if (fabs(G-L) < 0.5*delta){
I=trap_skew(op ao,G,delta,lim,sgn,phi,stdi,stdj,stdk, orij,
orik, orjk,Ri,Rj,Rk,L);
return(I);
}
else{
if ((G-L)*lim > 0.0){
I=trap_skew(op ao,G,delta,lim,sgn,phi,stdi,stdj,stdk,
orij, orik, orjk,Ri,Rj,Rk,L);
return(I);
}
else{
I=trap_skew(op ao,L,delta,lim,sgn,phi,stdi,stdj,stdk,
orij, orik, orjk,Ri,Rj,Rk,L);
if (G > L)
I+=romb_skew(op ao,L,G,sgn,phi,stdi,stdj,
stdk, orij, orik, orjk,Ri,Rj,Rk,L);

A.2 Rotinas de Co-assimetrias

else
I+=romb_skew(op ao,G,L,sgn,phi,stdi,stdj,
stdk, orij, orik, orjk,Ri,Rj,Rk,L);
return(I);

199

200

Implementa o~es em linguagem C

Ap^
endi e B

Implementa ~oes em Matlab e Gams


B.1 Algoritmo para o al ulo de nos e pesos da Quadratura
Gaussiana
/***************************************************/
/********
COEFGAUS.M
**********/
/***************************************************/
n=16;
integ(1)=0.5*sqrt(pi);
integ(2)=0.5;
for i=1:2*n-1
integ(i+2)=i*0.5*integ(i);
end;
b=[;
A=[;
x=[;
y=[;
a=[;
for i=1:n
for j=1:n A(i,j)=integ(i+j-1); end;
b(i)=-integ(i+n);
end;
b=b';
[L,U=lu(A);
invL=inv(L);
invU=inv(U);
y=invL*b;
x=invU*y;
r=A*x-b;

201

202

Implementa o~es em Matlab e Gams

eaux=invL*r;
e=invU*eaux;
x1=x-e;
r=A*x1-b;
while norm(r) > 0.00000001
x=x1;
eaux=invL*r;
e=invU*eaux;
x1=x-e;
r=A*x1-b;
end
=x1;
(n+1)=1;
aux= ;
for i=1:n+1
(i)=aux(n+1-i+1);
end;
x=roots( );
x=sort(x);
for i=1:n
a(i)=0;
t=x(i);
y=x;
y(i)=[;
[P=produto(t,y);
ind=-1;
for j=n:-1:1
ind=ind*(-1);
[l=Lij(n,i,j-1,x);
a(i)=a(i)+ind*l*integ(j);
end;
a(i)=a(i)/P;
end;
a=a'
/*****

Lij.m

*****/

fun tion[r=Lij(n,i,j,x)
if (n>3)
y=x;
y(i)=[;
if (j<n-2 & j>0)
[r=perm(n-1,n-j-1,y);
end;
if (j==n-1)

B.1 Algoritmo para o al ulo de nos e pesos da Quadratura Gaussiana


r=1;
end;
if (j==n-2)
um=ones(1,n-1);
r=y'*um';
end;
if (j==0)
r=1;
for k=1:n-1
r=r*y(k);
end;
end;

end;
if (n==2)
i;j;
y=x;
y(i)=[;
if (j==0)
r=y;
end;
if (j==1)
r=1;
end;
end;
if (n==3)
y=x;
y(i)=[;
if (j==2)
r=1;
end;
if (j==0)
r=y(1)*y(2);
end;
if (j==1)
r=y(1)+y(2);
end;
end;

/*****

produto.m

*****/

fun tion[P=produto(t,y)
d=-y+t;
P=prod(d);

203

204

Implementa o~es em Matlab e Gams

B.2 Arquivo em GAMS - Sele ~ao de Portfolios usando Assimetria


TITLE OTIMIZACAO DE PORTFOLIOS USANDO MOMENTOS DE TERCEIRA ORDEM
SET I omponentes formadores do portfolio
/BB4, PET4, TEL4, VAL43, OTC16, OTC17, OTP19, OTP24/
ITERA onjunto para dirigir itera oes de alpha / ITA-1*ITA-20 /
ITERE onjunto para dirigir itera oes de eta / ITE-1*ITE-1 /;
ALIAS (I,J);
ALIAS (I,K);
SCALAR
ETA parametro de pondera ao da media /1.5/
ALPHA parametro de pondera ao do skew /0.0/;
PARAMETER
VALUEA(ITERA) usado para atualizar alpha
VALUEE(ITERE) usado para atualizar eta
ESP(I) taxa de retorno simples esperada para os omponentes do portfolio
/BB4
-0.1030799667
PET4
0.1766551319
TEL4
0.1228039581
VAL4
0.0153334211
OTC16 0.3859981177
OTC17 0.7067222457
OTP19 -0.8211298158
OTP24 -0.5926258435/;
TABLE COV(I,J) array de varian ia e ovarian ia dos omponentes do portfolio
BB4
PET4
TEL4
OTC16
OTC17
OTP19
OTP24
BB4 1.0000000000 0.1823564539 0.1578521444
0.1547705883 -0.1073096454 -0.1383966747
PET4 0.1823564539 1.0000000000 0.5147879950
0.5054410381 -0.3461757989 -0.4485565937
TEL4 0.1578521444 0.5147879950 1.0000000000
0.9869885907 -0.6444407927 -0.8502748970
VAL4 0.0888047461 0.6293648575 0.5835617107

VAL4
0.0888047461

0.1568451573

0.6293648575 0.5118030420
0.5835617107 0.9963686397
1.0000000000 0.5804297367

B.2 Arquivo em GAMS - Sele ~ao de Portfolios usando Assimetria


0.5735589167 -0.3892180077 -0.5061052322
OTC16 0.1568451573 0.5118030420 0.9963686397 0.5804297367 1.0000000000
0.9953744913 -0.5969581835 -0.8280633925
OTC17 0.1547705883 0.5054410381 0.9869885907 0.5735589167 0.9953744913
1.0000000000 -0.5247821186 -0.7875704685
OTP19 -0.1073096454 -0.3461757989 -0.6444407927 -0.3892180077
-0.5969581835 -0.5247821186 1.0000000000 0.8654714267
OTP24 -0.1383966747 -0.4485565937 -0.8502748970 -0.5061052322
-0.8280633925 -0.7875704685 0.8654714267 1.0000000000;

TABLE M(I,J,K) array de skewness e oskewness


BB4
PET4
VAL4
WHM3
OTC16
OTC17
OTP19
OTP24
BB4.BB4
0.0505385252
0.0030752561
0.0023308007
0.0012892656
0.0132785857
0.0207538627
-0.3311915830
-0.3386035243
BB4.PET4
0.0030752561
0.0007138585
0.0003400919
0.0002965267
0.0022198392
0.0040654380
0.0013325650
0.0008032973
BB4.TEL4
0.0023308007
0.0003400919
0.0004391309
0.0002133898
0.0029733847
0.0056692507
0.0024797822
0.0018084445
BB4.VAL4
0.0012892656
0.0002965267
0.0002133898
0.0002450382
0.0015037447
0.0029612989
0.0015394342
0.0011557139
BB4.OTC16 0.0132785857
0.0022198392
0.0029733847
0.0015037447
0.0188913176
0.0347165842
0.0114986329
0.0081968353
BB4.OTC17 0.0207538627
0.0040654380
0.0056692507
0.0029612989
0.0347165842
0.0609494097
0.0134423026
0.0087850325
BB4.OTP19 -0.3311915830
0.0013325650
0.0024797822
0.0015394342
0.0114986329
0.0134423026
-0.0157566302
-0.0138419035
BB4.OTP24 -0.3386035243
0.0008032973
0.0018084445
0.0011557139
0.0081968353
0.0087850325
-0.0138419035
-0.0127156809
PET4.BB4 0.0030752561
0.0007138585
0.0003400919
0.0002965267
0.0022198392
0.0040654380
0.0013325650
0.0008032973
PET4.PET4 0.0007138585
0.0024051754
0.0008989431
0.0011675090
0.0055552581
0.0096056800
-0.4871690301
-0.5089445838
PET4.TEL4 0.0003400919
0.0008989431
0.0007573136
0.0006039625
0.0050792918
0.0096074894
0.0040030421
0.0028953468
PET4.VAL4 0.0002965267
0.0011675090
0.0006039625
0.0010345408
0.0038907043
0.0070424573
0.0020847373
0.0012027831
PET4.OTC16 0.0022198392
0.0055552581
0.0050792918
0.0038907043
0.0321063469
0.0586652091
0.0185536755
0.0130896705
PET4.OTC17 0.0040654380
0.0096056800
0.0096074894
0.0070424573
0.0586652091
0.1026386252
0.0216346313
0.0139114253
PET4.OTP19 0.0013325650
-0.4871690301
0.0040030421
0.0020847373
0.0185536755
0.0216346313
-0.0255747717
-0.0224587425
PET4.OTP24 0.0008032973
-0.5089445838
0.0028953468
0.0012027831
0.0130896705
0.0139114253
-0.0224587425
-0.0206404453
TEL4.BB4 0.0023308007
0.0003400919
0.0004391309
0.0002133898
0.0029733847
0.0056692507
0.0024797822
0.0018084445
TEL4.PET4 0.0003400919
0.0008989431
0.0007573136
0.0006039625

205

206

Implementa o~es em Matlab e Gams

0.0050792918
0.0096074894
0.0040030421
0.0028953468
TEL4.TEL4 0.0004391309
0.0007573136
0.0015265161
0.0007793724
0.0099321075
0.0182933718
0.0063348778
0.0044177621
TEL4.VAL4 0.0002133898
0.0006039625
0.0007793724
0.0008174455
0.0051925756
0.0097663174
0.0039242142
0.0028199591
TEL4.OTC16 0.0029733847
0.0050792918
0.0099321075
0.0051925756
0.0617328400
0.1106294470
0.0293001546
0.0197347840
TEL4.OTC17 0.0056692507
0.0096074894
0.0182933718
0.0097663174
0.1106294470
0.1912471487
0.0337895302
0.0201606941
TEL4.OTP19 0.0024797822
0.0040030421
0.0063348778
0.0039242142
0.0293001546
0.0337895302
-0.0414146218
-0.0363098170
TEL4.OTP24 0.0018084445
0.0028953468
0.0044177621
0.0028199591
0.0197347840
0.0201606941
-0.0363098170
-0.0334200513
VAL4.BB4 0.0012892656
0.0002965267
0.0002133898
0.0002450382
0.0015037447
0.0029612989
0.0015394342
0.0011557139
VAL4.PET4 0.0002965267
0.0011675090
0.0006039625
0.0010345408
0.0038907043
0.0070424573
0.0020847373
0.0012027831
VAL4.TEL4 0.0002133898
0.0006039625
0.0007793724
0.0008174455
0.0051925756
0.0097663174
0.0039242142
0.0028199591
VAL4.VAL4 0.0002450382
0.0010345408
0.0008174455
0.0016572883
0.0050854663
0.0088699060
-0.3547914660
-0.3784112515
VAL4.OTC16 0.0015037447
0.0038907043
0.0051925756
0.0050854663
0.0327037764
0.0595133146
0.0181822160
0.0127229373
VAL4.OTC17 0.0029612989
0.0070424573
0.0097663174
0.0088699060
0.0595133146
0.1038630354
0.0211585210
0.0134302029
VAL4.OTP19 0.0015394342
0.0020847373
0.0039242142
-0.3547914660
0.0181822160
0.0211585210
-0.0251774405
-0.0221034374
VAL4.OTP24 0.0011557139
0.0012027831
0.0028199591
-0.3784112515
0.0127229373
0.0134302029
-0.0221034374
-0.0203203229
OTC16.BB4 0.0132785857
0.0022198392
0.0029733847
0.0015037447
0.0188913176
0.0347165842
0.0114986329
0.0081968353
OTC16.PET4 0.0022198392
0.0055552581
0.0050792918
0.0038907043
0.0321063469
0.0586652091
0.0185536755
0.0130896705
OTC16.TEL4 0.0029733847
0.0050792918
0.0099321075
0.0051925756
0.0617328400
0.1106294470
0.0293001546
0.0197347840
OTC16.VAL4 0.0015037447
0.0038907043
0.0051925756
0.0050854663
0.0327037764
0.0595133146
0.0181822160
0.0127229373
OTC16.OTC16 0.0188913176
0.0321063469
0.0617328400
0.0327037764
0.3735381203
0.6575132436
0.1394270743
0.0907463435
OTC16.OTC17 0.0347165842
0.0586652091
0.1106294470
0.0595133146
0.6575132436
1.1235934363
0.1587891402
0.0889325628
OTC16.OTP19 0.0114986329 0.0185536755
0.0293001546
0.0181822160
0.1394270743
0.1587891402
-0.1964613828
-0.1742178881
OTC16.OTP24 0.0081968353 0.0130896705
0.0197347840
0.0127229373
0.0907463435
0.0889325628
-0.1742178881
-0.1644250366
OTC17.BB4 0.0207538627
0.0040654380
0.0056692507
0.0029612989
0.0347165842
0.0609494097
0.0134423026
0.0087850325
OTC17.PET4 0.0040654380
0.0096056800
0.0096074894
0.0070424573
0.0586652091
0.1026386252
0.0216346313
0.0139114253
OTC17.TEL4 0.0056692507
0.0096074894
0.0182933718
0.0097663174
0.1106294470
0.1912471487
0.0337895302
0.0201606941
OTC17.VAL4 0.0029612989
0.0070424573
0.0097663174
0.0088699060

B.2 Arquivo em GAMS - Sele ~ao de Portfolios usando Assimetria


0.0595133146
0.1038630354
0.0211585210
0.0134302029
OTC17.OTC16 0.0347165842
0.0586652091
0.1106294470
0.0595133146
0.6575132436
1.1235934363
0.1587891402
0.0889325628
OTC17.OTC17 0.0609494097
0.1026386252
0.1912471487
0.1038630354
1.1235934363
1.8815840333
0.1735543668
0.0738254268
OTC17.OTP19 0.0134423026 0.0216346313
0.0337895302
0.0211585210
0.1587891402
0.1735543668
-0.2489452686
-0.2183983394
OTC17.OTP24 0.0087850325 0.0139114253
0.0201606941
0.0134302029
0.0889325628
0.0738254268
-0.2183983394
-0.2098481702
OTP19.BB4 -0.3311915830
0.0013325650
0.0024797822
0.0015394342
0.0114986329
0.0134423026
-0.0157566302
-0.0138419035
OTP19.PET4 0.0013325650
-0.4871690301
0.0040030421
0.0020847373
0.0185536755
0.0216346313
-0.0255747717
-0.0224587425
OTP19.TEL4 0.0024797822
0.0040030421
0.0063348778
0.0039242142
0.0293001546
0.0337895302
-0.0414146218
-0.0363098170
OTP19.VAL4 0.0015394342
0.0020847373
0.0039242142
-0.3547914660
0.0181822160
0.0211585210
-0.0251774405
-0.0221034374
OTP19.OTC16 0.0114986329 0.0185536755
0.0293001546
0.0181822160
0.1394270743
0.1587891402
-0.1964613828
-0.1742178881
OTP19.OTC17 0.0134423026 0.0216346313
0.0337895302
0.0211585210
0.1587891402
0.1735543668
-0.2489452686
-0.2183983394
OTP19.OTP19 -0.0157566302 -0.0255747717 -0.0414146218 -0.0251774405
-0.1964613828
-0.2489452686
0.2134013931
0.1947074869
OTP19.OTP24 -0.0138419035 -0.0224587425 -0.0363098170 -0.0221034374
-0.1742178881
-0.2183983394
0.1947074869
0.1748466011
OTP24.BB4 -0.3386035243 0.0008032973
0.0018084445
0.0011557139
0.0081968353
0.0087850325
-0.0138419035
-0.0127156809
OTP24.PET4 0.0008032973 -0.5089445838
0.0028953468
0.0012027831
0.0130896705
0.0139114253
-0.0224587425
-0.0206404453
OTP24.TEL4 0.0018084445 0.0028953468
0.0044177621
0.0028199591
0.0197347840
0.0201606941
-0.0363098170
-0.0334200513
OTP24.VAL4 0.0011557139
0.0012027831
0.0028199591
-0.3784112515
0.0127229373
0.0134302029
-0.0221034374 -0.0203203229
OTP24.OTC16 0.0081968353 0.0130896705
0.0197347840
0.0127229373
0.0907463435
0.0889325628
-0.1742178881
-0.1644250366
OTP24.OTC17 0.0087850325 0.0139114253
0.0201606941
0.0134302029
0.0889325628
0.0738254268
-0.2183983394
-0.2098481702
OTP24.OTP19 -0.0138419035 -0.0224587425 -0.0363098170 -0.0221034374
-0.1742178881
-0.2183983394
0.1947074869
0.1748466011
OTP24.OTP24 -0.0127156809 -0.0206404453 -0.0334200513 -0.0203203229
-0.1644250366 -0.2098481702
0.1748466011
0.1633187616;

VARIABLES
X(I)
U
C
E
S

fra ao do total do investimento no ativo I


utilidade esperada do portfolio
ovarian ia do portfolio
retorno esperado do portfolio
skewness do portfolio;

207

208

Implementa o~es em Matlab e Gams

POSITIVE VARIABLE X;
VALUEA("ITA-1")=ALPHA;
VALUEE("ITE-1")=ETA;
EQUATIONS
UTIL fun ao utilidade esperada de ter eira ordem
FSUM fra oes devem somar 1.0
COVARP ovarian ia do portfolio
EXRETP retorno esperado do portfolio
SKEWP ter eiro momento do portfolio;

UTIL.. U =E= ETA*SUM(I,X(I)*ESP(I))-0.5*SUM(I,X(I)*SUM(J,X(J)*COV(I,J)))


+ALPHA*SUM(I,X(I)*SUM(J,X(J)*SUM(K,X(K)*M(I,J,K))));
FSUM.. SUM(I,X(I)) =E= 1.0;
COVARP.. C =E= SUM(I,X(I)*SUM(J,X(J)*COV(I,J)));
EXRETP.. E =E= SUM(I,X(I)*ESP(I));
SKEWP.. S =E= SUM(I,X(I)*SUM(J,X(J)*SUM(K,X(K)*M(I,J,K))));
MODEL PORTFOLIO /ALL/;
FILE MED, COVAR, COSKEW, RELAT;
PUT RELAT; RELAT.ND=6;
PUT MED; MED.ND=6; PUT 'E=['/;
PUT COVAR; COVAR.ND=6; PUT 'C=['/;
PUT COSKEW; COSKEW.ND=6; PUT 'S=['/;
LOOP(ITERE,
VALUEE(ITERE+1) = VALUEE(ITERE)+0.1;
ETA=VALUEE(ITERE);
LOOP(ITERA,
VALUEA(ITERA+1) = VALUEA(ITERA)+0.01;
ALPHA=VALUEA(ITERA);
SOLVE PORTFOLIO USING NLP MAXIMIZING U;
DISPLAY ETA, ALPHA, U.L, E.L, C.L, S.L, X.L;
PUT RELAT; PUT 'ALPHA = '; PUT ALPHA/;
PUT 'ETA = '; PUT ETA/;
PUT 'FUNCAO OBJETIVO = '; PUT U.L//;

B.2 Arquivo em GAMS - Sele ~ao de Portfolios usando Assimetria

PUT 'Composition of portfolio:'/;


LOOP(I,PUT I.TL, X.L(I) /);
PUT '-------------------------------------------------'//;
PUT MED; PUT E.L/;
PUT COVAR; PUT C.L/;
);

PUT COSKEW; PUT S.L/;

);
PUT MED; PUT '';
PUT COVAR; PUT '';
PUT COSKEW; PUT '';

209

210

Implementa o~es em Matlab e Gams

Refer^en ias Bibliogra as


[1 Julio Mi hael Stern e Celma de Oliveira Ribeiro. Metodos de Otimiza a~o em Finan as.
[2 G.J.Alexander and J.C.Fran is. Portfolio Analysis. Prenti e-Hall, Englewood Cli s, New
Jersey, 1986.
[3 K.J.Cohen J.A.Pogue. An Empiri al Evaluation of Alternative Portfolio Sele tion Models.
Journal of Business, 1967.
[4 J.Hull. Introdu tion to Futures and Options Markets. Prenti e-Hall,1991.
[5 J.E.Ingersoll. Theory of Finan ial De ision Making. Studies in Finan ial E onomi s,
Rowman and Little eld, Savage, Maryland, 1987. d
[6 H.M.Markowitz. Mean-Varian e Analisys in Portfolio Choi e and Capital Markets. Basil
Bla kwell, Cambridge, Massa husetts, 1987.
[7 W.F.Sharpe. Portfolio Theory and Capital Markets. M Graw-Hill, New York, 1970.
[8 H.R.S hwarz. Numeri al Analisys. John Wiley & Sons, 1989.
[9 T. Kariya. Quantitative Methods for Portfolio Analysis. Kluwer, 1993.
[10 H.R.Stoll and R.E.Whaley. Futures and Options Soult-Western, 1993.
[11 K.J.Arrow. Aspe ts of the Theory of Risky-Bearing. Le tures Helsinki, 1964.
[12 Tsiang. The Rationale of the Mean-Standard Deviation Analysis, Skewness Preferen e, and
the Demand for Money. The Ameri an E onomi Review 62, 1972.
[13 Stoer & Bulirs h. Introdu tion to Numeri al Analysis. Springer-Verlag, 1980.
[14 Engeln-Mullges & Frank Uhlig. Numeri al Algorithms with C. Springer-Verlag, 1996.
[15 J.C.Singleton & J. Wingender. Skewness Persisten e in Common Sto k Returns. Journal of
Finan ial and Quantitative Analysis, vol. 21, n.3, September/1986.
[16 P. Chunha hinda, K. Dandapani, S. Harnid, A. J. Prakash. Portfolio Sele tion and
Skewness: eviden e from international sto k markets . Journal of Banking & Finan e
21(1997), pp.143-147.
211

212

^

REFERENCIAS
BIBLIOGRAFICAS

[17 A. Kraus& R. H. Litzenberger. Skewness Preferen e and the Valuation of Risk Assets. The
Journal of Finan e, vol 31, n.4, September/1976.
[18 F. D. Arditti & H. Levy. Portfolio E ien y Analysis in Three Moments: the Multiperiod
Case. The Journal of Finan e, vol.30, n.3, June/1975.
[19 H. Levy & H. M. Markowitz. Approximating Expe ted Utility by a Fun tion of Mean and
Varian e. The Ameri an E onomi Review, vol.69, n.3, June/1979.
[20 M. Kijima& M. Ohnishi. Mean-Risk analysis of risk aversion and wealth e e ts on optimal
portfolios with multiple investments opportunities. Annals of Operation Resear h, 45(1993),
pp.147-163.
[21 A. Halston. A First Course in Numeri al Analysis. M Graw-Hill, 1965.
[22 H. M. Markowitz. Portfolio Sele tion - E ient Diversi ation of Investments. Bla kwell,
1995.

Você também pode gostar