# script para criar um historico de preços de criptomoedas, guardado em ficheiro # CSV, com intuito de utilizar este historico de precos para acompanhar evolução # de portfolio de criptomoedas # aceder ao historico de preços OHLC de CoinGecko através da API # máximo de requests mensal: 10000 (320/dia; 13/hora) # . referenciar o uso da CoinGecko através de branding oficial e # link para site (https://www.coingecko.com/en/branding) # . documentação API: https://docs.coingecko.com/v3.0.1/reference/introduction # . obter OHLC: https://docs.coingecko.com/v3.0.1/reference/coins-id-ohlc import requests import pandas as pd import mplfinance as mpf import modulos.aux as aux url_raiz_API = 'https://api.coingecko.com/api/v3/' criptomoeda = 'bitcoin' vs_currency = 'eur' dias = '30' precisao = '3' url_consulta_ohlc = 'coins/' + criptomoeda + \ '/ohlc?vs_currency=' + vs_currency + \ '&days=' + dias + \ '&precision=' + precisao url = url_raiz_API + url_consulta_ohlc CHAVE_API = 'CG-K5RS5VXsdFDip2UvY3z8VjQP' headers = { 'accept': 'application/json', 'x-cg-demo-api-key': CHAVE_API } resposta = requests.get(url, headers= headers) # carregar dados já existentes em ficheiro CSV para dicionario # (criar ficheiro se não existir) import csv import os cabecalho: list = [ 'data_unix', 'criptomoeda', 'vs_currency', 'preco_abertura', 'preco_maximo', 'preco_minimo', 'preco_fecho' ] caminho_ficheiro_historico_csv = f'./dados/{criptomoeda}.csv' if (not os.path.exists(caminho_ficheiro_historico_csv)): ficheiro = open(caminho_ficheiro_historico_csv, 'w+', newline='') ficheiroCSV = csv.DictWriter(ficheiro, fieldnames=cabecalho) ficheiroCSV.writeheader() ficheiro.close() with open(caminho_ficheiro_historico_csv, 'r', newline='') as ficheiro_csv_historico_precos: ficheiroCSV = csv.DictReader(ficheiro_csv_historico_precos) lista_linhas_ficheiro_csv: list = [] for linha in ficheiroCSV: lista_linhas_ficheiro_csv.append(linha) # converter dados de coingecko para o formato usado no ficheiro CSV lista_linhas_resposta: list = [] for linha_resposta in resposta.json(): nova_entrada: dict = {} nova_entrada[cabecalho[0]] = str(linha_resposta[0]) nova_entrada[cabecalho[1]] = criptomoeda nova_entrada[cabecalho[2]] = vs_currency nova_entrada[cabecalho[3]] = str(linha_resposta[1]) nova_entrada[cabecalho[4]] = str(linha_resposta[2]) nova_entrada[cabecalho[5]] = str(linha_resposta[3]) nova_entrada[cabecalho[6]] = str(linha_resposta[4]) lista_linhas_resposta.append(nova_entrada) # adicionar items de lista_linhas_resposta se não existirem em # lista_linhas_ficheiro_csv # (aka: adicionar apenas items novos a lista_linhas_ficheiro_csv) for item_resposta in lista_linhas_resposta: item_existe: bool = False for linha_ficheiro_csv in lista_linhas_ficheiro_csv: if (item_resposta == linha_ficheiro_csv): item_existe = True if not item_existe: lista_linhas_ficheiro_csv.append(item_resposta) aux.gravar_dados_ficheiro_csv( caminho_ficheiro_historico_csv, lista_linhas_ficheiro_csv, cabecalho) dados = aux.carregar_dados_ficheiro_csv( caminho_ficheiro_historico_csv, cabecalho) print(dados) # # mostrar dados com mplfinance # daily = pd.read_csv(caminho_ficheiro_historico_csv, index_col=0) # print(dail) # daily.index.name = 'data_unix' # daily.shape # daily.head(3) # daily.tail(3) # # plotar grafico # mpf.plot(daily)