Giter VIP home page Giter VIP logo

stock-market-b3's Introduction

stock-market-b3

Build Status License MIT

Aplicação Java para sincronização de dados diário e intradiário de ações e derivativos da B3 em uma base de dados PostgreSQL TimescaleDB.

  • Sincronização de dados do mercado à vista (BOVESPA) - Diário e Intraday
  • Sincronização de dados intradiário do mercado balcão (BMF) - Intraday

Pré-requisitos:

a) Conhecimento intermediário em PostgreSQL.
b) Conhecimento intermediário em Java.

Instalação:

1) Instalar última versão da base de dados Postgre: https://www.postgresql.org/download/

2) Instalar a última versão da extensão TimescaleDB seguindo as instruções disponíveis em: https://docs.timescale.com

3) Executar seguintes scripts SQL para criação da base de dados e tabelas:

-- Database: stockmarket

-- DROP DATABASE stockmarket;

CREATE DATABASE stockmarket
    ENCODING = 'UTF8'
    CONNECTION LIMIT = -1;
    
CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
    
-- Table: tstock

-- DROP TABLE tstock;

CREATE TABLE tstock
(
    symbol character varying(50) COLLATE pg_catalog."default" NOT NULL,
    CONSTRAINT tstock_pkey PRIMARY KEY (symbol)
);

-- Table: tdaily

-- DROP TABLE tdaily;

CREATE TABLE tdaily
(
    symbol character varying(50) COLLATE pg_catalog."default" NOT NULL,
    date timestamp without time zone NOT NULL,
    close numeric(20,2),
    closeadj numeric(20,2),
    high numeric(20,2),
    low numeric(20,2),
    open numeric(20,2),
    volume numeric(20,2),
    CONSTRAINT tdaily_pkey PRIMARY KEY (symbol, date),
    CONSTRAINT fk_tdaily_symbol FOREIGN KEY (symbol)
        REFERENCES public.tstock (symbol) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
);

SELECT create_hypertable('tdaily', 'date', 'symbol');

-- Index: tdaily_date_idx

-- DROP INDEX public.tdaily_date_idx;

CREATE INDEX IF NOT EXISTS tdaily_date_idx
    ON tdaily USING btree
    (date DESC);

-- Table: tintraday

-- DROP TABLE tintraday;

CREATE TABLE tintraday
(
    tradenumber bigint NOT NULL,
    symbol character varying(50) COLLATE pg_catalog."default" NOT NULL,
    date timestamp without time zone NOT NULL,
    brokerbuy integer,
    brokersell integer,
    price numeric(20,2),
    tradeindicator character(1) COLLATE pg_catalog."default",
    volume bigint,
    CONSTRAINT tintraday_pkey PRIMARY KEY (tradenumber, symbol, date),
    CONSTRAINT fk_tintraday_symbol FOREIGN KEY (symbol)
        REFERENCES public.tstock (symbol) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
);

SELECT create_hypertable('tintraday', 'date', 'symbol');

-- Index: tintraday_date_idx

-- DROP INDEX tintraday_date_idx;

CREATE INDEX IF NOT EXISTS tintraday_date_idx
    ON tintraday USING btree
    (date DESC);

-- Index: tintraday_symbol_idx

-- DROP INDEX tintraday_symbol_idx;

CREATE INDEX IF NOT EXISTS tintraday_symbol_idx
    ON tintraday USING btree
    (symbol COLLATE pg_catalog."default");
    

4) Criar as pastas abaixo na raiz do diretório onde a aplicação será executada:

    /marretti/stockexchange/apl --> Sugestão de armazenamento do .jar (compilado disponível na pasta target: marretti-stockexchange-sync-0.0.1-SNAPSHOT.jar).
    /marretti/stockexchange/config --> Arquivos de configurações da aplicação.
    /marretti/stockexchange/logs --> Pasta de logs.
    /marretti/stockexchange/storage --> Local onde será realizado o download dos arquivos históricos.

5) Obter o arquivo application.properties da pasta /src/main/resources e copiar para o diretório /marretti/stockexchange/config

    Efetuar os ajustes necessários de base de dados (usuário, senha, etc):
        spring.datasource.url=jdbc:postgresql://localhost:5432/stockmarket
        spring.datasource.username = postgres
        spring.datasource.password = SUA_SENHA
        
    Caso haja necessidade, efetuar os ajustes necessários de Regex para os instrumentos que serão sincronizados:
        regex.bovespa.daily=^[A-Z][A-Z][A-Z][A-Z][3-6]|[A-Z][A-Z][A-Z][A-Z]11$
        regex.bovespa.intraday=^[A-Z][A-Z][A-Z][A-Z][3-6]|[A-Z][A-Z][A-Z][A-Z]11$
        regex.bmf.intraday=^DOL[A-Z][0-9][0-9]|WDO[A-Z][0-9][0-9]|WIN[A-Z][0-9][0-9]|IND[A-Z][0-9][0-9]$
        
    Efetuar os ajustes de data de início da sincronização:
        sync.bovespa.daily.startDate=01/01/2019
        sync.bovespa.intraday.startDate=01/01/2019
        sync.bmf.intraday.startDate=01/01/2019
		
	Executar a aplicação através da linha de comando: java -jar /marretti/stockexchange/apl/marretti-stockexchange-sync-0.0.1-SNAPSHOT.jar
	
	Acompanhar a sincronização por meio do arquivo Data.log disponível na pasta de logs.

6) Notebook de exemplo de uso em python disponível na pasta notebook/exemplo.ipynb

To-Do

  • Todas as contribuições são bem-vindas.
1) Implementação de schedule para sincronização automática após a primeira carga.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.