init commit
This commit is contained in:
53
README.md
Normal file
53
README.md
Normal file
@ -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> - data a que se referem os dados. formato: dd-mm-aaaa
|
||||
<moeda> - nome do activo (ex: bitcoin)
|
||||
<simbolo> - simbolo do activo (ex: btc)
|
||||
<preco_abertura> - preco de abertura do activo para esse dia (em EUR)
|
||||
<preco_maximo> - preco máximo atingido pelo activo nesse dia (em EUR)
|
||||
<preco_minimo> - preco minimo atingido pelo activo nesse dia (em EUR)
|
||||
<preco_fecho> - 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> - data a que se refere o movimento
|
||||
<moeda> - activo a que se refre o movimento
|
||||
<tipo_movimento> - tipo do movimento ("compra", "venda")
|
||||
<quantidade> - quantidade do activo a que se refere o movimento
|
||||
<preco_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:
|
||||
<preco_movimento> / <quantidade> = 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
|
||||
|
||||
|
||||
|
||||
|
||||
33
crypto_portfolio.py
Normal file
33
crypto_portfolio.py
Normal file
@ -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')
|
||||
1
historico_preco.csv
Normal file
1
historico_preco.csv
Normal file
@ -0,0 +1 @@
|
||||
data,moeda,preco_abertura,preco_maximo,preco_minimo,preco_fecho
|
||||
|
1
portfolio.csv
Normal file
1
portfolio.csv
Normal file
@ -0,0 +1 @@
|
||||
data,moeda,quantidade,movimento
|
||||
|
Reference in New Issue
Block a user