Skip to content

Instantly share code, notes, and snippets.

@jonaslsl
Last active August 25, 2023 00:59
Show Gist options
  • Save jonaslsl/4d78e636101c53f7041d to your computer and use it in GitHub Desktop.
Save jonaslsl/4d78e636101c53f7041d to your computer and use it in GitHub Desktop.
Conversor BDI Bovespa em script AWK
#!/usr/bin/awk -f
#Autor: Jonas Scherer
#Data: Jan/2016
#Uso: ./conversor_bdi.awk COTAHIST_A2015.TXT
#Detalhes: Conversor do formato de cotacoes historicas disponiveis no site da Bovespa.
#O conversor podera ser usado para exportar os dados para excel para serem trabalhados de uma forma mais simples.
#Util para quem faz day-trades e deseja criar seus proprios dashboards ou fazer backtests.
#OBS: Remover a primeira e ultima linha para remover o cabecalho e o rodape que vem da Bovespa
#O script esta filtrando CODBDI 01 (LOTE PADRAO) e o TIPO DE MERCADO 01 (VISTA)
#Link Cotacoess historicas: http://www.bmfbovespa.com.br/pt-br/cotacoes-historicas/FormSeriesHistoricasArq.asp
#Link Layout de dados das cotacoes Bovespa: http://www.bmfbovespa.com.br/pt-br/download/SeriesHistoricas_Layout.pdf
BEGIN{
#HEADER
print("TIPREG;DATA;CODBDI;CODNEG;TPMERC;NOMRES;ESPECI;PRAZOT;MODREF;PREABRE;PREMAX;PREMIN;PREMED;PREULT;PREOFC;PREOFV;TOTNET;QUATOT;VOLTOT;PREEXE;INDOPC ;DATVEN;FATCOT;PTOEXE;CODISI;DISMES");
while(( getline l < ARGV[1]) > 0 ) {
#print l
CODBDI = substr(l,11,2);
TPMERC = substr(l,25,2);
if(CODBDI ~ "02" && TPMERC ~ "01"){
#VARS
TIPREG = substr(l,1,2)
DATA = substr(l,3,4)"-"substr(l,7,2)"-"substr(l,9,2);
CODNEG = substr(l,13,12);
NOMRES = substr(l,28,12);
ESPECI = substr(l,40,10);
PRAZOT = substr(l,50,3);
MODREF = substr(l,53,4);
PREAB = substr(l,57,11)","substr(l,68,2);
PREMAX = substr(l,70,11)","substr(l,81,2);
PREMIN = substr(l,83,11)","substr(l,94,2);
PREMED = substr(l,96,11)","substr(l,107,2);
PREULT = substr(l,109,11)","substr(l,120,2);
PREOFC = substr(l,122,11)","substr(l,133,2);
PREOFV = substr(l,135,11)","substr(l,146,2);
TOTNET = substr(l,148,5);
QUATOT = substr(l,153,18);
VOLTOT = substr(l,171,18);
PREEXE = substr(l,189,13);
INDOPC = substr(l,202,1);
DATVEN = substr(l,203,8);
FATCOT = substr(l,211,7);
PTOEXE = substr(l,218,13);
CODISI = substr(l,231,12);
DISMES = substr(l,243,3);
#VALIDATION
#print TIPREG;
#print DATA;
#print CODBDI;
#print CODNEG;
#print TPMERC;
#print NOMRES;
#print ESPECI;
#print PRAZOT;
#print MODREF;
#print PREAB;
#print PREMAX;
#print PREMIN;
#print PREMED;
#print PREULT;
#print PREOFC;
#print PREOFV;
#print TOTNET;
#print QUATOT;
#print VOLTOT;
#print PREEXE;
#print INDOPC;
#print DATVEN;
#print FATCOT;
#print PTOEXE;
#print CODISI;
#print DISMES;
#ALL FIELDS
#print (TIPREG ";" DATA ";" CODBDI ";" CODNEG ";" TPMERC ";" NOMRES ";" ESPECI ";" PRAZOT ";" MODREF ";" PREAB ";" PREMAX ";" PREMIN ";" PREMED ";" PREULT ";" PREOFC ";" PREOFV ";" TOTNET ";" QUATOT ";" VOLTOT ";" PREEXE ";" INDOPC ";" DATVEN ";" FATCOT ";" PTOEXE ";" CODISI ";" DISMES)
#AMIBROKER IMPORT
print( CODNEG ";" DATA ";" PREAB ";" PREMAX ";" PREMIN ";" PREULT ";" QUATOT)
#OLD
#print( substr(l,0,2) ";" substr(l,3,4)"-"substr(l,7,2)"-"substr(l,9,2) ";" substr(l,11,2) ";" substr(l,13,11) ";" substr(l,25,2) ";" substr(l,28,11) ";" substr(l,40,9) ";" substr(l,50,2) ";" substr(l,53,3) ";" substr(l,57,10)","substr(l,67,2) ";" substr(l,70,10)","substr(l,80,2) ";" substr(l,83,10)","substr(l,93,2) ";" substr(l,96,10)","substr(l,106,2) ";" substr(l,109,10)","substr(l,119,2) ";" substr(l,122,10)","substr(l,132,2) ";" substr(l,135,10)","substr(l,145,2) ";" substr(l,148,4) ";" substr(l,153,17) ";" substr(l,171,17) ";" substr(l,189,12) ";" substr(l,202,1) ";" substr(l,203,7) ";" substr(l,211,6) ";" substr(l,218,12) ";" substr(l,231,11) ";" substr(l,243,2) )
}
}
}
@Betosdns
Copy link

Ola, como faço para usar esse conversor de BDI no windows ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment