SlideShare uma empresa Scribd logo
1 de 16
Baixar para ler offline
: Dias
Úteis em Qualquer Calendário
Grupy-SP—julho/2015
Wilson Freitas
bizdays
(https://pypi.python.org/pypi/bizdays/v0.2.0)
http://aboutwilson.net (http://aboutwilson.net)
@aboutwilson (http://www.twitter.com/aboutwilson)
Sobre mim
Wilson Freitas
quant
físico
corredor
padeiro
Background
Sistemas Complexos
Finanças Quantitativas
Matemática
Programação
R, Python, MATLAB, C/C++
Motivação
O mercado financeiro brasileiro possui diversas particularidas que complicam a simples tarefa de
calcular os preços dos ativos financeiros.
liquidação de contratos de dólar com a cotação do dia anterior
contratos com vencimento fixo ao contrário do resto do mundo que negocia prazos
fixos
regras absurdas para definição de vencimentos
e ...
vigência do contrato em dias úteis, para diferentes calendários
entre outras
Aqui vamos falar sobre como os desafios de lidar com dias úteis foram vencidos utilizando
Python.
Contagem de dias úteis
No Brasil as taxas de juros são calculadas em dias úteis
Herança do período inflacionário
O problema é que com as taxas de juros apuradas em dias úteis força que todos os
demais contratos sigam a mesma convenção:
contratos futuros, títulos públicos, opções
Diferentes mercados diferentes regras:
Mercado de derivativos (antiga BM&F) possui um calendário de feriados
Mercado de ações (antiga Bovespa) possui outro calendário
Contratos de moedas utilizam dias corridos
Problema: diferentes ativos precisam lidar com a contagem de dias de forma diferente
Módulo python-bizdays
História
A contagem em dias foi desenvolvida para o módulo
bizdaysnasceu em R em set/2013
Foi portado para Python em seguida
Objetivos
Objetivo 1: realizar operações com dias úteis!
Objetivo 2: fazer uma coisa tão simples de usar quanto a função NETWORKDAYSdo
Excel
Objetivo 3: Poder lidar com mais de 1 calendário sem if
python-fixedincome
(https://github.com/wilsonfreitas/python-fixedincome)
bizdays in action
In [1]: frombizdaysimportCalendar
holidays=['2015-01-01','2015-02-16','2015-02-17','2015-04-03','2015-04-21',
'2015-05-01','2015-06-04','2015-09-07','2015-10-12','2015-11-02',
'2015-11-15','2015-12-25','2016-01-01']
cal=Calendar(holidays=holidays,weekdays=['Sunday','Saturday'])
In [2]: # Dia do Trabalho é dia útil?
cal.isbizday('2015-05-01')
Out[2]: False
In [3]: # 12/07/2015 (domingo) é dia útil?
cal.isbizday('2015-07-12')
Out[3]: False
In [4]: # 03/08/2015 (sengunda-feira) é dia útil?
cal.isbizday('2015-08-03')
Out[4]: True
In [5]: # Quantidade de dias úteis no ano:
cal.bizdays('2015-01-01','2015-12-31')
Out[5]: 249
In [6]: # Quantidade de dias úteis até hoje:
cal.bizdays('2015-01-01','2015-07-16')
Out[6]: 133
In [7]: # Todos os dias úteis em um período, pex primeira quinzena de abril
list(cal.seq('2015-04-01','2015-04-15'))
Out[7]: [datetime.date(2015, 4, 1),
datetime.date(2015, 4, 2),
datetime.date(2015, 4, 6),
datetime.date(2015, 4, 7),
datetime.date(2015, 4, 8),
datetime.date(2015, 4, 9),
datetime.date(2015, 4, 10),
datetime.date(2015, 4, 13),
datetime.date(2015, 4, 14),
datetime.date(2015, 4, 15)]
Cálculo de preços de ativos financeiros
Os ativos financeiros tem data de vencimento fixa
Contratos Futuros de taxas de juros (DI1) expiram no dia 01 do mês de
vencimento
Use adjust_next(ou adjust_previous)
In [8]: refdate='2015-03-12'
maturity='2015-05-01'
In [9]: cal.bizdays(refdate,maturity)
Out[9]: 33
In [10]: cal.adjust_next(maturity)
Out[10]: datetime.date(2015, 5, 4)
In [11]: cal.bizdays(refdate,cal.adjust_next(maturity))
Out[11]: 34
Também trabalha com vetores de datas (atributo vec:/)
In [12]: refdate='2015-03-12'
maturities=['2015-05-01','2015-06-01','2015-08-01']
In [13]: list(cal.vec.adjust_next(maturities))
Out[13]: [datetime.date(2015, 5, 4),
datetime.date(2015, 6, 1),
datetime.date(2015, 8, 3)]
In [14]: list(cal.vec.bizdays(refdate,list(cal.vec.adjust_next(maturities))))
Out[14]: [34, 54, 98]
Manipulando curvas de taxas de juros
In [15]: importpandasaspd
Carregando um calendário em um arquivo
In [16]: !head -6 ANBIMA.cal
Saturday
Sunday
2000-01-01
2000-03-06
2000-03-07
2000-04-21
In [17]: cal252=Calendar.load('ANBIMA.cal')
cal360=Calendar()
Carregando taxas de juros divulgadas pela BM&FBovespa
In [18]: url='http://www2.bmf.com.br/pages/portal/bmfbovespa/boletim1/TxRef1.asp'
dfs=pd.read_html(url)
curva=dfs[2].ix[2:]
curva.columns=['DC','Taxa_252','Taxa_360']
curva.index=range(1,len(curva)+1)
curva.dtypes
Out[18]: DC object
Taxa_252 object
Taxa_360 float64
dtype: object
In [19]: curva.head()
Out[19]: DC Taxa_252 Taxa_360
1 1 1364 1340
2 8 1368 1472
3 15 1368 1438
4 16 1368 1473
5 19 1368 1335
Separando as curvas
Criar 2 curvas uma de taxas em dias corridos e outra em dias úteis.
In [20]: curva360=pd.DataFrame({'DC':curva['DC'].apply(int),
'Taxa_360':curva['Taxa_252'].apply(lambdax:float(x)/100)})
curva360.head(3)
Out[20]: DC Taxa_360
1 1 13.64
2 8 13.68
3 15 13.68
In [21]: refdate='2015-07-15'
dates=list(cal360.vec.offset(refdate,curva360['DC']))
curva252=pd.DataFrame({'DU':list(cal252.vec.bizdays(refdate,dates)),
'Taxa_252':curva['Taxa_252'].apply(lambdax:float(x)/100)})
curva252.head(3)
Out[21]: DU Taxa_252
1 1 13.64
2 6 13.68
3 11 13.68
Definindo vencimentos dos contratos
Maioria dos contratos futuros
Vencimento no primeiro dia de cada mês
In [22]: cal.getdate('first day',2015,1)
Out[22]: datetime.date(2015, 1, 1)
In [23]: cal.getdate('1st day',2015,5)
Out[23]: datetime.date(2015, 5, 1)
Contratos futuros de inflação
Vencimento do dia 15 de cada mês
In [24]: cal.getdate('15th day',2015,7)
Out[24]: datetime.date(2015, 7, 15)
Contratos futuros de soja
Vencimento nos segundos dias úteis
In [25]: cal.getdate('2nd bizday',2015,5)
Out[25]: datetime.date(2015, 5, 5)
Contratos futuros de boi gordo
Vencimento no último dia útil do mês
In [26]: cal.getdate('last bizday',2015,5)
Out[26]: datetime.date(2015, 5, 29)
Contratos futuros de café
Vencimento do sexto dia útil anterior ao último dia do mês
In [27]: cal.getdate('6th bizday before last day',2015,7)
Out[27]: datetime.date(2015, 7, 23)
Contratos futuros de índice (IBOVESPA)
Vencimento na quarta-feira mais próxima do dia 15 do mês
In [28]: cal.getdate('first wed after 15th day',2015,6)
Out[28]: datetime.date(2015, 6, 17)
In [29]: cal.getdate('first wed before 15th day',2015,6)
Out[29]: datetime.date(2015, 6, 10)
Wilson Freitas — http://blog.aboutwilson.net/ (http://blog.aboutwilson.net/)
github (https://github.com/wilsonfreitas)
@aboutwilson (http://www.twitter.com/aboutwilson)

Mais conteúdo relacionado

Mais procurados

Acrobat document
Acrobat documentAcrobat document
Acrobat documentesregroup
 
Mini centrifugal pump project.part 2
Mini centrifugal pump project.part 2Mini centrifugal pump project.part 2
Mini centrifugal pump project.part 2shiva5555
 
Top 10 ramp interview questions with answers
Top 10 ramp interview questions with answersTop 10 ramp interview questions with answers
Top 10 ramp interview questions with answersabbiewilson000
 
19212883 marketing-mix-of-ptcl
19212883 marketing-mix-of-ptcl19212883 marketing-mix-of-ptcl
19212883 marketing-mix-of-ptclMujahid Maqsood
 
Causes and Remedies of Privatization of PTCL
Causes and Remedies of Privatization of PTCLCauses and Remedies of Privatization of PTCL
Causes and Remedies of Privatization of PTCLJohn Abbas
 
Solutions Manual for Discrete Event System Simulation 5th Edition by Banks
Solutions Manual for Discrete Event System Simulation 5th Edition by BanksSolutions Manual for Discrete Event System Simulation 5th Edition by Banks
Solutions Manual for Discrete Event System Simulation 5th Edition by BanksLanaMcdaniel
 
PTCL Six Weeks Internship report
PTCL Six Weeks Internship reportPTCL Six Weeks Internship report
PTCL Six Weeks Internship reportArshad_Iqbal096
 

Mais procurados (7)

Acrobat document
Acrobat documentAcrobat document
Acrobat document
 
Mini centrifugal pump project.part 2
Mini centrifugal pump project.part 2Mini centrifugal pump project.part 2
Mini centrifugal pump project.part 2
 
Top 10 ramp interview questions with answers
Top 10 ramp interview questions with answersTop 10 ramp interview questions with answers
Top 10 ramp interview questions with answers
 
19212883 marketing-mix-of-ptcl
19212883 marketing-mix-of-ptcl19212883 marketing-mix-of-ptcl
19212883 marketing-mix-of-ptcl
 
Causes and Remedies of Privatization of PTCL
Causes and Remedies of Privatization of PTCLCauses and Remedies of Privatization of PTCL
Causes and Remedies of Privatization of PTCL
 
Solutions Manual for Discrete Event System Simulation 5th Edition by Banks
Solutions Manual for Discrete Event System Simulation 5th Edition by BanksSolutions Manual for Discrete Event System Simulation 5th Edition by Banks
Solutions Manual for Discrete Event System Simulation 5th Edition by Banks
 
PTCL Six Weeks Internship report
PTCL Six Weeks Internship reportPTCL Six Weeks Internship report
PTCL Six Weeks Internship report
 

Semelhante a Calcular Dias Úteis em Python

Problema de Programação Linear - IFS
Problema de Programação Linear - IFSProblema de Programação Linear - IFS
Problema de Programação Linear - IFSRenzo Petri
 
TEORIA GERAL DE SISTEMAS - Prototipo Controle Financeiro
TEORIA GERAL DE SISTEMAS - Prototipo Controle FinanceiroTEORIA GERAL DE SISTEMAS - Prototipo Controle Financeiro
TEORIA GERAL DE SISTEMAS - Prototipo Controle FinanceiroDiogo Rocha Ferreira de Menezes
 
Estruturas em C++ (struct)
Estruturas em C++ (struct)Estruturas em C++ (struct)
Estruturas em C++ (struct)Márcio Rizzatto
 
Zabbix Conference LatAm 2016 - Paulo Deolindo - Case Study_BBTS and Zabbix
Zabbix Conference LatAm 2016 - Paulo Deolindo - Case Study_BBTS and ZabbixZabbix Conference LatAm 2016 - Paulo Deolindo - Case Study_BBTS and Zabbix
Zabbix Conference LatAm 2016 - Paulo Deolindo - Case Study_BBTS and ZabbixZabbix
 
Gestão de Projetos e Empreendedorismo: SIN-NA7 (22/10/2013)
Gestão de Projetos e Empreendedorismo: SIN-NA7 (22/10/2013)Gestão de Projetos e Empreendedorismo: SIN-NA7 (22/10/2013)
Gestão de Projetos e Empreendedorismo: SIN-NA7 (22/10/2013)Alessandro Almeida
 
Máquina de cálculo Folha de Pagamento versão 11
Máquina de cálculo Folha de Pagamento versão 11Máquina de cálculo Folha de Pagamento versão 11
Máquina de cálculo Folha de Pagamento versão 11TOTVS Connect
 
Metodo do caminho_crtico_cpm
Metodo do caminho_crtico_cpmMetodo do caminho_crtico_cpm
Metodo do caminho_crtico_cpmDaniele Barreto
 
Intervalo Técnico - QG Mobile
Intervalo Técnico - QG MobileIntervalo Técnico - QG Mobile
Intervalo Técnico - QG MobileVitor Albuquerque
 
Resumo de matemática financeira
Resumo de matemática financeiraResumo de matemática financeira
Resumo de matemática financeiraresolvidos
 
Resumo de matemática financeira
Resumo de matemática financeiraResumo de matemática financeira
Resumo de matemática financeiraalbumina
 
Trabalho de Conclusão de Disciplina
Trabalho de Conclusão de DisciplinaTrabalho de Conclusão de Disciplina
Trabalho de Conclusão de DisciplinaJosé Alberto
 
Gestão dos prazos, custos e riscos em Gestão de Projetos
Gestão dos prazos, custos e riscos em Gestão de ProjetosGestão dos prazos, custos e riscos em Gestão de Projetos
Gestão dos prazos, custos e riscos em Gestão de ProjetosAntonio Marcos Montai Messias
 
Técnicas de Refactoring
Técnicas de RefactoringTécnicas de Refactoring
Técnicas de RefactoringRodrigo Branas
 

Semelhante a Calcular Dias Úteis em Python (20)

Problema de Programação Linear - IFS
Problema de Programação Linear - IFSProblema de Programação Linear - IFS
Problema de Programação Linear - IFS
 
Construção de Aplicação ETL para SICOP
Construção de Aplicação ETL para SICOPConstrução de Aplicação ETL para SICOP
Construção de Aplicação ETL para SICOP
 
TEORIA GERAL DE SISTEMAS - Prototipo Controle Financeiro
TEORIA GERAL DE SISTEMAS - Prototipo Controle FinanceiroTEORIA GERAL DE SISTEMAS - Prototipo Controle Financeiro
TEORIA GERAL DE SISTEMAS - Prototipo Controle Financeiro
 
Analise Bay Area Bike Sharing
Analise Bay Area Bike SharingAnalise Bay Area Bike Sharing
Analise Bay Area Bike Sharing
 
Estruturas em C++ (struct)
Estruturas em C++ (struct)Estruturas em C++ (struct)
Estruturas em C++ (struct)
 
Manual libreplan v.1.0 - Português - Brasil
Manual libreplan v.1.0 - Português - BrasilManual libreplan v.1.0 - Português - Brasil
Manual libreplan v.1.0 - Português - Brasil
 
Template bia
Template biaTemplate bia
Template bia
 
Zabbix Conference LatAm 2016 - Paulo Deolindo - Case Study_BBTS and Zabbix
Zabbix Conference LatAm 2016 - Paulo Deolindo - Case Study_BBTS and ZabbixZabbix Conference LatAm 2016 - Paulo Deolindo - Case Study_BBTS and Zabbix
Zabbix Conference LatAm 2016 - Paulo Deolindo - Case Study_BBTS and Zabbix
 
01 strategy
01 strategy01 strategy
01 strategy
 
Gestão de Projetos e Empreendedorismo: SIN-NA7 (22/10/2013)
Gestão de Projetos e Empreendedorismo: SIN-NA7 (22/10/2013)Gestão de Projetos e Empreendedorismo: SIN-NA7 (22/10/2013)
Gestão de Projetos e Empreendedorismo: SIN-NA7 (22/10/2013)
 
Máquina de cálculo Folha de Pagamento versão 11
Máquina de cálculo Folha de Pagamento versão 11Máquina de cálculo Folha de Pagamento versão 11
Máquina de cálculo Folha de Pagamento versão 11
 
Metodo do caminho_crtico_cpm
Metodo do caminho_crtico_cpmMetodo do caminho_crtico_cpm
Metodo do caminho_crtico_cpm
 
Intervalo Técnico - QG Mobile
Intervalo Técnico - QG MobileIntervalo Técnico - QG Mobile
Intervalo Técnico - QG Mobile
 
Agile Tour 2010
Agile Tour 2010Agile Tour 2010
Agile Tour 2010
 
Matemagica
MatemagicaMatemagica
Matemagica
 
Resumo de matemática financeira
Resumo de matemática financeiraResumo de matemática financeira
Resumo de matemática financeira
 
Resumo de matemática financeira
Resumo de matemática financeiraResumo de matemática financeira
Resumo de matemática financeira
 
Trabalho de Conclusão de Disciplina
Trabalho de Conclusão de DisciplinaTrabalho de Conclusão de Disciplina
Trabalho de Conclusão de Disciplina
 
Gestão dos prazos, custos e riscos em Gestão de Projetos
Gestão dos prazos, custos e riscos em Gestão de ProjetosGestão dos prazos, custos e riscos em Gestão de Projetos
Gestão dos prazos, custos e riscos em Gestão de Projetos
 
Técnicas de Refactoring
Técnicas de RefactoringTécnicas de Refactoring
Técnicas de Refactoring
 

Mais de Wilson Freitas

Finanças Quantitativas com python
Finanças Quantitativas com pythonFinanças Quantitativas com python
Finanças Quantitativas com pythonWilson Freitas
 
Análise dos campeões da Corrida de São Silvestre com Python
Análise dos campeões da Corrida de São Silvestre com PythonAnálise dos campeões da Corrida de São Silvestre com Python
Análise dos campeões da Corrida de São Silvestre com PythonWilson Freitas
 
APIs de Visualização em Python
APIs de Visualização em PythonAPIs de Visualização em Python
APIs de Visualização em PythonWilson Freitas
 
Um modelo de formação de preços para um mercado artificial com redes neurais ...
Um modelo de formação de preços para um mercado artificial com redes neurais ...Um modelo de formação de preços para um mercado artificial com redes neurais ...
Um modelo de formação de preços para um mercado artificial com redes neurais ...Wilson Freitas
 
Sobre o comportamento endógeno do mercado de ações: simulações e experimentos
Sobre o comportamento endógeno do mercado de ações: simulações e experimentosSobre o comportamento endógeno do mercado de ações: simulações e experimentos
Sobre o comportamento endógeno do mercado de ações: simulações e experimentosWilson Freitas
 
Apreçando Opções Utilizando a Função Característica
Apreçando Opções Utilizando a Função CaracterísticaApreçando Opções Utilizando a Função Característica
Apreçando Opções Utilizando a Função CaracterísticaWilson Freitas
 
Redes neurais em finanças
Redes neurais em finançasRedes neurais em finanças
Redes neurais em finançasWilson Freitas
 
Expansão em caos polinomial
Expansão em caos polinomialExpansão em caos polinomial
Expansão em caos polinomialWilson Freitas
 

Mais de Wilson Freitas (9)

Finanças Quantitativas com python
Finanças Quantitativas com pythonFinanças Quantitativas com python
Finanças Quantitativas com python
 
Análise dos campeões da Corrida de São Silvestre com Python
Análise dos campeões da Corrida de São Silvestre com PythonAnálise dos campeões da Corrida de São Silvestre com Python
Análise dos campeões da Corrida de São Silvestre com Python
 
APIs de Visualização em Python
APIs de Visualização em PythonAPIs de Visualização em Python
APIs de Visualização em Python
 
Um modelo de formação de preços para um mercado artificial com redes neurais ...
Um modelo de formação de preços para um mercado artificial com redes neurais ...Um modelo de formação de preços para um mercado artificial com redes neurais ...
Um modelo de formação de preços para um mercado artificial com redes neurais ...
 
Sobre o comportamento endógeno do mercado de ações: simulações e experimentos
Sobre o comportamento endógeno do mercado de ações: simulações e experimentosSobre o comportamento endógeno do mercado de ações: simulações e experimentos
Sobre o comportamento endógeno do mercado de ações: simulações e experimentos
 
Algoritmos Genéticos
Algoritmos GenéticosAlgoritmos Genéticos
Algoritmos Genéticos
 
Apreçando Opções Utilizando a Função Característica
Apreçando Opções Utilizando a Função CaracterísticaApreçando Opções Utilizando a Função Característica
Apreçando Opções Utilizando a Função Característica
 
Redes neurais em finanças
Redes neurais em finançasRedes neurais em finanças
Redes neurais em finanças
 
Expansão em caos polinomial
Expansão em caos polinomialExpansão em caos polinomial
Expansão em caos polinomial
 

Calcular Dias Úteis em Python

  • 1. : Dias Úteis em Qualquer Calendário Grupy-SP—julho/2015 Wilson Freitas bizdays (https://pypi.python.org/pypi/bizdays/v0.2.0) http://aboutwilson.net (http://aboutwilson.net) @aboutwilson (http://www.twitter.com/aboutwilson)
  • 2. Sobre mim Wilson Freitas quant físico corredor padeiro Background Sistemas Complexos Finanças Quantitativas Matemática Programação R, Python, MATLAB, C/C++
  • 3. Motivação O mercado financeiro brasileiro possui diversas particularidas que complicam a simples tarefa de calcular os preços dos ativos financeiros. liquidação de contratos de dólar com a cotação do dia anterior contratos com vencimento fixo ao contrário do resto do mundo que negocia prazos fixos regras absurdas para definição de vencimentos e ... vigência do contrato em dias úteis, para diferentes calendários entre outras Aqui vamos falar sobre como os desafios de lidar com dias úteis foram vencidos utilizando Python.
  • 4. Contagem de dias úteis No Brasil as taxas de juros são calculadas em dias úteis Herança do período inflacionário O problema é que com as taxas de juros apuradas em dias úteis força que todos os demais contratos sigam a mesma convenção: contratos futuros, títulos públicos, opções Diferentes mercados diferentes regras: Mercado de derivativos (antiga BM&F) possui um calendário de feriados Mercado de ações (antiga Bovespa) possui outro calendário Contratos de moedas utilizam dias corridos Problema: diferentes ativos precisam lidar com a contagem de dias de forma diferente
  • 5. Módulo python-bizdays História A contagem em dias foi desenvolvida para o módulo bizdaysnasceu em R em set/2013 Foi portado para Python em seguida Objetivos Objetivo 1: realizar operações com dias úteis! Objetivo 2: fazer uma coisa tão simples de usar quanto a função NETWORKDAYSdo Excel Objetivo 3: Poder lidar com mais de 1 calendário sem if python-fixedincome (https://github.com/wilsonfreitas/python-fixedincome)
  • 6. bizdays in action In [1]: frombizdaysimportCalendar holidays=['2015-01-01','2015-02-16','2015-02-17','2015-04-03','2015-04-21', '2015-05-01','2015-06-04','2015-09-07','2015-10-12','2015-11-02', '2015-11-15','2015-12-25','2016-01-01'] cal=Calendar(holidays=holidays,weekdays=['Sunday','Saturday']) In [2]: # Dia do Trabalho é dia útil? cal.isbizday('2015-05-01') Out[2]: False In [3]: # 12/07/2015 (domingo) é dia útil? cal.isbizday('2015-07-12') Out[3]: False In [4]: # 03/08/2015 (sengunda-feira) é dia útil? cal.isbizday('2015-08-03') Out[4]: True
  • 7. In [5]: # Quantidade de dias úteis no ano: cal.bizdays('2015-01-01','2015-12-31') Out[5]: 249 In [6]: # Quantidade de dias úteis até hoje: cal.bizdays('2015-01-01','2015-07-16') Out[6]: 133 In [7]: # Todos os dias úteis em um período, pex primeira quinzena de abril list(cal.seq('2015-04-01','2015-04-15')) Out[7]: [datetime.date(2015, 4, 1), datetime.date(2015, 4, 2), datetime.date(2015, 4, 6), datetime.date(2015, 4, 7), datetime.date(2015, 4, 8), datetime.date(2015, 4, 9), datetime.date(2015, 4, 10), datetime.date(2015, 4, 13), datetime.date(2015, 4, 14), datetime.date(2015, 4, 15)]
  • 8. Cálculo de preços de ativos financeiros Os ativos financeiros tem data de vencimento fixa Contratos Futuros de taxas de juros (DI1) expiram no dia 01 do mês de vencimento Use adjust_next(ou adjust_previous) In [8]: refdate='2015-03-12' maturity='2015-05-01' In [9]: cal.bizdays(refdate,maturity) Out[9]: 33 In [10]: cal.adjust_next(maturity) Out[10]: datetime.date(2015, 5, 4) In [11]: cal.bizdays(refdate,cal.adjust_next(maturity)) Out[11]: 34
  • 9. Também trabalha com vetores de datas (atributo vec:/) In [12]: refdate='2015-03-12' maturities=['2015-05-01','2015-06-01','2015-08-01'] In [13]: list(cal.vec.adjust_next(maturities)) Out[13]: [datetime.date(2015, 5, 4), datetime.date(2015, 6, 1), datetime.date(2015, 8, 3)] In [14]: list(cal.vec.bizdays(refdate,list(cal.vec.adjust_next(maturities)))) Out[14]: [34, 54, 98]
  • 10. Manipulando curvas de taxas de juros In [15]: importpandasaspd Carregando um calendário em um arquivo In [16]: !head -6 ANBIMA.cal Saturday Sunday 2000-01-01 2000-03-06 2000-03-07 2000-04-21 In [17]: cal252=Calendar.load('ANBIMA.cal') cal360=Calendar()
  • 11. Carregando taxas de juros divulgadas pela BM&FBovespa In [18]: url='http://www2.bmf.com.br/pages/portal/bmfbovespa/boletim1/TxRef1.asp' dfs=pd.read_html(url) curva=dfs[2].ix[2:] curva.columns=['DC','Taxa_252','Taxa_360'] curva.index=range(1,len(curva)+1) curva.dtypes Out[18]: DC object Taxa_252 object Taxa_360 float64 dtype: object In [19]: curva.head() Out[19]: DC Taxa_252 Taxa_360 1 1 1364 1340 2 8 1368 1472 3 15 1368 1438 4 16 1368 1473 5 19 1368 1335
  • 12. Separando as curvas Criar 2 curvas uma de taxas em dias corridos e outra em dias úteis. In [20]: curva360=pd.DataFrame({'DC':curva['DC'].apply(int), 'Taxa_360':curva['Taxa_252'].apply(lambdax:float(x)/100)}) curva360.head(3) Out[20]: DC Taxa_360 1 1 13.64 2 8 13.68 3 15 13.68 In [21]: refdate='2015-07-15' dates=list(cal360.vec.offset(refdate,curva360['DC'])) curva252=pd.DataFrame({'DU':list(cal252.vec.bizdays(refdate,dates)), 'Taxa_252':curva['Taxa_252'].apply(lambdax:float(x)/100)}) curva252.head(3) Out[21]: DU Taxa_252 1 1 13.64 2 6 13.68 3 11 13.68
  • 13. Definindo vencimentos dos contratos Maioria dos contratos futuros Vencimento no primeiro dia de cada mês In [22]: cal.getdate('first day',2015,1) Out[22]: datetime.date(2015, 1, 1) In [23]: cal.getdate('1st day',2015,5) Out[23]: datetime.date(2015, 5, 1) Contratos futuros de inflação Vencimento do dia 15 de cada mês In [24]: cal.getdate('15th day',2015,7) Out[24]: datetime.date(2015, 7, 15)
  • 14. Contratos futuros de soja Vencimento nos segundos dias úteis In [25]: cal.getdate('2nd bizday',2015,5) Out[25]: datetime.date(2015, 5, 5) Contratos futuros de boi gordo Vencimento no último dia útil do mês In [26]: cal.getdate('last bizday',2015,5) Out[26]: datetime.date(2015, 5, 29)
  • 15. Contratos futuros de café Vencimento do sexto dia útil anterior ao último dia do mês In [27]: cal.getdate('6th bizday before last day',2015,7) Out[27]: datetime.date(2015, 7, 23) Contratos futuros de índice (IBOVESPA) Vencimento na quarta-feira mais próxima do dia 15 do mês In [28]: cal.getdate('first wed after 15th day',2015,6) Out[28]: datetime.date(2015, 6, 17) In [29]: cal.getdate('first wed before 15th day',2015,6) Out[29]: datetime.date(2015, 6, 10)
  • 16. Wilson Freitas — http://blog.aboutwilson.net/ (http://blog.aboutwilson.net/) github (https://github.com/wilsonfreitas) @aboutwilson (http://www.twitter.com/aboutwilson)