Inicializando seu banco de dados intraday do Amibroker usando as séries históricas da ADVFN

No ultimo post falei um pouco sobre o uso do par Amibroker+ADVFN para geração de gráficos intraday, a pergunta que sempre recebo quando abordo este tema é como conseguir um banco de dados inicial para começar a operar visto que nenhuma das ferramentas do mercado nacional oferece (pelo menos até onde eu saiba) a funcionalidade de backfill.

No caso dos softwares indicados no post anterior o processo pode não ser “automágico” , mas é perfeitamente possível de se gerar um banco de dados inicial com 2 semanas de histórico de cotações em intervalo de 1 minuto, o que é mais que suficiente para quem opera no intraday.

Os assinantes do pacote premium da ADVFN tem acesso ao download de cotações históricas nas periodicidades diária (normalmente contém dados históricos desde 1991) e intraday (ultimas 2 semanas de cotações em intervalo de 1 minuto). Infelizmente o formato no qual os dados são disponibilizados não podem ser importados diretamente no Amibroquer, sendo necessário uma pequena formatação dos dados. Para simplificar o entendimento vamos a um exemplo prático.

O arquivo “bruto” que vc faz download, por exemplo para TNLP4, vem formatado da seguinte forma:

26/08/2009 10:01,30.2,30.2,30.17,30.2,3800
26/08/2009 10:02,30.16,30.16,30.16,30.16,200
26/08/2009 10:03,30.16,30.16,30.16,30.16,0

Observe que não aparece o nome do ativo nas linhas de dados, o nome do ativo faz parte apenas do nome do arquivo, no caso do arquivo que vou usar neste exemplo o nome do arquivo intraday que fiz o download é BOV-TNLP4_20090909_intra.csv.

Para que o mesmo seja importado normalmente no amibroker (lembre-se que vc precisa estar usando um database  intraday), é o seguinte:

TNLP4;”26/08/2009″;”10:01″;30.2;30.2;30.17;30.2;3800
TNLP4;”26/08/2009″;”10:02″;30.16;30.16;30.16;30.16;200
TNLP4;”26/08/2009″;”10:03″;30.16;30.16;30.16;30.16;0

Basicamente precisamos ter o código do ativo nas linhas, e precisamos separar o campo de data do campo de horario, colocando os mesmos entre aspas.

A formatação dos dados pode ser realizada facilmente através dos utilitários de linha de comando sed, cat e awk, os quais são originalmente programas do sistema operacional UNIX. Felizmente existe uma versão dos mesmos disponivel para usuários do windows disponíveis em http://www.cygwin.com , desta forma antes de prosseguir faça a instalação dos mesmos :)

Abaixo você pode visualizar um pequeno shell script em bash para fazer a conversão, você deve criar um arquivo com o nome de advfn.sh com o conteudo abaixo (tem só 4 linhas):

#!/bin/bash
arquivo=$1
ativo=`echo $arquivo | awk -F"BOV-" '{print $2}' | awk -F"_" '{print $1}'`
cat $arquivo | sed 's/\ /,/g' | awk -F"," '{print "#;\""$1"\";\""$2"\";"$3";"$4";"$5";"$6";"$7}' |  sed "s/#/$ativo/g" > $ativo.txt

O script não está dos mais bonitos mas faz o trabalho que precisa :) , para usá-lo você deve executá-lo de dentro do terminal do cygwin usando a sintaxe “./advfn.txt nome-do-arquivo.csv”, por exemplo:

./advfn.sh BOV-TNLP4_20090909_intra.csv

O resultado do comando acima vai ser a criação de um arquivo de nome TNLP4.txt no mesmo diretorio no qual o script foi executado, o arquivo gerado poderá ser importado diretamente no amibroker.

Para importar o arquivo você deverá primeiro configurar o amibroker para interpretar o arquivo que criamos acima, para isso vá no menu “File -> Import Wizard“, será exibida uma tela para que você selecione o arquivo que vc deseja importar, click em “Pick Files” e escolha o arquivo que vc acabou de gerar:

wizard2

Depois de escolher o arquivo, clique em avançar.

Na tela seguinte, vc deve especificar a ordem dos campos no arquivo CSV e qual o separador utilizado. Ajuste sua configuração para ficar igual ao da imagem abaixo:

wizard2

Depois de ajustar a configuração, clique em avançar.

wizard3

Nesta tela você tem a oportunidade de salvar a configuração para facilitar importações futuras de arquivos no mesmo formato.

De um nome que faça sentido para você e clique em conclui, ao fazer isto o amibroker irá importar o arquivo.

Caso queira importar outros arquivos gerados pelo mesmo processo, você devera clicar no menu “File ->Import ASCII“, vai ser exibida a janela abaixo:

wizard4

Nesta tela você poderá selecionar mais de um arquivo de uma unica vez, observe que o padrão de importação que você criou no passo anterior no “wizard import” aparece selecionado no campo “Tipo”. Uma vez selecionado os arquivos desejados basta clicar em abrir para que o Amibroker importe as cotações. O gráfico que gerei de TNLP4 importanto a série histórica que baixei da ADVFN pode ser visto abaixo (clique para ampliar).

tnlp4-i

O procedimento de importação de uma série histórica pode ser utilizado sempre que você por algum motivo ficar com algum buraco no seu grafico, por ter por exemplo ficado impossibilitado de acompanhar o pregão em um determinado dia. Ao importar o arquivo ele sobre escreve as barras do seu banco de dados com os dados do arquivo ascii que tem o mesmo timestamp.

Observe que para tudo funcionar como esperado (atualização realtime) é obrigatório que você crie manualmente o ativo no seu banco de dados antes de importar a serie histórica.

Se você deixar o ativo ser criado diretamente na importação da série historica o grafico não vai ser atualizado automaticamente pelo link DDE. Mesmo que você vá no no menu “Symbol -> Information” e sete como como “NO” o campo “Use only local database“,  o Amibroker não vai atualizar o ativo. Aparentemente a versão que estou usando do software (5.28.1) possui algum bug, visto que a configuração mencionada deveria evitar esse comportamento do software.

Qualquer duvida deixem um comentário que tento ajudar :)

Bons negócios

[]´s Edson

2 Responses to “Inicializando seu banco de dados intraday do Amibroker usando as séries históricas da ADVFN”

  1. Gostou do Amibroker, né?

    Abração

  2. Como poderia não gostar Murphy :) , o software é flexivel e de extrema eficiência.
    Vale lembrar que quem me apresentou o software a alguns anos atrás foi você ;) , e lhe suo muito grato por isto.