|
Post by palata on Nov 26, 2016 7:44:52 GMT -3.5
então galera, queria algo mais consistente, tipo um arquivo com essas informações, nesses links terei que todo dia entrar em cada página de cada empresa. A bovespa por exemplo disponibiliza diariamente um arquivo com as cotações de todas as empresas, queria algo do tipo, e não entrar em uma a uma. Aqui vai um código de macro em VBA para o Access para importar o arquivo de cotações históricas da Bovespa, crie as 3 tabelas necessárias de acordo com o layout informado no site da bovespa (http://www.bmfbovespa.com.br/pt_br/servicos/market-data/historico/mercado-a-vista/cotacoes-historicas/): Public Function IMPORTA_ARQUIVO_DE_COTACOES_HISTORICAS(Optional arq)
'************************************************************************************************
'************************************************************************************************
'*
'*
'************************************************************************************************
'************************************************************************************************
Dim Linha, aux, cont
Dim dbs As Database
Dim Registro00 As Recordset
Dim Registro01 As Recordset
Dim Registro99 As Recordset
Dim AUX_TIPREG
Dim AUX_DATA_DO_PREGÃO
Dim AUX_CODBDI
Dim AUX_CODNEG
Dim AUX_TPMERC
Dim AUX_PRAZOT
'**********************************************************************************
'*
'**********************************************************************************
On Error Resume Next
If IsMissing(arq) Then
arq = InputBox("Arquivo:")
If Not FileOK(arq) Then
MsgBox ("ARQUIVO NÃO ENCONTRADO !")
Exit Function
End If
End If
cont = 0
Set dbs = CurrentDb
Set Registro00 = dbs.OpenRecordset("REGISTRO_00", dbOpenTable)
Set Registro01 = dbs.OpenRecordset("REGISTRO_01", dbOpenTable)
Registro01.Index = "XAVE"
Set Registro99 = dbs.OpenRecordset("REGISTRO_99", dbOpenTable)
Open arq For Input As #1
Do While (Not EOF(1))
Line Input #1, Linha
Select Case Mid(Linha, 1, 2)
Case "00" 'header
With Registro00
.AddNew
!TIPO_DE_REGISTRO = posi(Linha, 1, 2)
!NOME_DO_ARQUIVO = posi(Linha, 3, 15)
!CÓDIGO_DA_ORIGEM = posi(Linha, 16, 23)
!DATA_DA_GERAÇÃO_DO_ARQUIVO = posi(Linha, 24, 31)
.Update
cont = cont + 1
End With
Case "01" 'cotação
'chave primária
AUX_TIPREG = posi(Linha, 1, 2)
AUX_DATA_DO_PREGÃO = posi(Linha, 3, 10)
AUX_CODBDI = posi(Linha, 11, 12)
AUX_CODNEG = posi(Linha, 13, 24)
AUX_TPMERC = posi(Linha, 25, 27)
AUX_PRAZOT = posi(Linha, 50, 52)
Registro01.Seek "=", AUX_TIPREG, AUX_DATA_DO_PREGÃO, AUX_CODBDI, AUX_CODNEG, AUX_TPMERC, AUX_PRAZOT
If Registro01.NoMatch Then 'NAO ACHOU
With Registro01
.AddNew
!TIPREG = posi(Linha, 1, 2)
!DATA_DO_PREGÃO = posi(Linha, 3, 10)
!CODBDI = posi(Linha, 11, 12)
!codNeg = AllTrim(posi(Linha, 13, 24))
!TPMERC = posi(Linha, 25, 27)
!NOMRES = AllTrim(posi(Linha, 28, 39))
!ESPECI = DeixaSoUmBranco(posi(Linha, 40, 49))
!PRAZOT = posi(Linha, 50, 52)
!MODREF = posi(Linha, 53, 56)
!PREABE = CDbl(posi(Linha, 57, 69)) / 100
!PREMAX = CDbl(posi(Linha, 70, 82)) / 100
!PREMIN = CDbl(posi(Linha, 83, 95)) / 100
!PREMED = CDbl(posi(Linha, 96, 108)) / 100
!PreUlt = CDbl(posi(Linha, 109, 121)) / 100
!PREOFC = CDbl(posi(Linha, 122, 134)) / 100
!PREOFV = CDbl(posi(Linha, 135, 147)) / 100
!TOTNEG = CSng(posi(Linha, 148, 152))
!QUATOT = CSng(posi(Linha, 153, 170))
!VOLTOT = CDbl(posi(Linha, 171, 188)) / 100
!PREEXE = CDbl(posi(Linha, 189, 201)) / 100
!INDOPC = posi(Linha, 202, 202)
!DATVEN = posi(Linha, 203, 210)
!FATCOT = CSng(posi(Linha, 211, 217))
!PTOEXE = CDbl(posi(Linha, 218, 230)) / 1000000
!CODISI = posi(Linha, 231, 242)
!DISMES = posi(Linha, 243, 245)
!datapreg = InvData(posi(Linha, 3, 10))
!FISCALWEEK = GetFwExt(CDate(InvData(posi(Linha, 3, 10))))
!FISCALWEEKANT = DecFW(GetFwExt(CDate(InvData(posi(Linha, 3, 10)))))
!OSCIL_PREGAO = (CDbl(posi(Linha, 109, 121)) / 100) - (CDbl(posi(Linha, 57, 69)) / 100)
.Update
cont = cont + 1
End With
End If
Case "99" 'trailer
With Registro99
.AddNew
!TIPO_DE_REGISTRO = posi(Linha, 1, 2)
!NOME_DO_ARQUIVO = posi(Linha, 3, 15)
!CÓDIGO_DA_ORIGEM = posi(Linha, 16, 23)
!TOTAL_DE_REGISTROS = CSng(posi(Linha, 32, 42))
.Update
cont = cont + 1
End With
End Select
Loop
Close #1
Registro00.Close
Registro01.Close
Registro99.Close
dbs.Close
If IsMissing(arq) Then
MsgBox "FIM COTAÇÕES HISTÓRICAS - reg importados:" & Str(cont)
Else
Debug.Print "FIM COTAÇÕES HISTÓRICAS - reg importados:" & Str(cont)
End If
End Functionobrigado, mas como eu disse eu queria algo parecido com isso mas para os proventos, desdobramentos e afins.
|
|
Potuz
New Member
Posts: 3,392
|
Post by Potuz on Nov 30, 2016 17:15:49 GMT -3.5
Gente é com orgulho que estou anunciando o primeiro release do denet. Podem encontrar instruções assim como binários para Windows 64bit e Linux Debian/Ubuntu na página github.com/potuz/denet/releases Agradeço qualquer retorno que puderem ter. Especialmente aqueles que queiram ajudar no projeto open source, podem por exemplo seguir o projeto com watch em githubOs binários foram pouco testados: em Windows 7 64bit (não funcionarão em Windows 32bits). E em Debian testing. Depois que eu receber algum comentário por aqui e se os programas pelo menos funcionam basicamente, então vou procurar ajuda em outros foros. Eu considero que termos uma plataforma de acesso open source á informação das companhias na CVM é um paso importante para a comunidade de investidores PF. Como ajudar- Como vocês sabem, a minha linguagem não é o português, traduções dos textos beneficiariam.
- Testar o programa em geral, controlar os números reportados, os gráficos e as escalas.
- Eu não posso levar conta de fazer binários do programa e programar o código ao mesmo tempo, se alguém é voluntário a se responsabilizar por alguma plataforma (ARM, Windows, Mac OS X, Linux, etc) eu agradeço
- Código em geral é bem-vindo, façam um fork de github e logo um pull-request
|
|
Potuz
New Member
Posts: 3,392
|
Post by Potuz on Dec 1, 2016 9:09:07 GMT -3.5
Gente é com orgulho que estou anunciando o primeiro release do denet. Podem encontrar instruções assim como binários para Windows 64bit e Linux Debian/Ubuntu na página github.com/potuz/denet/releases Agradeço qualquer retorno que puderem ter. Especialmente aqueles que queiram ajudar no projeto open source, podem por exemplo seguir o projeto com watch em githubOs binários foram pouco testados: em Windows 7 64bit (não funcionarão em Windows 32bits). E em Debian testing. Depois que eu receber algum comentário por aqui e se os programas pelo menos funcionam basicamente, então vou procurar ajuda em outros foros. Eu considero que termos uma plataforma de acesso open source á informação das companhias na CVM é um paso importante para a comunidade de investidores PF. Como ajudar- Como vocês sabem, a minha linguagem não é o português, traduções dos textos beneficiariam.
- Testar o programa em geral, controlar os números reportados, os gráficos e as escalas.
- Eu não posso levar conta de fazer binários do programa e programar o código ao mesmo tempo, se alguém é voluntário a se responsabilizar por alguma plataforma (ARM, Windows, Mac OS X, Linux, etc) eu agradeço
- Código em geral é bem-vindo, façam um fork de github e logo um pull-request
O resultado parece ter ficado ótimo pelas imagens que postou! Pelo visto, você fez alterações significativas como mysql e qt. Aqui no Ubuntu do trabalho estou tendo problemas para instalar por conta de "libmysqlcppconn7v5 depende de libstdc++6 (>= 5.2)". Isso é o que dá não usar a última versão da distro :-) O Qt5.7 completo acharia mais complicado, o cppconnector pode tentar instalando um mais velho que deve funcionar igual (mas vai ter que mudar o .deb)
|
|
Potuz
New Member
Posts: 3,392
|
Post by Potuz on Dec 8, 2016 15:33:21 GMT -3.5
O resultado parece ter ficado ótimo pelas imagens que postou! Pelo visto, você fez alterações significativas como mysql e qt. Aqui no Ubuntu do trabalho estou tendo problemas para instalar por conta de "libmysqlcppconn7v5 depende de libstdc++6 (>= 5.2)". Isso é o que dá não usar a última versão da distro :-) rufuslenhador, atualizei o release com um pacote específico para Ubuntu 16.04 e instruções para instalar Qt5.7, esta versão de Ubuntu está muito atrasada com respeito a Gentoo ou Debian então o Pacote é muito básico (precisa que o Qt esteja instalado num diretorio específico e ignora certos warnings). Mesmo assim, agradeceria se puder confirmar que funciona no seu box e que pode testar o produto. Abraços, P.
|
|
Potuz
New Member
Posts: 3,392
|
Post by Potuz on Dec 8, 2016 18:49:38 GMT -3.5
rufuslenhador , atualizei o release com um pacote específico para Ubuntu 16.04 e instruções para instalar Qt5.7, esta versão de Ubuntu está muito atrasada com respeito a Gentoo ou Debian então o Pacote é muito básico (precisa que o Qt esteja instalado num diretorio específico e ignora certos warnings). Mesmo assim, agradeceria se puder confirmar que funciona no seu box e que pode testar o produto. Abraços, P. Acredito que o do trabalho seja o 14.04, mas posso testar. Você teria instruções de como compilar no Arch? Para compilar é a mesma coisa em todos: cmake && make && make install A questão são os pacotes, e não, o problema em Ubuntu é mesmo com 16.04, passei o dia todo para poder instalar (instalei Ubuntu e logo o denet nele). Já 14.04 não vou fazer Posso fazer um pacote para Arch se quiser, mas na realidade Arch é um sistema sério acredito que se você instalar dpkg em Arch pode simplesmente instalar o pacote de debian.
|
|
|
Post by lvitor on Dec 26, 2016 6:14:39 GMT -3.5
Potuz, Primeiro gostaria de agradecer muito sua iniciativa. Parabéns! Estou usando principalmente os Cvmfetch e denet e acessando o banco de dados diretamente de uma ferramenta chamada R para analise estatística. Acredito que encontrei um erro na hora da importação. A "QuantidadeTotalAcaoCapitalIntegralizado" para algumas empresas encontra-se com valor NEGATIVO ou 0. O que é impossível. Essas empresas: BBAS3, JBSS3 , TIMP3, VSPT3 tiveram problemas em TODOS os 24 resultados importados (dez/12 até set/16). Se eu puder contribuir no desenvolvimento do software, conte comigo.! Abraços.
|
|
Potuz
New Member
Posts: 3,392
|
Post by Potuz on Dec 27, 2016 6:22:40 GMT -3.5
Potuz, Primeiro gostaria de agradecer muito sua iniciativa. Parabéns! Estou usando principalmente os Cvmfetch e denet e acessando o banco de dados diretamente de uma ferramenta chamada R para analise estatística. Acredito que encontrei um erro na hora da importação. A "QuantidadeTotalAcaoCapitalIntegralizado" para algumas empresas encontra-se com valor NEGATIVO ou 0. O que é impossível. Essas empresas: BBAS3, JBSS3 , TIMP3, VSPT3 tiveram problemas em TODOS os 24 resultados importados (dez/12 até set/16). Se eu puder contribuir no desenvolvimento do software, conte comigo.! Abraços. Olá lvitor, muito obrigado pelo reporte. Se não for muito problema poderia abrir um "issue" na página do projeto em github: www.github.com/potuz/denet assim quando eu tiver tempo posso dar uma olhada. Porém estou muito surpreso com este erro. De fato este é um erro do programa e é devido ao formato utilizado para guardar valores em mysql. Utilizei INT quando devia ter utilizado BIGINT. Qualquer empresa com mais de 2147483648 ações ocasionará esse erro. Muito obrigado por reportar o problema, por favor abre o issue para eu poder trabalhar na solução assim que tiver um minuto livre.
|
|
|
Post by lvitor on Dec 27, 2016 9:12:25 GMT -3.5
PotuzJá abri o "issue" na pagina. Como te disse apoio a sua iniciativa e vou testar ainda mais o programa. Abraços.
|
|
Potuz
New Member
Posts: 3,392
|
Post by Potuz on Dec 27, 2016 11:24:16 GMT -3.5
|
|
|
Post by lvitor on Dec 28, 2016 21:06:43 GMT -3.5
Potuz, Cara, estou tentando compilar seus código fontes e não estou conseguindo no Windows. Voce pode me ajudar? Como devo incluir as bibliotecas Libarchive, libcurl e pugixml ? Obrigado.
|
|
Potuz
New Member
Posts: 3,392
|
Post by Potuz on Dec 29, 2016 13:05:19 GMT -3.5
Potuz, Cara, estou tentando compilar seus código fontes e não estou conseguindo no Windows. Voce pode me ajudar? Como devo incluir as bibliotecas Libarchive, libcurl e pugixml ? Obrigado. Oi lvitor, está sozinho nessa, eu disponibilizei executables para Windows no github, levei muito tempo para poder compilar eu mesmo pois nunca tinha utilizado Windows (desde o WIN 3.1 foi a última vez que utilizei). Se você está utilizando WIN 7 o executable do github deve funcionar diretamente. Caso contrário vai ter que compilar. Libarchive e curl você tem que instalar por conta propria. PugiXml está incluido no pacote fonte e não precisa incluir. Eu estou com pouco tempo então fazer um manual de compilação em Windows ficou último na minha lista de prioridades. Espero alguém o faça. Se serve de informação, o CMakeLists.txt incluido e as instruções indicadas no release em github devem funcionar com Windows 7 e com Visual Studio 2015. Abraços e boa sorte. EDIT: Vejo que você me procurou no IRC, isso realmente é melhor para eu te poder ajudar, porém eu não estou todo o tempo (e menos agora que estou de férias), mas se você me enviar um email ou simplesmente esperar lá, eu eventualmente apareço.
|
|
|
Post by lvitor on Jan 20, 2017 11:16:54 GMT -3.5
PotuzOlá cara! Rapaz, depois de conhece seu programa, e utilizar a base de cadastro de ticket do banco de dados do denet. Desenvolvi um negócio, que para mim sempre foi uma dor de cabeça e gostaria de compartilhar para ajudar mais pessoas. Sempre tive dificuldade de monitorar notícias das empresas da bolsa (apenas em 3 aspectos principais, distribuição de resultado, divulgação de resultado e/ou comunicado relevante para acionistas) e acessar isso tempo real que era divulgado a mercado. Consegui criar um canal no telegram @ spolierbovespa que monitora 381 empresas a cada 30 minutos sobre qualquer comunicado e envia uma mensagem com o link do comunicado já anexado a mensagem. Para gente que não pode pagar 2000 dólares por um terminal da bloomberg acho que ajuda. Abraços.
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Mar 3, 2017 15:36:58 GMT -3.5
Potuz, chegou a verificar que de 2010 para baixo o formato dos arquivos retornados pelo site da CVM é completamente outro ? Conseguiu tratar esse problema ?
|
|
Potuz
New Member
Posts: 3,392
|
Post by Potuz on Mar 3, 2017 17:27:17 GMT -3.5
Potuz, chegou a verificar que de 2010 para baixo o formato dos arquivos retornados pelo site da CVM é completamente outro ? Conseguiu tratar esse problema ? Eu só posso processar com meu software arquivos xml que estejam formatados para o programa ENET da CVM. Se não lembro esses são arquivos desde 2009 (pode ser 2010, achava que era 09). Sería muito trabalho para mim agregar um parser dos .doc velhos.
|
|
Deleted
Deleted Member
Posts: 0
|
Post by Deleted on Mar 3, 2017 17:48:25 GMT -3.5
Potuz, chegou a verificar que de 2010 para baixo o formato dos arquivos retornados pelo site da CVM é completamente outro ? Conseguiu tratar esse problema ? Eu só posso processar com meu software arquivos xml que estejam formatados para o programa ENET da CVM. Se não lembro esses são arquivos desde 2009 (pode ser 2010, achava que era 09). Sería muito trabalho para mim agregar um parser dos .doc velhos. É verdade, o pior é que até no exercício de 2011 vc ainda encontra alguns arquivos no padrão antigo, mas o que desanima mesmo é pensar que a CVM pode mudar esse padrão mais uma vez e perdermos tanto esforço de desenvolvimento, fiz o meu próprio programa que baixa para o access e depois joga para o SQL Server mas não sei se vou ter ânimo para construir outra solução para importar esses arquivos antigos, vou pensar se é possível fazer algum conversor, se conseguir algo posto aqui.
|
|
|
Post by xalperte on Feb 26, 2019 5:27:44 GMT -3.5
Prezados, Meu nome é Xavi, sou catalão e estou realizando meu projeto de final de master em Ciência de Dados. Escolhi como projeto desenvolver um sistema que permita identificar/selecionar Stocks da Bovespa e determinar o momento do lançamento de ordens de compra/venda usando técnicas de Machine Learning. Esse thread de conversação tem me ajudado muito a entender a estrutura e conteúdo dos arquivos ITR e DRF. Muito obrigado Potuz pelo seu grande trabalho com "denet". Agora mesmo estou desenvolvendo um crawler para poder obter - de maneira automática - todas as informações financeiras das empresas, valores históricos das títulos negociados presentes e passados, informações de mercado, mas estou me encontrando com algumas dúvidas o impedimentos que igual vocês conseguem me aclarar. Meu crawler rastreia todos os arquivos ITR/DRF das empresas que operam o já operaram na Bovespa, muitas delas estão CANCELADAS. As questões são as seguintes: - Não estou encontrando informação sobre o sector da empresa. Vi que existe um "CodigoSetorAtividadeEmpresa" dentro do arquivo "FormularioCadastral.xml" dos ITR/DRF mas ele tem sempre um 0. Onde eu consigo essa informação de forma automática? No projeto "denet" vi que existe um arquivo "data/companies.csv", esse arquivo foi gerado automaticamente? como?. Preciso desse dados para poder classificar automaticamente as stocks na fase de modelagem, assim como também acrescentar com dados de mercado. - Também não sei como obter automaticamente os Symbols/Tickers com os que a empresa opera ou operava no passado. Preciso da informação para poder obter detalhes históricos das cotizações dos valores. Vi no projeto "denet" que existe um arquivo "data/tickers.csv", esse arquivo foi gerado automaticamente? como? - Para obter os valores históricos dos preços das ações estou usando o serviço de Investopedia. Vocês recomendam algum outro? Eu percebi que cada serviço gera uns valores bastante diferentes do "Adj Close", é isso normal? Sei que o "Adj Close" é gerado a partir dos dividendos e splits que acontecem na vida das empresas, mas achei que a fórmula é fixa. Para obter os dados usando o serviço da Investopedia eu faço requisições do estilo seguinte: www.investopedia.com/markets/api/partial/historical/?Symbol=LAME4.SA&Type=%20Historical+Prices&Timeframe=Daily&StartDate=Nov+28%2C+2017&EndDate=Dec+05%2C+2017- Onde eu posso obter automaticamente informações sobre o mercado? Classificação standard GICS, Market Capt dos sectores, Valores dos índices de cada sector, etc. Muito obrigado! Xavi
|
|
|
Post by Claudio66 on Feb 26, 2019 9:40:07 GMT -3.5
Você pode utilizar os dados do finance.yahoo.com. (Nesse vínculo, por exemplo, você tem acesso ao histórico de GFSA3: finance.yahoo.com/quote/GFSA3.SA/history?p=GFSA3.SA&.tsrc=fin-srch). É fácil encontrar scripts em Python ou R para fazer a captura automática dos dados. Os preços ajustados podem ser diferentes em função da base considerada a partir da qual são aplicados os ajustes. Numa mesma fonte, extraindo os dados em datas diferentes, os preços podem mudar, pela mudança da base. O importante é que os retornos sejam os mesmos, quando feitos os mesmos ajustes (que pode ser qualquer combinação de dividendos, splits/grupamentos e bonificações). Mesmo considerando os mesmos ajustes eu, com frequência, encontro diferença nos retornos ajustados entre diferentes bases de dados (Thomson, Economática, ComDinheiro, finance.yahoo, etc.) Acho que é um problema com o qual é preciso conviver, buscando corrigir os dados com elevada influência em análises de regressão.
|
|
Potuz
New Member
Posts: 3,392
|
Post by Potuz on Feb 26, 2019 10:32:57 GMT -3.5
Olá Xavi, continuando por aqui: Prezados, - Não estou encontrando informação sobre o sector da empresa. Vi que existe um "CodigoSetorAtividadeEmpresa" dentro do arquivo "FormularioCadastral.xml" dos ITR/DRF mas ele tem sempre um 0. Onde eu consigo essa informação de forma automática? Tenta o formulario cadastral da CVM, não o formulario cadastral que vem dentro dos ITR/DFP. Esse normalmente vem zerado, as comanhias devem apresentar um FC todo ano o código do setor está ali. Esses dados foram tirados dos arquivos da CVM que já mencionei, porém não tem nenhum arquivo que ao mesmo tempo tenha o código da CVM e o ticker negociado. Isto foi gerado pelo rufuslenhador com um crawler javascript se não me engano, no site da CVM.
|
|
Potuz
New Member
Posts: 3,392
|
Post by Potuz on Feb 26, 2019 14:55:36 GMT -3.5
Isto foi gerado pelo rufuslenhador com um crawler javascript se não me engano, no site da CVM. Deve ter sido Python ou Ruby. Eu não disponibilizei em alguma postagem? De qualquer forma, isso tem vários anos e o site da Bovespa já mudou completamente. Não serviria mais. Não lembro você ter postado o script. Só recebi a lista de tickers com os códigos correspondentes da CVM no e-mail. De todo jeito isto é um pouco mais do que o Xavi quer, ele precisa ter a lista de tickers só, para os tickers que atualmente são negociados, a B3 disponibiliza num arquivo. Já os históricos eu não sei como fazer sem primeiro pegar todos os códigos da CVM (disponibilizados na CVM) e logo fazer um crawl na B3 que procure por tickers negociados para cada um desses códigos.
|
|
|
Post by xalperte on Mar 3, 2019 6:00:42 GMT -3.5
Você pode utilizar os dados do finance.yahoo.com. (Nesse vínculo, por exemplo, você tem acesso ao histórico de GFSA3: finance.yahoo.com/quote/GFSA3.SA/history?p=GFSA3.SA&.tsrc=fin-srch). É fácil encontrar scripts em Python ou R para fazer a captura automática dos dados. Os preços ajustados podem ser diferentes em função da base considerada a partir da qual são aplicados os ajustes. Numa mesma fonte, extraindo os dados em datas diferentes, os preços podem mudar, pela mudança da base. O importante é que os retornos sejam os mesmos, quando feitos os mesmos ajustes (que pode ser qualquer combinação de dividendos, splits/grupamentos e bonificações). Mesmo considerando os mesmos ajustes eu, com frequência, encontro diferença nos retornos ajustados entre diferentes bases de dados (Thomson, Economática, ComDinheiro, finance.yahoo, etc.) Acho que é um problema com o qual é preciso conviver, buscando corrigir os dados com elevada influência em análises de regressão. Muito obrigado pelas explicações. Agora fica mais claro o porque dessas diferenças. Para obter os dados do finance.yahoo.com encontrei essa libraria de Python: pypi.org/project/yahoo-finance/. Acho que vou usar mesmo.
|
|