Para executar o projeto:
1 - instale as dependências com o comando
pip install -r requirements.txt
2 - execute o arquivo main.py com o comando
python main.py
Módulo para obtenção de dados de ações da Alpha Vantage API.
Para utilizar o módulo, basta instanciar um objeto da classe AlphaVantageClient e utilizar o método get_time_series_daily para obter um dicionário com dados diários de uma determinada ação.
O método recebe como 2 informações como parâmetro
- ticker: símbolo da ação
- period: os dados o obtidos pelo método terão como data os últimos n dias, sendo n um número inteiro, e n sendo o valor passado no parâmetro period. (O valor padrão desse parâmetro é 7).
Módulo que cria o banco de dados e contém as classes modelo para o mapeamento das entidades do banco de dados utilizando o Pony ORM.
O método que cria e conecta-se à base de dados
O script:
-
Contém uma lista de todos as ações no qual se deseja obter dados. Para modificar as ações monitoradas pelo script, basta adicionar o símbolo dela a lista
STOCK_SYMBOLS
. -
Cria um banco de dados (sqlite) caso ele ainda não exista. O caminho do arquivo deve ser incluído na variável global
DATABASE_FILE_PATH
-
Precisa receber a chave para ser utilizada para acessar os dados obtidos pela AlphaVantageAPI. A chave pode ser armazenada na variável global
API_KEY
. (Você pode optar por colocar a chave em um módulo diferente e importar esse módulo em main.py) -
Uma vez que contém as constantes acima citadas, ele segue os passos descritos a seguir
-
Conecta-se com o banco de dados
-
Instacia um objeto da classe AlphaVantageClient
-
Percorre a lista de ações que se deseja monitorar. Os passos a seguir são realizados para cada uma dessas ações.
-
Obtém os dados da ação da AlphaVantageAPI
-
Obtém os dados dos últimos 7 dias disponíveis na AV API.
-
Para cada uma das datas obtidas na API, se verifica se o dado existe no BD. Caso não exista nenhum dado para a data, cria-se um novo registro para a data. Caso já exista e o preco de fechamento no BD seja diferente do que veio da API, esse valor é atualizado no BD.
Se você precisa saber o como o banco de dados está modelado, segue o script com as definições das entidades e seus respectivos atributos:
CREATE TABLE "STOCK_SYMBOLS" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
"ticker" TEXT NOT NULL UNIQUE
);
CREATE TABLE "STOCK_PRICES" (
id INTEGER NOT NULL UNIQUE,
fk_stock_id INTEGER NOT NULL,
close_price REAL NOT NULL,
"date" TEXT NOT NULL,
PRIMARY KEY(id),
FOREIGN KEY(fk_stock_id) REFERENCES STOCK_SYMBOLS(id)
);
Segue também as definições das entidades utilizando-se o Pony ORM
from pony import *
db = Database()
class StockSymbol(db.Entity):
id = PrimaryKey(int, auto=True)
ticker = Required(str, unique=True)
stock__prices = Set('StockPrices')
class StockPrices(db.Entity):
id = PrimaryKey(int, auto=True)
last_update = Required(datetime)
close_price = Required(float)
date = Required(date)
fk_stock_id = Required(StockSymbol)
Obs: As anotações de tipo de dados no módulo stock_monitor foram utilizadas no desenvolvimento para
garantir que alguns tipos de erros fossem evitados em produção utilizando-se o type checker mypy