Tutoriais do QuantLib Python com exemplos.
Este post é uma coleção de links para todo o meu tutorial quantlib python.
Eu escrevi um monte de pequenos tutoriais sobre o uso de ligações python QuantLib. Nestas mensagens, explico alguns conceitos do QuantLib usando exemplos mínimos. A seguir estão os links para estas postagens: Introdução ao QuantLib Python: Este post irá percorrer algumas das noções básicas da biblioteca QuantLib Python. Modelagem de Títulos de Taxa Fixa no QuantLib Python: Este post abordará um exemplo de modelagem de títulos de taxa fixa usando o QuantLib Python. Uma Introdução à Estrutura de Termo de Taxa de Juros no QuantLib Python: Este post irá mostrar os fundamentos da curva de produção do bootstrapping no QuantLib Python. Simulações de Estrutura de Termo White Hull com QuantLib Python: Discute a simulação do modelo de estrutura de taxa de juros Hull White em QuantLib Python: Demonstra como precificar opções européias usando QuantLib Python. Métodos usando a fórmula de Black-Scholes-Merton e a árvore binomial serão discutidos. Sobre as Simulações de Convergência de Hull White Monte Carlo: Discute a convergência das simulações de Monte Carlo do modelo Hull-White Valuation Opção Européia Usando o Modelo de Heston em QuantLib Python: Introduz um exemplo sobre como avaliar opções européias usando o modelo de Heston em Quantlib Modelando Python Swaps de Taxa de Juros de Baunilha Usando o QuantLib Python: Fornece uma introdução básica à avaliação de swaps de taxa de juros usando o QuantLib Python. Calibração de modelo de taxa de juros curta em QuantLib Python: Fornece exemplos de calibração de modelo de taxa de juros curta para volatilidades de troca em QuantLib Python Valuation Treasury Futures usando QuantLib Python: Fornece uma introdução à avaliação de contratos futuros de tesouraria em QuantLib Python. Opções de Valoração em Futuros de Commodities Usando o QuantLib Python: Descreve como avaliar opções em contratos futuros de commodities usando a fórmula Black em QuantLib Python Valorizando Títulos Convertíveis Usando QuantLib Python: Fornece uma introdução à avaliação de títulos conversíveis usando QuantLib Python com um exemplo mínimo. Modelando Volatilidade Sorria e Calibração do Modelo Heston Usando o QuantLib Python: Fornece uma introdução à construção da superfície da volatilidade implícita consistindo no sorriso observado no mercado e na calibragem do modelo Heston usando o QuantLib Python. QuantLib Python Cookbook Announcement: Anúncio do "QuantLib Python Cookbook" Avaliando Caps e Pisos de Taxa de Juros Usando o QuantLib Python: Um tutorial sobre a avaliação de limites e níveis usando o QuantLib Python. QuantLib Python Notebooks no Docker: Executando QuantLib python notebooks no Docker Anunciando qtk para QuantLib Python: Anunciando qtk, uma nova interface para interagir com QuantLib Python Valorizando títulos com spreads de crédito no QuantLib Python: Fornece um exemplo de valoração de títulos com spreads de crédito usando QuantLib Python . Este post aborda um exemplo de deslocamento da estrutura de termo de rendimento. Calibração do Modelo Heston Usando o QuantLib Python e o Scipy Optimize: Neste post, nós nos aprofundamos na calibração do modelo Heston usando o pacote QuantLib Python e o Scipy Optimize. Valoração de títulos que podem ser chamados usando o QuantLib Python: Neste post, avaliamos a valoração de títulos que podem ser chamados usando QuantLib Python Variance Reduction em Simulação de Monte Carlo Hull-White usando Moment Matching: Este post explica como usar o momento correspondente para reduzir a variação na simulação de Monte Carlo do Hull Modelo de estrutura a termo em branco. Preço da Opção Americana com QuantLib e Python: Este post explica a valorização das Opções Americanas usando QuantLib e Python.
Brincando com o QuantLib.
Estatísticas do Blog.
Nenhuma postagem nova esta semana. Isto não é porque eu sou preguiçoso, mas achei que vale a pena resumir os resultados sobre preços aproximados de FX TaRF em um pequeno artigo. Vou escrever sobre isso aqui também, com ênfase no código QuantLib. Semana que vem. Cuidar.
No meu post anterior eu escrevi sobre algumas idéias para aproximar eficientemente o valor de um fx exótico (um fx tarf na verdade). Uma motivação principal é usar um preço tão rápido em uma simulação de XVA.
Este post é dedicado ao design que eu criei para encaixar a ideia da forma mais precisa possível na arquitetura QuantLib existente.
O próximo post, em seguida, apresentará detalhes sobre o esquema de aproximação em si, alguns exemplos numéricos comparando a aproximação com um preço total em vários cenários de deterioração de mercado e tempo, e testes de desempenho.
Um bom design é de extrema importância. Mesmo em uma vizinhança próspera, uma janela quebrada, não rapidamente consertada, logo levará a uma segunda e, depois de um tempo, a uma área degenerada. Felizmente, Luigi não permitiria que isso acontecesse na cidade QuantLib, é claro.
Estes são os meus pensamentos sobre o design em geral:
devemos ter dois mecanismos de preços, um MC e um mecanismo Proxy. Não devemos ter apenas um mecanismo com alguns métodos adicionais para extrair os NPVs aproximados de forma proprietária, o mecanismo proxy deve se comportar como qualquer outro mecanismo, por exemplo, o decaimento do tempo deve consistentemente ser deduzido da data de avaliação global, não através de algum parâmetro especial, e os dados de mercado relevantes devem ser dados por estruturas padrão. A implementação de novos instrumentos e preços de motores seguindo a mesma idéia deve ser fácil e baseada em um interface comum a interface do usuário final usada no código do cliente deve ser fácil de usar e à prova de falhas A simulação do XVA é uma aplicação do mecanismo de proxy, mas não há nenhuma conexão estrita com este caso de uso & # 8211; você também pode usar o mecanismo de proxy & # 8220; apenas & # 8221; para calcular npvs mais rapidamente se não for necessária alta precisão.
Ou resumindo: não deve haver nada de especial na coisa toda. Limite seu entusiasmo, apenas faça um trabalho sólido e simples, não tente impressionar ninguém. OK. Vamos começar com a classe de instrumentos.
O construtor leva.
a agenda da estrutura (ou seja, as datas dos valores), o índice fx subjacente representando, por exemplo, uma correção fx do BCE (essa também é uma nova classe, porque parece que ainda não existe um índice fx no QuantLib, mas eu não entro em detalhes sobre isso aqui), o nominal da estrutura (em moeda estrangeira, ativo ou fonte, existem muitos nomes para isso) as contrapartes & # 8217; perfis de payoff, que normalmente são short puts e long calls, todos compartilhando o mesmo strike no nível alvo onde a estrutura derruba o tipo de cupom (veja o post anterior que eu fiz o link acima) a alavancagem dos dois lados do negócio.
Os dois últimos parâmetros accumulatedAmount e lastAmount são opcionais. Se não for fornecido, o FxTarf calcula a quantia já acumulada lendo as fixações históricas do índice.
Se especificado por outro lado, as fixações históricas são ignoradas e a quantidade acumulada é usada. A lastAmount neste contexto é necessária apenas no caso de a última correção já ter ocorrido, mas o pagamento associado ainda está no futuro. A razão para introduzir esses parâmetros um tanto redundantes é a seguinte. Por um lado, pode ser útil não definir todas as fixações históricas para o índice fx, mas definir diretamente o valor acumulado. Talvez você obtenha as informações da transação de algum sistema de origem e já forneça o valor acumulado atual juntamente com os dados da transação. Mais importante, durante uma simulação de XVA, talvez você não queira definir todas as fixações no IndexManager. Você pode fazer isso, se quiser, mas pode não ser útil, porque depois de cada caminho você tem que apagar todas as fixações novamente ou talvez você não simule cada data de conserto e apenas queira interpolar as fixações acumuladas. Em qualquer caso, é apenas um parâmetro de conveniência. Use ou simplesmente ignore.
Para um preço completo do tarf, podemos usar um motor monte carlo que é construído da maneira usual, por exemplo.
Os parâmetros aqui são o processo Black Scholes (generalizado), os intervalos de tempo para simular por ano, a semente para o RNG.
O último modificador. withProxy () é a única coisa especial aqui: Por padrão, o mecanismo calcula apenas um npv (e estimativa de erro) como qualquer outro mecanismo mc faz. Se o mecanismo for configurado com o sinalizador de proxy, por outro lado, informações adicionais durante a simulação serão coletadas e analisadas para produzir algum objeto de informações de proxy que possa ser usado posteriormente para os preços aproximados. Vamos ver em um minuto como.
Precisamos desse modificador porque a simulação fica mais lenta ao criar o proxy, portanto, poderemos desativá-lo.
Agora, configuramos o mecanismo e podemos calcular o npv (completo):
Se quisermos apenas o preço de proxy, podemos, claro, ignorar o cálculo completo do npv, mas isso não prejudica, pois o npv é sempre produzido, mesmo que seja apenas o cálculo das informações para o mecanismo de proxy.
Para usar o mecanismo de proxy, precisamos começar com um mecanismo que possa produzir essa informação. O mecanismo de proxy é então alimentado com o objeto proxy:
O mecanismo de proxy é construído com.
a descrição de proxy produzida pelo mecanismo mc, que pode ser recuperada do instrumento por. proxy () (esse é um resultado especial, que parece importante o suficiente para não enterrá-lo no heap de resultados adicionais - isso não é nada inovador) , é como a taxa bps ou justa para swaps como exemplo) a cotação fx usada para o preço & # 8211; ou seja, os dados essenciais de mercado necessários para a precificação por procuração da curva de desconto para a precificação (que é tomada como a curva de taxa doméstica de nosso processo de black scholes em nosso exemplo de código de cliente)
Além disso, a data de avaliação global determinará a data de referência para a avaliação, como de costume.
Se o instrumento não fornecer um objeto proxy (por exemplo, porque o mecanismo mc foi informado, veja acima), ou se o objeto proxy não for adequado para o mecanismo proxy a ser construído, uma exceção será lançada.
O que está acontecendo nos bastidores: Eu adicionei uma interface para instrumentos que são capazes de definir preços de proxy:
O único método para implementar é o proxy, que deve retornar um objeto contendo as informações necessárias para um mecanismo de proxy compatível calcular os npvs aproximados (veja abaixo quais meios compatíveis). As informações em si devem ser um objeto derivado de ProxyInstrument :: ProxyDescription. Ele deve fornecer um método de validação que deve verificar os dados fornecidos quanto à consistência.
Como é o instrumento fx tarf implementado w. r.t. essa interface:
Isso diz que a informação de proxy específica (ou uma possível) de um fx tarf consiste em alguns dados descritivos, que é.
o número máximo de fixações abertas (futuras) a última data de pagamento da estrutura & # 8211; veja abaixo um balanceamento do valor acumulado.
que juntos definem uma segmentação para a função de aproximação. Em cada segmento, a função de aproximação é então dada por um Proxy :: ProxyFunction, que neste nível de abstração é apenas uma função arbitrária Real to Real, retornando o npv para um determinado ponto de fx. O npv é expresso na base progressiva a partir da data do último pagamento da estrutura, para que o mecanismo proxy possa descontar desta última data de precificação possível para a data de avaliação. Lembre-se que isto é em geral (e tipicamente) diferente do usado para o preço do mc.
O método de validação verifica se a matriz de funções está preenchida de forma consistente com as informações de segmentação.
O objeto proxy faz parte da classe de resultados do instrumento, que está novamente usando apenas o formalismo padrão:
O mecanismo de proxy espera que um objeto proxy, que é verificado para ser um que seja útil para o mecanismo, esteja no construtor, usando um downcast dinâmico.
O terceiro nível de especialização está no mecanismo monte carlo, onde o tipo de função do objeto proxy específico é implementado, derivado das definições da classe FxTarf:
Neste local, finalmente fixamos a forma específica das funções de aproximação, que são, em essência, dadas por dois polinômios quadráticos. Vou dar mais detalhes e uma motivação para isso no próximo post.
Finalmente, pareceu útil derivar os motores mc e proxy de um mecanismo de base comum, que lida com alguns casos de limites triviais (como todas as fixações são feitas ou a determinação do npv de uma quantia fixa que ainda não foi liquidada), então temos hierarquia.
Se você estiver interessado no código, poderá procurar em meu repositório. Pode já funcionar, mas ainda não testei tudo. Mais sobre isso na próxima semana.
Precificação rápida de FX TARFs para XVA Calcuation.
Vamos jogar um jogo. Nós lançamos uma moeda dez vezes (aqui está uma maneira particularmente legal de fazer isso - você pode pegar a moeda grega de 2 euros, por exemplo, ela tem Εὐρώπη (tanto a deusa quanto o continente) nela). Se é cara eu te pago um euro. Se é coroa você me paga dois. Ah, e se você ganhar mais de três vezes enquanto estivermos jogando, nós paramos a coisa toda, ok?
Um fx tarf é uma seqüência de operações fx forward, onde nossa contraparte paga uma taxa de strike. Se o único atacante for a favor da contraparte, ele ou ela o executará na estrutura nominal (de modo que ele ou ela seja uma ligação longa). Se é a nosso favor, podemos executá-lo em duas vezes o valor nominal (por isso, estamos comprando duas vezes o valor nominal). E se a soma das fixações em favor da contraparte, com denotação da fixação de fx, exceder um determinado alvo, os restantes para a frente expiram sem mais pagamentos. Em tais estruturas existem várias utilizações para a fixação de cupons que acionam a meta: o valor total para essa correção é pago ou apenas parte do cupom necessário para atingir a meta ou nenhum cupom.
A avaliação de tarfs fx em geral depende dos sorrisos fx para a fixação de cada componente. Todo o sorriso é importante aqui: tanto a greve do negócio quanto o alvo menos a quantia acumulada são pontos críticos no sorriso, obviamente. Como a quantidade acumulada é em si uma quantidade aleatória após a primeira fixação, todo o sorriso afetará o valor da estrutura. Além disso, as correlações intertemporais do ponto de fx nas datas de fixação desempenham um papel importante.
Neste e provavelmente um ou mais posts posteriores eu quero escrever sobre várias coisas:
como um mecanismo clássico de precificação de monte carlo pode ser implementado para essa estrutura como um npv aproximado para cenários de mercado e suposições de queda de tempo pode ser calculado muito rapidamente como isso pode ser implementado em um segundo mecanismo de precificação e como isso está relacionado ao primeiro como o design transparente e transparente da QuantLib pode ser mantido ao fazer tudo isso.
Obviamente, o preço rápido é útil para preencher o famoso cubo npv, que pode ser usado para calcular números de XVA como CVA, DVA etc.
O post de hoje é dedicado a algumas reflexões sobre a metodologia para preços rápidos e aproximados. Estou muito inspirado por uma palestra de alguns colegas da Murex que implementaram ideias semelhantes em sua plataforma para CVA e possíveis cálculos futuros de exposição. Além disso, a ideia está relacionada com o papel muito clássico e simples, mas brilhante, de Longstaff e Schwartz, Valorizando Opções Americanas por Simulação: Uma Abordagem de Mínimos Quadrados Simples, mas tem um sabor ligeiramente diferente aqui.
Vamos corrigir um determinado termo de tabela do tarf. A estrutura tem datas de pagamento a partir de 15 de novembro de 2014, e mensalmente até 15 de outubro de 2015. A fixação fx é considerada como a fixação do BCE para EUR-USD dois dias úteis antes de cada data de pagamento. O nominal é de 100 milhões de euros. A nossa contraparte detém as chamadas, nós, os puts e as nossas puts estão em 200 milhões de euros, então alavancados por um fator de dois. A greve é de 1,10, então as chamadas da contrapartida estavam no dinheiro na data da negociação.
A data de avaliação é 28 de abril de 2015 e a meta restante é de 0,10. O ponto fx a partir da data de avaliação é de 1,10. A volatilidade implícita para as opções de EUR-USD fx é de 20% (lognormal, ainda não é um problema nos mercados fx 😉 & # 8230;), constante ao longo do tempo e plana e assumimos taxas de juros iguais a Euro e USD. Processo Garman-Kohlagen. O modo de pagamento é cupom total. É claro que as suposições sobre dados de mercado são apenas parcialmente realistas.
A ideia de aproximar eficientemente os npvs é a seguinte. Primeiro, fazemos um preço completo para o monte carlo da maneira usual. Cada caminho gera um npv. Nós armazenamos as seguintes informações em cada ponto de grade de cada caminho.
(# open Fixings, fx spot, quantidade acumulada até agora, npv das fixações restantes)
Espera-se, então, que possamos fazer uma análise de regressão do npv sobre esses principais vetores de preços, ou seja, o spot, a quantidade já acumulada e o número de fixações abertas.
Note que esta abordagem implica que o spot fx é retirado do campo & # 8220; fora & # 8221; Cenário XVA, mas tudo o mais (as curvas de taxa de juros e a volatilidade) está implícito no modelo de precificação. Isso é um pouco (ou muito) inconsistente com um conjunto de cenários XVA em que as curvas de taxa e talvez também a estrutura de volatilidade fazem parte dos cenários.
Vamos corrigir o caso mais simples de apenas uma correção aberta à esquerda, ou seja, nos colocamos em um ponto no tempo em algum lugar após o segundo, mas o último e o último conserto. Também definimos o alvo para (por exemplo, ignoramos esse recurso) por enquanto e assumimos uma alavancagem de um. Nossa estrutura se desmorona a uma única frente de baunilha. Fazemos 250k caminhos monte carlo e traçamos os resultados (o npv está em porcentagem aqui):
Você vê o que está acontecendo? Nós obtemos uma nuvem de pontos que & # 8211; para quantia acumulada fixa & # 8211; condicionada na média das médias pontuais a uma linha representando o fx forward npv. Veja abaixo onde eu faço isso em 2d e onde fica mais claro. O que observamos aqui como primeira observação é que a posição da nuvem depende da quantidade acumulada: pontos inferiores são conectados com menores quantidades acumuladas e pontos mais altos com maiores quantidades acumuladas. Isso é bastante plausível, mas tem um impacto nas áreas em que temos dados suficientes para fazer uma regressão.
A próxima figura mostra os mesmos dados, mas projetando ao longo da dimensão de valor acumulado.
Além disso, acrescentei uma linha de regressão linear que deveria ser capaz de prever o npv dado um valor pontual. Para testar isso eu adicionei mais três linhas horizontais que estimam o npv para valores pontuais de 1.0, 1.1 e 1.2 pela média de todos os dados de monte carlo gerados dentro de baldes [0.99,1.01], [1.09,1.11] e [1.19,1.21] respectivamente . A esperança é que as linhas horizontais se cruzem com a linha de regressão nos valores x de 1.0, 1.1 e 1.2. Isso parece muito bom aqui.
Vamos ver agora um TARF real, ou seja, definir o alvo como 0,15.
O que é novidade aqui é que a nuvem é cortada no nível alvo, além de se desmoronar simplesmente até um plano indicando um zero npv. Bastante claro, porque nesta área a estrutura é terminada antes da última fixação.
Caso contrário, este caso não é muito diferente do caso anterior, uma vez que assumimos um pagamento de cupão completo e só temos uma correção restante, por isso temos um forward fx que pode ser eliminado antes pelo acionador de segmentação. Mais desafiador é o caso em que pagamos um cupom limitado. Excluindo dados em que o alvo foi acionado antes, neste caso, obtemos.
Queremos aproximar os npvs para os pontos 1.0, 1.1 e 1.2 e um valor acumulado de 0.05 (com intervalos de 0.04 a 0.06) agora. O recurso de destino introduz curvatura em nossa nuvem. Eu levo isso em consideração ajustando um polinômio quadrático em vez de apenas uma função linear.
Além disso, vemos que os npvs estão limitados a 15 agora e diminuem para pontos mais altos. Por que esta última coisa? Na verdade até agora eu usei apenas os tempos de fixação como tempos de simulação (porque somente eles são necessários para o preço e o processo pode dar grandes passos devido à sua simplicidade), então o ponto é efetivamente a fixação anterior sempre. E se for acima de 1,1, exclui a possibilidade de cupons maiores do que sua diferença para 1,1.
Vamos adicionar mais tempos de simulação entre as fixações (100 por ano no total), como é provável que seja o caso nos cenários de XVA externos que solicitam npvs no final:
A aproximação funciona bem para o spot 1.0, mas não para o 1.1 e 1.2 (nos dois casos acima). Até agora não usamos o valor acumulado em nossa aproximação npv. Então, vamos nos restringir a quantidades acumuladas de, e. 0,02 a 0,08 (lembre-se de que queremos uma predição condicionada em um valor acumulado de 0,05, eu escolho um intervalo maior para a regressão, embora tenha mais dados e porque eu acho que não quero computar muitas funções de regressão em dois pequenos conjuntos de dados no final).
Melhor. Vamos para a planilha original agora (alavancagem 2, meta remanescente 0,1, cupom total) e 5 fixações abertas em vez de apenas 1 para ver se tudo isso se divide em um ambiente mais complexo (minha experiência diz: sim, isso vai acontecer). O montante acumulado que queremos aproximar é agora de 0,01:
Muito bem, puh. Nós vemos um novo artefato agora: a função de regressão quadrática começa a cair novamente para pontos maiores que 1,25. Isso obviamente não é sensato. Portanto, temos a necessidade não apenas de computar diferentes funções de regressão para diferentes quantidades acumuladas (e diferentes números de fixações abertas), mas também para diferentes regiões pontuais. Vamos calcular outra regressão quadrática para pontos maiores que 1,2, por exemplo (o gráfico azul):
Isso funcionaria para pontos mais altos.
Para resumir os experimentos, a abordagem parece sensata em geral, mas temos que ter em mente algumas coisas:
O número de etapas de tempo na simulação deve ser maior do que para fins de preços puros, possivelmente o tamanho da etapa da grade deve ser comparável à simulação de XVA.
A função de regressão pode ser assumida como quadrática, mas não globalmente. Em vez disso, o domínio deve ser particionado por.
o número de fixações abertas, possivelmente até o número de fixações abertas e a distância até a última fixação, a quantidade já acumulada no ponto fx.
A próxima tarefa seria pensar em um algoritmo que faz uma partição sensata automaticamente. Uma ideia seria exigir apenas uma certa porcentagem mínima dos dados gerados pela simulação inicial de monte carlo para os preços disponíveis em cada partição.
Próximo post será sobre a implementação dos dois motores de preços, então!
Todas as coisas, finanças e tecnologia & # 8230;
Insights, discursos e raves da interseção de alta finança e alta tecnologia.
Introdução ao QuantLib: a superfície de volatilidade.
Neste post, que em grande parte se baseia no meu post anterior sobre volatilidade implícita, vou introduzir o conceito de uma superfície de volatilidade. Uma superfície de volatilidade processa uma medida de volatilidade, como volatilidade implícita ou volatilidade a termo, ao longo das dimensões de strike e time to maturity. Como tal, não só relaciona a volatilidade das opções à greve como também o sorriso da volatilidade, mas também descreve a estrutura a termo da volatilidade para um contrato de opção, muito semelhante a uma curva de rendimento para taxas de juros. Para encontrar a volatilidade de uma determinada opção, basta localizar o ponto na superfície correspondente à greve e expiração da opção. A volatilidade pode então ser usada para precificar a opção com um modelo de precificação de opções apropriado, como o Black-Scholes.
Uma superfície de volatilidade pode ser visualizada como uma série de sorrisos de volatilidade, um para cada expiração de opção, onde o eixo x é greve, y é o tempo para a maturidade e z é a volatilidade (sigma). Essencialmente, a superfície de volatilidade é construída calculando o sorriso de volatilidade para cada expiração de opção e unindo-os, preenchendo os dados perdidos com valores interpolados ou extrapolados conforme necessário, de tal forma que o resultado seja uma superfície 3D contínua e suave.
Um exemplo é mostrado abaixo, que foi gerado usando valores de volatilidade implícita para opções no contrato futuro S & amp; P E-Mini da CBOE (símbolo: ES).
Os dados usados para criar a superfície de volatilidade acima foram retirados do Vol. Implícito. coluna desta captura de tela Interactive Brokers:
O QuantLib fornece suporte explícito para criar e trabalhar com objetos de superfície de volatilidade através de sua classe BlackVarianceSurface. A classe BlackVarianceSurface requer uma lista de greves, uma lista de datas de vencimento e Matriz de volatilidades, onde as linhas da Matriz correspondem às greves e as colunas correspondem às datas de vencimento da opção.
O código de exemplo abaixo mostra como construir uma instância de uma classe BlackVarianceSurface a partir de volatilidades implícitas obtidas da Interactive Brokers para expirações de contratos de opções futuras de setembro de 2013 a dezembro de 2014. Alternativamente, pode-se resolver as volatilidades implícitas usando a técnica descrita no meu post anterior desta série.
Uma característica importante da classe BlackVarianceSurface que merece menção é que ela permite que o algoritmo de interpolação seja especificado pelo programador. O algoritmo padrão é BilinearInterpolation. O QuantLib fornece outras classes de interpolação, como BicubicSpline e Polynomial2DSpline, que são herdadas da classe base Interpolation2D.
No exemplo a seguir, extraio a volatilidade de várias greves e vencimentos da superfície de volatilidade ES, inclusive greves que devem ser interpoladas. Então eu defino o interpolador para ser BicubicSpline e calculo as volatilidades novamente para as mesmas greves e vencimentos. Por fim, eu exporto os valores de superfície de volatilidade x, yez para um arquivo para que eu possa gerar um gráfico de superfície 3D com o gnuplot, uma ferramenta de gráfico de código aberto.
Os comandos de script do gnuplot seguem o código C ++ no final da listagem. Encorajo-o a executar o script do gnuplot em sua própria máquina, pois o gnuplot suporta alguns recursos bem interessantes que permitem que você explore a superfície de volatilidade de forma interativa.
Então aqui está o código:
Quando executado, o programa produz a seguinte saída:
Usando interpolação bilinear padrão.
Volatilidade dezembro 13 1650.0: 0.156400.
Dec13 1655.0 volatilidade (interpolada): 0.154922.
Dec13 1685.0 volatilidade (interpolada): 0.143587.
Jun14 1655.0 volatilidade (interpolada): 0.163246.
14 de setembro de 1680,0 volatilidade: 0,160420.
Usando interpolação spline bicúbica.
Volatilidade dezembro 13 1650.0: 0.156400.
Dec13 1655.0 volatilidade (interpolada): 0.154662.
Dec13 1685.0 volatilidade (interpolada): 0.143587.
Jun14 1655.0 volatilidade (interpolada): 0.163750.
14 de setembro de 1680,0 volatilidade: 0,160420.
Como você pode ver, a escolha do interpolador pode afetar a forma da superfície da volatilidade, o que pode, por sua vez, alterar o preço das opções calculadas com as volatilidades correspondentes.
Então, é sobre isso para esta última parcela da minha série Introduzindo QuantLib. Espero que tenha gostado. Por favor, não hesite em postar quaisquer comentários ou perguntas que você possa ter. Eu adoraria receber mais feedback sobre esses posts de meus leitores. Como sempre, até a próxima vez, divirta-se com o QuantLib!
Compartilhar isso:
Relacionado
Pós-navegação.
Deixe uma resposta Cancelar resposta.
Artigo excelente No caso de opções FX, os dados do mercado de Vol não são tão diretos, eles têm ATM, 25 reversão de risco Delta e citações de borboleta que precisamos converter em greves para construir vol superfícies. Qualquer adendo a este artigo sobre como avaliar as opções de câmbio dos dados de mercado seria ótimo! Obrigado.
Preços de opções de FX simples.
Preços de opções de FX simples.
opção para comprar USD, vender ZAR, por exemplo, greve 11,00, dado um apartamento.
vol superfície @ 25% usando Black Scholes.
Open Source Business Conference (OSBC), 24 a 25 de março de 2009, São Francisco, Califórnia.
-OSBC aborda o maior problema em código aberto: Open Sourcing the Enterprise.
- Estratégias para impulsionar a inovação e reduzir custos com a participação do código aberto.
- Receba um desconto de US $ 600 da taxa de registro com o código fonte: SFAD.
Lista de discussão QuantLib-users.
Re: preços de opções de FX simples.
Você pode refazer o exemplo EquityOption. cpp no QuantLib para preço.
opções de FX simples sob o rendimento do dividendo de suposição = = estrangeiro.
taxa. Eu publiquei um exemplo simples e simples em:
Open Source Business Conference (OSBC), 24 a 25 de março de 2009, São Francisco, Califórnia.
-OSBC aborda o maior problema em código aberto: Open Sourcing the Enterprise.
- Estratégias para impulsionar a inovação e reduzir custos com a participação do código aberto.
- Receba um desconto de US $ 600 da taxa de registro com o código fonte: SFAD.
Lista de discussão QuantLib-users.
Re: preços de opções de FX simples.
& gt; Você pode refazer o exemplo EquityOption. cpp no QuantLib para preço.
& gt; opções de FX simples sob o rendimento do dividendo de suposição = = estrangeiro.
& gt; taxa. Eu publiquei um exemplo simples e simples em:
modelando uma taxa de câmbio, você pode usar GarmanKohlagenProcess em vez disso.
de BlackScholesMertonProcess. É o mesmo, mas as entradas têm o.
Open Source Business Conference (OSBC), 24 a 25 de março de 2009, São Francisco, Califórnia.
-OSBC aborda o maior problema em código aberto: Open Sourcing the Enterprise.
- Estratégias para impulsionar a inovação e reduzir custos com a participação do código aberto.
- Receba um desconto de US $ 600 da taxa de registro com o código fonte: SFAD.
Lista de discussão QuantLib-users.
Re: preços de opções de FX simples.
para hedge funds. Faça muita negociação linear e não linear em FX.
e taxas. Avaliação Quantlib geralmente para câmbio e.
mercados emergentes (esperamos que você implemente swaps de moeda cruzada em breve).
Muito novo no Quantlib, então perdoe minhas perguntas simples e obrigado.
novamente para os ponteiros.
Em 17 de fevereiro de 2009, às 13:20, Luigi Ballabio escreveu:
& gt; Em terça-feira, 2009-02-17 às 12:51 +0000, Bojan Nikolic escreveu:
& gt; & gt; Você pode refazer o exemplo EquityOption. cpp no QuantLib para preço.
& gt; & gt; opções de FX simples sob o rendimento do dividendo de suposição = = estrangeiro.
& gt; & gt; taxa. Eu publiquei um exemplo simples e simples em:
& gt; Sim, obrigado Bojan. Apenas uma nota: para deixar mais claro que você é.
& gt; modelando uma taxa de câmbio, você pode usar GarmanKohlagenProcess em vez disso.
& gt; de BlackScholesMertonProcess. É o mesmo, mas as entradas têm o.
& gt; O jovem conhece as regras, mas o velho conhece as exceções.
Open Source Business Conference (OSBC), 24 a 25 de março de 2009, São Francisco, Califórnia.
-OSBC aborda o maior problema em código aberto: Open Sourcing the Enterprise.
- Estratégias para impulsionar a inovação e reduzir custos com a participação do código aberto.
- Receba um desconto de US $ 600 da taxa de registro com o código fonte: SFAD.
Preço de sorriso de opções de FX.
Preço de sorriso de opções de FX.
Eu quero preço opções de FX, tendo em conta o sorriso e inclinação. Aqui estão os dados vol que eu tenho, por exemplo, para EURUSD:
- Somente postagem de assinante. Se você quer postar, inscreva-se primeiro.
- Observe também que esta não é a lista de ajuda r onde as perguntas gerais sobre o R devem ir.
Re: Smile preços de opções de FX.
& gt; Eu quero preço opções de FX, tendo em conta o sorriso e inclinação. Aqui estão os dados vol que eu tenho, por exemplo, para EURUSD:
& gt; Alternativamente, eu tenho em borboleta e formulário RR:
& gt; Qual é a melhor biblioteca para fazer isso em R? Existe uma biblioteca para fazer isso?
& gt; Basicamente eu estou executando portfólios de modelos usando opções de até 2 anos e tão baixo quanto 5 delta. Então eu precisaria precificar as opções usando o sorriso / inclinação, e também potencialmente extrapolar a superfície para diminuir os delta vols. Eu não vou sair mais do que 2y.
& gt; Pergunta em separado: existe uma boa biblioteca para calcular as datas de negociação financeira em R, esperamos que também tenha em conta as férias do país?
& gt; Disseram-me que o Quantlib fará isso, mas acho um pouco difícil de entender. Se a resposta é que eu devo perseverar com o Quantlib, então que seja, neste caso, há algum exemplo de sites que eu possa consultar? Alternativamente, se há alguma funcionalidade em lata em outro lugar que seria bom saber. Muito obrigado antecipadamente.
& gt; [[versão HTML alternativa excluída]]
& gt; - Somente postagem de assinante. Se você quer postar, inscreva-se primeiro.
& gt; - Observe também que esta não é a lista de ajuda r onde as perguntas gerais sobre o R devem ir.
- Somente postagem de assinante. Se você quer postar, inscreva-se primeiro.
- Observe também que esta não é a lista de ajuda r onde as perguntas gerais sobre o R devem ir.
Re: Smile preços de opções de FX.
Em 26 de junho de 2011, às 16:46, Krishna escreveu:
& gt; Acho que o mais fácil é encaixar uma função quadrática para encaixar no sorriso. Há um antigo artigo de Malz (1997) que descreve isso.
& gt; No entanto, existem alguns pequenos problemas com esta abordagem quando você tem grande RR e também as convenções de cotação são importantes (EM vs G10).
& gt; Portanto, sua abordagem é tornar a volatilidade uma função quadrática do delta, o que permite que você tenha alguma fórmula de tipo de formulário fechado para o vanna e o volga.
& gt; Então você poderia fazer algo assim.
& gt; em seguida, use a função ajustada para precificar sua opção delta específica. Você também teria que interpolar entre os vencimentos conforme a opção decai.
& gt; Eu não acho que existe um único modelo que você possa usar para as opções delta muito baixas (menos de 10 delta) tipicamente as pessoas usam várias funções de energia para interpolar, mas na prática é muito dirigido pela liquidez.
& gt; Além disso, como você provavelmente sabe, uma mesa de suporte ou uma grande HF terão preços muito mais apertados do que se você estivesse negociando isso em uma plataforma de varejo ou se você estiver em um fundo pequeno, então você teria que fazer suposições razoáveis sobre oferta de oferta.
& gt; Espero que isto ajude.
& gt; Em 23 de junho de 2011, às 17h17, [email oculto] escreveu:
& gt; & gt; Eu quero preço opções de FX, tendo em conta o sorriso e inclinação. Aqui estão os dados vol que eu tenho, por exemplo, para EURUSD:
& gt; & gt; Alternativamente, eu tenho em borboleta e formulário RR:
& gt; & gt; Qual é a melhor biblioteca para fazer isso em R? Existe uma biblioteca para fazer isso?
& gt; & gt; Basicamente eu estou executando portfólios de modelos usando opções de até 2 anos e tão baixo quanto 5 delta. Então eu precisaria precificar as opções usando o sorriso / inclinação, e também potencialmente extrapolar a superfície para diminuir os delta vols. Eu não vou sair mais do que 2y.
& gt; & gt; Pergunta em separado: existe uma boa biblioteca para calcular as datas de negociação financeira em R, esperamos que também tenha em conta as férias do país?
& gt; & gt; Disseram-me que o Quantlib fará isso, mas acho um pouco difícil de entender. Se a resposta é que eu devo perseverar com o Quantlib, então que seja, nesse caso, há algum exemplo de sites que eu possa consultar? Alternativamente, se há alguma funcionalidade em lata em outro lugar que seria bom saber. Muito obrigado antecipadamente.
& gt; & gt; [[versão HTML alternativa excluída]]
& gt; & gt; - Somente postagem de assinante. Se você quer postar, inscreva-se primeiro.
& gt; & gt; - Observe também que esta não é a lista de ajuda r onde as perguntas gerais sobre o R devem ir.
- Somente postagem de assinante. Se você quer postar, inscreva-se primeiro.
- Observe também que esta não é a lista de ajuda r onde as perguntas gerais sobre o R devem ir.
Re: Smile preços de opções de FX.
& gt; Muito útil obrigado Krishna. Sim, eu tenho acesso ao mercado atacadista para que a liquidez não seja um problema, mas como você diz, o lance / oferta pode ser um desafio no EM, embora tenha ficado muito melhor nos últimos anos.
& gt; Você tem alguma idéia sobre pacotes que eu possa usar para precificação em R? Eu normalmente vou estar trocando tudo de ATM até 10 delta, e apenas ocasionalmente 5 delta. Eu preciso backtest estratégias onde nós vendemos ATM atemporânea e vendemos asas mais antigas (a idéia é que, no ambiente atual altamente regulamentado, as asas são caras como os decisores políticos estão restringindo grandes movimentos. No entanto, chop de curto prazo é alta). Então, antes de entrar nos módulos de backtesting do R, primeiro preciso de um pricer de confiança para uma única opção.
& gt; Em 26 de junho de 2011, às 16:46, Krishna escreveu:
& gt; & gt; Acho que o mais fácil é encaixar uma função quadrática para encaixar no sorriso. Há um antigo artigo de Malz (1997) que descreve isso.
& gt; & gt; No entanto, existem alguns pequenos problemas com esta abordagem quando você tem grande RR e também as convenções de cotação são importantes (EM vs G10).
& gt; & gt; So his approach is to make volatility a quadratic function of delta this allows you to have some closed form type formula for the vanna and volga.
& gt; & gt; So you could do something like this.
& gt; & gt; then use the fitted function to price your particular delta option. You'd also have to interpolate between maturities as the option decays.
& gt; & gt; I don't think there is any single model that you can use for the very low delta options (less than 10 delta) typically people use various power functions to interpolate but it is in practice very liquidity driven.
& gt; & gt; Also as you probably know a prop desk or large HF will get much tighter pricing than if you are trading this on a retail FX platform or if you are at a small fund so you'd have to make reasonable assumptions on bid-offer.
& gt; & gt; & gt; I want to price FX options taking into account the smile and skew. Here is the vol data that I have, for example for EURUSD:
& gt; & gt; & gt; Alternatively I have it in butterfly and RR form:
& gt; & gt; & gt; What is the best library to do this in R? Is there a library to do this?
& gt; & gt; & gt; Basically I am running model portfolios using options up to 2 years and as low as 5 delta. So I would need to price the options using the smile/skew, and also potentially extrapolate the surface to lower delta vols. I won't be going out further than 2y.
& gt; & gt; & gt; Separate question: is there a good library for calculating financial trading dates in R, hopefully also taking into account country holidays?
& gt; & gt; & gt; I am told that Quantlib will do this, but I find it a little dense to understand. If the answer is that I must persevere with Quantlib then so be it, in which case, are there any example sites that I can consult? Alternatively if there is some canned functionality elsewhere that would be good to know. Thanks very much in advance.
& gt; & gt; & gt; [[alternative HTML version deleted]]
& gt; & gt; & gt; -- Subscriber-posting only. If you want to post, subscribe first.
& gt; & gt; & gt; -- Also note that this is not the r-help list where general R questions should go.
-- Subscriber-posting only. If you want to post, subscribe first.
-- Also note that this is not the r-help list where general R questions should go.
Re: Smile pricing of FX options.
including in fOptions which has everything from Haug's book.
little faster for your needs.
& gt; Apols the strat should have read "buy" ATM and sell longer dated.
& gt; On 26 Jun 2011, at 19:03, tbrowne wrote:
& gt; & gt; Very helpful thanks Krishna. Yes I have access to the wholesale.
& gt; & gt; market so liquidity is not a problem but as you say bid/offer can.
& gt; & gt; be a challenge in EM, although it's gotten much better in the past.
& gt; & gt; Do you have any ideas on packages I might use for pricing in R? EU.
& gt; & gt; am typically going to be trading everything from ATM up to 10.
& gt; & gt; delta, and on only occasionally 5 delta. I need to backtest.
& gt; & gt; strategies where we sell short dated ATM and sell longer dated.
& gt; & gt; wings (the idea is that in the current highly regulated.
& gt; & gt; environment, wings are expensive as policy makers are restricting.
& gt; & gt; big moves. Yet short-dated chop is high). So before I get into the.
& gt; & gt; backtesting modules of R, I first need a reliable pricer for a.
& gt; & gt; On 26 Jun 2011, at 16:46, krishna wrote:
& gt; & gt; & gt; I think the easiest is to fit a quadratic function to fit the.
& gt; & gt; & gt; smile. There is an old Malz (1997) paper that describes this.
& gt; & gt; & gt; However there are some small issues with this approach when you.
& gt; & gt; & gt; have large RR and also the quoting conventions are important (EM.
& gt; & gt; & gt; So his approach is to make volatility a quadratic function of.
& gt; & gt; & gt; delta this allows you to have some closed form type formula for.
& gt; & gt; & gt; So you could do something like this.
& gt; & gt; & gt; then use the fitted function to price your particular delta.
& gt; & gt; & gt; opção. You'd also have to interpolate between maturities as the.
& gt; & gt; & gt; I don't think there is any single model that you can use for the.
& gt; & gt; & gt; very low delta options (less than 10 delta) typically people use.
& gt; & gt; & gt; various power functions to interpolate but it is in practice very.
& gt; & gt; & gt; Also as you probably know a prop desk or large HF will get much.
& gt; & gt; & gt; tighter pricing than if you are trading this on a retail FX.
& gt; & gt; & gt; platform or if you are at a small fund so you'd have to make.
& gt; & gt; & gt; reasonable assumptions on bid-offer.
>>>> I want to price FX options taking into account the smile and.
>>>> skew. Here is the vol data that I have, for example for EURUSD:
>>>> Alternatively I have it in butterfly and RR form:
>>>> What is the best library to do this in R? Is there a library to.
>>>> Basically I am running model portfolios using options up to 2.
>>>> years and as low as 5 delta. So I would need to price the options.
>>>> using the smile/skew, and also potentially extrapolate the.
>>>> surface to lower delta vols. I won't be going out further than 2y.
>>>> Separate question: is there a good library for calculating.
>>>> financial trading dates in R, hopefully also taking into account.
>>>> I am told that Quantlib will do this, but I find it a little.
>>>> dense to understand. If the answer is that I must persevere with.
>>>> Quantlib then so be it, in which case, are there any example.
>>>> sites that I can consult? Alternatively if there is some canned.
>>>> functionality elsewhere that would be good to know. Thanks very.
>>>> [[alternative HTML version deleted]]
>>>> -- Subscriber-posting only. If you want to post, subscribe first.
>>>> -- Also note that this is not the r-help list where general R.
[[alternative HTML version deleted]]
-- Subscriber-posting only. If you want to post, subscribe first.
-- Also note that this is not the r-help list where general R questions should go.
Todas as coisas, finanças e tecnologia & # 8230;
Insights, discursos e raves da interseção de alta finança e alta tecnologia.
Introdução ao QuantLib: a superfície de volatilidade.
Neste post, que em grande parte se baseia no meu post anterior sobre volatilidade implícita, vou introduzir o conceito de uma superfície de volatilidade. A volatility surface renders a volatility measure, such as implied volatility or forward volatility, along the dimensions of both strike and time to maturity. As such, not only does it relate option volatility to strike as does a volatility smile, it also depicts the term structure of volatility for an option contract, much like a yield curve does for interest rates. Para encontrar a volatilidade de uma determinada opção, basta localizar o ponto na superfície correspondente à greve e expiração da opção. A volatilidade pode então ser usada para precificar a opção com um modelo de precificação de opções apropriado, como o Black-Scholes.
Uma superfície de volatilidade pode ser visualizada como uma série de sorrisos de volatilidade, um para cada expiração de opção, onde o eixo x é greve, y é o tempo para a maturidade e z é a volatilidade (sigma). Essentially, the volatility surface is constructed by computing the volatility smile for each option expiration and knitting them together, filling in missing data with interpolated or extrapolated values as necessary, such that the result is a continuous, smooth, 3D surface.
An example is shown below, which was generated using implied volatility values for options on the the CBOE’s S&P E-Mini futures contract (symbol: ES).
Os dados usados para criar a superfície de volatilidade acima foram retirados do Vol. Implícito. coluna desta captura de tela Interactive Brokers:
O QuantLib fornece suporte explícito para criar e trabalhar com objetos de superfície de volatilidade através de sua classe BlackVarianceSurface. A classe BlackVarianceSurface requer uma lista de greves, uma lista de datas de vencimento e Matriz de volatilidades, onde as linhas da Matriz correspondem às greves e as colunas correspondem às datas de vencimento da opção.
O código de exemplo abaixo mostra como construir uma instância de uma classe BlackVarianceSurface a partir de volatilidades implícitas obtidas da Interactive Brokers para expirações de contratos de opções futuras de setembro de 2013 a dezembro de 2014. Alternativamente, pode-se resolver as volatilidades implícitas usando a técnica descrita no meu post anterior desta série.
Uma característica importante da classe BlackVarianceSurface que merece menção é que ela permite que o algoritmo de interpolação seja especificado pelo programador. O algoritmo padrão é BilinearInterpolation. O QuantLib fornece outras classes de interpolação, como BicubicSpline e Polynomial2DSpline, que são herdadas da classe base Interpolation2D.
No exemplo a seguir, extraio a volatilidade de várias greves e vencimentos da superfície de volatilidade ES, inclusive greves que devem ser interpoladas. Então eu defino o interpolador para ser BicubicSpline e calculo as volatilidades novamente para as mesmas greves e vencimentos. Por fim, eu exporto os valores de superfície de volatilidade x, yez para um arquivo para que eu possa gerar um gráfico de superfície 3D com o gnuplot, uma ferramenta de gráfico de código aberto.
Os comandos de script do gnuplot seguem o código C ++ no final da listagem. Encorajo-o a executar o script do gnuplot em sua própria máquina, pois o gnuplot suporta alguns recursos bem interessantes que permitem que você explore a superfície de volatilidade de forma interativa.
Então aqui está o código:
Quando executado, o programa produz a seguinte saída:
Usando interpolação bilinear padrão.
Volatilidade dezembro 13 1650.0: 0.156400.
Dec13 1655.0 volatility (interpolated): 0.154922.
Dec13 1685.0 volatilidade (interpolada): 0.143587.
Jun14 1655.0 volatilidade (interpolada): 0.163246.
14 de setembro de 1680,0 volatilidade: 0,160420.
Usando interpolação spline bicúbica.
Volatilidade dezembro 13 1650.0: 0.156400.
Dec13 1655.0 volatilidade (interpolada): 0.154662.
Dec13 1685.0 volatilidade (interpolada): 0.143587.
Jun14 1655.0 volatilidade (interpolada): 0.163750.
14 de setembro de 1680,0 volatilidade: 0,160420.
Como você pode ver, a escolha do interpolador pode afetar a forma da superfície da volatilidade, o que pode, por sua vez, alterar o preço das opções calculadas com as volatilidades correspondentes.
So that’s about it for this latest installment of my Introducing QuantLib series. Espero que tenha gostado. Por favor, não hesite em postar quaisquer comentários ou perguntas que você possa ter. Eu adoraria receber mais feedback sobre esses posts de meus leitores. Como sempre, até a próxima vez, divirta-se com o QuantLib!
Compartilhar isso:
Relacionado
Pós-navegação.
Deixe uma resposta Cancelar resposta.
Artigo excelente No caso de opções FX, os dados do mercado de Vol não são tão diretos, eles têm ATM, 25 reversão de risco Delta e citações de borboleta que precisamos converter em greves para construir vol superfícies. Qualquer adendo a este artigo sobre como avaliar as opções de câmbio dos dados de mercado seria ótimo! Obrigado.
Comments
Post a Comment