commit b95f0c2b793e32faffb93bfd992fd61afad37f0e Author: [Luis Rodrigues] Date: Wed May 1 22:07:42 2024 +0100 init commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..fd417c3 --- /dev/null +++ b/README.md @@ -0,0 +1,53 @@ +# CryptoPorfolio + +pequena aplicação para ir acompanhando a evolução de um portfolio de activos de criptomoedas + +"historico_preco.csv" -> ficheiro CSV com dados historicos diarizados de um activo. + data,moeda,simbolo,preco_abertura,preco_maximo,preco_minimo,preco_fecho + + - data a que se referem os dados. formato: dd-mm-aaaa + - nome do activo (ex: bitcoin) + - simbolo do activo (ex: btc) + - preco de abertura do activo para esse dia (em EUR) + - preco máximo atingido pelo activo nesse dia (em EUR) + - preco minimo atingido pelo activo nesse dia (em EUR) + - preco de fecho do activo nesse dia (em EUR) + +"portfolio.csv" - ficheiro CSV com informação sobre os movimentos de um activo. + data,moeda,tipo_movimento,quantidade,preco_movimento + + - data a que se refere o movimento + - activo a que se refre o movimento + - tipo do movimento ("compra", "venda") + - quantidade do activo a que se refere o movimento + - preco a que foi efectuado o movimento (preco de compra * quantidade comprada) + + exemplo: + 02-03-2024,bitcoin,compra,0.05,2978.024 + + este exemplo indica-nos que no dia 02-03-2024 foi comprado 0.05BTC com um custo total de 2978.024EUR + + de notar que o preco do movimento é o valor pago por 0.05BTC, não o preco de mercado de 1un de BTC nesta data. + + podemos calcular qual o preco de compra por unidade de BTC deste movimento simplesmente: + / = 59560.48EUR + + consultando na coingecko o preco de mercado de bitcoin à data de 02-03-2024 (cerca de 57560.483EUR), vemos que foi pago um premium de: + ( ( 59560.48 / 57560.483 ) - 1 ) * 100 = 3.47% + +https://docs.coingecko.com/reference/introduction +API_KEY = "CG-K5RS5VXsdFDip2UvY3z8VjQP" + +## Obter preço de fecho dos ultimos 365 dias + +https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=eur&days=365&interval=daily + +* 365 dias é o maximo que podemos obter com demo API_KEY da CoinGecko (as of May '24) + +## Obter OHLC dos ultimos 2 dias + +https://api.coingecko.com/api/v3/coins/bitcoin/ohlc?vs_currency=eur&days=365&precision=3 + + + + diff --git a/crypto_portfolio.py b/crypto_portfolio.py new file mode 100644 index 0000000..33ea783 --- /dev/null +++ b/crypto_portfolio.py @@ -0,0 +1,33 @@ +import requests +import time +# import datetime + +baseURL = 'https://api.coingecko.com/api/v3/' +coin = 'bitcoin' +vs_currency = 'eur' +days = '30' +precision = '3' + +ohlc_endpoint = baseURL + 'coins/' + coin + '/ohlc?vs_currency=' + vs_currency + '&days=' + days + '&precision=' + precision + +APY_KEY = "CG-K5RS5VXsdFDip2UvY3z8VjQP" + +headers = { + 'accept': 'application/json', + 'x-cg-demo-api-key': APY_KEY +} + +#print(ohlc_endpoint) + +response = requests.get(ohlc_endpoint, headers= headers) + +if response.status_code == 200: + data = response.json() + print(len(data)) + date = time.ctime(data[0][0]/1000) + date_as_string = time.strftime("%d/%m/%Y", time.gmtime(data[0][0]/1000)) + ohlc = [ data[0][1], data[0][2], data[0][3], data[0][4] ] + + print(f'price of bitcoin in {date_as_string}:\nopen: {ohlc[0]}\nhigh: {ohlc[1]}\nlow: {ohlc[2]}\nclose: {ohlc[3]}') +else: + print('failed to retrive data') \ No newline at end of file diff --git a/historico_preco.csv b/historico_preco.csv new file mode 100644 index 0000000..1d7fb36 --- /dev/null +++ b/historico_preco.csv @@ -0,0 +1 @@ +data,moeda,preco_abertura,preco_maximo,preco_minimo,preco_fecho \ No newline at end of file diff --git a/portfolio.csv b/portfolio.csv new file mode 100644 index 0000000..8e7a6ae --- /dev/null +++ b/portfolio.csv @@ -0,0 +1 @@ +data,moeda,quantidade,movimento \ No newline at end of file